computesdk 4.0.0 → 4.1.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/README.md CHANGED
@@ -13,8 +13,6 @@ npm install computesdk
13
13
 
14
14
  ## Quick Start
15
15
 
16
- ### Direct Provider Mode (Recommended)
17
-
18
16
  ```typescript
19
17
  import { compute } from 'computesdk';
20
18
  import { e2b } from '@computesdk/e2b';
@@ -35,24 +33,6 @@ console.log(result.stdout); // "Hello World!"
35
33
  await sandbox.destroy();
36
34
  ```
37
35
 
38
- ### Explicit Configuration
39
-
40
- For more control, configure `compute` with an explicit provider:
41
-
42
- ```typescript
43
- import { compute } from 'computesdk';
44
- import { modal } from '@computesdk/modal';
45
-
46
- compute.setConfig({
47
- provider: modal({
48
- tokenId: process.env.MODAL_TOKEN_ID,
49
- tokenSecret: process.env.MODAL_TOKEN_SECRET,
50
- }),
51
- });
52
-
53
- const sandbox = await compute.sandbox.create();
54
- ```
55
-
56
36
  ### Multi-Provider Configuration
57
37
 
58
38
  Configure multiple providers for resilience and routing:
@@ -81,30 +61,6 @@ const sandbox = await compute.sandbox.create();
81
61
  const modalSandbox = await compute.sandbox.create({ provider: 'modal' });
