@blaxel/core 0.2.86-preview.165 → 0.2.87-dev.173
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -2
- package/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/authentication/credentials.js +11 -1
- package/dist/cjs/authentication/index.js +3 -1
- package/dist/cjs/client/sdk.gen.js +63 -12
- package/dist/cjs/common/credentials.test.js +71 -0
- package/dist/cjs/common/errors.js +15 -0
- package/dist/cjs/common/h2fetch.js +101 -50
- package/dist/cjs/common/h2pool.js +9 -0
- package/dist/cjs/common/pagination.js +87 -0
- package/dist/cjs/common/pagination.test.js +62 -0
- package/dist/cjs/common/settings.js +41 -3
- package/dist/cjs/common/settings.test.js +12 -3
- package/dist/cjs/drive/index.js +39 -3
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/jobs/jobs.js +42 -9
- package/dist/cjs/sandbox/client/sdk.gen.js +1 -1
- package/dist/cjs/sandbox/preview.js +8 -3
- package/dist/cjs/sandbox/sandbox.js +41 -4
- package/dist/cjs/types/authentication/credentials.d.ts +9 -0
- package/dist/cjs/types/client/sdk.gen.d.ts +34 -19
- package/dist/cjs/types/client/types.gen.d.ts +704 -22
- package/dist/cjs/types/common/credentials.test.d.ts +1 -0
- package/dist/cjs/types/common/errors.d.ts +10 -0
- package/dist/cjs/types/common/h2fetch.d.ts +9 -4
- package/dist/cjs/types/common/pagination.d.ts +35 -0
- package/dist/cjs/types/common/pagination.test.d.ts +1 -0
- package/dist/cjs/types/common/settings.d.ts +9 -0
- package/dist/cjs/types/drive/index.d.ts +35 -4
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/jobs/jobs.d.ts +33 -3
- package/dist/cjs/types/sandbox/client/sdk.gen.d.ts +1 -1
- package/dist/cjs/types/sandbox/client/types.gen.d.ts +24 -0
- package/dist/cjs/types/sandbox/preview.d.ts +2 -2
- package/dist/cjs/types/sandbox/sandbox.d.ts +36 -2
- package/dist/cjs/types/volume/index.d.ts +37 -4
- package/dist/cjs/volume/index.js +41 -3
- package/dist/cjs-browser/.tsbuildinfo +1 -1
- package/dist/cjs-browser/authentication/credentials.js +11 -1
- package/dist/cjs-browser/authentication/index.js +3 -1
- package/dist/cjs-browser/client/sdk.gen.js +63 -12
- package/dist/cjs-browser/common/credentials.test.js +71 -0
- package/dist/cjs-browser/common/errors.js +15 -0
- package/dist/cjs-browser/common/pagination.js +87 -0
- package/dist/cjs-browser/common/pagination.test.js +62 -0
- package/dist/cjs-browser/common/settings.js +41 -3
- package/dist/cjs-browser/common/settings.test.js +12 -3
- package/dist/cjs-browser/drive/index.js +39 -3
- package/dist/cjs-browser/index.js +1 -0
- package/dist/cjs-browser/jobs/jobs.js +42 -9
- package/dist/cjs-browser/sandbox/client/sdk.gen.js +1 -1
- package/dist/cjs-browser/sandbox/preview.js +8 -3
- package/dist/cjs-browser/sandbox/sandbox.js +41 -4
- package/dist/cjs-browser/types/authentication/credentials.d.ts +9 -0
- package/dist/cjs-browser/types/client/sdk.gen.d.ts +34 -19
- package/dist/cjs-browser/types/client/types.gen.d.ts +704 -22
- package/dist/cjs-browser/types/common/credentials.test.d.ts +1 -0
- package/dist/cjs-browser/types/common/errors.d.ts +10 -0
- package/dist/cjs-browser/types/common/h2fetch.d.ts +9 -4
- package/dist/cjs-browser/types/common/pagination.d.ts +35 -0
- package/dist/cjs-browser/types/common/pagination.test.d.ts +1 -0
- package/dist/cjs-browser/types/common/settings.d.ts +9 -0
- package/dist/cjs-browser/types/drive/index.d.ts +35 -4
- package/dist/cjs-browser/types/index.d.ts +1 -0
- package/dist/cjs-browser/types/jobs/jobs.d.ts +33 -3
- package/dist/cjs-browser/types/sandbox/client/sdk.gen.d.ts +1 -1
- package/dist/cjs-browser/types/sandbox/client/types.gen.d.ts +24 -0
- package/dist/cjs-browser/types/sandbox/preview.d.ts +2 -2
- package/dist/cjs-browser/types/sandbox/sandbox.d.ts +36 -2
- package/dist/cjs-browser/types/volume/index.d.ts +37 -4
- package/dist/cjs-browser/volume/index.js +41 -3
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/authentication/credentials.js +9 -0
- package/dist/esm/authentication/index.js +4 -2
- package/dist/esm/client/sdk.gen.js +57 -9
- package/dist/esm/common/credentials.test.js +69 -0
- package/dist/esm/common/errors.js +13 -0
- package/dist/esm/common/h2fetch.js +101 -50
- package/dist/esm/common/h2pool.js +9 -0
- package/dist/esm/common/pagination.js +83 -0
- package/dist/esm/common/pagination.test.js +60 -0
- package/dist/esm/common/settings.js +41 -3
- package/dist/esm/common/settings.test.js +12 -3
- package/dist/esm/drive/index.js +39 -3
- package/dist/esm/index.js +1 -0
- package/dist/esm/jobs/jobs.js +42 -9
- package/dist/esm/sandbox/client/sdk.gen.js +1 -1
- package/dist/esm/sandbox/preview.js +8 -3
- package/dist/esm/sandbox/sandbox.js +41 -4
- package/dist/esm/volume/index.js +41 -3
- package/dist/esm-browser/.tsbuildinfo +1 -1
- package/dist/esm-browser/authentication/credentials.js +9 -0
- package/dist/esm-browser/authentication/index.js +4 -2
- package/dist/esm-browser/client/sdk.gen.js +57 -9
- package/dist/esm-browser/common/credentials.test.js +69 -0
- package/dist/esm-browser/common/errors.js +13 -0
- package/dist/esm-browser/common/pagination.js +83 -0
- package/dist/esm-browser/common/pagination.test.js +60 -0
- package/dist/esm-browser/common/settings.js +41 -3
- package/dist/esm-browser/common/settings.test.js +12 -3
- package/dist/esm-browser/drive/index.js +39 -3
- package/dist/esm-browser/index.js +1 -0
- package/dist/esm-browser/jobs/jobs.js +42 -9
- package/dist/esm-browser/sandbox/client/sdk.gen.js +1 -1
- package/dist/esm-browser/sandbox/preview.js +8 -3
- package/dist/esm-browser/sandbox/sandbox.js +41 -4
- package/dist/esm-browser/volume/index.js +41 -3
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Credentials = void 0;
|
|
3
|
+
exports.MissingCredentials = exports.Credentials = void 0;
|
|
4
4
|
const env_js_1 = require("../common/env.js");
|
|
5
5
|
class Credentials {
|
|
6
6
|
async authenticate() { }
|
|
@@ -15,3 +15,13 @@ class Credentials {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
exports.Credentials = Credentials;
|
|
18
|
+
/**
|
|
19
|
+
* Marker returned by `authentication()` when no usable Blaxel credentials were
|
|
20
|
+
* resolved (no env vars, no matching config workspace). Construction is
|
|
21
|
+
* side-effect free so importing `@blaxel/core` never fails; the actionable
|
|
22
|
+
* error is raised when an authenticated request is actually attempted
|
|
23
|
+
* (see `Settings.assertCredentials`).
|
|
24
|
+
*/
|
|
25
|
+
class MissingCredentials extends Credentials {
|
|
26
|
+
}
|
|
27
|
+
exports.MissingCredentials = MissingCredentials;
|
|
@@ -51,7 +51,9 @@ function getCredentials() {
|
|
|
51
51
|
function authentication() {
|
|
52
52
|
const credentials = getCredentials();
|
|
53
53
|
if (!credentials) {
|
|
54
|
-
|
|
54
|
+
// Never silently fall back to empty headers: a marker that triggers a
|
|
55
|
+
// clear CredentialsError when an authenticated request is attempted.
|
|
56
|
+
return new credentials_js_1.MissingCredentials();
|
|
55
57
|
}
|
|
56
58
|
if (credentials.apiKey) {
|
|
57
59
|
return new apikey_js_1.ApiKey(credentials);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// This file is auto-generated by @hey-api/openapi-ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.checkWorkspaceAvailability = exports.leaveWorkspace = exports.acceptWorkspaceInvitation = exports.declineWorkspaceInvitation = exports.updateWorkspace = exports.getWorkspace = exports.deleteWorkspace = exports.createWorkspace = exports.listWorkspaces = exports.getEgressIp = exports.deleteEgressIp = exports.createEgressIp = exports.listEgressIps = exports.getEgressGateway = exports.deleteEgressGateway = exports.createEgressGateway = exports.listEgressGateways = exports.getVpc = exports.deleteVpc = exports.createVpc = exports.listVpcs = exports.updateVolume = exports.getVolume = exports.deleteVolume = exports.createVolume = exports.listVolumes = exports.deleteVolumeTemplateVersion = exports.updateVolumeTemplate = exports.getVolumeTemplate = exports.deleteVolumeTemplate = exports.createVolumeTemplate = exports.listVolumeTemplates = exports.updateWorkspaceUserRole = exports.removeWorkspaceUser = void 0;
|
|
4
|
+
exports.listJobs = exports.getIntegrationConnectionModel = exports.listIntegrationConnectionModels = exports.getIntegrationConnectionModelEndpointConfigurations = exports.updateIntegrationConnection = exports.getIntegrationConnection = exports.deleteIntegrationConnection = exports.createIntegrationConnection = exports.listIntegrationConnections = exports.getIntegration = exports.deleteImageTag = exports.unshareImage = exports.shareImage = exports.listImageShares = exports.getImage = exports.deleteImage = exports.createImage = exports.listImages = exports.cleanupImages = exports.listFunctionRevisions = exports.updateFunction = exports.getFunction = exports.deleteFunction = exports.createFunction = exports.listFunctions = exports.testFeatureFlag = exports.getWorkspaceFeatures = exports.listAllEgressIps = exports.getEgressGatewayUsage = exports.listAllEgressGateways = exports.getDriveJwks = exports.createDriveAccessToken = exports.updateDrive = exports.getDrive = exports.deleteDrive = exports.createDrive = exports.listDrives = exports.verifyCustomDomain = exports.updateCustomDomain = exports.getCustomDomain = exports.deleteCustomDomain = exports.createCustomDomain = exports.listCustomDomains = exports.getConfiguration = exports.listAgentRevisions = exports.updateAgent = exports.getAgent = exports.deleteAgent = exports.createAgent = exports.listAgents = void 0;
|
|
5
|
+
exports.listTemplates = exports.deleteApiKeyForServiceAccount = exports.createApiKeyForServiceAccount = exports.listApiKeysForServiceAccount = exports.updateWorkspaceServiceAccount = exports.deleteWorkspaceServiceAccount = exports.createWorkspaceServiceAccount = exports.getWorkspaceServiceAccounts = exports.deleteSandboxPreviewToken = exports.createSandboxPreviewToken = exports.listSandboxPreviewTokens = exports.updateSandboxPreview = exports.getSandboxPreview = exports.deleteSandboxPreview = exports.createSandboxPreview = exports.listSandboxPreviews = exports.updateSandbox = exports.getSandbox = exports.deleteSandbox = exports.createSandbox = exports.listSandboxes = exports.listSandboxHubDefinitions = exports.listPublicIps = exports.getPolicyUsages = exports.updatePolicy = exports.getPolicy = exports.deletePolicy = exports.createPolicy = exports.listPolicies = exports.declineImageShare = exports.acceptImageShare = exports.listPendingImageShares = exports.listModelRevisions = exports.updateModel = exports.getModel = exports.deleteModel = exports.createModel = exports.listModels = exports.listMcpHubDefinitions = exports.listLocations = exports.listJobRevisions = exports.listJobExecutionTasks = exports.getJobExecution = exports.deleteJobExecution = exports.createJobExecution = exports.listJobExecutions = exports.updateJob = exports.getJob = exports.deleteJob = exports.createJob = void 0;
|
|
6
|
+
exports.checkWorkspaceAvailability = exports.leaveWorkspace = exports.acceptWorkspaceInvitation = exports.declineWorkspaceInvitation = exports.updateWorkspace = exports.getWorkspace = exports.deleteWorkspace = exports.createWorkspace = exports.listWorkspaces = exports.getEgressIp = exports.deleteEgressIp = exports.createEgressIp = exports.listEgressIps = exports.getEgressGateway = exports.deleteEgressGateway = exports.createEgressGateway = exports.listEgressGateways = exports.getVpc = exports.deleteVpc = exports.createVpc = exports.listVpcs = exports.updateVolume = exports.getVolume = exports.deleteVolume = exports.createVolume = exports.listVolumes = exports.deleteVolumeTemplateVersion = exports.updateVolumeTemplate = exports.getVolumeTemplate = exports.deleteVolumeTemplate = exports.createVolumeTemplate = exports.listVolumeTemplates = exports.updateWorkspaceUserRole = exports.removeWorkspaceUser = exports.inviteWorkspaceUser = exports.listWorkspaceUsers = exports.getTemplate = void 0;
|
|
7
7
|
const client_gen_1 = require("./client.gen");
|
|
8
8
|
/**
|
|
9
9
|
* List all agents
|
|
10
|
-
* Returns
|
|
10
|
+
* Returns AI agents deployed in the workspace. Each agent includes its deployment status, runtime configuration, and global inference endpoint URL. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all agents.
|
|
11
11
|
*/
|
|
12
12
|
const listAgents = (options) => {
|
|
13
13
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -239,7 +239,7 @@ const verifyCustomDomain = (options) => {
|
|
|
239
239
|
exports.verifyCustomDomain = verifyCustomDomain;
|
|
240
240
|
/**
|
|
241
241
|
* List drives
|
|
242
|
-
* Returns all drives in the workspace. Drives provide persistent storage that can be attached to agents, functions, and sandboxes.
|
|
242
|
+
* Returns all drives in the workspace. Drives provide persistent storage that can be attached to agents, functions, and sandboxes. Starting with API version 2026-04-28, the response wraps items in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all drives.
|
|
243
243
|
*/
|
|
244
244
|
const listDrives = (options) => {
|
|
245
245
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -374,6 +374,23 @@ const listAllEgressGateways = (options) => {
|
|
|
374
374
|
});
|
|
375
375
|
};
|
|
376
376
|
exports.listAllEgressGateways = listAllEgressGateways;
|
|
377
|
+
/**
|
|
378
|
+
* Egress gateway sandbox attachments
|
|
379
|
+
* Returns the inverse map (gateway → sandbox names) for the workspace. Used by the egress-IPs UI to render attachment counts without fetching the sandboxes listing full client-side.
|
|
380
|
+
*/
|
|
381
|
+
const getEgressGatewayUsage = (options) => {
|
|
382
|
+
return (options?.client ?? client_gen_1.client).get({
|
|
383
|
+
security: [
|
|
384
|
+
{
|
|
385
|
+
scheme: 'bearer',
|
|
386
|
+
type: 'http'
|
|
387
|
+
}
|
|
388
|
+
],
|
|
389
|
+
url: '/egressgateways/usage',
|
|
390
|
+
...options
|
|
391
|
+
});
|
|
392
|
+
};
|
|
393
|
+
exports.getEgressGatewayUsage = getEgressGatewayUsage;
|
|
377
394
|
/**
|
|
378
395
|
* List all egress IPs across all VPCs and gateways in the workspace
|
|
379
396
|
*/
|
|
@@ -426,7 +443,7 @@ const testFeatureFlag = (options) => {
|
|
|
426
443
|
exports.testFeatureFlag = testFeatureFlag;
|
|
427
444
|
/**
|
|
428
445
|
* List all MCP servers
|
|
429
|
-
* Returns
|
|
446
|
+
* Returns MCP server functions deployed in the workspace. Each function includes its deployment status, transport protocol (websocket or http-stream), and endpoint URL. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all functions.
|
|
430
447
|
*/
|
|
431
448
|
const listFunctions = (options) => {
|
|
432
449
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -858,7 +875,7 @@ const getIntegrationConnectionModel = (options) => {
|
|
|
858
875
|
exports.getIntegrationConnectionModel = getIntegrationConnectionModel;
|
|
859
876
|
/**
|
|
860
877
|
* List batch jobs
|
|
861
|
-
* Returns
|
|
878
|
+
* Returns batch job definitions in the workspace. Each job can be triggered to run multiple parallel tasks with configurable concurrency and retry settings. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all jobs.
|
|
862
879
|
*/
|
|
863
880
|
const listJobs = (options) => {
|
|
864
881
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -951,7 +968,7 @@ const updateJob = (options) => {
|
|
|
951
968
|
exports.updateJob = updateJob;
|
|
952
969
|
/**
|
|
953
970
|
* List job executions
|
|
954
|
-
* Returns
|
|
971
|
+
* Returns executions for a batch job. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep the legacy offset/limit contract and return a bare array.
|
|
955
972
|
*/
|
|
956
973
|
const listJobExecutions = (options) => {
|
|
957
974
|
return (options.client ?? client_gen_1.client).get({
|
|
@@ -1021,6 +1038,23 @@ const getJobExecution = (options) => {
|
|
|
1021
1038
|
});
|
|
1022
1039
|
};
|
|
1023
1040
|
exports.getJobExecution = getJobExecution;
|
|
1041
|
+
/**
|
|
1042
|
+
* List execution tasks
|
|
1043
|
+
* Returns one cursor-paginated page of an execution's tasks. Tasks are derived from event history each request; only the in-memory slicing is paginated, the events scan still fetches the whole event log behind the scenes. Available starting with API version 2026-04-28.
|
|
1044
|
+
*/
|
|
1045
|
+
const listJobExecutionTasks = (options) => {
|
|
1046
|
+
return (options.client ?? client_gen_1.client).get({
|
|
1047
|
+
security: [
|
|
1048
|
+
{
|
|
1049
|
+
scheme: 'bearer',
|
|
1050
|
+
type: 'http'
|
|
1051
|
+
}
|
|
1052
|
+
],
|
|
1053
|
+
url: '/jobs/{jobId}/executions/{executionId}/tasks',
|
|
1054
|
+
...options
|
|
1055
|
+
});
|
|
1056
|
+
};
|
|
1057
|
+
exports.listJobExecutionTasks = listJobExecutionTasks;
|
|
1024
1058
|
/**
|
|
1025
1059
|
* List job revisions
|
|
1026
1060
|
* Returns revisions for a job by name.
|
|
@@ -1074,7 +1108,7 @@ const listMcpHubDefinitions = (options) => {
|
|
|
1074
1108
|
exports.listMcpHubDefinitions = listMcpHubDefinitions;
|
|
1075
1109
|
/**
|
|
1076
1110
|
* List model endpoints
|
|
1077
|
-
* Returns
|
|
1111
|
+
* Returns model gateway endpoints configured in the workspace. Each model represents a proxy to an external LLM provider (OpenAI, Anthropic, etc.) with unified access control. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all models.
|
|
1078
1112
|
*/
|
|
1079
1113
|
const listModels = (options) => {
|
|
1080
1114
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -1235,7 +1269,7 @@ const declineImageShare = (options) => {
|
|
|
1235
1269
|
exports.declineImageShare = declineImageShare;
|
|
1236
1270
|
/**
|
|
1237
1271
|
* List governance policies
|
|
1238
|
-
* Returns
|
|
1272
|
+
* Returns governance policies in the workspace. Policies control deployment locations, hardware flavors, and token limits for agents, functions, and models. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array with all policies.
|
|
1239
1273
|
*/
|
|
1240
1274
|
const listPolicies = (options) => {
|
|
1241
1275
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -1326,6 +1360,23 @@ const updatePolicy = (options) => {
|
|
|
1326
1360
|
});
|
|
1327
1361
|
};
|
|
1328
1362
|
exports.updatePolicy = updatePolicy;
|
|
1363
|
+
/**
|
|
1364
|
+
* List resources using a policy
|
|
1365
|
+
* Returns the names of every resource (agent, function, model, sandbox, job) currently referencing the given policy. Replaces the client-side fan-out the policies UI used to do over the listings.
|
|
1366
|
+
*/
|
|
1367
|
+
const getPolicyUsages = (options) => {
|
|
1368
|
+
return (options.client ?? client_gen_1.client).get({
|
|
1369
|
+
security: [
|
|
1370
|
+
{
|
|
1371
|
+
scheme: 'bearer',
|
|
1372
|
+
type: 'http'
|
|
1373
|
+
}
|
|
1374
|
+
],
|
|
1375
|
+
url: '/policies/{policyName}/usages',
|
|
1376
|
+
...options
|
|
1377
|
+
});
|
|
1378
|
+
};
|
|
1379
|
+
exports.getPolicyUsages = getPolicyUsages;
|
|
1329
1380
|
/**
|
|
1330
1381
|
* List public ips
|
|
1331
1382
|
* Returns a list of all public ips used in Blaxel..
|
|
@@ -1362,7 +1413,7 @@ const listSandboxHubDefinitions = (options) => {
|
|
|
1362
1413
|
exports.listSandboxHubDefinitions = listSandboxHubDefinitions;
|
|
1363
1414
|
/**
|
|
1364
1415
|
* List sandboxes
|
|
1365
|
-
* Returns
|
|
1416
|
+
* Returns sandboxes in the workspace. Each sandbox includes its configuration, status, and endpoint URL. Terminated sandboxes are hidden by default; pass `showTerminated=true` to include them. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array of all sandboxes.
|
|
1366
1417
|
*/
|
|
1367
1418
|
const listSandboxes = (options) => {
|
|
1368
1419
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -1954,7 +2005,7 @@ const deleteVolumeTemplateVersion = (options) => {
|
|
|
1954
2005
|
exports.deleteVolumeTemplateVersion = deleteVolumeTemplateVersion;
|
|
1955
2006
|
/**
|
|
1956
2007
|
* List persistent volumes
|
|
1957
|
-
* Returns
|
|
2008
|
+
* Returns persistent storage volumes in the workspace. Volumes can be attached to sandboxes for durable file storage that persists across sessions and sandbox deletions. Starting with API version 2026-04-28 the response is wrapped in `{data, meta}` and supports cursor pagination via the `cursor` and `limit` query parameters; older versions keep returning a bare array of volumes.
|
|
1958
2009
|
*/
|
|
1959
2010
|
const listVolumes = (options) => {
|
|
1960
2011
|
return (options?.client ?? client_gen_1.client).get({
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const apikey_js_1 = require("../authentication/apikey.js");
|
|
5
|
+
const credentials_js_1 = require("../authentication/credentials.js");
|
|
6
|
+
const index_js_1 = require("../authentication/index.js");
|
|
7
|
+
const errors_js_1 = require("./errors.js");
|
|
8
|
+
const settings_js_1 = require("./settings.js");
|
|
9
|
+
/**
|
|
10
|
+
* ENG-2698: missing / partial BL_WORKSPACE / BL_API_KEY must fail fast with a
|
|
11
|
+
* clear, actionable error instead of silently sending empty headers and
|
|
12
|
+
* surfacing the server's misleading "workspace is required".
|
|
13
|
+
*
|
|
14
|
+
* `env` reads through to `process.env`, so env state is controlled there.
|
|
15
|
+
*/
|
|
16
|
+
(0, vitest_1.describe)('credential validation', () => {
|
|
17
|
+
const AUTH_ENV = ['BL_API_KEY', 'BL_WORKSPACE', 'BL_CLIENT_CREDENTIALS'];
|
|
18
|
+
let savedEnv;
|
|
19
|
+
let savedCredentials;
|
|
20
|
+
let savedConfig;
|
|
21
|
+
(0, vitest_1.beforeEach)(() => {
|
|
22
|
+
savedEnv = {};
|
|
23
|
+
for (const key of AUTH_ENV) {
|
|
24
|
+
savedEnv[key] = process.env[key];
|
|
25
|
+
delete process.env[key];
|
|
26
|
+
}
|
|
27
|
+
savedCredentials = settings_js_1.settings.credentials;
|
|
28
|
+
savedConfig = settings_js_1.settings.config;
|
|
29
|
+
settings_js_1.settings.config = { proxy: '', apikey: '', workspace: '' };
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.afterEach)(() => {
|
|
32
|
+
for (const key of AUTH_ENV) {
|
|
33
|
+
if (savedEnv[key] === undefined)
|
|
34
|
+
delete process.env[key];
|
|
35
|
+
else
|
|
36
|
+
process.env[key] = savedEnv[key];
|
|
37
|
+
}
|
|
38
|
+
settings_js_1.settings.credentials = savedCredentials;
|
|
39
|
+
settings_js_1.settings.config = savedConfig;
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('API key without workspace throws a clear BL_WORKSPACE error from headers', () => {
|
|
42
|
+
settings_js_1.settings.credentials = new apikey_js_1.ApiKey({ apiKey: 'test-key' });
|
|
43
|
+
(0, vitest_1.expect)(() => settings_js_1.settings.headers).toThrow(errors_js_1.CredentialsError);
|
|
44
|
+
(0, vitest_1.expect)(() => settings_js_1.settings.headers).toThrow(/BL_WORKSPACE/);
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('API key without workspace rejects from authenticate()', async () => {
|
|
47
|
+
settings_js_1.settings.credentials = new apikey_js_1.ApiKey({ apiKey: 'test-key' });
|
|
48
|
+
await (0, vitest_1.expect)(settings_js_1.settings.authenticate()).rejects.toThrow(/BL_WORKSPACE/);
|
|
49
|
+
});
|
|
50
|
+
(0, vitest_1.it)('workspace set but no API key names the missing API key', () => {
|
|
51
|
+
process.env.BL_WORKSPACE = 'my-workspace';
|
|
52
|
+
settings_js_1.settings.credentials = new credentials_js_1.MissingCredentials();
|
|
53
|
+
(0, vitest_1.expect)(() => settings_js_1.settings.headers).toThrow(/API key is missing/);
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('no credentials at all names both env vars', () => {
|
|
56
|
+
settings_js_1.settings.credentials = new credentials_js_1.MissingCredentials();
|
|
57
|
+
(0, vitest_1.expect)(() => settings_js_1.settings.headers).toThrow(errors_js_1.CredentialsError);
|
|
58
|
+
(0, vitest_1.expect)(() => settings_js_1.settings.headers).toThrow(/BL_API_KEY and BL_WORKSPACE/);
|
|
59
|
+
});
|
|
60
|
+
(0, vitest_1.it)('api key + workspace builds clean headers with no empty values', () => {
|
|
61
|
+
settings_js_1.settings.credentials = new apikey_js_1.ApiKey({ apiKey: 'test-key', workspace: 'my-workspace' });
|
|
62
|
+
const headers = settings_js_1.settings.headers;
|
|
63
|
+
(0, vitest_1.expect)(headers['x-blaxel-workspace']).toBe('my-workspace');
|
|
64
|
+
(0, vitest_1.expect)(headers['x-blaxel-authorization']).toBe('Bearer test-key');
|
|
65
|
+
(0, vitest_1.expect)(Object.values(headers)).not.toContain('');
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('authentication() returns a real ApiKey when BL_API_KEY is set', () => {
|
|
68
|
+
process.env.BL_API_KEY = 'test-key';
|
|
69
|
+
(0, vitest_1.expect)((0, index_js_1.authentication)()).toBeInstanceOf(apikey_js_1.ApiKey);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CredentialsError = void 0;
|
|
3
4
|
exports.handleDynamicImportError = handleDynamicImportError;
|
|
5
|
+
/**
|
|
6
|
+
* Thrown when Blaxel credentials are missing or incomplete.
|
|
7
|
+
*
|
|
8
|
+
* Surfaced eagerly with an actionable message (which env var / login step is
|
|
9
|
+
* missing) instead of silently sending empty workspace/authorization headers
|
|
10
|
+
* and letting the user hit a misleading server-side "workspace is required".
|
|
11
|
+
*/
|
|
12
|
+
class CredentialsError extends Error {
|
|
13
|
+
constructor(message) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "CredentialsError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.CredentialsError = CredentialsError;
|
|
4
19
|
function handleDynamicImportError(err) {
|
|
5
20
|
if (err instanceof Error) {
|
|
6
21
|
// We check if it's module import error and retrieve package name from the error message with a regex
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unwrapListData = unwrapListData;
|
|
4
|
+
exports.createPaginatedList = createPaginatedList;
|
|
5
|
+
function unwrapListData(response) {
|
|
6
|
+
if (!response) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (Array.isArray(response)) {
|
|
10
|
+
return response;
|
|
11
|
+
}
|
|
12
|
+
return response.data ?? [];
|
|
13
|
+
}
|
|
14
|
+
function unwrapListMeta(response) {
|
|
15
|
+
if (!response || Array.isArray(response)) {
|
|
16
|
+
return { hasMore: false };
|
|
17
|
+
}
|
|
18
|
+
return response.meta ?? { hasMore: false };
|
|
19
|
+
}
|
|
20
|
+
async function createPaginatedList({ response, fetchPage, mapItem, query, seenCursors, }) {
|
|
21
|
+
const meta = unwrapListMeta(response);
|
|
22
|
+
const data = await Promise.all(unwrapListData(response).map(mapItem));
|
|
23
|
+
const cursors = new Set(seenCursors);
|
|
24
|
+
if (query?.cursor) {
|
|
25
|
+
cursors.add(query.cursor);
|
|
26
|
+
}
|
|
27
|
+
const list = {
|
|
28
|
+
data,
|
|
29
|
+
meta,
|
|
30
|
+
get hasMore() {
|
|
31
|
+
return Boolean(meta.hasMore);
|
|
32
|
+
},
|
|
33
|
+
get nextCursor() {
|
|
34
|
+
return meta.nextCursor || undefined;
|
|
35
|
+
},
|
|
36
|
+
async nextPage() {
|
|
37
|
+
const cursor = list.nextCursor;
|
|
38
|
+
if (!cursor) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (cursors.has(cursor)) {
|
|
42
|
+
throw new Error("Pagination returned a repeated cursor");
|
|
43
|
+
}
|
|
44
|
+
const nextQuery = { ...(query ?? {}), cursor };
|
|
45
|
+
const nextSeenCursors = new Set(cursors);
|
|
46
|
+
nextSeenCursors.add(cursor);
|
|
47
|
+
return createPaginatedList({
|
|
48
|
+
response: await fetchPage(nextQuery),
|
|
49
|
+
fetchPage,
|
|
50
|
+
mapItem,
|
|
51
|
+
query: nextQuery,
|
|
52
|
+
seenCursors: nextSeenCursors,
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
async autoPagingEach(onItem) {
|
|
56
|
+
for await (const item of list) {
|
|
57
|
+
const shouldContinue = await onItem(item);
|
|
58
|
+
if (shouldContinue === false) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
async autoPagingToArray(options) {
|
|
64
|
+
if (!options || !Number.isFinite(options.limit) || options.limit <= 0) {
|
|
65
|
+
throw new Error("autoPagingToArray requires a positive limit");
|
|
66
|
+
}
|
|
67
|
+
const items = [];
|
|
68
|
+
for await (const item of list) {
|
|
69
|
+
items.push(item);
|
|
70
|
+
if (items.length >= options.limit) {
|
|
71
|
+
return items;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return items;
|
|
75
|
+
},
|
|
76
|
+
async *[Symbol.asyncIterator]() {
|
|
77
|
+
let page = list;
|
|
78
|
+
while (page) {
|
|
79
|
+
for (const item of page.data) {
|
|
80
|
+
yield item;
|
|
81
|
+
}
|
|
82
|
+
page = await page.nextPage();
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
return list;
|
|
87
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const pagination_js_1 = require("./pagination.js");
|
|
5
|
+
(0, vitest_1.describe)("pagination helpers", () => {
|
|
6
|
+
(0, vitest_1.it)("unwraps legacy array and paginated list responses", () => {
|
|
7
|
+
(0, vitest_1.expect)((0, pagination_js_1.unwrapListData)([{ name: "legacy" }])).toEqual([{ name: "legacy" }]);
|
|
8
|
+
(0, vitest_1.expect)((0, pagination_js_1.unwrapListData)({
|
|
9
|
+
data: [{ name: "paginated" }],
|
|
10
|
+
meta: { hasMore: false },
|
|
11
|
+
})).toEqual([{ name: "paginated" }]);
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.it)("returns page data and lets callers request the next page", async () => {
|
|
14
|
+
const cursors = [];
|
|
15
|
+
const fetchPage = async (query) => {
|
|
16
|
+
await Promise.resolve();
|
|
17
|
+
cursors.push(query?.cursor);
|
|
18
|
+
if (!query?.cursor) {
|
|
19
|
+
return {
|
|
20
|
+
data: ["first"],
|
|
21
|
+
meta: { hasMore: true, nextCursor: "next-page" },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
data: ["second"],
|
|
26
|
+
meta: { hasMore: false },
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
const page = await (0, pagination_js_1.createPaginatedList)({
|
|
30
|
+
response: await fetchPage(),
|
|
31
|
+
fetchPage,
|
|
32
|
+
mapItem: (item) => item.toUpperCase(),
|
|
33
|
+
});
|
|
34
|
+
(0, vitest_1.expect)(page.data).toEqual(["FIRST"]);
|
|
35
|
+
(0, vitest_1.expect)(page.hasMore).toBe(true);
|
|
36
|
+
(0, vitest_1.expect)(page.nextCursor).toBe("next-page");
|
|
37
|
+
const nextPage = await page.nextPage();
|
|
38
|
+
(0, vitest_1.expect)(nextPage?.data).toEqual(["SECOND"]);
|
|
39
|
+
(0, vitest_1.expect)(cursors).toEqual([undefined, "next-page"]);
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)("supports auto paging with an explicit limit", async () => {
|
|
42
|
+
const fetchPage = async (query) => {
|
|
43
|
+
await Promise.resolve();
|
|
44
|
+
if (!query?.cursor) {
|
|
45
|
+
return {
|
|
46
|
+
data: ["first"],
|
|
47
|
+
meta: { hasMore: true, nextCursor: "next-page" },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
data: ["second"],
|
|
52
|
+
meta: { hasMore: false },
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const page = await (0, pagination_js_1.createPaginatedList)({
|
|
56
|
+
response: await fetchPage(),
|
|
57
|
+
fetchPage,
|
|
58
|
+
mapItem: (item) => item,
|
|
59
|
+
});
|
|
60
|
+
await (0, vitest_1.expect)(page.autoPagingToArray({ limit: 2 })).resolves.toEqual(["first", "second"]);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
@@ -7,14 +7,31 @@ exports.settings = void 0;
|
|
|
7
7
|
const yaml_1 = __importDefault(require("yaml"));
|
|
8
8
|
const apikey_js_1 = require("../authentication/apikey.js");
|
|
9
9
|
const clientcredentials_js_1 = require("../authentication/clientcredentials.js");
|
|
10
|
+
const credentials_js_1 = require("../authentication/credentials.js");
|
|
10
11
|
const index_js_1 = require("../authentication/index.js");
|
|
11
12
|
const env_js_1 = require("../common/env.js");
|
|
13
|
+
const errors_js_1 = require("../common/errors.js");
|
|
12
14
|
const node_js_1 = require("../common/node.js");
|
|
15
|
+
/**
|
|
16
|
+
* Build an actionable "credentials missing" message naming exactly which piece
|
|
17
|
+
* is absent, based on the env vars currently set.
|
|
18
|
+
*/
|
|
19
|
+
function missingCredentialsMessage() {
|
|
20
|
+
const hasWorkspace = !!env_js_1.env.BL_WORKSPACE;
|
|
21
|
+
const hasApiKey = !!env_js_1.env.BL_API_KEY;
|
|
22
|
+
if (hasWorkspace && !hasApiKey) {
|
|
23
|
+
return "Blaxel API key is missing. Set the BL_API_KEY environment variable, or run `bl login`, to authenticate (BL_WORKSPACE is already set).";
|
|
24
|
+
}
|
|
25
|
+
if (hasApiKey && !hasWorkspace) {
|
|
26
|
+
return "Blaxel workspace is missing. Set the BL_WORKSPACE environment variable, or run `bl login`, to authenticate (BL_API_KEY is already set).";
|
|
27
|
+
}
|
|
28
|
+
return "No Blaxel credentials found. Set the BL_API_KEY and BL_WORKSPACE environment variables, or run `bl login`.";
|
|
29
|
+
}
|
|
13
30
|
// Build info - these placeholders are replaced at build time by build:replace-imports
|
|
14
|
-
const BUILD_VERSION = "0.2.
|
|
15
|
-
const BUILD_COMMIT = "
|
|
31
|
+
const BUILD_VERSION = "0.2.87-dev.173";
|
|
32
|
+
const BUILD_COMMIT = "43df206258fd8138bafddefa56333aadab2be731";
|
|
16
33
|
const BUILD_SENTRY_DSN = "https://fd5e60e1c9820e1eef5ccebb84a07127@o4508714045276160.ingest.us.sentry.io/4510465864564736";
|
|
17
|
-
const BLAXEL_API_VERSION = "2026-04-
|
|
34
|
+
const BLAXEL_API_VERSION = "2026-04-28";
|
|
18
35
|
// Cache for config.yaml tracking value
|
|
19
36
|
let configTrackingValue = null;
|
|
20
37
|
let configTrackingLoaded = false;
|
|
@@ -173,6 +190,7 @@ class Settings {
|
|
|
173
190
|
return env_js_1.env.BL_API_VERSION || BLAXEL_API_VERSION;
|
|
174
191
|
}
|
|
175
192
|
get headers() {
|
|
193
|
+
this.assertCredentials();
|
|
176
194
|
const osArch = getOsArch();
|
|
177
195
|
return {
|
|
178
196
|
"x-blaxel-authorization": this.authorization,
|
|
@@ -258,7 +276,27 @@ class Settings {
|
|
|
258
276
|
}
|
|
259
277
|
return 0;
|
|
260
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Fail fast with a clear, actionable error when credentials are missing or
|
|
281
|
+
* incomplete, instead of sending empty workspace/authorization headers and
|
|
282
|
+
* surfacing a misleading server-side "workspace is required". Skipped for
|
|
283
|
+
* `forceUrl` sandbox sessions, which carry their own headers and never read
|
|
284
|
+
* `settings.headers`. Leaves `workspace` itself non-throwing so telemetry
|
|
285
|
+
* tagging stays safe.
|
|
286
|
+
*/
|
|
287
|
+
assertCredentials() {
|
|
288
|
+
const hasConfigCredentials = !!(this.config.apikey ||
|
|
289
|
+
this.config.apiKey ||
|
|
290
|
+
this.config.clientCredentials);
|
|
291
|
+
if (!hasConfigCredentials && this.credentials instanceof credentials_js_1.MissingCredentials) {
|
|
292
|
+
throw new errors_js_1.CredentialsError(missingCredentialsMessage());
|
|
293
|
+
}
|
|
294
|
+
if (!this.workspace) {
|
|
295
|
+
throw new errors_js_1.CredentialsError("Blaxel workspace is missing. Set the BL_WORKSPACE environment variable, or run `bl login`, to authenticate your requests.");
|
|
296
|
+
}
|
|
297
|
+
}
|
|
261
298
|
async authenticate() {
|
|
299
|
+
this.assertCredentials();
|
|
262
300
|
await this.credentials.authenticate();
|
|
263
301
|
}
|
|
264
302
|
}
|
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const vitest_1 = require("vitest");
|
|
37
|
+
const apikey_js_1 = require("../authentication/apikey.js");
|
|
37
38
|
const env_js_1 = require("./env.js");
|
|
38
39
|
(0, vitest_1.describe)('Settings.apiVersion', () => {
|
|
39
40
|
(0, vitest_1.beforeEach)(() => {
|
|
@@ -42,14 +43,22 @@ const env_js_1 = require("./env.js");
|
|
|
42
43
|
(0, vitest_1.afterEach)(() => {
|
|
43
44
|
delete env_js_1.env.BL_API_VERSION;
|
|
44
45
|
});
|
|
45
|
-
(0, vitest_1.it)('defaults to 2026-04-
|
|
46
|
+
(0, vitest_1.it)('defaults to 2026-04-28 when BL_API_VERSION is not set', async () => {
|
|
46
47
|
delete env_js_1.env.BL_API_VERSION;
|
|
47
48
|
const { settings } = await Promise.resolve().then(() => __importStar(require('./settings.js')));
|
|
48
|
-
(0, vitest_1.expect)(settings.apiVersion).toBe('2026-04-
|
|
49
|
+
(0, vitest_1.expect)(settings.apiVersion).toBe('2026-04-28');
|
|
49
50
|
});
|
|
50
51
|
(0, vitest_1.it)('headers include Blaxel-Version set to the default', async () => {
|
|
51
52
|
delete env_js_1.env.BL_API_VERSION;
|
|
52
53
|
const { settings } = await Promise.resolve().then(() => __importStar(require('./settings.js')));
|
|
53
|
-
|
|
54
|
+
// headers now requires resolvable credentials; run in an authenticated context
|
|
55
|
+
const previous = settings.credentials;
|
|
56
|
+
settings.credentials = new apikey_js_1.ApiKey({ apiKey: 'test-key', workspace: 'test-ws' });
|
|
57
|
+
try {
|
|
58
|
+
(0, vitest_1.expect)(settings.headers['Blaxel-Version']).toBe('2026-04-28');
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
settings.credentials = previous;
|
|
62
|
+
}
|
|
54
63
|
});
|
|
55
64
|
});
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DriveInstance = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const index_js_1 = require("../client/index.js");
|
|
6
|
+
const pagination_js_1 = require("../common/pagination.js");
|
|
6
7
|
const settings_js_1 = require("../common/settings.js");
|
|
7
8
|
class DriveInstance {
|
|
8
9
|
drive;
|
|
@@ -86,9 +87,44 @@ class DriveInstance {
|
|
|
86
87
|
});
|
|
87
88
|
return new DriveInstance(data);
|
|
88
89
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
/**
|
|
91
|
+
* List one page of drives.
|
|
92
|
+
*
|
|
93
|
+
* The returned page exposes `data` for the current page, `meta` for cursor
|
|
94
|
+
* metadata, and helpers to fetch more pages only when you need them.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const page = await DriveInstance.list({ limit: 50 });
|
|
99
|
+
*
|
|
100
|
+
* for (const drive of page.data) {
|
|
101
|
+
* console.log(drive.name);
|
|
102
|
+
* }
|
|
103
|
+
*
|
|
104
|
+
* const nextPage = await page.nextPage();
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const allDrives = await (await DriveInstance.list()).autoPagingToArray({
|
|
110
|
+
* limit: 1000,
|
|
111
|
+
* });
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
static async list(query) {
|
|
115
|
+
const fetchPage = async (pageQuery) => {
|
|
116
|
+
const { data } = await (0, index_js_1.listDrives)({
|
|
117
|
+
query: pageQuery,
|
|
118
|
+
throwOnError: true,
|
|
119
|
+
});
|
|
120
|
+
return data;
|
|
121
|
+
};
|
|
122
|
+
return (0, pagination_js_1.createPaginatedList)({
|
|
123
|
+
response: await fetchPage(query),
|
|
124
|
+
fetchPage,
|
|
125
|
+
mapItem: (drive) => new DriveInstance(drive),
|
|
126
|
+
query,
|
|
127
|
+
});
|
|
92
128
|
}
|
|
93
129
|
static async delete(driveName) {
|
|
94
130
|
const { data } = await (0, index_js_1.deleteDrive)({
|
|
@@ -23,6 +23,7 @@ __exportStar(require("./common/node.js"), exports);
|
|
|
23
23
|
__exportStar(require("./common/errors.js"), exports);
|
|
24
24
|
__exportStar(require("./common/internal.js"), exports);
|
|
25
25
|
__exportStar(require("./common/logger.js"), exports);
|
|
26
|
+
__exportStar(require("./common/pagination.js"), exports);
|
|
26
27
|
__exportStar(require("./common/settings.js"), exports);
|
|
27
28
|
__exportStar(require("./common/webhook.js"), exports);
|
|
28
29
|
__exportStar(require("./drive/index.js"), exports);
|