computesdk 4.1.1 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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// 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":[]}
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 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 +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// 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":[]}
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 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.1.1",
3
+ "version": "4.1.3",
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,8 +37,8 @@
37
37
  "url": "https://github.com/computesdk/computesdk/issues"
38
38
  },
39
39
  "dependencies": {
40
- "daemond": "^0.1.3",
41
- "@computesdk/cmd": "0.4.1"
40
+ "@computesdk/cmd": "0.4.1",
41
+ "daemond": "0.1.4"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/node": "^20.0.0",