82
62
  ```
83
63
 
84
- ## Supported Providers
85
-
86
- Use provider packages directly to create provider instances:
87
-
88
- | Provider | Environment Variables | Use Cases |
89
- |----------|----------------------|-----------|
90
- | **E2B** | `E2B_API_KEY` | Data science, Python/Node.js, interactive terminals |
91
- | **Modal** | `MODAL_TOKEN_ID`, `MODAL_TOKEN_SECRET` | GPU computing, ML inference, Python workloads |
92
- | **Railway** | `RAILWAY_API_KEY`, `RAILWAY_PROJECT_ID`, `RAILWAY_ENVIRONMENT_ID` | Full-stack deployments, persistent storage |
93
- | **Daytona** | `DAYTONA_API_KEY` | Development workspaces, custom environments |
94
- | **Runloop** | `RUNLOOP_API_KEY` | Code execution, automation |
95
- | **Vercel** | `VERCEL_TOKEN` or `VERCEL_OIDC_TOKEN` | Serverless functions, web apps |
96
- | **Cloudflare** | `CLOUDFLARE_SANDBOX_URL`, `CLOUDFLARE_SANDBOX_SECRET` | Edge computing |
97
- | **CodeSandbox** | `CSB_API_KEY` | Collaborative development |
98
-
99
- Example imports:
100
-
101
- ```typescript
102
- import { e2b } from '@computesdk/e2b';
103
- import { modal } from '@computesdk/modal';
104
- import { vercel } from '@computesdk/vercel';
105
- import { daytona } from '@computesdk/daytona';
106
- ```
107
-
108
64
  ## API Reference
109
65
 
110
66
  ### Configuration
@@ -370,7 +326,7 @@ For advanced use cases where you want to use provider SDKs directly, see individ
370
326
 
371
327
  - **[@computesdk/e2b](../e2b)** - E2B provider
372
328
  - **[@computesdk/modal](../modal)** - Modal provider
373
- - **[@computesdk/railway](../railway)** - Railway provider
329
+ - **[@computesdk/vercel](../vercel)** - Vercel provider
374
330
  - **[@computesdk/daytona](../daytona)** - Daytona provider
375
331
 
376
332
  Example direct mode usage:
package/dist/index.d.mts CHANGED
@@ -1,3 +1,6 @@
1
+ import { SeedScriptConfig } from 'daemond';
2
+ export { SeedCommandInput, SeedCommandResult, SeedDaemonInfo, SeedEventFilter, SeedHealthPayload, SeedInvocationResult, SeedScriptConfig, daemonSeedScript, daemonSeedScriptCommand, parseSeedInvocationOutput } from 'daemond';
3
+
1
4
  /**
2
5
  * Universal Sandbox Interface
3
6
  *
@@ -55,6 +58,27 @@ interface RunCommandOptions {
55
58
  env?: Record<string, string>;
56
59
  timeout?: number;
57
60
  background?: boolean;
61
+ /**
62
+ * Daemon-mode callback for streamed stdout chunks.
63
+ *
64
+ * This callback is only invoked when `daemon` mode is enabled and the
65
+ * provider can establish a daemon event stream.
66
+ */
67
+ onStdout?: (data: string) => void;
68
+ /**
69
+ * Daemon-mode callback for streamed stderr chunks.
70
+ *
71
+ * This callback is only invoked when `daemon` mode is enabled and the
72
+ * provider can establish a daemon event stream.
73
+ */
74
+ onStderr?: (data: string) => void;
75
+ /**
76
+ * Optional daemon seed config for providers that support daemonized command execution.
77
+ *
78
+ * - `true`: enable provider default daemon seed behavior
79
+ * - object: enable daemon mode with explicit seed config
80
+ */
81
+ daemon?: boolean | SeedScriptConfig;
58
82
  }
59
83
  /**
60
84
  * Snapshot information
@@ -87,7 +111,19 @@ interface SandboxFileSystem {
87
111
  */
88
112
  interface CreateSandboxOptions$1 {
89
113
  timeout?: number;
114
+ /** Provider-agnostic template/image ID to boot from */
90
115
  templateId?: string;
116
+ /**
117
+ * Snapshot ID to restore from when creating a sandbox.
118
+ *
119
+ * Each provider maps this to its native concept:
120
+ * - E2B: passed directly as the template/image ID
121
+ * - Daytona: sets `createParams.snapshot`
122
+ * - Modal: loads the image via `client.images.fromId(snapshotId)`
123
+ * - CodeSandbox: calls `sdk.sandboxes.resume(snapshotId)`
124
+ * - Runloop: maps to `snapshot_id` in devbox creation params
125
+ */
126
+ snapshotId?: string;
91
127
  metadata?: Record<string, any>;
92
128
  envs?: Record<string, string>;
93
129
  name?: string;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import { SeedScriptConfig } from 'daemond';
2
+ export { SeedCommandInput, SeedCommandResult, SeedDaemonInfo, SeedEventFilter, SeedHealthPayload, SeedInvocationResult, SeedScriptConfig, daemonSeedScript, daemonSeedScriptCommand, parseSeedInvocationOutput } from 'daemond';
3
+
1
4
  /**
2
5
  * Universal Sandbox Interface
3
6
  *
@@ -55,6 +58,27 @@ interface RunCommandOptions {
55
58
  env?: Record<string, string>;
56
59
  timeout?: number;
57
60
  background?: boolean;
61
+ /**
62
+ * Daemon-mode callback for streamed stdout chunks.
63
+ *
64
+ * This callback is only invoked when `daemon` mode is enabled and the
65
+ * provider can establish a daemon event stream.
66
+ */
67
+ onStdout?: (data: string) => void;
68
+ /**
69
+ * Daemon-mode callback for streamed stderr chunks.
70
+ *
71
+ * This callback is only invoked when `daemon` mode is enabled and the
72
+ * provider can establish a daemon event stream.
73
+ */
74
+ onStderr?: (data: string) => void;
75
+ /**
76
+ * Optional daemon seed config for providers that support daemonized command execution.
77
+ *
78
+ * - `true`: enable provider default daemon seed behavior
79
+ * - object: enable daemon mode with explicit seed config
80
+ */
81
+ daemon?: boolean | SeedScriptConfig;
58
82
  }
59
83
  /**
60
84
  * Snapshot information
@@ -87,7 +111,19 @@ interface SandboxFileSystem {
87
111
  */
88
112
  interface CreateSandboxOptions$1 {
89
113
  timeout?: number;
114
+ /** Provider-agnostic template/image ID to boot from */
90
115
  templateId?: string;
116
+ /**
117
+ * Snapshot ID to restore from when creating a sandbox.
118
+ *
119
+ * Each provider maps this to its native concept:
120
+ * - E2B: passed directly as the template/image ID
121
+ * - Daytona: sets `createParams.snapshot`
122
+ * - Modal: loads the image via `client.images.fromId(snapshotId)`
123
+ * - CodeSandbox: calls `sdk.sandboxes.resume(snapshotId)`
124
+ * - Runloop: maps to `snapshot_id` in devbox creation params
125
+ */
126
+ snapshotId?: string;
91
127
  metadata?: Record<string, any>;
92
128
  envs?: Record<string, string>;
93
129
  name?: string;
package/dist/index.js CHANGED
@@ -20,9 +20,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- compute: () => compute
23
+ compute: () => compute,
24
+ daemonSeedScript: () => import_daemond.daemonSeedScript,
25
+ daemonSeedScriptCommand: () => import_daemond.daemonSeedScriptCommand,
26
+ parseSeedInvocationOutput: () => import_daemond.parseSeedInvocationOutput
24
27
  });
25
28
  module.exports = __toCommonJS(index_exports);
29
+ var import_daemond = require("daemond");
26
30
 
27
31
  // src/compute.ts
28
32
  function isProviderLike(value) {
@@ -308,6 +312,9 @@ var compute = new Proxy(
308
312
  );
309
313
  // Annotate the CommonJS export names for ESM import in node:
310
314
  0 && (module.exports = {
311
- compute
315
+ compute,
316
+ daemonSeedScript,
317
+ daemonSeedScriptCommand,
318
+ parseSeedInvocationOutput
312
319
  });
313
320
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/compute.ts"],"sourcesContent":["/**\n * ComputeSDK - User-facing SDK\n *\n * Provides the universal Sandbox interface and compute API for executing code\n * in remote sandboxes via configured providers.\n *\n * import { compute } from 'computesdk';\n * import { e2b } from '@computesdk/e2b';\n * import { modal } from '@computesdk/modal';\n *\n * compute.setConfig({\n * providers: [\n * e2b({ apiKey: process.env.E2B_API_KEY }),\n * modal({ tokenId: process.env.MODAL_TOKEN_ID, tokenSecret: process.env.MODAL_TOKEN_SECRET }),\n * ],\n * });\n */\n\n// Universal Sandbox Interface & Types\n//\n// Note: The interface is renamed from \"Sandbox\" to \"SandboxInterface\" on export\n// so provider-agnostic code has a canonical type name to reference.\nexport type {\n Sandbox as SandboxInterface,\n CodeResult,\n CommandResult,\n SandboxInfo,\n Snapshot,\n FileEntry,\n RunCommandOptions,\n SandboxFileSystem,\n CreateSandboxOptions,\n} from './types/universal-sandbox';\n\n// Compute API\n//\n// Works as both callable `compute({...}).sandbox.create()` and singleton\n// `compute.setConfig({...}); compute.sandbox.create()`.\nexport { compute } from './compute';\nexport type { CallableCompute, ExplicitComputeConfig } from './compute';\n","/**\n * Compute API - Direct Provider Implementation\n *\n * `compute` delegates to one or more configured provider instances directly.\n */\n\nimport type {\n Sandbox as SandboxInterface,\n CreateSandboxOptions as UniversalCreateSandboxOptions,\n} from './types/universal-sandbox';\n\nexport interface CreateSandboxOptions extends UniversalCreateSandboxOptions {\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\nexport interface CreateSnapshotOptions {\n name?: string;\n metadata?: Record<string, any>;\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\ninterface ProviderSandboxManager {\n create(options?: CreateSandboxOptions): Promise<SandboxInterface>;\n getById(sandboxId: string): Promise<SandboxInterface | null>;\n list?(): Promise<SandboxInterface[]>;\n destroy(sandboxId: string): Promise<void>;\n}\n\ninterface ProviderSnapshotManager {\n create(sandboxId: string, options?: { name?: string; metadata?: Record<string, any> }): Promise<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>;\n list(): Promise<Array<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>>;\n delete(snapshotId: string): Promise<void>;\n}\n\nexport interface DirectProvider {\n readonly name?: string;\n readonly sandbox: ProviderSandboxManager;\n readonly snapshot?: ProviderSnapshotManager;\n}\n\n/**\n * Explicit compute configuration for callable mode.\n *\n * Use `provider` for single-provider mode or `providers` for multi-provider mode.\n */\nexport interface ExplicitComputeConfig {\n /** Single-provider mode */\n provider?: DirectProvider;\n /** Multi-provider mode (recommended for resilient routing) */\n providers?: DirectProvider[];\n /** Provider selection strategy when no explicit provider is passed */\n providerStrategy?: 'priority' | 'round-robin';\n /** Retry the next provider when create fails */\n fallbackOnError?: boolean;\n}\n\nfunction isProviderLike(value: unknown): value is DirectProvider {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n const sandbox = candidate.sandbox as Record<string, unknown> | undefined;\n return !!(\n sandbox &&\n typeof sandbox.create === 'function' &&\n typeof sandbox.getById === 'function' &&\n typeof sandbox.destroy === 'function'\n );\n}\n\nfunction getProviderLabel(provider: DirectProvider, index: number): string {\n return provider.name || `provider-${index + 1}`;\n}\n\nfunction getSandboxId(sandbox: SandboxInterface): string | undefined {\n if ('sandboxId' in sandbox && typeof sandbox.sandboxId === 'string') {\n return sandbox.sandboxId;\n }\n return undefined;\n}\n\nfunction getProviderErrorDetail(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction resolveProviders(config: ExplicitComputeConfig): DirectProvider[] {\n const candidates: unknown[] = [];\n\n // Primary single-provider entrypoint wins ordering when both are provided.\n if (config.provider) {\n candidates.push(config.provider);\n }\n\n if (Array.isArray(config.providers)) {\n candidates.push(...config.providers);\n }\n\n const providers: DirectProvider[] = [];\n const seen = new Set<DirectProvider>();\n const seenNames = new Set<string>();\n\n for (const candidate of candidates) {\n if (!isProviderLike(candidate)) continue;\n if (seen.has(candidate)) continue;\n\n const name = candidate.name;\n if (name && seenNames.has(name)) continue;\n\n providers.push(candidate);\n seen.add(candidate);\n if (name) {\n seenNames.add(name);\n }\n }\n\n if (providers.length > 0) {\n return providers;\n }\n\n throw new Error(\n 'No provider instance configured.\\n\\n' +\n 'Configure compute with provider instances:\\n\\n' +\n ' compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n ' // or: compute.setConfig({ provider: e2b({...}) })'\n );\n}\n\nclass ComputeManager {\n private providers: DirectProvider[] = [];\n private providerStrategy: 'priority' | 'round-robin' = 'priority';\n private fallbackOnError = true;\n private roundRobinCursor = 0;\n private sandboxProviders = new Map<string, DirectProvider>();\n private snapshotProviders = new Map<string, DirectProvider>();\n\n private getProviders(): DirectProvider[] {\n if (this.providers.length === 0) {\n throw new Error(\n 'No compute provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Configure providers: compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n '2. Configure a single provider: compute.setConfig({ provider: e2b({...}) })\\n' +\n '3. Use provider directly: const sdk = e2b({...}); await sdk.sandbox.create()'\n );\n }\n return this.providers;\n }\n\n private getProviderByName(name: string): DirectProvider {\n const provider = this.getProviders().find((p) => p.name === name);\n if (!provider) {\n const names = this.getProviders().map((p, i) => getProviderLabel(p, i)).join(', ');\n throw new Error(`Provider \"${name}\" is not configured. Configured providers: ${names || '(none)'}.`);\n }\n return provider;\n }\n\n private registerSandboxProvider(sandbox: SandboxInterface, provider: DirectProvider): void {\n const sandboxId = getSandboxId(sandbox);\n if (sandboxId) {\n this.sandboxProviders.set(sandboxId, provider);\n }\n }\n\n private getCreateCandidates(preferredProviderName?: string): DirectProvider[] {\n const providers = this.getProviders();\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n if (providers.length <= 1 || this.providerStrategy === 'priority') {\n return [...providers];\n }\n\n const start = this.roundRobinCursor % providers.length;\n this.roundRobinCursor = (this.roundRobinCursor + 1) % providers.length;\n return [\n ...providers.slice(start),\n ...providers.slice(0, start),\n ];\n }\n\n private getByIdCandidates(sandboxId: string): DirectProvider[] {\n const known = this.sandboxProviders.get(sandboxId);\n if (!known) return this.getProviders();\n const providers = this.getProviders();\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotDeleteCandidates(snapshotId: string): DirectProvider[] {\n const known = this.snapshotProviders.get(snapshotId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n if (!known) return providers;\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotCreateCandidates(sandboxId: string, preferredProviderName?: string): DirectProvider[] {\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n const known = this.sandboxProviders.get(sandboxId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n\n if (known && known.snapshot) {\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n return providers;\n }\n\n private async createWithFallback(options?: CreateSandboxOptions): Promise<SandboxInterface> {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getCreateCandidates(preferredProviderName);\n const canFallback = this.fallbackOnError && !preferredProviderName;\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n const sandbox = await provider.sandbox.create(providerOptions);\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n if (!canFallback) {\n throw error;\n }\n }\n }\n\n throw new Error(\n `Failed to create sandbox across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n }\n\n setConfig(config: ExplicitComputeConfig): void {\n this.providers = resolveProviders(config);\n this.providerStrategy = config.providerStrategy ?? 'priority';\n this.fallbackOnError = config.fallbackOnError ?? true;\n this.roundRobinCursor = 0;\n this.sandboxProviders.clear();\n this.snapshotProviders.clear();\n }\n\n sandbox = {\n create: async (options?: CreateSandboxOptions): Promise<SandboxInterface> => {\n return this.createWithFallback(options);\n },\n\n getById: async (sandboxId: string): Promise<SandboxInterface | null> => {\n for (const provider of this.getByIdCandidates(sandboxId)) {\n const sandbox = await provider.sandbox.getById(sandboxId);\n if (sandbox) {\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n }\n }\n\n this.sandboxProviders.delete(sandboxId);\n return null;\n },\n\n list: async (): Promise<SandboxInterface[]> => {\n const all: SandboxInterface[] = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.sandbox.list) {\n continue;\n }\n\n const sandboxes = await provider.sandbox.list();\n for (const sandbox of sandboxes) {\n this.registerSandboxProvider(sandbox, provider);\n }\n all.push(...sandboxes);\n }\n\n return all;\n },\n\n destroy: async (sandboxId: string): Promise<void> => {\n const candidates = this.getByIdCandidates(sandboxId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n await provider.sandbox.destroy(sandboxId);\n this.sandboxProviders.delete(sandboxId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to destroy sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n\n snapshot = {\n create: async (sandboxId: string, options?: CreateSnapshotOptions): Promise<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> => {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getSnapshotCreateCandidates(sandboxId, preferredProviderName);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) {\n errors.push(`${getProviderLabel(provider, index)}: snapshots not supported`);\n continue;\n }\n\n try {\n const snapshot = await provider.snapshot.create(sandboxId, providerOptions);\n this.snapshotProviders.set(snapshot.id, provider);\n return {\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n };\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to create snapshot for sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n\n list: async (): Promise<Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }>> => {\n const snapshots: Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.snapshot) continue;\n const listed = await provider.snapshot.list();\n for (const snapshot of listed) {\n this.snapshotProviders.set(snapshot.id, provider);\n snapshots.push({\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n });\n }\n }\n\n return snapshots;\n },\n\n delete: async (snapshotId: string): Promise<void> => {\n const candidates = this.getSnapshotDeleteCandidates(snapshotId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) continue;\n try {\n await provider.snapshot.delete(snapshotId);\n this.snapshotProviders.delete(snapshotId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to delete snapshot \"${snapshotId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n}\n\nconst singletonInstance = new ComputeManager();\n\nfunction computeFactory(config: ExplicitComputeConfig): ComputeManager {\n const manager = new ComputeManager();\n manager.setConfig(config);\n return manager;\n}\n\nexport interface CallableCompute extends ComputeManager {\n (config: ExplicitComputeConfig): ComputeManager;\n setConfig(config: ExplicitComputeConfig): void;\n}\n\nexport const compute: CallableCompute = new Proxy(\n computeFactory as any,\n {\n get(_target, prop, _receiver) {\n const singleton = singletonInstance as any;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return value.bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/compute.ts"],"sourcesContent":["/**\n * ComputeSDK - User-facing SDK\n *\n * Provides the universal Sandbox interface and compute API for executing code\n * in remote sandboxes via configured providers.\n *\n * import { compute } from 'computesdk';\n * import { e2b } from '@computesdk/e2b';\n * import { modal } from '@computesdk/modal';\n *\n * compute.setConfig({\n * providers: [\n * e2b({ apiKey: process.env.E2B_API_KEY }),\n * modal({ tokenId: process.env.MODAL_TOKEN_ID, tokenSecret: process.env.MODAL_TOKEN_SECRET }),\n * ],\n * });\n */\n\n// Universal Sandbox Interface & Types\n//\n// Note: The interface is renamed from \"Sandbox\" to \"SandboxInterface\" on export\n// so provider-agnostic code has a canonical type name to reference.\nexport type {\n Sandbox as SandboxInterface,\n CodeResult,\n CommandResult,\n SandboxInfo,\n Snapshot,\n FileEntry,\n RunCommandOptions,\n SandboxFileSystem,\n CreateSandboxOptions,\n} from './types/universal-sandbox';\n\n// Compute API\n//\n// Re-export daemon seed launcher helpers for command-daemon flows\nexport {\n daemonSeedScript,\n daemonSeedScriptCommand,\n parseSeedInvocationOutput,\n} from 'daemond';\nexport type {\n SeedScriptConfig,\n SeedCommandInput,\n SeedCommandResult,\n SeedInvocationResult,\n SeedDaemonInfo,\n SeedHealthPayload,\n SeedEventFilter,\n} from 'daemond';\n\n// Works as both callable `compute({...}).sandbox.create()` and singleton\n// `compute.setConfig({...}); compute.sandbox.create()`.\nexport { compute } from './compute';\nexport type { CallableCompute, ExplicitComputeConfig } from './compute';\n","/**\n * Compute API - Direct Provider Implementation\n *\n * `compute` delegates to one or more configured provider instances directly.\n */\n\nimport type {\n Sandbox as SandboxInterface,\n CreateSandboxOptions as UniversalCreateSandboxOptions,\n} from './types/universal-sandbox';\n\nexport interface CreateSandboxOptions extends UniversalCreateSandboxOptions {\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\nexport interface CreateSnapshotOptions {\n name?: string;\n metadata?: Record<string, any>;\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\ninterface ProviderSandboxManager {\n create(options?: CreateSandboxOptions): Promise<SandboxInterface>;\n getById(sandboxId: string): Promise<SandboxInterface | null>;\n list?(): Promise<SandboxInterface[]>;\n destroy(sandboxId: string): Promise<void>;\n}\n\ninterface ProviderSnapshotManager {\n create(sandboxId: string, options?: { name?: string; metadata?: Record<string, any> }): Promise<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>;\n list(): Promise<Array<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>>;\n delete(snapshotId: string): Promise<void>;\n}\n\nexport interface DirectProvider {\n readonly name?: string;\n readonly sandbox: ProviderSandboxManager;\n readonly snapshot?: ProviderSnapshotManager;\n}\n\n/**\n * Explicit compute configuration for callable mode.\n *\n * Use `provider` for single-provider mode or `providers` for multi-provider mode.\n */\nexport interface ExplicitComputeConfig {\n /** Single-provider mode */\n provider?: DirectProvider;\n /** Multi-provider mode (recommended for resilient routing) */\n providers?: DirectProvider[];\n /** Provider selection strategy when no explicit provider is passed */\n providerStrategy?: 'priority' | 'round-robin';\n /** Retry the next provider when create fails */\n fallbackOnError?: boolean;\n}\n\nfunction isProviderLike(value: unknown): value is DirectProvider {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n const sandbox = candidate.sandbox as Record<string, unknown> | undefined;\n return !!(\n sandbox &&\n typeof sandbox.create === 'function' &&\n typeof sandbox.getById === 'function' &&\n typeof sandbox.destroy === 'function'\n );\n}\n\nfunction getProviderLabel(provider: DirectProvider, index: number): string {\n return provider.name || `provider-${index + 1}`;\n}\n\nfunction getSandboxId(sandbox: SandboxInterface): string | undefined {\n if ('sandboxId' in sandbox && typeof sandbox.sandboxId === 'string') {\n return sandbox.sandboxId;\n }\n return undefined;\n}\n\nfunction getProviderErrorDetail(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction resolveProviders(config: ExplicitComputeConfig): DirectProvider[] {\n const candidates: unknown[] = [];\n\n // Primary single-provider entrypoint wins ordering when both are provided.\n if (config.provider) {\n candidates.push(config.provider);\n }\n\n if (Array.isArray(config.providers)) {\n candidates.push(...config.providers);\n }\n\n const providers: DirectProvider[] = [];\n const seen = new Set<DirectProvider>();\n const seenNames = new Set<string>();\n\n for (const candidate of candidates) {\n if (!isProviderLike(candidate)) continue;\n if (seen.has(candidate)) continue;\n\n const name = candidate.name;\n if (name && seenNames.has(name)) continue;\n\n providers.push(candidate);\n seen.add(candidate);\n if (name) {\n seenNames.add(name);\n }\n }\n\n if (providers.length > 0) {\n return providers;\n }\n\n throw new Error(\n 'No provider instance configured.\\n\\n' +\n 'Configure compute with provider instances:\\n\\n' +\n ' compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n ' // or: compute.setConfig({ provider: e2b({...}) })'\n );\n}\n\nclass ComputeManager {\n private providers: DirectProvider[] = [];\n private providerStrategy: 'priority' | 'round-robin' = 'priority';\n private fallbackOnError = true;\n private roundRobinCursor = 0;\n private sandboxProviders = new Map<string, DirectProvider>();\n private snapshotProviders = new Map<string, DirectProvider>();\n\n private getProviders(): DirectProvider[] {\n if (this.providers.length === 0) {\n throw new Error(\n 'No compute provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Configure providers: compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n '2. Configure a single provider: compute.setConfig({ provider: e2b({...}) })\\n' +\n '3. Use provider directly: const sdk = e2b({...}); await sdk.sandbox.create()'\n );\n }\n return this.providers;\n }\n\n private getProviderByName(name: string): DirectProvider {\n const provider = this.getProviders().find((p) => p.name === name);\n if (!provider) {\n const names = this.getProviders().map((p, i) => getProviderLabel(p, i)).join(', ');\n throw new Error(`Provider \"${name}\" is not configured. Configured providers: ${names || '(none)'}.`);\n }\n return provider;\n }\n\n private registerSandboxProvider(sandbox: SandboxInterface, provider: DirectProvider): void {\n const sandboxId = getSandboxId(sandbox);\n if (sandboxId) {\n this.sandboxProviders.set(sandboxId, provider);\n }\n }\n\n private getCreateCandidates(preferredProviderName?: string): DirectProvider[] {\n const providers = this.getProviders();\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n if (providers.length <= 1 || this.providerStrategy === 'priority') {\n return [...providers];\n }\n\n const start = this.roundRobinCursor % providers.length;\n this.roundRobinCursor = (this.roundRobinCursor + 1) % providers.length;\n return [\n ...providers.slice(start),\n ...providers.slice(0, start),\n ];\n }\n\n private getByIdCandidates(sandboxId: string): DirectProvider[] {\n const known = this.sandboxProviders.get(sandboxId);\n if (!known) return this.getProviders();\n const providers = this.getProviders();\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotDeleteCandidates(snapshotId: string): DirectProvider[] {\n const known = this.snapshotProviders.get(snapshotId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n if (!known) return providers;\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotCreateCandidates(sandboxId: string, preferredProviderName?: string): DirectProvider[] {\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n const known = this.sandboxProviders.get(sandboxId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n\n if (known && known.snapshot) {\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n return providers;\n }\n\n private async createWithFallback(options?: CreateSandboxOptions): Promise<SandboxInterface> {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getCreateCandidates(preferredProviderName);\n const canFallback = this.fallbackOnError && !preferredProviderName;\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n const sandbox = await provider.sandbox.create(providerOptions);\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n if (!canFallback) {\n throw error;\n }\n }\n }\n\n throw new Error(\n `Failed to create sandbox across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n }\n\n setConfig(config: ExplicitComputeConfig): void {\n this.providers = resolveProviders(config);\n this.providerStrategy = config.providerStrategy ?? 'priority';\n this.fallbackOnError = config.fallbackOnError ?? true;\n this.roundRobinCursor = 0;\n this.sandboxProviders.clear();\n this.snapshotProviders.clear();\n }\n\n sandbox = {\n create: async (options?: CreateSandboxOptions): Promise<SandboxInterface> => {\n return this.createWithFallback(options);\n },\n\n getById: async (sandboxId: string): Promise<SandboxInterface | null> => {\n for (const provider of this.getByIdCandidates(sandboxId)) {\n const sandbox = await provider.sandbox.getById(sandboxId);\n if (sandbox) {\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n }\n }\n\n this.sandboxProviders.delete(sandboxId);\n return null;\n },\n\n list: async (): Promise<SandboxInterface[]> => {\n const all: SandboxInterface[] = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.sandbox.list) {\n continue;\n }\n\n const sandboxes = await provider.sandbox.list();\n for (const sandbox of sandboxes) {\n this.registerSandboxProvider(sandbox, provider);\n }\n all.push(...sandboxes);\n }\n\n return all;\n },\n\n destroy: async (sandboxId: string): Promise<void> => {\n const candidates = this.getByIdCandidates(sandboxId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n await provider.sandbox.destroy(sandboxId);\n this.sandboxProviders.delete(sandboxId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to destroy sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n\n snapshot = {\n create: async (sandboxId: string, options?: CreateSnapshotOptions): Promise<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> => {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getSnapshotCreateCandidates(sandboxId, preferredProviderName);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) {\n errors.push(`${getProviderLabel(provider, index)}: snapshots not supported`);\n continue;\n }\n\n try {\n const snapshot = await provider.snapshot.create(sandboxId, providerOptions);\n this.snapshotProviders.set(snapshot.id, provider);\n return {\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n };\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to create snapshot for sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n\n list: async (): Promise<Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }>> => {\n const snapshots: Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.snapshot) continue;\n const listed = await provider.snapshot.list();\n for (const snapshot of listed) {\n this.snapshotProviders.set(snapshot.id, provider);\n snapshots.push({\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n });\n }\n }\n\n return snapshots;\n },\n\n delete: async (snapshotId: string): Promise<void> => {\n const candidates = this.getSnapshotDeleteCandidates(snapshotId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) continue;\n try {\n await provider.snapshot.delete(snapshotId);\n this.snapshotProviders.delete(snapshotId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to delete snapshot \"${snapshotId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n}\n\nconst singletonInstance = new ComputeManager();\n\nfunction computeFactory(config: ExplicitComputeConfig): ComputeManager {\n const manager = new ComputeManager();\n manager.setConfig(config);\n return manager;\n}\n\nexport interface CallableCompute extends ComputeManager {\n (config: ExplicitComputeConfig): ComputeManager;\n setConfig(config: ExplicitComputeConfig): void;\n}\n\nexport const compute: CallableCompute = new Proxy(\n computeFactory as any,\n {\n get(_target, prop, _receiver) {\n const singleton = singletonInstance as any;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return value.bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n"],"mappings":"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","names":[]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,10 @@
1
+ // src/index.ts
2
+ import {
3
+ daemonSeedScript,
4
+ daemonSeedScriptCommand,
5
+ parseSeedInvocationOutput
6
+ } from "daemond";
7
+
1
8
  // src/compute.ts
