{"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":[]}