computesdk 4.0.0 → 4.1.1
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 +1 -45
- package/dist/index.d.mts +22 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
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/
|
|
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,5 @@
|
|
|
1
|
+
export { SeedCommandInput, SeedCommandResult, SeedDaemonInfo, SeedEventFilter, SeedHealthPayload, SeedInvocationResult, SeedScriptConfig, daemonSeedScript, daemonSeedScriptCommand, parseSeedInvocationOutput } from 'daemond';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Universal Sandbox Interface
|
|
3
5
|
*
|
|
@@ -55,6 +57,14 @@ interface RunCommandOptions {
|
|
|
55
57
|
env?: Record<string, string>;
|
|
56
58
|
timeout?: number;
|
|
57
59
|
background?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Callback for streamed stdout chunks when supported by the provider.
|
|
62
|
+
*/
|
|
63
|
+
onStdout?: (data: string) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Callback for streamed stderr chunks when supported by the provider.
|
|
66
|
+
*/
|
|
67
|
+
onStderr?: (data: string) => void;
|
|
58
68
|
}
|
|
59
69
|
/**
|
|
60
70
|
* Snapshot information
|
|
@@ -87,7 +97,19 @@ interface SandboxFileSystem {
|
|
|
87
97
|
*/
|
|
88
98
|
interface CreateSandboxOptions$1 {
|
|
89
99
|
timeout?: number;
|
|
100
|
+
/** Provider-agnostic template/image ID to boot from */
|
|
90
101
|
templateId?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Snapshot ID to restore from when creating a sandbox.
|
|
104
|
+
*
|
|
105
|
+
* Each provider maps this to its native concept:
|
|
106
|
+
* - E2B: passed directly as the template/image ID
|
|
107
|
+
* - Daytona: sets `createParams.snapshot`
|
|
108
|
+
* - Modal: loads the image via `client.images.fromId(snapshotId)`
|
|
109
|
+
* - CodeSandbox: calls `sdk.sandboxes.resume(snapshotId)`
|
|
110
|
+
* - Runloop: maps to `snapshot_id` in devbox creation params
|
|
111
|
+
*/
|
|
112
|
+
snapshotId?: string;
|
|
91
113
|
metadata?: Record<string, any>;
|
|
92
114
|
envs?: Record<string, string>;
|
|
93
115
|
name?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export { SeedCommandInput, SeedCommandResult, SeedDaemonInfo, SeedEventFilter, SeedHealthPayload, SeedInvocationResult, SeedScriptConfig, daemonSeedScript, daemonSeedScriptCommand, parseSeedInvocationOutput } from 'daemond';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Universal Sandbox Interface
|
|
3
5
|
*
|
|
@@ -55,6 +57,14 @@ interface RunCommandOptions {
|
|
|
55
57
|
env?: Record<string, string>;
|
|
56
58
|
timeout?: number;
|
|
57
59
|
background?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Callback for streamed stdout chunks when supported by the provider.
|
|
62
|
+
*/
|
|
63
|
+
onStdout?: (data: string) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Callback for streamed stderr chunks when supported by the provider.
|
|
66
|
+
*/
|
|
67
|
+
onStderr?: (data: string) => void;
|
|
58
68
|
}
|
|
59
69
|
/**
|
|
60
70
|
* Snapshot information
|
|
@@ -87,7 +97,19 @@ interface SandboxFileSystem {
|
|
|
87
97
|
*/
|
|
88
98
|
interface CreateSandboxOptions$1 {
|
|
89
99
|
timeout?: number;
|
|
100
|
+
/** Provider-agnostic template/image ID to boot from */
|
|
90
101
|
templateId?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Snapshot ID to restore from when creating a sandbox.
|
|
104
|
+
*
|
|
105
|
+
* Each provider maps this to its native concept:
|
|
106
|
+
* - E2B: passed directly as the template/image ID
|
|
107
|
+
* - Daytona: sets `createParams.snapshot`
|
|
108
|
+
* - Modal: loads the image via `client.images.fromId(snapshotId)`
|
|
109
|
+
* - CodeSandbox: calls `sdk.sandboxes.resume(snapshotId)`
|
|
110
|
+
* - Runloop: maps to `snapshot_id` in devbox creation params
|
|
111
|
+
*/
|
|
112
|
+
snapshotId?: string;
|
|
91
113
|
metadata?: Record<string, any>;
|
|
92
114
|
envs?: Record<string, string>;
|
|
93
115
|
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
|
package/dist/index.mjs.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "4.1.1",
|
|
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": {
|