feat: datasource
This commit is contained in:
@@ -388,6 +388,102 @@ export async function uploadScript(
|
||||
);
|
||||
}
|
||||
|
||||
export type ResourceItem = {
|
||||
resource_id: string;
|
||||
workspace_id: string;
|
||||
storage_object_id: string;
|
||||
owner_user_id: string;
|
||||
resource_name: string;
|
||||
description: string | null;
|
||||
visibility: "private" | "workspace" | "public";
|
||||
status: string;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
file: {
|
||||
file_name: string;
|
||||
file_extension: string | null;
|
||||
mime_type: string | null;
|
||||
size_bytes: number;
|
||||
content_hash: string | null;
|
||||
object_status: string;
|
||||
};
|
||||
jupyter_accessible_path: string;
|
||||
absolute_path: string;
|
||||
};
|
||||
|
||||
export async function listResources(
|
||||
workspaceId: string,
|
||||
opts?: { visibility?: string; keyword?: string },
|
||||
): Promise<ResourceItem[]> {
|
||||
const parameters = new URLSearchParams();
|
||||
if (opts?.visibility) parameters.set("visibility", opts.visibility);
|
||||
if (opts?.keyword) parameters.set("keyword", opts.keyword);
|
||||
const query = parameters.toString();
|
||||
// apiRequest<T> already unwraps the envelope's `data` field, so we
|
||||
// request `ResourceItem[]` directly here (matching listScripts).
|
||||
return apiRequest<ResourceItem[]>(
|
||||
`/api/v1/data-resources${query ? `?${query}` : ""}`,
|
||||
{},
|
||||
workspaceId,
|
||||
);
|
||||
}
|
||||
|
||||
export async function createResourceUpload(
|
||||
workspaceId: string,
|
||||
body: {
|
||||
file_name: string;
|
||||
content_type: string;
|
||||
expected_size_bytes: number;
|
||||
expected_hash: string | null;
|
||||
},
|
||||
): Promise<{ upload_id: string; upload_path: string }> {
|
||||
return apiRequest<{ upload_id: string; upload_path: string }>(
|
||||
"/api/v1/data-resources/uploads",
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify(body),
|
||||
headers: { "Idempotency-Key": createUuid().replaceAll("-", "") },
|
||||
},
|
||||
workspaceId,
|
||||
);
|
||||
}
|
||||
|
||||
export async function uploadResourceBytes(
|
||||
workspaceId: string,
|
||||
uploadId: string,
|
||||
fileBytes: ArrayBuffer | Blob,
|
||||
contentType: string,
|
||||
): Promise<{ storage_object_id: string }> {
|
||||
return apiRequest<{ storage_object_id: string }>(
|
||||
`/api/v1/data-resources/uploads/${encodeURIComponent(uploadId)}`,
|
||||
{
|
||||
method: "PUT",
|
||||
headers: { "Content-Type": contentType },
|
||||
body: fileBytes,
|
||||
},
|
||||
workspaceId,
|
||||
);
|
||||
}
|
||||
|
||||
export async function bindResourceUpload(
|
||||
workspaceId: string,
|
||||
uploadId: string,
|
||||
body: {
|
||||
resource_name: string;
|
||||
description: string;
|
||||
visibility: "private" | "workspace" | "public";
|
||||
},
|
||||
): Promise<ResourceItem> {
|
||||
return apiRequest<ResourceItem>(
|
||||
`/api/v1/data-resources/uploads/${encodeURIComponent(uploadId)}/bind`,
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify(body),
|
||||
},
|
||||
workspaceId,
|
||||
);
|
||||
}
|
||||
|
||||
export async function setScriptLock(
|
||||
workspaceId: string,
|
||||
scriptId: string,
|
||||
|
||||
Reference in New Issue
Block a user