2
9
  function isProviderLike(value) {
3
10
  if (!value || typeof value !== "object") return false;
@@ -281,6 +288,9 @@ var compute = new Proxy(
281
288
  }
282
289
  );
283
290
  export {
284
- compute
291
+ compute,
292
+ daemonSeedScript,
293
+ daemonSeedScriptCommand,
294
+ parseSeedInvocationOutput
285
295
  };
286
296
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/compute.ts"],"sourcesContent":["/**\n * Compute API - Direct Provider Implementation\n *\n * `compute` delegates to one or more configured provider instances directly.\n */\n\nimport type {\n Sandbox as SandboxInterface,\n CreateSandboxOptions as UniversalCreateSandboxOptions,\n} from './types/universal-sandbox';\n\nexport interface CreateSandboxOptions extends UniversalCreateSandboxOptions {\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\nexport interface CreateSnapshotOptions {\n name?: string;\n metadata?: Record<string, any>;\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\ninterface ProviderSandboxManager {\n create(options?: CreateSandboxOptions): Promise<SandboxInterface>;\n getById(sandboxId: string): Promise<SandboxInterface | null>;\n list?(): Promise<SandboxInterface[]>;\n destroy(sandboxId: string): Promise<void>;\n}\n\ninterface ProviderSnapshotManager {\n create(sandboxId: string, options?: { name?: string; metadata?: Record<string, any> }): Promise<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>;\n list(): Promise<Array<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>>;\n delete(snapshotId: string): Promise<void>;\n}\n\nexport interface DirectProvider {\n readonly name?: string;\n readonly sandbox: ProviderSandboxManager;\n readonly snapshot?: ProviderSnapshotManager;\n}\n\n/**\n * Explicit compute configuration for callable mode.\n *\n * Use `provider` for single-provider mode or `providers` for multi-provider mode.\n */\nexport interface ExplicitComputeConfig {\n /** Single-provider mode */\n provider?: DirectProvider;\n /** Multi-provider mode (recommended for resilient routing) */\n providers?: DirectProvider[];\n /** Provider selection strategy when no explicit provider is passed */\n providerStrategy?: 'priority' | 'round-robin';\n /** Retry the next provider when create fails */\n fallbackOnError?: boolean;\n}\n\nfunction isProviderLike(value: unknown): value is DirectProvider {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n const sandbox = candidate.sandbox as Record<string, unknown> | undefined;\n return !!(\n sandbox &&\n typeof sandbox.create === 'function' &&\n typeof sandbox.getById === 'function' &&\n typeof sandbox.destroy === 'function'\n );\n}\n\nfunction getProviderLabel(provider: DirectProvider, index: number): string {\n return provider.name || `provider-${index + 1}`;\n}\n\nfunction getSandboxId(sandbox: SandboxInterface): string | undefined {\n if ('sandboxId' in sandbox && typeof sandbox.sandboxId === 'string') {\n return sandbox.sandboxId;\n }\n return undefined;\n}\n\nfunction getProviderErrorDetail(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction resolveProviders(config: ExplicitComputeConfig): DirectProvider[] {\n const candidates: unknown[] = [];\n\n // Primary single-provider entrypoint wins ordering when both are provided.\n if (config.provider) {\n candidates.push(config.provider);\n }\n\n if (Array.isArray(config.providers)) {\n candidates.push(...config.providers);\n }\n\n const providers: DirectProvider[] = [];\n const seen = new Set<DirectProvider>();\n const seenNames = new Set<string>();\n\n for (const candidate of candidates) {\n if (!isProviderLike(candidate)) continue;\n if (seen.has(candidate)) continue;\n\n const name = candidate.name;\n if (name && seenNames.has(name)) continue;\n\n providers.push(candidate);\n seen.add(candidate);\n if (name) {\n seenNames.add(name);\n }\n }\n\n if (providers.length > 0) {\n return providers;\n }\n\n throw new Error(\n 'No provider instance configured.\\n\\n' +\n 'Configure compute with provider instances:\\n\\n' +\n ' compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n ' // or: compute.setConfig({ provider: e2b({...}) })'\n );\n}\n\nclass ComputeManager {\n private providers: DirectProvider[] = [];\n private providerStrategy: 'priority' | 'round-robin' = 'priority';\n private fallbackOnError = true;\n private roundRobinCursor = 0;\n private sandboxProviders = new Map<string, DirectProvider>();\n private snapshotProviders = new Map<string, DirectProvider>();\n\n private getProviders(): DirectProvider[] {\n if (this.providers.length === 0) {\n throw new Error(\n 'No compute provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Configure providers: compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n '2. Configure a single provider: compute.setConfig({ provider: e2b({...}) })\\n' +\n '3. Use provider directly: const sdk = e2b({...}); await sdk.sandbox.create()'\n );\n }\n return this.providers;\n }\n\n private getProviderByName(name: string): DirectProvider {\n const provider = this.getProviders().find((p) => p.name === name);\n if (!provider) {\n const names = this.getProviders().map((p, i) => getProviderLabel(p, i)).join(', ');\n throw new Error(`Provider \"${name}\" is not configured. Configured providers: ${names || '(none)'}.`);\n }\n return provider;\n }\n\n private registerSandboxProvider(sandbox: SandboxInterface, provider: DirectProvider): void {\n const sandboxId = getSandboxId(sandbox);\n if (sandboxId) {\n this.sandboxProviders.set(sandboxId, provider);\n }\n }\n\n private getCreateCandidates(preferredProviderName?: string): DirectProvider[] {\n const providers = this.getProviders();\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n if (providers.length <= 1 || this.providerStrategy === 'priority') {\n return [...providers];\n }\n\n const start = this.roundRobinCursor % providers.length;\n this.roundRobinCursor = (this.roundRobinCursor + 1) % providers.length;\n return [\n ...providers.slice(start),\n ...providers.slice(0, start),\n ];\n }\n\n private getByIdCandidates(sandboxId: string): DirectProvider[] {\n const known = this.sandboxProviders.get(sandboxId);\n if (!known) return this.getProviders();\n const providers = this.getProviders();\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotDeleteCandidates(snapshotId: string): DirectProvider[] {\n const known = this.snapshotProviders.get(snapshotId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n if (!known) return providers;\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotCreateCandidates(sandboxId: string, preferredProviderName?: string): DirectProvider[] {\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n const known = this.sandboxProviders.get(sandboxId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n\n if (known && known.snapshot) {\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n return providers;\n }\n\n private async createWithFallback(options?: CreateSandboxOptions): Promise<SandboxInterface> {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getCreateCandidates(preferredProviderName);\n const canFallback = this.fallbackOnError && !preferredProviderName;\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n const sandbox = await provider.sandbox.create(providerOptions);\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n if (!canFallback) {\n throw error;\n }\n }\n }\n\n throw new Error(\n `Failed to create sandbox across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n }\n\n setConfig(config: ExplicitComputeConfig): void {\n this.providers = resolveProviders(config);\n this.providerStrategy = config.providerStrategy ?? 'priority';\n this.fallbackOnError = config.fallbackOnError ?? true;\n this.roundRobinCursor = 0;\n this.sandboxProviders.clear();\n this.snapshotProviders.clear();\n }\n\n sandbox = {\n create: async (options?: CreateSandboxOptions): Promise<SandboxInterface> => {\n return this.createWithFallback(options);\n },\n\n getById: async (sandboxId: string): Promise<SandboxInterface | null> => {\n for (const provider of this.getByIdCandidates(sandboxId)) {\n const sandbox = await provider.sandbox.getById(sandboxId);\n if (sandbox) {\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n }\n }\n\n this.sandboxProviders.delete(sandboxId);\n return null;\n },\n\n list: async (): Promise<SandboxInterface[]> => {\n const all: SandboxInterface[] = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.sandbox.list) {\n continue;\n }\n\n const sandboxes = await provider.sandbox.list();\n for (const sandbox of sandboxes) {\n this.registerSandboxProvider(sandbox, provider);\n }\n all.push(...sandboxes);\n }\n\n return all;\n },\n\n destroy: async (sandboxId: string): Promise<void> => {\n const candidates = this.getByIdCandidates(sandboxId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n await provider.sandbox.destroy(sandboxId);\n this.sandboxProviders.delete(sandboxId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to destroy sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n\n snapshot = {\n create: async (sandboxId: string, options?: CreateSnapshotOptions): Promise<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> => {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getSnapshotCreateCandidates(sandboxId, preferredProviderName);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) {\n errors.push(`${getProviderLabel(provider, index)}: snapshots not supported`);\n continue;\n }\n\n try {\n const snapshot = await provider.snapshot.create(sandboxId, providerOptions);\n this.snapshotProviders.set(snapshot.id, provider);\n return {\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n };\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to create snapshot for sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n\n list: async (): Promise<Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }>> => {\n const snapshots: Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.snapshot) continue;\n const listed = await provider.snapshot.list();\n for (const snapshot of listed) {\n this.snapshotProviders.set(snapshot.id, provider);\n snapshots.push({\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n });\n }\n }\n\n return snapshots;\n },\n\n delete: async (snapshotId: string): Promise<void> => {\n const candidates = this.getSnapshotDeleteCandidates(snapshotId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) continue;\n try {\n await provider.snapshot.delete(snapshotId);\n this.snapshotProviders.delete(snapshotId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to delete snapshot \"${snapshotId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n}\n\nconst singletonInstance = new ComputeManager();\n\nfunction computeFactory(config: ExplicitComputeConfig): ComputeManager {\n const manager = new ComputeManager();\n manager.setConfig(config);\n return manager;\n}\n\nexport interface CallableCompute extends ComputeManager {\n (config: ExplicitComputeConfig): ComputeManager;\n setConfig(config: ExplicitComputeConfig): void;\n}\n\nexport const compute: CallableCompute = new Proxy(\n computeFactory as any,\n {\n get(_target, prop, _receiver) {\n const singleton = singletonInstance as any;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return value.bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/compute.ts"],"sourcesContent":["/**\n * ComputeSDK - User-facing SDK\n *\n * Provides the universal Sandbox interface and compute API for executing code\n * in remote sandboxes via configured providers.\n *\n * import { compute } from 'computesdk';\n * import { e2b } from '@computesdk/e2b';\n * import { modal } from '@computesdk/modal';\n *\n * compute.setConfig({\n * providers: [\n * e2b({ apiKey: process.env.E2B_API_KEY }),\n * modal({ tokenId: process.env.MODAL_TOKEN_ID, tokenSecret: process.env.MODAL_TOKEN_SECRET }),\n * ],\n * });\n */\n\n// Universal Sandbox Interface & Types\n//\n// Note: The interface is renamed from \"Sandbox\" to \"SandboxInterface\" on export\n// so provider-agnostic code has a canonical type name to reference.\nexport type {\n Sandbox as SandboxInterface,\n CodeResult,\n CommandResult,\n SandboxInfo,\n Snapshot,\n FileEntry,\n RunCommandOptions,\n SandboxFileSystem,\n CreateSandboxOptions,\n} from './types/universal-sandbox';\n\n// Compute API\n//\n// Re-export daemon seed launcher helpers for command-daemon flows\nexport {\n daemonSeedScript,\n daemonSeedScriptCommand,\n parseSeedInvocationOutput,\n} from 'daemond';\nexport type {\n SeedScriptConfig,\n SeedCommandInput,\n SeedCommandResult,\n SeedInvocationResult,\n SeedDaemonInfo,\n SeedHealthPayload,\n SeedEventFilter,\n} from 'daemond';\n\n// Works as both callable `compute({...}).sandbox.create()` and singleton\n// `compute.setConfig({...}); compute.sandbox.create()`.\nexport { compute } from './compute';\nexport type { CallableCompute, ExplicitComputeConfig } from './compute';\n","/**\n * Compute API - Direct Provider Implementation\n *\n * `compute` delegates to one or more configured provider instances directly.\n */\n\nimport type {\n Sandbox as SandboxInterface,\n CreateSandboxOptions as UniversalCreateSandboxOptions,\n} from './types/universal-sandbox';\n\nexport interface CreateSandboxOptions extends UniversalCreateSandboxOptions {\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\nexport interface CreateSnapshotOptions {\n name?: string;\n metadata?: Record<string, any>;\n /** Optional provider name override (must match provider.name) */\n provider?: string;\n}\n\ninterface ProviderSandboxManager {\n create(options?: CreateSandboxOptions): Promise<SandboxInterface>;\n getById(sandboxId: string): Promise<SandboxInterface | null>;\n list?(): Promise<SandboxInterface[]>;\n destroy(sandboxId: string): Promise<void>;\n}\n\ninterface ProviderSnapshotManager {\n create(sandboxId: string, options?: { name?: string; metadata?: Record<string, any> }): Promise<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>;\n list(): Promise<Array<{ id: string; provider: string; createdAt: Date | string; metadata?: Record<string, any> }>>;\n delete(snapshotId: string): Promise<void>;\n}\n\nexport interface DirectProvider {\n readonly name?: string;\n readonly sandbox: ProviderSandboxManager;\n readonly snapshot?: ProviderSnapshotManager;\n}\n\n/**\n * Explicit compute configuration for callable mode.\n *\n * Use `provider` for single-provider mode or `providers` for multi-provider mode.\n */\nexport interface ExplicitComputeConfig {\n /** Single-provider mode */\n provider?: DirectProvider;\n /** Multi-provider mode (recommended for resilient routing) */\n providers?: DirectProvider[];\n /** Provider selection strategy when no explicit provider is passed */\n providerStrategy?: 'priority' | 'round-robin';\n /** Retry the next provider when create fails */\n fallbackOnError?: boolean;\n}\n\nfunction isProviderLike(value: unknown): value is DirectProvider {\n if (!value || typeof value !== 'object') return false;\n const candidate = value as Record<string, unknown>;\n const sandbox = candidate.sandbox as Record<string, unknown> | undefined;\n return !!(\n sandbox &&\n typeof sandbox.create === 'function' &&\n typeof sandbox.getById === 'function' &&\n typeof sandbox.destroy === 'function'\n );\n}\n\nfunction getProviderLabel(provider: DirectProvider, index: number): string {\n return provider.name || `provider-${index + 1}`;\n}\n\nfunction getSandboxId(sandbox: SandboxInterface): string | undefined {\n if ('sandboxId' in sandbox && typeof sandbox.sandboxId === 'string') {\n return sandbox.sandboxId;\n }\n return undefined;\n}\n\nfunction getProviderErrorDetail(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n\nfunction resolveProviders(config: ExplicitComputeConfig): DirectProvider[] {\n const candidates: unknown[] = [];\n\n // Primary single-provider entrypoint wins ordering when both are provided.\n if (config.provider) {\n candidates.push(config.provider);\n }\n\n if (Array.isArray(config.providers)) {\n candidates.push(...config.providers);\n }\n\n const providers: DirectProvider[] = [];\n const seen = new Set<DirectProvider>();\n const seenNames = new Set<string>();\n\n for (const candidate of candidates) {\n if (!isProviderLike(candidate)) continue;\n if (seen.has(candidate)) continue;\n\n const name = candidate.name;\n if (name && seenNames.has(name)) continue;\n\n providers.push(candidate);\n seen.add(candidate);\n if (name) {\n seenNames.add(name);\n }\n }\n\n if (providers.length > 0) {\n return providers;\n }\n\n throw new Error(\n 'No provider instance configured.\\n\\n' +\n 'Configure compute with provider instances:\\n\\n' +\n ' compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n ' // or: compute.setConfig({ provider: e2b({...}) })'\n );\n}\n\nclass ComputeManager {\n private providers: DirectProvider[] = [];\n private providerStrategy: 'priority' | 'round-robin' = 'priority';\n private fallbackOnError = true;\n private roundRobinCursor = 0;\n private sandboxProviders = new Map<string, DirectProvider>();\n private snapshotProviders = new Map<string, DirectProvider>();\n\n private getProviders(): DirectProvider[] {\n if (this.providers.length === 0) {\n throw new Error(\n 'No compute provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Configure providers: compute.setConfig({ providers: [e2b({...}), modal({...})] })\\n' +\n '2. Configure a single provider: compute.setConfig({ provider: e2b({...}) })\\n' +\n '3. Use provider directly: const sdk = e2b({...}); await sdk.sandbox.create()'\n );\n }\n return this.providers;\n }\n\n private getProviderByName(name: string): DirectProvider {\n const provider = this.getProviders().find((p) => p.name === name);\n if (!provider) {\n const names = this.getProviders().map((p, i) => getProviderLabel(p, i)).join(', ');\n throw new Error(`Provider \"${name}\" is not configured. Configured providers: ${names || '(none)'}.`);\n }\n return provider;\n }\n\n private registerSandboxProvider(sandbox: SandboxInterface, provider: DirectProvider): void {\n const sandboxId = getSandboxId(sandbox);\n if (sandboxId) {\n this.sandboxProviders.set(sandboxId, provider);\n }\n }\n\n private getCreateCandidates(preferredProviderName?: string): DirectProvider[] {\n const providers = this.getProviders();\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n if (providers.length <= 1 || this.providerStrategy === 'priority') {\n return [...providers];\n }\n\n const start = this.roundRobinCursor % providers.length;\n this.roundRobinCursor = (this.roundRobinCursor + 1) % providers.length;\n return [\n ...providers.slice(start),\n ...providers.slice(0, start),\n ];\n }\n\n private getByIdCandidates(sandboxId: string): DirectProvider[] {\n const known = this.sandboxProviders.get(sandboxId);\n if (!known) return this.getProviders();\n const providers = this.getProviders();\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotDeleteCandidates(snapshotId: string): DirectProvider[] {\n const known = this.snapshotProviders.get(snapshotId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n if (!known) return providers;\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n private getSnapshotCreateCandidates(sandboxId: string, preferredProviderName?: string): DirectProvider[] {\n if (preferredProviderName) {\n return [this.getProviderByName(preferredProviderName)];\n }\n\n const known = this.sandboxProviders.get(sandboxId);\n const providers = this.getProviders().filter((p) => !!p.snapshot);\n\n if (known && known.snapshot) {\n return [known, ...providers.filter((p) => p !== known)];\n }\n\n return providers;\n }\n\n private async createWithFallback(options?: CreateSandboxOptions): Promise<SandboxInterface> {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getCreateCandidates(preferredProviderName);\n const canFallback = this.fallbackOnError && !preferredProviderName;\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n const sandbox = await provider.sandbox.create(providerOptions);\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n if (!canFallback) {\n throw error;\n }\n }\n }\n\n throw new Error(\n `Failed to create sandbox across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n }\n\n setConfig(config: ExplicitComputeConfig): void {\n this.providers = resolveProviders(config);\n this.providerStrategy = config.providerStrategy ?? 'priority';\n this.fallbackOnError = config.fallbackOnError ?? true;\n this.roundRobinCursor = 0;\n this.sandboxProviders.clear();\n this.snapshotProviders.clear();\n }\n\n sandbox = {\n create: async (options?: CreateSandboxOptions): Promise<SandboxInterface> => {\n return this.createWithFallback(options);\n },\n\n getById: async (sandboxId: string): Promise<SandboxInterface | null> => {\n for (const provider of this.getByIdCandidates(sandboxId)) {\n const sandbox = await provider.sandbox.getById(sandboxId);\n if (sandbox) {\n this.registerSandboxProvider(sandbox, provider);\n return sandbox;\n }\n }\n\n this.sandboxProviders.delete(sandboxId);\n return null;\n },\n\n list: async (): Promise<SandboxInterface[]> => {\n const all: SandboxInterface[] = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.sandbox.list) {\n continue;\n }\n\n const sandboxes = await provider.sandbox.list();\n for (const sandbox of sandboxes) {\n this.registerSandboxProvider(sandbox, provider);\n }\n all.push(...sandboxes);\n }\n\n return all;\n },\n\n destroy: async (sandboxId: string): Promise<void> => {\n const candidates = this.getByIdCandidates(sandboxId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n try {\n await provider.sandbox.destroy(sandboxId);\n this.sandboxProviders.delete(sandboxId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to destroy sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n\n snapshot = {\n create: async (sandboxId: string, options?: CreateSnapshotOptions): Promise<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> => {\n const preferredProviderName = options?.provider;\n const { provider: _providerName, ...providerOptions } = options || {};\n const candidates = this.getSnapshotCreateCandidates(sandboxId, preferredProviderName);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) {\n errors.push(`${getProviderLabel(provider, index)}: snapshots not supported`);\n continue;\n }\n\n try {\n const snapshot = await provider.snapshot.create(sandboxId, providerOptions);\n this.snapshotProviders.set(snapshot.id, provider);\n return {\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n };\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to create snapshot for sandbox \"${sandboxId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n\n list: async (): Promise<Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }>> => {\n const snapshots: Array<{ id: string; provider: string; createdAt: Date; metadata?: Record<string, any> }> = [];\n\n for (const provider of this.getProviders()) {\n if (!provider.snapshot) continue;\n const listed = await provider.snapshot.list();\n for (const snapshot of listed) {\n this.snapshotProviders.set(snapshot.id, provider);\n snapshots.push({\n ...snapshot,\n createdAt: new Date(snapshot.createdAt),\n });\n }\n }\n\n return snapshots;\n },\n\n delete: async (snapshotId: string): Promise<void> => {\n const candidates = this.getSnapshotDeleteCandidates(snapshotId);\n const errors: string[] = [];\n\n for (const [index, provider] of candidates.entries()) {\n if (!provider.snapshot) continue;\n try {\n await provider.snapshot.delete(snapshotId);\n this.snapshotProviders.delete(snapshotId);\n return;\n } catch (error) {\n errors.push(`${getProviderLabel(provider, index)}: ${getProviderErrorDetail(error)}`);\n }\n }\n\n throw new Error(\n `Failed to delete snapshot \"${snapshotId}\" across ${candidates.length} provider(s).\\n` +\n errors.map((error) => `- ${error}`).join('\\n')\n );\n },\n };\n}\n\nconst singletonInstance = new ComputeManager();\n\nfunction computeFactory(config: ExplicitComputeConfig): ComputeManager {\n const manager = new ComputeManager();\n manager.setConfig(config);\n return manager;\n}\n\nexport interface CallableCompute extends ComputeManager {\n (config: ExplicitComputeConfig): ComputeManager;\n setConfig(config: ExplicitComputeConfig): void;\n}\n\nexport const compute: CallableCompute = new Proxy(\n computeFactory as any,\n {\n get(_target, prop, _receiver) {\n const singleton = singletonInstance as any;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return value.bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "computesdk",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "A free and open-source toolkit for running other people's code in your applications.",
5
5
  "author": "Garrison",
6
6
  "license": "MIT",
@@ -37,6 +37,7 @@
37
37
  "url": "https://github.com/computesdk/computesdk/issues"
38
38
  },
39
39
  "dependencies": {
40
+ "daemond": "^0.1.3",
40
41
  "@computesdk/cmd": "0.4.1"
41
42
  },
42
43
  "devDependencies": {