computesdk 1.18.2 → 1.20.0
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/dist/index.d.mts +477 -286
- package/dist/index.d.ts +477 -286
- package/dist/index.js +126 -11
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +124 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -37,10 +37,12 @@ __export(index_exports, {
|
|
|
37
37
|
TerminalInstance: () => TerminalInstance,
|
|
38
38
|
autoConfigureCompute: () => autoConfigureCompute,
|
|
39
39
|
buildProviderHeaders: () => buildProviderHeaders,
|
|
40
|
+
buildSetupPayload: () => buildSetupPayload,
|
|
40
41
|
compute: () => compute,
|
|
41
42
|
decodeBinaryMessage: () => decodeBinaryMessage,
|
|
42
43
|
detectProvider: () => detectProvider,
|
|
43
44
|
encodeBinaryMessage: () => encodeBinaryMessage,
|
|
45
|
+
encodeSetupPayload: () => encodeSetupPayload,
|
|
44
46
|
getMissingEnvVars: () => getMissingEnvVars,
|
|
45
47
|
getProviderConfigFromEnv: () => getProviderConfigFromEnv,
|
|
46
48
|
getProviderHeaders: () => getProviderHeaders,
|
|
@@ -1386,6 +1388,7 @@ var Server = class {
|
|
|
1386
1388
|
this.listHandler = handlers.list;
|
|
1387
1389
|
this.retrieveHandler = handlers.retrieve;
|
|
1388
1390
|
this.stopHandler = handlers.stop;
|
|
1391
|
+
this.deleteHandler = handlers.delete;
|
|
1389
1392
|
this.restartHandler = handlers.restart;
|
|
1390
1393
|
this.updateStatusHandler = handlers.updateStatus;
|
|
1391
1394
|
this.logsHandler = handlers.logs;
|
|
@@ -1451,12 +1454,19 @@ var Server = class {
|
|
|
1451
1454
|
return response.data.server;
|
|
1452
1455
|
}
|
|
1453
1456
|
/**
|
|
1454
|
-
* Stop a server by slug
|
|
1457
|
+
* Stop a server by slug (non-destructive)
|
|
1455
1458
|
* @param slug - The server slug
|
|
1456
1459
|
*/
|
|
1457
1460
|
async stop(slug) {
|
|
1458
1461
|
await this.stopHandler(slug);
|
|
1459
1462
|
}
|
|
1463
|
+
/**
|
|
1464
|
+
* Delete a server config by slug (stops + removes persistence)
|
|
1465
|
+
* @param slug - The server slug
|
|
1466
|
+
*/
|
|
1467
|
+
async delete(slug) {
|
|
1468
|
+
await this.deleteHandler(slug);
|
|
1469
|
+
}
|
|
1460
1470
|
/**
|
|
1461
1471
|
* Restart a server by slug
|
|
1462
1472
|
* @param slug - The server slug
|
|
@@ -1926,8 +1936,8 @@ var Child = class {
|
|
|
1926
1936
|
* Create a new child sandbox
|
|
1927
1937
|
* @returns Child sandbox info including URL and subdomain
|
|
1928
1938
|
*/
|
|
1929
|
-
async create() {
|
|
1930
|
-
return this.createHandler();
|
|
1939
|
+
async create(options) {
|
|
1940
|
+
return this.createHandler(options);
|
|
1931
1941
|
}
|
|
1932
1942
|
/**
|
|
1933
1943
|
* List all child sandboxes
|
|
@@ -2249,6 +2259,9 @@ var Sandbox = class {
|
|
|
2249
2259
|
stop: async (slug) => {
|
|
2250
2260
|
await this.stopServer(slug);
|
|
2251
2261
|
},
|
|
2262
|
+
delete: async (slug) => {
|
|
2263
|
+
await this.deleteServer(slug);
|
|
2264
|
+
},
|
|
2252
2265
|
restart: async (slug) => this.restartServer(slug),
|
|
2253
2266
|
updateStatus: async (slug, status) => {
|
|
2254
2267
|
await this.updateServerStatus(slug, status);
|
|
@@ -2301,7 +2314,7 @@ var Sandbox = class {
|
|
|
2301
2314
|
info: async () => this.getAuthInfo()
|
|
2302
2315
|
});
|
|
2303
2316
|
this.child = new Child({
|
|
2304
|
-
create: async () => this.createSandbox(),
|
|
2317
|
+
create: async (options) => this.createSandbox(options),
|
|
2305
2318
|
list: async () => this.listSandboxes(),
|
|
2306
2319
|
retrieve: async (subdomain) => this.getSandbox(subdomain),
|
|
2307
2320
|
destroy: async (subdomain, deleteFiles) => this.deleteSandbox(subdomain, deleteFiles)
|
|
@@ -3164,6 +3177,12 @@ API request failed (${response.status}): ${error}`
|
|
|
3164
3177
|
* @param options.path - Working directory (optional)
|
|
3165
3178
|
* @param options.env_file - Path to .env file relative to path (optional)
|
|
3166
3179
|
* @param options.environment - Inline environment variables (merged with env_file if both provided)
|
|
3180
|
+
* @param options.port - Requested port (preallocated before start)
|
|
3181
|
+
* @param options.strict_port - If true, fail instead of auto-incrementing when port is taken
|
|
3182
|
+
* @param options.autostart - Auto-start on daemon boot (default: true)
|
|
3183
|
+
* @param options.overlay - Inline overlay to create before starting
|
|
3184
|
+
* @param options.overlays - Additional overlays to create before starting
|
|
3185
|
+
* @param options.depends_on - Overlay IDs this server depends on
|
|
3167
3186
|
* @param options.restart_policy - When to automatically restart: 'never' (default), 'on-failure', 'always'
|
|
3168
3187
|
* @param options.max_restarts - Maximum restart attempts, 0 = unlimited (default: 0)
|
|
3169
3188
|
* @param options.restart_delay_ms - Delay between restart attempts in milliseconds (default: 1000)
|
|
@@ -3190,6 +3209,18 @@ API request failed (${response.status}): ${error}`
|
|
|
3190
3209
|
* restart_delay_ms: 2000,
|
|
3191
3210
|
* stop_timeout_ms: 5000,
|
|
3192
3211
|
* });
|
|
3212
|
+
*
|
|
3213
|
+
* // With inline overlay dependencies
|
|
3214
|
+
* await sandbox.startServer({
|
|
3215
|
+
* slug: 'web',
|
|
3216
|
+
* start: 'npm run dev',
|
|
3217
|
+
* path: '/app',
|
|
3218
|
+
* overlay: {
|
|
3219
|
+
* source: '/templates/nextjs',
|
|
3220
|
+
* target: 'app',
|
|
3221
|
+
* strategy: 'smart',
|
|
3222
|
+
* },
|
|
3223
|
+
* });
|
|
3193
3224
|
* ```
|
|
3194
3225
|
*/
|
|
3195
3226
|
async startServer(options) {
|
|
@@ -3206,17 +3237,26 @@ API request failed (${response.status}): ${error}`
|
|
|
3206
3237
|
return this.request(`/servers/${encodeURIComponent(slug)}`);
|
|
3207
3238
|
}
|
|
3208
3239
|
/**
|
|
3209
|
-
* Stop a managed server
|
|
3240
|
+
* Stop a managed server (non-destructive)
|
|
3210
3241
|
* @param slug - Server slug
|
|
3211
3242
|
*/
|
|
3212
3243
|
async stopServer(slug) {
|
|
3213
3244
|
return this.request(
|
|
3214
|
-
`/servers/${encodeURIComponent(slug)}`,
|
|
3245
|
+
`/servers/${encodeURIComponent(slug)}/stop`,
|
|
3215
3246
|
{
|
|
3216
|
-
method: "
|
|
3247
|
+
method: "POST"
|
|
3217
3248
|
}
|
|
3218
3249
|
);
|
|
3219
3250
|
}
|
|
3251
|
+
/**
|
|
3252
|
+
* Delete a managed server configuration
|
|
3253
|
+
* @param slug - Server slug
|
|
3254
|
+
*/
|
|
3255
|
+
async deleteServer(slug) {
|
|
3256
|
+
await this.request(`/servers/${encodeURIComponent(slug)}`, {
|
|
3257
|
+
method: "DELETE"
|
|
3258
|
+
});
|
|
3259
|
+
}
|
|
3220
3260
|
/**
|
|
3221
3261
|
* Restart a managed server
|
|
3222
3262
|
* @param slug - Server slug
|
|
@@ -3259,15 +3299,29 @@ API request failed (${response.status}): ${error}`
|
|
|
3259
3299
|
);
|
|
3260
3300
|
}
|
|
3261
3301
|
// ============================================================================
|
|
3302
|
+
// Ready Management
|
|
3303
|
+
// ============================================================================
|
|
3304
|
+
/**
|
|
3305
|
+
* Get readiness status for autostarted servers and overlays
|
|
3306
|
+
*/
|
|
3307
|
+
async ready() {
|
|
3308
|
+
const response = await this.request("/ready");
|
|
3309
|
+
return {
|
|
3310
|
+
ready: response.ready,
|
|
3311
|
+
servers: response.servers ?? [],
|
|
3312
|
+
overlays: response.overlays ?? []
|
|
3313
|
+
};
|
|
3314
|
+
}
|
|
3315
|
+
// ============================================================================
|
|
3262
3316
|
// Sandbox Management
|
|
3263
3317
|
// ============================================================================
|
|
3264
3318
|
/**
|
|
3265
3319
|
* Create a new sandbox environment
|
|
3266
3320
|
*/
|
|
3267
|
-
async createSandbox() {
|
|
3321
|
+
async createSandbox(options) {
|
|
3268
3322
|
return this.request("/sandboxes", {
|
|
3269
3323
|
method: "POST",
|
|
3270
|
-
body: JSON.stringify({})
|
|
3324
|
+
body: JSON.stringify(options || {})
|
|
3271
3325
|
});
|
|
3272
3326
|
}
|
|
3273
3327
|
/**
|
|
@@ -3501,6 +3555,42 @@ API request failed (${response.status}): ${error}`
|
|
|
3501
3555
|
}
|
|
3502
3556
|
};
|
|
3503
3557
|
|
|
3558
|
+
// src/setup.ts
|
|
3559
|
+
var encodeBase64 = (value) => {
|
|
3560
|
+
if (typeof Buffer !== "undefined") {
|
|
3561
|
+
return Buffer.from(value, "utf8").toString("base64");
|
|
3562
|
+
}
|
|
3563
|
+
if (typeof btoa !== "undefined" && typeof TextEncoder !== "undefined") {
|
|
3564
|
+
const bytes = new TextEncoder().encode(value);
|
|
3565
|
+
let binary = "";
|
|
3566
|
+
for (const byte of bytes) {
|
|
3567
|
+
binary += String.fromCharCode(byte);
|
|
3568
|
+
}
|
|
3569
|
+
return btoa(binary);
|
|
3570
|
+
}
|
|
3571
|
+
throw new Error("Base64 encoding is not supported in this environment.");
|
|
3572
|
+
};
|
|
3573
|
+
var buildSetupPayload = (options) => {
|
|
3574
|
+
const overlays = options.overlays?.map((overlay) => {
|
|
3575
|
+
const { source, target, ignore, strategy } = overlay;
|
|
3576
|
+
return {
|
|
3577
|
+
source,
|
|
3578
|
+
target,
|
|
3579
|
+
ignore,
|
|
3580
|
+
strategy
|
|
3581
|
+
};
|
|
3582
|
+
});
|
|
3583
|
+
const servers = options.servers;
|
|
3584
|
+
return {
|
|
3585
|
+
overlays: overlays?.length ? overlays : void 0,
|
|
3586
|
+
servers: servers?.length ? servers : void 0
|
|
3587
|
+
};
|
|
3588
|
+
};
|
|
3589
|
+
var encodeSetupPayload = (options) => {
|
|
3590
|
+
const payload = buildSetupPayload(options);
|
|
3591
|
+
return encodeBase64(JSON.stringify(payload));
|
|
3592
|
+
};
|
|
3593
|
+
|
|
3504
3594
|
// src/provider-config.ts
|
|
3505
3595
|
var PROVIDER_AUTH = {
|
|
3506
3596
|
e2b: [["E2B_API_KEY"]],
|
|
@@ -4095,6 +4185,27 @@ var ComputeManager = class {
|
|
|
4095
4185
|
this.sandbox = {
|
|
4096
4186
|
/**
|
|
4097
4187
|
* Create a new sandbox
|
|
4188
|
+
*
|
|
4189
|
+
* @example
|
|
4190
|
+
* ```typescript
|
|
4191
|
+
* const sandbox = await compute.sandbox.create({
|
|
4192
|
+
* directory: '/custom/path',
|
|
4193
|
+
* overlays: [
|
|
4194
|
+
* {
|
|
4195
|
+
* source: '/templates/nextjs',
|
|
4196
|
+
* target: 'app',
|
|
4197
|
+
* strategy: 'smart',
|
|
4198
|
+
* },
|
|
4199
|
+
* ],
|
|
4200
|
+
* servers: [
|
|
4201
|
+
* {
|
|
4202
|
+
* slug: 'web',
|
|
4203
|
+
* start: 'npm run dev',
|
|
4204
|
+
* path: '/app',
|
|
4205
|
+
* },
|
|
4206
|
+
* ],
|
|
4207
|
+
* });
|
|
4208
|
+
* ```
|
|
4098
4209
|
*/
|
|
4099
4210
|
create: async (options) => {
|
|
4100
4211
|
const config = this.getGatewayConfig();
|
|
@@ -4105,7 +4216,7 @@ var ComputeManager = class {
|
|
|
4105
4216
|
if (!result.success || !result.data) {
|
|
4106
4217
|
throw new Error(`Gateway returned invalid response`);
|
|
4107
4218
|
}
|
|
4108
|
-
const { sandboxId, url, token, provider, metadata, name, namespace } = result.data;
|
|
4219
|
+
const { sandboxId, url, token, provider, metadata, name, namespace, overlays, servers } = result.data;
|
|
4109
4220
|
const sandbox = new Sandbox({
|
|
4110
4221
|
sandboxUrl: url,
|
|
4111
4222
|
sandboxId,
|
|
@@ -4114,7 +4225,9 @@ var ComputeManager = class {
|
|
|
4114
4225
|
metadata: {
|
|
4115
4226
|
...metadata,
|
|
4116
4227
|
...name && { name },
|
|
4117
|
-
...namespace && { namespace }
|
|
4228
|
+
...namespace && { namespace },
|
|
4229
|
+
...overlays && { overlays },
|
|
4230
|
+
...servers && { servers }
|
|
4118
4231
|
},
|
|
4119
4232
|
WebSocket: config.WebSocket || globalThis.WebSocket,
|
|
4120
4233
|
destroyHandler: async () => {
|
|
@@ -4353,10 +4466,12 @@ var compute = new Proxy(
|
|
|
4353
4466
|
TerminalInstance,
|
|
4354
4467
|
autoConfigureCompute,
|
|
4355
4468
|
buildProviderHeaders,
|
|
4469
|
+
buildSetupPayload,
|
|
4356
4470
|
compute,
|
|
4357
4471
|
decodeBinaryMessage,
|
|
4358
4472
|
detectProvider,
|
|
4359
4473
|
encodeBinaryMessage,
|
|
4474
|
+
encodeSetupPayload,
|
|
4360
4475
|
getMissingEnvVars,
|
|
4361
4476
|
getProviderConfigFromEnv,
|
|
4362
4477
|
getProviderHeaders,
|