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.mjs CHANGED
@@ -1333,6 +1333,7 @@ var Server = class {
1333
1333
  this.listHandler = handlers.list;
1334
1334
  this.retrieveHandler = handlers.retrieve;
1335
1335
  this.stopHandler = handlers.stop;
1336
+ this.deleteHandler = handlers.delete;
1336
1337
  this.restartHandler = handlers.restart;
1337
1338
  this.updateStatusHandler = handlers.updateStatus;
1338
1339
  this.logsHandler = handlers.logs;
@@ -1398,12 +1399,19 @@ var Server = class {
1398
1399
  return response.data.server;
1399
1400
  }
1400
1401
  /**
1401
- * Stop a server by slug
1402
+ * Stop a server by slug (non-destructive)
1402
1403
  * @param slug - The server slug
1403
1404
  */
1404
1405
  async stop(slug) {
1405
1406
  await this.stopHandler(slug);
1406
1407
  }
1408
+ /**
1409
+ * Delete a server config by slug (stops + removes persistence)
1410
+ * @param slug - The server slug
1411
+ */
1412
+ async delete(slug) {
1413
+ await this.deleteHandler(slug);
1414
+ }
1407
1415
  /**
1408
1416
  * Restart a server by slug
1409
1417
  * @param slug - The server slug
@@ -1873,8 +1881,8 @@ var Child = class {
1873
1881
  * Create a new child sandbox
1874
1882
  * @returns Child sandbox info including URL and subdomain
1875
1883
  */
1876
- async create() {
1877
- return this.createHandler();
1884
+ async create(options) {
1885
+ return this.createHandler(options);
1878
1886
  }
1879
1887
  /**
1880
1888
  * List all child sandboxes
@@ -2196,6 +2204,9 @@ var Sandbox = class {
2196
2204
  stop: async (slug) => {
2197
2205
  await this.stopServer(slug);
2198
2206
  },
2207
+ delete: async (slug) => {
2208
+ await this.deleteServer(slug);
2209
+ },
2199
2210
  restart: async (slug) => this.restartServer(slug),
2200
2211
  updateStatus: async (slug, status) => {
2201
2212
  await this.updateServerStatus(slug, status);
@@ -2248,7 +2259,7 @@ var Sandbox = class {
2248
2259
  info: async () => this.getAuthInfo()
2249
2260
  });
2250
2261
  this.child = new Child({
2251
- create: async () => this.createSandbox(),
2262
+ create: async (options) => this.createSandbox(options),
2252
2263
  list: async () => this.listSandboxes(),
2253
2264
  retrieve: async (subdomain) => this.getSandbox(subdomain),
2254
2265
  destroy: async (subdomain, deleteFiles) => this.deleteSandbox(subdomain, deleteFiles)
@@ -3111,6 +3122,12 @@ API request failed (${response.status}): ${error}`
3111
3122
  * @param options.path - Working directory (optional)
3112
3123
  * @param options.env_file - Path to .env file relative to path (optional)
3113
3124
  * @param options.environment - Inline environment variables (merged with env_file if both provided)
3125
+ * @param options.port - Requested port (preallocated before start)
3126
+ * @param options.strict_port - If true, fail instead of auto-incrementing when port is taken
3127
+ * @param options.autostart - Auto-start on daemon boot (default: true)
3128
+ * @param options.overlay - Inline overlay to create before starting
3129
+ * @param options.overlays - Additional overlays to create before starting
3130
+ * @param options.depends_on - Overlay IDs this server depends on
3114
3131
  * @param options.restart_policy - When to automatically restart: 'never' (default), 'on-failure', 'always'
3115
3132
  * @param options.max_restarts - Maximum restart attempts, 0 = unlimited (default: 0)
3116
3133
  * @param options.restart_delay_ms - Delay between restart attempts in milliseconds (default: 1000)
@@ -3137,6 +3154,18 @@ API request failed (${response.status}): ${error}`
3137
3154
  * restart_delay_ms: 2000,
3138
3155
  * stop_timeout_ms: 5000,
3139
3156
  * });
3157
+ *
3158
+ * // With inline overlay dependencies
3159
+ * await sandbox.startServer({
3160
+ * slug: 'web',
3161
+ * start: 'npm run dev',
3162
+ * path: '/app',
3163
+ * overlay: {
3164
+ * source: '/templates/nextjs',
3165
+ * target: 'app',
3166
+ * strategy: 'smart',
3167
+ * },
3168
+ * });
3140
3169
  * ```
3141
3170
  */
3142
3171
  async startServer(options) {
@@ -3153,17 +3182,26 @@ API request failed (${response.status}): ${error}`
3153
3182
  return this.request(`/servers/${encodeURIComponent(slug)}`);
3154
3183
  }
3155
3184
  /**
3156
- * Stop a managed server
3185
+ * Stop a managed server (non-destructive)
3157
3186
  * @param slug - Server slug
3158
3187
  */
3159
3188
  async stopServer(slug) {
3160
3189
  return this.request(
3161
- `/servers/${encodeURIComponent(slug)}`,
3190
+ `/servers/${encodeURIComponent(slug)}/stop`,
3162
3191
  {
3163
- method: "DELETE"
3192
+ method: "POST"
3164
3193
  }
3165
3194
  );
3166
3195
  }
3196
+ /**
3197
+ * Delete a managed server configuration
3198
+ * @param slug - Server slug
3199
+ */
3200
+ async deleteServer(slug) {
3201
+ await this.request(`/servers/${encodeURIComponent(slug)}`, {
3202
+ method: "DELETE"
3203
+ });
3204
+ }
3167
3205
  /**
3168
3206
  * Restart a managed server
3169
3207
  * @param slug - Server slug
@@ -3206,15 +3244,29 @@ API request failed (${response.status}): ${error}`
3206
3244
  );
3207
3245
  }
3208
3246
  // ============================================================================
3247
+ // Ready Management
3248
+ // ============================================================================
3249
+ /**
3250
+ * Get readiness status for autostarted servers and overlays
3251
+ */
3252
+ async ready() {
3253
+ const response = await this.request("/ready");
3254
+ return {
3255
+ ready: response.ready,
3256
+ servers: response.servers ?? [],
3257
+ overlays: response.overlays ?? []
3258
+ };
3259
+ }
3260
+ // ============================================================================
3209
3261
  // Sandbox Management
3210
3262
  // ============================================================================
3211
3263
  /**
3212
3264
  * Create a new sandbox environment
3213
3265
  */
3214
- async createSandbox() {
3266
+ async createSandbox(options) {
3215
3267
  return this.request("/sandboxes", {
3216
3268
  method: "POST",
3217
- body: JSON.stringify({})
3269
+ body: JSON.stringify(options || {})
3218
3270
  });
3219
3271
  }
3220
3272
  /**
@@ -3448,6 +3500,42 @@ API request failed (${response.status}): ${error}`
3448
3500
  }
3449
3501
  };
3450
3502
 
3503
+ // src/setup.ts
3504
+ var encodeBase64 = (value) => {
3505
+ if (typeof Buffer !== "undefined") {
3506
+ return Buffer.from(value, "utf8").toString("base64");
3507
+ }
3508
+ if (typeof btoa !== "undefined" && typeof TextEncoder !== "undefined") {
3509
+ const bytes = new TextEncoder().encode(value);
3510
+ let binary = "";
3511
+ for (const byte of bytes) {
3512
+ binary += String.fromCharCode(byte);
3513
+ }
3514
+ return btoa(binary);
3515
+ }
3516
+ throw new Error("Base64 encoding is not supported in this environment.");
3517
+ };
3518
+ var buildSetupPayload = (options) => {
3519
+ const overlays = options.overlays?.map((overlay) => {
3520
+ const { source, target, ignore, strategy } = overlay;
3521
+ return {
3522
+ source,
3523
+ target,
3524
+ ignore,
3525
+ strategy
3526
+ };
3527
+ });
3528
+ const servers = options.servers;
3529
+ return {
3530
+ overlays: overlays?.length ? overlays : void 0,
3531
+ servers: servers?.length ? servers : void 0
3532
+ };
3533
+ };
3534
+ var encodeSetupPayload = (options) => {
3535
+ const payload = buildSetupPayload(options);
3536
+ return encodeBase64(JSON.stringify(payload));
3537
+ };
3538
+
3451
3539
  // src/provider-config.ts
3452
3540
  var PROVIDER_AUTH = {
3453
3541
  e2b: [["E2B_API_KEY"]],
@@ -4042,6 +4130,27 @@ var ComputeManager = class {
4042
4130
  this.sandbox = {
4043
4131
  /**
4044
4132
  * Create a new sandbox
4133
+ *
4134
+ * @example
4135
+ * ```typescript
4136
+ * const sandbox = await compute.sandbox.create({
4137
+ * directory: '/custom/path',
4138
+ * overlays: [
4139
+ * {
4140
+ * source: '/templates/nextjs',
4141
+ * target: 'app',
4142
+ * strategy: 'smart',
4143
+ * },
4144
+ * ],
4145
+ * servers: [
4146
+ * {
4147
+ * slug: 'web',
4148
+ * start: 'npm run dev',
4149
+ * path: '/app',
4150
+ * },
4151
+ * ],
4152
+ * });
4153
+ * ```
4045
4154
  */
4046
4155
  create: async (options) => {
4047
4156
  const config = this.getGatewayConfig();
@@ -4052,7 +4161,7 @@ var ComputeManager = class {
4052
4161
  if (!result.success || !result.data) {
4053
4162
  throw new Error(`Gateway returned invalid response`);
4054
4163
  }
4055
- const { sandboxId, url, token, provider, metadata, name, namespace } = result.data;
4164
+ const { sandboxId, url, token, provider, metadata, name, namespace, overlays, servers } = result.data;
4056
4165
  const sandbox = new Sandbox({
4057
4166
  sandboxUrl: url,
4058
4167
  sandboxId,
@@ -4061,7 +4170,9 @@ var ComputeManager = class {
4061
4170
  metadata: {
4062
4171
  ...metadata,
4063
4172
  ...name && { name },
4064
- ...namespace && { namespace }
4173
+ ...namespace && { namespace },
4174
+ ...overlays && { overlays },
4175
+ ...servers && { servers }
4065
4176
  },
4066
4177
  WebSocket: config.WebSocket || globalThis.WebSocket,
4067
4178
  destroyHandler: async () => {
@@ -4299,10 +4410,12 @@ export {
4299
4410
  TerminalInstance,
4300
4411
  autoConfigureCompute,
4301
4412
  buildProviderHeaders,
4413
+ buildSetupPayload,
4302
4414
  compute,
4303
4415
  decodeBinaryMessage,
4304
4416
  detectProvider,
4305
4417
  encodeBinaryMessage,
4418
+ encodeSetupPayload,
4306
4419
  getMissingEnvVars,
4307
4420
  getProviderConfigFromEnv,
4308
4421
  getProviderHeaders,