computesdk 1.9.6 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +53 -1
- package/dist/index.d.ts +53 -1
- package/dist/index.js +229 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +229 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/sandbox.ts","../src/provider-config.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.ts","../src/explicit-config.ts","../src/compute.ts","../src/request-handler.ts"],"sourcesContent":["/**\n * ComputeSDK Core\n *\n * Clean Provider/Sandbox separation architecture with extensible compute.* API\n *\n * Zero-Config Mode (Gateway):\n * Set COMPUTESDK_API_KEY and provider credentials (e.g., E2B_API_KEY)\n * No explicit configuration needed - auto-detects from environment\n *\n * Explicit Mode:\n * Call compute.setConfig({ defaultProvider }) or use createCompute()\n *\n * Callable Mode:\n * compute({ provider: 'e2b', apiKey: '...', e2b: { apiKey: '...' } })\n * Always uses gateway mode, returns new instance\n */\n\n// Export all types\nexport * from './types';\n\n// Export compute singleton/callable - the main API\n// Works as both: compute.sandbox.create() and compute({...}).sandbox.create()\nexport { compute, createCompute } from './compute';\n\n// Export explicit config helper (for advanced usage)\nexport { createProviderFromConfig } from './explicit-config';\n\n// Export gateway provider - built-in provider for gateway mode\nexport { gateway, type GatewayConfig } from './providers/gateway';\n\n// Export auto-detection utilities (for advanced usage)\nexport {\n isGatewayModeEnabled,\n detectProvider,\n getProviderHeaders,\n autoConfigureCompute\n} from './auto-detect';\n\n// Export constants and provider config utilities\nexport {\n GATEWAY_URL,\n PROVIDER_PRIORITY,\n PROVIDER_ENV_VARS,\n PROVIDER_AUTH,\n PROVIDER_NAMES,\n PROVIDER_HEADERS,\n PROVIDER_ENV_MAP,\n PROVIDER_DASHBOARD_URLS,\n type ProviderName,\n isValidProvider,\n buildProviderHeaders,\n getProviderConfigFromEnv,\n isProviderAuthComplete,\n getMissingEnvVars,\n} from './constants';\n\n// Export utilities\nexport { calculateBackoff } from './utils';\n\n// Export request handler for web framework integration\nexport { handleComputeRequest } from './request-handler';\n\n// Export compute request/response types\nexport type {\n ComputeRequest,\n ComputeResponse,\n HandleComputeRequestParams\n} from './request-handler';\n\n// Export provider factory for creating custom providers\nexport { createProvider } from './factory';\nexport type { ProviderConfig, SandboxMethods, TemplateMethods, SnapshotMethods, BaseProviderConfig, ProviderMode } from './factory';\n\n// Export error handling utilities (explicitly for clarity)\nexport { CommandExitError, isCommandExitError } from './types/sandbox';\n\n// Test suite is available separately via @computesdk/test-utils package\n","/**\n * Sandbox Types\n *\n * Types related to sandbox execution, filesystem, terminal operations\n *\n * Key types:\n * - Sandbox: The full-featured sandbox from @computesdk/client (terminals, watchers, signals)\n * - ProviderSandbox: Base interface that provider implementations return (e2b, railway, etc.)\n */\n\n// Re-export the full Sandbox from @computesdk/client\n// This is THE Sandbox that users interact with\nexport { Sandbox, type SandboxConfig } from '@computesdk/client';\n\n// Re-export execution result types from @computesdk/client\n// These are the canonical types for code and command execution\nexport {\n type CodeResult,\n type CommandResult,\n type CodeLanguage,\n type CodeRunOptions,\n type CommandRunOptions,\n} from '@computesdk/client';\n\n// Re-export shared types from @computesdk/client (canonical source)\nexport {\n type Runtime,\n type SandboxStatus,\n type RunCommandOptions,\n type CreateSandboxOptions,\n type FileEntry,\n type SandboxFileSystem,\n CommandExitError,\n isCommandExitError,\n} from '@computesdk/client';\n\n// Import ProviderSandboxInfo and re-export as SandboxInfo for backwards compatibility\nimport type { ProviderSandboxInfo } from '@computesdk/client';\n\n/**\n * Information about a sandbox (provider-agnostic)\n * @see ProviderSandboxInfo in @computesdk/client for the canonical definition\n */\nexport type SandboxInfo = ProviderSandboxInfo;\n\n// Import for use within this file\nimport type { CodeResult, CommandResult, Runtime, SandboxFileSystem, RunCommandOptions } from '@computesdk/client';\n\n// Import Provider type - TypeScript handles circular type dependencies fine\nimport type { Provider } from './provider';\n\n// ============================================================================\n// Provider Sandbox - Base interface for provider implementations\n// ============================================================================\n\n/**\n * Provider sandbox interface - what external providers (e2b, railway, etc.) return\n *\n * This is the base interface that all provider sandboxes must implement.\n * The gateway provider returns the full Sandbox from @computesdk/client which\n * extends this with ComputeClient features (terminals, watchers, signals).\n *\n * @example Provider implementation\n * ```typescript\n * // In @computesdk/e2b\n * const e2bProvider = createProvider<E2BSandbox, E2BConfig>({\n * name: 'e2b',\n * methods: {\n * sandbox: {\n * create: async (config, options) => {\n * const sandbox = await E2BSandbox.create({ ... });\n * return { sandbox, sandboxId: sandbox.id };\n * },\n * // ... other methods\n * }\n * }\n * });\n * ```\n */\nexport interface ProviderSandbox<TSandbox = any> {\n /** Unique identifier for the sandbox */\n readonly sandboxId: string;\n /** Provider that created this sandbox */\n readonly provider: string;\n\n /** Execute code in the sandbox */\n runCode(code: string, runtime?: Runtime): Promise<CodeResult>;\n /** Execute shell commands */\n runCommand(\n commandOrArray: string | [string, ...string[]],\n argsOrOptions?: string[] | RunCommandOptions,\n maybeOptions?: RunCommandOptions\n ): Promise<CommandResult>;\n /** Get information about the sandbox */\n getInfo(): Promise<SandboxInfo>;\n /** Get URL for accessing the sandbox on a specific port */\n getUrl(options: { port: number; protocol?: string }): Promise<string>;\n /** Get the provider instance that created this sandbox */\n getProvider(): import('./provider').Provider<TSandbox>;\n /** Get the native provider sandbox instance with proper typing */\n getInstance(): TSandbox;\n /** Kill the sandbox */\n kill(): Promise<void>;\n /** Destroy the sandbox and clean up resources */\n destroy(): Promise<void>;\n\n /** File system operations */\n readonly filesystem: SandboxFileSystem;\n\n // ============================================================================\n // Enhanced Features (Optional - available on gateway provider's Sandbox)\n // ============================================================================\n\n /**\n * Create an interactive terminal (PTY or exec mode)\n * @optional Available when using gateway provider\n */\n createTerminal?(options?: {\n shell?: string;\n pty?: boolean;\n encoding?: 'utf8' | 'binary';\n }): Promise<any>;\n\n /**\n * Create a file system watcher\n * @optional Available when using gateway provider\n */\n createWatcher?(path: string, options?: {\n recursive?: boolean;\n includeContent?: boolean;\n }): Promise<any>;\n\n /**\n * Send a signal to a process\n * @optional Available when using gateway provider\n */\n sendSignal?(pid: number, signal: string): Promise<void>;\n}\n\n// ============================================================================\n// Typed Variants\n// ============================================================================\n\n/**\n * Extract the sandbox type from a provider using generic inference\n */\nexport type ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox, any, any> ? TSandbox : any;\n\n/**\n * Typed provider sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedProviderSandbox<TProvider extends Provider<any, any, any>> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {\n /** Get the provider instance that created this sandbox with proper typing */\n getProvider(): TProvider;\n /** Get the native provider sandbox instance with proper typing */\n getInstance(): ExtractProviderSandboxType<TProvider>;\n}\n","/**\n * Unified Provider Configuration\n *\n * Single source of truth for all provider auth requirements.\n * Used by both explicit mode (computesdk) and magic mode (workbench).\n */\n\n/**\n * Provider auth requirements\n *\n * Structure: { provider: [[option1_vars], [option2_vars], ...] }\n * - Outer array: OR conditions (any option can satisfy auth)\n * - Inner arrays: AND conditions (all vars in option must be present)\n *\n * Example: vercel: [['OIDC_TOKEN'], ['TOKEN', 'TEAM_ID', 'PROJECT_ID']]\n * -> Ready if OIDC_TOKEN is set, OR if all three traditional vars are set\n */\nexport const PROVIDER_AUTH = {\n e2b: [['E2B_API_KEY']],\n modal: [['MODAL_TOKEN_ID', 'MODAL_TOKEN_SECRET']],\n railway: [['RAILWAY_API_KEY', 'RAILWAY_PROJECT_ID', 'RAILWAY_ENVIRONMENT_ID']],\n daytona: [['DAYTONA_API_KEY']],\n vercel: [\n ['VERCEL_OIDC_TOKEN'],\n ['VERCEL_TOKEN', 'VERCEL_TEAM_ID', 'VERCEL_PROJECT_ID'],\n ],\n runloop: [['RUNLOOP_API_KEY']],\n cloudflare: [['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID']],\n codesandbox: [['CSB_API_KEY']],\n blaxel: [['BL_API_KEY', 'BL_WORKSPACE']],\n} as const;\n\n/**\n * All supported provider names (excluding gateway which is special)\n */\nexport const PROVIDER_NAMES = Object.keys(PROVIDER_AUTH) as ProviderName[];\n\n/**\n * Provider name type derived from PROVIDER_AUTH\n */\nexport type ProviderName = keyof typeof PROVIDER_AUTH;\n\n/**\n * Header mapping for each provider\n * Maps config field names to HTTP header names\n */\nexport const PROVIDER_HEADERS: Record<ProviderName, Record<string, string>> = {\n e2b: {\n apiKey: 'X-E2B-API-Key',\n },\n modal: {\n tokenId: 'X-Modal-Token-Id',\n tokenSecret: 'X-Modal-Token-Secret',\n },\n railway: {\n apiToken: 'X-Railway-API-Token',\n },\n daytona: {\n apiKey: 'X-Daytona-API-Key',\n },\n vercel: {\n oidcToken: 'X-Vercel-OIDC-Token',\n token: 'X-Vercel-Token',\n teamId: 'X-Vercel-Team-Id',\n projectId: 'X-Vercel-Project-Id',\n },\n runloop: {\n apiKey: 'X-Runloop-API-Key',\n },\n cloudflare: {\n apiToken: 'X-Cloudflare-API-Token',\n accountId: 'X-Cloudflare-Account-Id',\n },\n codesandbox: {\n apiKey: 'X-CSB-API-Key',\n },\n blaxel: {\n apiKey: 'X-BL-API-Key',\n workspace: 'X-BL-Workspace',\n },\n};\n\n/**\n * Environment variable to config field mapping for each provider\n */\nexport const PROVIDER_ENV_MAP: Record<ProviderName, Record<string, string>> = {\n e2b: {\n E2B_API_KEY: 'apiKey',\n },\n modal: {\n MODAL_TOKEN_ID: 'tokenId',\n MODAL_TOKEN_SECRET: 'tokenSecret',\n },\n railway: {\n RAILWAY_API_KEY: 'apiToken',\n RAILWAY_PROJECT_ID: 'projectId',\n RAILWAY_ENVIRONMENT_ID: 'environmentId',\n },\n daytona: {\n DAYTONA_API_KEY: 'apiKey',\n },\n vercel: {\n VERCEL_OIDC_TOKEN: 'oidcToken',\n VERCEL_TOKEN: 'token',\n VERCEL_TEAM_ID: 'teamId',\n VERCEL_PROJECT_ID: 'projectId',\n },\n runloop: {\n RUNLOOP_API_KEY: 'apiKey',\n },\n cloudflare: {\n CLOUDFLARE_API_TOKEN: 'apiToken',\n CLOUDFLARE_ACCOUNT_ID: 'accountId',\n },\n codesandbox: {\n CSB_API_KEY: 'apiKey',\n },\n blaxel: {\n BL_API_KEY: 'apiKey',\n BL_WORKSPACE: 'workspace',\n },\n};\n\n/**\n * Dashboard URLs for each provider (for error messages)\n */\nexport const PROVIDER_DASHBOARD_URLS: Record<ProviderName, string> = {\n e2b: 'https://e2b.dev/dashboard',\n modal: 'https://modal.com/settings',\n railway: 'https://railway.app/account/tokens',\n daytona: 'https://daytona.io/dashboard',\n vercel: 'https://vercel.com/account/tokens',\n runloop: 'https://runloop.ai/dashboard',\n cloudflare: 'https://dash.cloudflare.com/profile/api-tokens',\n codesandbox: 'https://codesandbox.io/dashboard/settings',\n blaxel: 'https://blaxel.ai/dashboard',\n};\n\n/**\n * Check if a provider name is valid\n */\nexport function isValidProvider(name: string): name is ProviderName {\n return name in PROVIDER_AUTH;\n}\n\n/**\n * Build headers from provider config\n */\nexport function buildProviderHeaders(\n provider: ProviderName,\n config: Record<string, string | undefined>\n): Record<string, string> {\n const headers: Record<string, string> = {};\n const headerMap = PROVIDER_HEADERS[provider];\n\n for (const [configKey, headerName] of Object.entries(headerMap)) {\n const value = config[configKey];\n if (value) {\n headers[headerName] = value;\n }\n }\n\n return headers;\n}\n\n/**\n * Get provider config from environment variables\n */\nexport function getProviderConfigFromEnv(provider: ProviderName): Record<string, string> {\n const config: Record<string, string> = {};\n const envMap = PROVIDER_ENV_MAP[provider];\n\n for (const [envVar, configKey] of Object.entries(envMap)) {\n const value = process.env[envVar];\n if (value) {\n config[configKey] = value;\n }\n }\n\n return config;\n}\n\n/**\n * Check if provider has complete auth from environment\n */\nexport function isProviderAuthComplete(provider: ProviderName): boolean {\n const authOptions = PROVIDER_AUTH[provider];\n\n for (const option of authOptions) {\n const allPresent = option.every(envVar => !!process.env[envVar]);\n if (allPresent) return true;\n }\n\n return false;\n}\n\n/**\n * Get missing env vars for a provider (returns the option closest to completion)\n */\nexport function getMissingEnvVars(provider: ProviderName): string[] {\n const authOptions = PROVIDER_AUTH[provider];\n let bestOption: { presentCount: number; missing: string[] } | null = null;\n\n for (const option of authOptions) {\n const missing: string[] = [];\n let presentCount = 0;\n\n for (const envVar of option) {\n if (process.env[envVar]) {\n presentCount++;\n } else {\n missing.push(envVar);\n }\n }\n\n if (missing.length === 0) return [];\n\n if (!bestOption || presentCount > bestOption.presentCount) {\n bestOption = { presentCount, missing };\n }\n }\n\n return bestOption?.missing ?? [];\n}\n","/**\n * ComputeSDK Constants\n *\n * Default configuration values and provider definitions\n */\n\n// Re-export provider config as the single source of truth\nexport {\n PROVIDER_AUTH,\n PROVIDER_NAMES,\n PROVIDER_HEADERS,\n PROVIDER_ENV_MAP,\n PROVIDER_DASHBOARD_URLS,\n type ProviderName,\n isValidProvider,\n buildProviderHeaders,\n getProviderConfigFromEnv,\n isProviderAuthComplete,\n getMissingEnvVars,\n} from './provider-config';\n\n/**\n * Default gateway URL for sandbox lifecycle operations\n */\nexport const GATEWAY_URL = 'https://gateway.computesdk.com';\n\n/**\n * Provider detection priority order\n * When multiple provider credentials are detected, use the first one in this list\n */\nexport const PROVIDER_PRIORITY = [\n 'e2b',\n 'railway',\n 'daytona',\n 'modal',\n 'runloop',\n 'vercel',\n 'cloudflare',\n 'codesandbox',\n 'blaxel',\n] as const;\n\n/**\n * Required environment variables for each provider\n * @deprecated Use PROVIDER_AUTH from provider-config instead\n */\nexport const PROVIDER_ENV_VARS = {\n e2b: ['E2B_API_KEY'],\n railway: ['RAILWAY_API_KEY', 'RAILWAY_PROJECT_ID', 'RAILWAY_ENVIRONMENT_ID'],\n daytona: ['DAYTONA_API_KEY'],\n modal: ['MODAL_TOKEN_ID', 'MODAL_TOKEN_SECRET'],\n runloop: ['RUNLOOP_API_KEY'],\n vercel: ['VERCEL_TOKEN', 'VERCEL_TEAM_ID', 'VERCEL_PROJECT_ID'],\n cloudflare: ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID'],\n codesandbox: ['CSB_API_KEY'],\n blaxel: ['BL_API_KEY', 'BL_WORKSPACE'],\n} as const;\n","/**\n * Gateway Provider\n *\n * Built-in provider that communicates with the ComputeSDK gateway for sandbox lifecycle\n * and uses ClientSandbox (from @computesdk/client) for all sandbox operations.\n *\n * Architecture:\n * - Lifecycle operations (create/destroy) → Gateway API\n * - Sandbox operations → ClientSandbox directly\n */\n\nimport { Sandbox as ClientSandbox } from '@computesdk/client';\nimport { createProvider, type BaseProviderConfig } from '../factory';\nimport { waitForComputeReady } from '../compute-daemon/lifecycle';\nimport type { Runtime, SandboxInfo } from '../types';\nimport { calculateBackoff } from '../utils';\n\n/**\n * Gateway provider configuration\n */\nexport interface GatewayConfig extends BaseProviderConfig {\n /** Gateway URL (default: https://gateway.computesdk.com) */\n gatewayUrl?: string;\n /** ComputeSDK API key for authentication */\n apiKey: string;\n /** Backend provider name (e2b, railway, etc.) */\n provider: string;\n /** Provider-specific headers to pass through to gateway */\n providerHeaders?: Record<string, string>;\n /** Request timeout in milliseconds (default: 30000) */\n requestTimeout?: number;\n /** Maximum retry attempts for transient failures (default: 3) */\n maxRetries?: number;\n /** Initial retry delay in milliseconds (default: 1000) */\n retryDelay?: number;\n /** HTTP status codes that should trigger a retry (default: [408, 429, 502, 503, 504]) */\n retryableStatuses?: number[];\n}\n\nconst DEFAULT_GATEWAY_URL = 'https://gateway.computesdk.com';\nconst DEFAULT_REQUEST_TIMEOUT = 30000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\nconst DEFAULT_RETRYABLE_STATUSES = [408, 429, 502, 503, 504];\n\n// Track if we've already warned about missing tokens to avoid spam\nlet hasWarnedAboutMissingToken = false;\n\n/**\n * Custom error class for gateway-specific errors with enhanced context\n */\nexport class GatewayError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly provider?: string,\n public readonly sandboxId?: string,\n public readonly requestId?: string\n ) {\n super(message);\n this.name = 'GatewayError';\n }\n}\n\n/**\n * Helper to call gateway API with timeout, retry logic, and better error handling\n * \n * Error handling strategy:\n * - 404 (Not Found): Returns { success: false } without throwing - allows callers to handle missing resources gracefully\n * - Other HTTP errors: Throws GatewayError with detailed context - indicates actual API problems\n * - Network errors: Throws GatewayError after retries exhausted\n */\nasync function gatewayFetch<T>(\n url: string,\n config: GatewayConfig,\n options: RequestInit = {}\n): Promise<{ success: boolean; data?: T }> {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;\n const maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;\n const retryDelay = config.retryDelay ?? DEFAULT_RETRY_DELAY;\n const retryableStatuses = config.retryableStatuses ?? DEFAULT_RETRYABLE_STATUSES;\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const startTime = Date.now();\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n headers: {\n 'Content-Type': 'application/json',\n 'X-ComputeSDK-API-Key': config.apiKey,\n 'X-Provider': config.provider,\n ...(config.providerHeaders || {}),\n ...options.headers,\n },\n });\n\n clearTimeout(timeoutId);\n const duration = Date.now() - startTime;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] ${options.method || 'GET'} ${url} - ${response.status} (${duration}ms)`);\n }\n\n if (!response.ok) {\n if (response.status === 404) {\n return { success: false };\n }\n\n const errorText = await response.text().catch(() => response.statusText);\n const requestId = response.headers.get('x-request-id');\n\n // Check if this error is retryable\n const isRetryable = retryableStatuses.includes(response.status);\n const shouldRetry = isRetryable && attempt < maxRetries;\n\n if (shouldRetry) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (status: ${response.status})...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // Build helpful error message\n let errorMessage = `Gateway API error: ${errorText}`;\n if (response.status === 401) {\n errorMessage = `Invalid ComputeSDK API key.\\n\\nCheck your COMPUTESDK_API_KEY environment variable.\\nGet your key at: https://computesdk.com/dashboard`;\n } else if (response.status === 403) {\n errorMessage = `Access forbidden. Your API key may not have permission to use provider \"${config.provider}\".\\n\\nVisit https://computesdk.com/dashboard to check your plan.`;\n } else if (response.status === 429) {\n errorMessage = `Rate limit exceeded. Please try again in a moment.\\n\\nIf this persists, visit https://computesdk.com/dashboard to upgrade your plan.`;\n } else if (response.status >= 500) {\n errorMessage = `Gateway server error (${response.status}). This is temporary - please try again.\\n\\nIf this persists, check status at https://status.computesdk.com`;\n }\n\n throw new GatewayError(\n errorMessage,\n response.status,\n config.provider,\n undefined,\n requestId || undefined\n );\n }\n\n return response.json();\n } catch (error) {\n clearTimeout(timeoutId);\n\n // If it's already a GatewayError, just rethrow\n if (error instanceof GatewayError) {\n lastError = error;\n throw error;\n }\n\n // Handle timeout errors\n if (error instanceof Error && error.name === 'AbortError') {\n const timeoutError = new GatewayError(\n `Request timed out after ${timeout}ms.\\n\\nThe gateway may be experiencing high load or network issues.\\nCheck your connection and try again.`,\n 408,\n config.provider\n );\n\n // Retry on timeout if attempts remain\n if (attempt < maxRetries) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (timeout)...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n lastError = timeoutError;\n continue;\n }\n\n throw timeoutError;\n }\n\n // Handle network errors\n const networkError = new GatewayError(\n `Failed to connect to gateway: ${error instanceof Error ? error.message : String(error)}\\n\\nCheck your internet connection and gateway URL.`,\n 0,\n config.provider\n );\n\n // Retry on network error if attempts remain\n if (attempt < maxRetries) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (network error)...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n lastError = networkError;\n continue;\n }\n\n throw networkError;\n }\n }\n\n // If we get here, all retries failed\n throw lastError || new Error('Max retries exceeded');\n}\n\n/**\n * Gateway Provider factory\n *\n * Uses ClientSandbox directly as the sandbox type - no wrapper needed.\n */\nexport const gateway = createProvider<ClientSandbox, GatewayConfig>({\n name: 'gateway',\n methods: {\n sandbox: {\n create: async (config, options) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n const result = await gatewayFetch<{\n sandboxId: string;\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n }>(`${gatewayUrl}/v1/sandbox`, config, {\n method: 'POST',\n body: JSON.stringify(options || {}),\n });\n\n if (!result.success || !result.data) {\n throw new Error(`Gateway returned invalid response: ${JSON.stringify(result)}`);\n }\n\n const { sandboxId, url, token, provider, metadata } = result.data;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Sandbox created:`, {\n sandboxId,\n url,\n hasToken: !!token,\n tokenPrefix: token ? token.substring(0, 10) + '...' : 'none',\n provider,\n });\n }\n\n // Warn if token is missing (indicates gateway may be running old version)\n // Only warn once to avoid log spam\n if (!token && !hasWarnedAboutMissingToken) {\n hasWarnedAboutMissingToken = true;\n console.warn(\n `[Gateway] No token received from gateway for sandbox ${sandboxId}. ` +\n `Falling back to API key for authentication. ` +\n `This may indicate the gateway is running an outdated version. ` +\n `Check gateway deployment at ${config.gatewayUrl || DEFAULT_GATEWAY_URL}`\n );\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey, // Use token from gateway, fallback to API key\n metadata,\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n getById: async (config, sandboxId) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n const result = await gatewayFetch<{\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n }>(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config);\n\n if (!result.success || !result.data) {\n return null;\n }\n\n const { url, token, provider, metadata } = result.data;\n\n // Warn if token is missing on reconnection\n // Only warn once to avoid log spam\n if (!token && !hasWarnedAboutMissingToken) {\n hasWarnedAboutMissingToken = true;\n console.warn(\n `[Gateway] No token received when reconnecting to sandbox ${sandboxId}. ` +\n `Falling back to API key for authentication. ` +\n `This may indicate the gateway is running an outdated version.`\n );\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey, // Use token from gateway, fallback to API key\n metadata,\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n list: async () => {\n throw new Error(\n 'Gateway provider does not support listing sandboxes. Use getById() with a known sandbox ID instead.'\n );\n },\n\n destroy: async (config, sandboxId) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n await gatewayFetch(`${gatewayUrl}/v1/sandbox/${sandboxId}`, config, {\n method: 'DELETE',\n });\n },\n\n // All operations delegate directly to ClientSandbox\n runCode: async (sandbox, code, runtime) => sandbox.runCode(code, runtime),\n runCommand: async (sandbox, command, args) => sandbox.runCommand(command, args),\n getUrl: async (sandbox, options) => sandbox.getUrl(options),\n\n getInfo: async (sandbox): Promise<SandboxInfo> => {\n const info = await sandbox.getInfo();\n return {\n id: info.id,\n provider: info.provider,\n runtime: info.runtime as Runtime,\n status: info.status,\n createdAt: info.createdAt,\n timeout: info.timeout,\n metadata: info.metadata || {},\n };\n },\n\n // Filesystem delegates directly to ClientSandbox\n filesystem: {\n readFile: async (sandbox, path) => sandbox.filesystem.readFile(path),\n writeFile: async (sandbox, path, content) => sandbox.filesystem.writeFile(path, content),\n mkdir: async (sandbox, path) => sandbox.filesystem.mkdir(path),\n readdir: async (sandbox, path) => sandbox.filesystem.readdir(path),\n exists: async (sandbox, path) => sandbox.filesystem.exists(path),\n remove: async (sandbox, path) => sandbox.filesystem.remove(path),\n },\n\n // getInstance returns the ClientSandbox directly\n getInstance: (sandbox) => sandbox,\n },\n },\n});\n\n// Re-export Sandbox type for users who want direct client access\nexport { Sandbox } from '@computesdk/client';\n","/**\n * Provider Factory - Creates providers from method definitions\n * \n * Eliminates boilerplate by auto-generating Provider/Sandbox classes\n * from simple method definitions with automatic feature detection.\n */\n\nimport type {\n Provider,\n ProviderSandboxManager,\n ProviderTemplateManager,\n ProviderSnapshotManager,\n ProviderSandbox,\n SandboxFileSystem,\n SandboxInfo,\n CodeResult,\n CommandResult,\n Runtime,\n CreateSandboxOptions,\n FileEntry,\n RunCommandOptions,\n CreateSnapshotOptions,\n ListSnapshotsOptions,\n CreateTemplateOptions,\n ListTemplatesOptions,\n} from './types/index.js';\nimport { cmd, type Command } from '@computesdk/cmd';\n\n/**\n * Flat sandbox method implementations - all operations in one place\n */\nexport interface SandboxMethods<TSandbox = any, TConfig = any> {\n // Collection operations (map to compute.sandbox.*)\n create: (config: TConfig, options?: CreateSandboxOptions) => Promise<{ sandbox: TSandbox; sandboxId: string }>;\n getById: (config: TConfig, sandboxId: string) => Promise<{ sandbox: TSandbox; sandboxId: string } | null>;\n list: (config: TConfig) => Promise<Array<{ sandbox: TSandbox; sandboxId: string }>>;\n destroy: (config: TConfig, sandboxId: string) => Promise<void>;\n\n // Instance operations\n runCode: (sandbox: TSandbox, code: string, runtime?: Runtime, config?: TConfig) => Promise<CodeResult>;\n runCommand: (sandbox: TSandbox, command: string, args?: string[], options?: RunCommandOptions) => Promise<CommandResult>;\n getInfo: (sandbox: TSandbox) => Promise<SandboxInfo>;\n getUrl: (sandbox: TSandbox, options: { port: number; protocol?: string }) => Promise<string>;\n\n // Optional provider-specific typed getInstance method\n getInstance?: (sandbox: TSandbox) => TSandbox;\n\n // Optional filesystem methods\n filesystem?: {\n readFile: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<string>;\n writeFile: (sandbox: TSandbox, path: string, content: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n mkdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n readdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<FileEntry[]>;\n exists: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<boolean>;\n remove: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n };\n}\n\n/**\n * Template method implementations\n */\nexport interface TemplateMethods<TTemplate = any, TConfig = any, TCreateOptions extends CreateTemplateOptions = CreateTemplateOptions> {\n create: (config: TConfig, options: TCreateOptions) => Promise<TTemplate>;\n list: (config: TConfig, options?: ListTemplatesOptions) => Promise<TTemplate[]>;\n delete: (config: TConfig, templateId: string) => Promise<void>;\n}\n\n/**\n * Snapshot method implementations \n */\nexport interface SnapshotMethods<TSnapshot = any, TConfig = any> {\n create: (config: TConfig, sandboxId: string, options?: CreateSnapshotOptions) => Promise<TSnapshot>;\n list: (config: TConfig, options?: ListSnapshotsOptions) => Promise<TSnapshot[]>;\n delete: (config: TConfig, snapshotId: string) => Promise<void>;\n}\n\n/**\n * Provider execution modes\n *\n * - 'raw': Use raw provider methods directly (for gateway internal use)\n * - 'direct': Use provider's native SDK directly (for providers with sandbox capabilities)\n * - 'gateway': Route through ComputeSDK gateway (for providers without native sandbox)\n */\nexport type ProviderMode = 'raw' | 'direct' | 'gateway';\n\n/**\n * Provider configuration for createProvider()\n */\nexport interface ProviderConfig<TSandbox = any, TConfig = any, TTemplate = any, TSnapshot = any> {\n name: string;\n /**\n * Default execution mode for this provider (defaults to 'gateway' if not specified)\n *\n * - 'direct': Provider has native sandbox capabilities (e.g., E2B) - uses provider SDK directly\n * - 'gateway': Provider only has infrastructure (e.g., Railway) - routes through gateway\n *\n * Can be overridden at runtime with `mode` in config.\n */\n defaultMode?: 'direct' | 'gateway';\n methods: {\n sandbox: SandboxMethods<TSandbox, TConfig>;\n template?: TemplateMethods<TTemplate, TConfig>;\n snapshot?: SnapshotMethods<TSnapshot, TConfig>;\n };\n}\n\n/**\n * Base config that all provider configs should extend\n * Includes the `mode` option for controlling execution mode\n */\nexport interface BaseProviderConfig {\n /**\n * Execution mode override\n *\n * - 'raw': Use raw provider methods directly (for gateway internal use)\n * - 'direct': Use provider's native SDK directly\n * - 'gateway': Route through ComputeSDK gateway\n *\n * If not specified, uses the provider's `defaultMode`.\n */\n mode?: ProviderMode;\n}\n\n/**\n * Auto-generated filesystem implementation that throws \"not supported\" errors\n */\nclass UnsupportedFileSystem implements SandboxFileSystem {\n private readonly providerName: string;\n\n constructor(providerName: string) {\n this.providerName = providerName;\n }\n\n async readFile(_path: string): Promise<string> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async mkdir(_path: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async readdir(_path: string): Promise<FileEntry[]> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async exists(_path: string): Promise<boolean> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async remove(_path: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n}\n\n\n\n/**\n * Auto-generated filesystem implementation that wraps provider methods\n */\nclass SupportedFileSystem<TSandbox> implements SandboxFileSystem {\n constructor(\n private sandbox: TSandbox,\n private methods: NonNullable<SandboxMethods<TSandbox>['filesystem']>,\n private allMethods: SandboxMethods<TSandbox>\n ) {}\n\n async readFile(path: string): Promise<string> {\n return this.methods.readFile(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async writeFile(path: string, content: string): Promise<void> {\n return this.methods.writeFile(this.sandbox, path, content, this.allMethods.runCommand);\n }\n\n async mkdir(path: string): Promise<void> {\n return this.methods.mkdir(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async readdir(path: string): Promise<FileEntry[]> {\n return this.methods.readdir(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async exists(path: string): Promise<boolean> {\n return this.methods.exists(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async remove(path: string): Promise<void> {\n return this.methods.remove(this.sandbox, path, this.allMethods.runCommand);\n }\n}\n\n\n\n\n\n/**\n * Generated sandbox class - implements the ProviderSandbox interface\n */\nclass GeneratedSandbox<TSandbox = any> implements ProviderSandbox<TSandbox> {\n readonly sandboxId: string;\n readonly provider: string;\n readonly filesystem: SandboxFileSystem;\n\n constructor(\n private sandbox: TSandbox,\n sandboxId: string,\n providerName: string,\n private methods: SandboxMethods<TSandbox>,\n private config: any,\n private destroyMethod: (config: any, sandboxId: string) => Promise<void>,\n private providerInstance: Provider\n ) {\n this.sandboxId = sandboxId;\n this.provider = providerName;\n\n // Auto-detect filesystem support\n if (methods.filesystem) {\n this.filesystem = new SupportedFileSystem(sandbox, methods.filesystem, methods);\n } else {\n this.filesystem = new UnsupportedFileSystem(providerName);\n }\n }\n\n getInstance(): TSandbox {\n // Use provider-specific typed getInstance if available\n if (this.methods.getInstance) {\n return this.methods.getInstance(this.sandbox);\n }\n // Fallback to returning the sandbox directly\n return this.sandbox;\n }\n\n async runCode(code: string, runtime?: Runtime): Promise<CodeResult> {\n return await this.methods.runCode(this.sandbox, code, runtime, this.config);\n }\n\n async runCommand(\n commandOrArray: string | [string, ...string[]],\n argsOrOptions?: string[] | RunCommandOptions,\n maybeOptions?: RunCommandOptions\n ): Promise<CommandResult> {\n // Parse overloaded arguments\n let command: string;\n let args: string[];\n let options: RunCommandOptions | undefined;\n\n if (Array.isArray(commandOrArray)) {\n // Array form: runCommand(['npm', 'install'], { cwd: '/app' })\n [command, ...args] = commandOrArray;\n options = argsOrOptions as RunCommandOptions | undefined;\n } else {\n // Traditional form: runCommand('npm', ['install'], { cwd: '/app' })\n command = commandOrArray;\n args = (Array.isArray(argsOrOptions) ? argsOrOptions : []) as string[];\n options = Array.isArray(argsOrOptions) ? maybeOptions : argsOrOptions as RunCommandOptions | undefined;\n }\n\n // Build the command tuple\n const baseCommand: Command = args.length > 0 ? [command, ...args] : [command];\n\n // Use cmd() helper to handle cwd and background options\n if (options?.cwd || options?.background) {\n const wrappedCommand = cmd(baseCommand, {\n cwd: options.cwd,\n background: options.background,\n });\n const [wrappedCmd, ...wrappedArgs] = wrappedCommand;\n return await this.methods.runCommand(this.sandbox, wrappedCmd, wrappedArgs, undefined);\n }\n\n return await this.methods.runCommand(this.sandbox, command, args, options);\n }\n\n async getInfo(): Promise<SandboxInfo> {\n return await this.methods.getInfo(this.sandbox);\n }\n\n async getUrl(options: { port: number; protocol?: string }): Promise<string> {\n return await this.methods.getUrl(this.sandbox, options);\n }\n\n getProvider(): Provider<TSandbox> {\n return this.providerInstance;\n }\n\n async kill(): Promise<void> {\n // For backward compatibility, kill() delegates to destroy()\n await this.destroy();\n }\n\n async destroy(): Promise<void> {\n // Destroy via the provider's destroy method using our sandboxId\n await this.destroyMethod(this.config, this.sandboxId);\n }\n}\n\n/**\n * Determines the effective execution mode\n *\n * @param config - Runtime config (may contain `mode` override)\n * @param defaultMode - Provider's default mode\n * @returns The effective execution mode\n */\nfunction getEffectiveMode(config: BaseProviderConfig, defaultMode: 'direct' | 'gateway'): ProviderMode {\n // If mode is explicitly set in config, use it\n if (config.mode) {\n return config.mode;\n }\n\n // Otherwise use provider's default mode\n return defaultMode;\n}\n\n/**\n * Auto-generated Sandbox Manager implementation\n */\nclass GeneratedSandboxManager<TSandbox, TConfig> implements ProviderSandboxManager<TSandbox> {\n private readonly effectiveMode: ProviderMode;\n\n constructor(\n private config: TConfig,\n private providerName: string,\n private methods: SandboxMethods<TSandbox, TConfig>,\n private providerInstance: Provider,\n defaultMode: 'direct' | 'gateway'\n ) {\n this.effectiveMode = getEffectiveMode(config as BaseProviderConfig, defaultMode);\n }\n\n async create(options?: CreateSandboxOptions): Promise<ProviderSandbox<TSandbox>> {\n // Default to 'node' runtime if not specified for consistency across providers\n const optionsWithDefaults = { runtime: 'node' as Runtime, ...options };\n const result = await this.methods.create(this.config, optionsWithDefaults);\n \n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async getById(sandboxId: string): Promise<ProviderSandbox<TSandbox> | null> {\n const result = await this.methods.getById(this.config, sandboxId);\n if (!result) {\n return null;\n }\n\n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async list(): Promise<ProviderSandbox<TSandbox>[]> {\n const results = await this.methods.list(this.config);\n \n return results.map(result => new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n ));\n }\n\n async destroy(sandboxId: string): Promise<void> {\n await this.methods.destroy(this.config, sandboxId);\n }\n}\n\n/**\n * Auto-generated Template Manager implementation\n */\nclass GeneratedTemplateManager<TTemplate, TConfig, TCreateOptions extends CreateTemplateOptions = CreateTemplateOptions> implements ProviderTemplateManager<TTemplate, TCreateOptions> {\n constructor(\n private config: TConfig,\n private methods: TemplateMethods<TTemplate, TConfig, TCreateOptions>\n ) {}\n\n async create(options: TCreateOptions): Promise<TTemplate> {\n return await this.methods.create(this.config, options);\n }\n\n async list(options?: ListTemplatesOptions): Promise<TTemplate[]> {\n return await this.methods.list(this.config, options);\n }\n\n async delete(templateId: string): Promise<void> {\n return await this.methods.delete(this.config, templateId);\n }\n}\n\n/**\n * Auto-generated Snapshot Manager implementation\n */\nclass GeneratedSnapshotManager<TSnapshot, TConfig> implements ProviderSnapshotManager<TSnapshot> {\n constructor(\n private config: TConfig,\n private methods: SnapshotMethods<TSnapshot, TConfig>\n ) {}\n\n async create(sandboxId: string, options?: CreateSnapshotOptions): Promise<TSnapshot> {\n return await this.methods.create(this.config, sandboxId, options);\n }\n\n async list(options?: ListSnapshotsOptions): Promise<TSnapshot[]> {\n return await this.methods.list(this.config, options);\n }\n\n async delete(snapshotId: string): Promise<void> {\n return await this.methods.delete(this.config, snapshotId);\n }\n}\n\n/**\n * Auto-generated Provider implementation\n */\nclass GeneratedProvider<TSandbox, TConfig, TTemplate, TSnapshot> implements Provider<TSandbox, TTemplate, TSnapshot> {\n readonly name: string;\n readonly sandbox: ProviderSandboxManager<TSandbox>;\n readonly template?: ProviderTemplateManager<TTemplate>;\n readonly snapshot?: ProviderSnapshotManager<TSnapshot>;\n\n constructor(config: TConfig, providerConfig: ProviderConfig<TSandbox, TConfig, TTemplate, TSnapshot>) {\n this.name = providerConfig.name;\n this.sandbox = new GeneratedSandboxManager(\n config,\n providerConfig.name,\n providerConfig.methods.sandbox,\n this,\n providerConfig.defaultMode ?? 'gateway'\n );\n\n // Initialize optional managers if methods are provided\n if (providerConfig.methods.template) {\n this.template = new GeneratedTemplateManager(config, providerConfig.methods.template);\n }\n \n if (providerConfig.methods.snapshot) {\n this.snapshot = new GeneratedSnapshotManager(config, providerConfig.methods.snapshot);\n }\n }\n\n getSupportedRuntimes(): Runtime[] {\n // For now, all providers support both node and python\n // In the future, this could be configurable per provider\n return ['node', 'python'];\n }\n}\n\n/**\n * Create a provider from method definitions\n *\n * Auto-generates all boilerplate classes and provides feature detection\n * based on which methods are implemented.\n */\nexport function createProvider<TSandbox, TConfig = any, TTemplate = any, TSnapshot = any>(\n providerConfig: ProviderConfig<TSandbox, TConfig, TTemplate, TSnapshot>\n): (config: TConfig & BaseProviderConfig) => Provider<TSandbox, TTemplate, TSnapshot> {\n return (config: TConfig & BaseProviderConfig) => {\n return new GeneratedProvider(config, providerConfig);\n };\n}","/**\n * Compute daemon lifecycle management\n *\n * Handles health checks and waiting for the compute daemon\n * to become ready after installation.\n */\n\nimport { ComputeClient } from '@computesdk/client';\n\n/**\n * Options for waiting for compute daemon to be ready\n */\nexport interface WaitForComputeReadyOptions {\n /** Maximum number of retry attempts (default: 30) */\n maxRetries?: number;\n /** Initial delay between retries in milliseconds (default: 500) */\n initialDelayMs?: number;\n /** Maximum delay between retries in milliseconds (default: 5000) */\n maxDelayMs?: number;\n /** Backoff multiplier for exponential backoff (default: 1.5) */\n backoffFactor?: number;\n}\n\n/**\n * Wait for compute daemon to be ready by polling the health endpoint\n * with exponential backoff for faster success and less noise\n */\nexport async function waitForComputeReady(\n client: ComputeClient,\n options: WaitForComputeReadyOptions = {}\n): Promise<void> {\n const maxRetries = options.maxRetries ?? 30;\n const initialDelayMs = options.initialDelayMs ?? 500;\n const maxDelayMs = options.maxDelayMs ?? 5000;\n const backoffFactor = options.backoffFactor ?? 1.5;\n\n let lastError: Error | null = null;\n let currentDelay = initialDelayMs;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n await client.health();\n \n // Success! Log if in debug mode\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Lifecycle] Sandbox ready after ${i + 1} attempt${i === 0 ? '' : 's'}`);\n }\n \n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // On last attempt, throw detailed error\n if (i === maxRetries - 1) {\n throw new Error(\n `Sandbox failed to become ready after ${maxRetries} attempts.\\n` +\n `Last error: ${lastError.message}\\n\\n` +\n `Possible causes:\\n` +\n ` 1. Sandbox failed to start (check provider dashboard for errors)\\n` +\n ` 2. Network connectivity issues between your app and the sandbox\\n` +\n ` 3. Sandbox is taking longer than expected to initialize\\n` +\n ` 4. Invalid sandbox URL or authentication credentials\\n\\n` +\n `Troubleshooting:\\n` +\n ` - Check sandbox logs in your provider dashboard\\n` +\n ` - Verify your network connection\\n` +\n ` - Try increasing maxRetries if initialization is slow\\n` +\n ` - Enable debug mode: export COMPUTESDK_DEBUG=1`\n );\n }\n\n // Wait with exponential backoff before next attempt\n await new Promise(resolve => setTimeout(resolve, currentDelay));\n \n // Increase delay for next attempt (exponential backoff with cap)\n currentDelay = Math.min(currentDelay * backoffFactor, maxDelayMs);\n }\n }\n}\n","/**\n * Utility functions for ComputeSDK\n */\n\n/**\n * Calculate exponential backoff delay with jitter\n * \n * Uses exponential backoff (2^attempt) multiplied by base delay,\n * plus random jitter to prevent thundering herd.\n * \n * @param attempt - Current retry attempt (0-indexed)\n * @param baseDelay - Base delay in milliseconds (default: 1000)\n * @param jitterMax - Maximum random jitter in milliseconds (default: 100)\n * @returns Delay in milliseconds\n * \n * @example\n * ```typescript\n * // First retry: 1000-1100ms\n * calculateBackoff(0);\n * \n * // Second retry: 2000-2100ms\n * calculateBackoff(1);\n * \n * // Third retry: 4000-4100ms\n * calculateBackoff(2);\n * ```\n */\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number = 1000,\n jitterMax: number = 100\n): number {\n return baseDelay * Math.pow(2, attempt) + Math.random() * jitterMax;\n}\n","/**\n * Auto-Detection Module\n * \n * Automatically detects gateway mode and provider from environment variables.\n * Enables zero-config usage of ComputeSDK.\n */\n\nimport { GATEWAY_URL, PROVIDER_PRIORITY, PROVIDER_ENV_VARS, type ProviderName } from './constants';\nimport { gateway as gatewayProvider } from './providers/gateway';\nimport type { Provider } from './types';\n\n/**\n * Check if gateway mode is enabled\n * Gateway mode requires COMPUTESDK_API_KEY to be set\n */\nexport function isGatewayModeEnabled(): boolean {\n return !!(typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n}\n\n/**\n * Check if all required environment variables exist for a provider\n */\nfunction hasProviderEnv(provider: ProviderName): boolean {\n if (typeof process === 'undefined') return false;\n \n const requiredVars = PROVIDER_ENV_VARS[provider];\n if (!requiredVars) return false; // Safety check for invalid provider names\n \n return requiredVars.every(varName => !!process.env?.[varName]);\n}\n\n/**\n * Get detailed status of provider credentials\n */\nfunction getProviderEnvStatus(provider: ProviderName): {\n provider: string;\n present: string[];\n missing: string[];\n isComplete: boolean;\n} {\n const requiredVars = PROVIDER_ENV_VARS[provider];\n \n if (typeof process === 'undefined' || !requiredVars) {\n return { provider, present: [], missing: requiredVars ? [...requiredVars] : [], isComplete: false };\n }\n \n const present = requiredVars.filter(varName => !!process.env?.[varName]);\n const missing = requiredVars.filter(varName => !process.env?.[varName]);\n \n return {\n provider,\n present: [...present],\n missing: [...missing],\n isComplete: missing.length === 0\n };\n}\n\n/**\n * Detect which provider to use from environment variables\n * \n * Detection order:\n * 1. Check for explicit COMPUTESDK_PROVIDER override\n * 2. Auto-detect based on PROVIDER_PRIORITY order\n * \n * @returns Provider name or null if none detected\n */\nexport function detectProvider(): string | null {\n if (typeof process === 'undefined') return null;\n \n // Check for explicit override\n const explicit = process.env.COMPUTESDK_PROVIDER?.toLowerCase();\n if (explicit && hasProviderEnv(explicit as ProviderName)) {\n return explicit;\n }\n \n // Warn if explicit provider set but credentials missing\n if (explicit && !hasProviderEnv(explicit as ProviderName)) {\n console.warn(\n `⚠️ COMPUTESDK_PROVIDER is set to \"${explicit}\" but required credentials are missing.\\n` +\n ` Required: ${PROVIDER_ENV_VARS[explicit as ProviderName]?.join(', ') || 'unknown'}\\n` +\n ` Falling back to auto-detection...`\n );\n }\n \n // Auto-detect based on priority order\n for (const provider of PROVIDER_PRIORITY) {\n if (hasProviderEnv(provider)) {\n return provider;\n }\n }\n \n return null;\n}\n\n/**\n * Build provider-specific headers from environment variables\n * These headers are passed through to the gateway\n */\nexport function getProviderHeaders(provider: string): Record<string, string> {\n if (typeof process === 'undefined') return {};\n \n const headers: Record<string, string> = {};\n \n switch (provider) {\n case 'e2b':\n if (process.env.E2B_API_KEY) {\n headers['X-E2B-API-Key'] = process.env.E2B_API_KEY;\n }\n break;\n \n case 'railway':\n if (process.env.RAILWAY_API_KEY) {\n headers['X-Railway-API-Key'] = process.env.RAILWAY_API_KEY;\n }\n if (process.env.RAILWAY_PROJECT_ID) {\n headers['X-Railway-Project-ID'] = process.env.RAILWAY_PROJECT_ID;\n }\n if (process.env.RAILWAY_ENVIRONMENT_ID) {\n headers['X-Railway-Environment-ID'] = process.env.RAILWAY_ENVIRONMENT_ID;\n }\n break;\n \n case 'daytona':\n if (process.env.DAYTONA_API_KEY) {\n headers['X-Daytona-API-Key'] = process.env.DAYTONA_API_KEY;\n }\n break;\n \n case 'modal':\n if (process.env.MODAL_TOKEN_ID) {\n headers['X-Modal-Token-ID'] = process.env.MODAL_TOKEN_ID;\n }\n if (process.env.MODAL_TOKEN_SECRET) {\n headers['X-Modal-Token-Secret'] = process.env.MODAL_TOKEN_SECRET;\n }\n break;\n \n case 'runloop':\n if (process.env.RUNLOOP_API_KEY) {\n headers['X-Runloop-API-Key'] = process.env.RUNLOOP_API_KEY;\n }\n break;\n \n case 'vercel':\n if (process.env.VERCEL_TOKEN) {\n headers['X-Vercel-Token'] = process.env.VERCEL_TOKEN;\n }\n if (process.env.VERCEL_TEAM_ID) {\n headers['X-Vercel-Team-ID'] = process.env.VERCEL_TEAM_ID;\n }\n if (process.env.VERCEL_PROJECT_ID) {\n headers['X-Vercel-Project-ID'] = process.env.VERCEL_PROJECT_ID;\n }\n break;\n \n case 'cloudflare':\n if (process.env.CLOUDFLARE_API_TOKEN) {\n headers['X-Cloudflare-API-Token'] = process.env.CLOUDFLARE_API_TOKEN;\n }\n if (process.env.CLOUDFLARE_ACCOUNT_ID) {\n headers['X-Cloudflare-Account-ID'] = process.env.CLOUDFLARE_ACCOUNT_ID;\n }\n break;\n \n case 'codesandbox':\n if (process.env.CSB_API_KEY) {\n headers['X-CodeSandbox-API-Key'] = process.env.CSB_API_KEY;\n }\n break;\n \n case 'blaxel':\n if (process.env.BL_API_KEY) {\n headers['X-Blaxel-API-Key'] = process.env.BL_API_KEY;\n }\n if (process.env.BL_WORKSPACE) {\n headers['X-Blaxel-Workspace'] = process.env.BL_WORKSPACE;\n }\n break;\n }\n \n return headers;\n}\n\n/**\n * Main auto-configuration function\n * Returns configured HTTP provider or null if auto-detection not possible\n *\n * @throws Error if COMPUTESDK_API_KEY is set but no provider detected\n */\nexport function autoConfigureCompute(): Provider | null {\n // Only auto-configure in gateway mode\n if (!isGatewayModeEnabled()) {\n return null;\n }\n\n const provider = detectProvider();\n if (!provider) {\n // Build detailed diagnostic information\n const detectionResults = PROVIDER_PRIORITY.map(p => getProviderEnvStatus(p));\n \n // Create status indicators\n const statusLines = detectionResults.map(result => {\n const status = result.isComplete ? '✅' : \n result.present.length > 0 ? '⚠️ ' : '❌';\n const ratio = `${result.present.length}/${result.present.length + result.missing.length}`;\n let line = ` ${status} ${result.provider.padEnd(12)} ${ratio} credentials`;\n \n // Show what's missing for partial matches\n if (result.present.length > 0 && result.missing.length > 0) {\n line += ` (missing: ${result.missing.join(', ')})`;\n }\n \n return line;\n });\n \n throw new Error(\n `COMPUTESDK_API_KEY is set but no provider detected.\\n\\n` +\n `Provider detection results:\\n` +\n statusLines.join('\\n') +\n `\\n\\n` +\n `To fix this, set one of the following:\\n\\n` +\n ` E2B: export E2B_API_KEY=xxx\\n` +\n ` Railway: export RAILWAY_API_KEY=xxx RAILWAY_PROJECT_ID=xxx RAILWAY_ENVIRONMENT_ID=xxx\\n` +\n ` Daytona: export DAYTONA_API_KEY=xxx\\n` +\n ` Modal: export MODAL_TOKEN_ID=xxx MODAL_TOKEN_SECRET=xxx\\n` +\n ` Runloop: export RUNLOOP_API_KEY=xxx\\n` +\n ` Vercel: export VERCEL_TOKEN=xxx VERCEL_TEAM_ID=xxx VERCEL_PROJECT_ID=xxx\\n` +\n ` Cloudflare: export CLOUDFLARE_API_TOKEN=xxx CLOUDFLARE_ACCOUNT_ID=xxx\\n` +\n ` CodeSandbox: export CSB_API_KEY=xxx\\n` +\n ` Blaxel: export BL_API_KEY=xxx BL_WORKSPACE=xxx\\n\\n` +\n `Or set COMPUTESDK_PROVIDER to specify explicitly:\\n` +\n ` export COMPUTESDK_PROVIDER=e2b\\n\\n` +\n `Docs: https://computesdk.com/docs/quickstart`\n );\n }\n\n const gatewayUrl = process.env.COMPUTESDK_GATEWAY_URL || GATEWAY_URL;\n const computesdkApiKey = process.env.COMPUTESDK_API_KEY!;\n const providerHeaders = getProviderHeaders(provider);\n\n // Validate gateway URL\n try {\n new URL(gatewayUrl);\n } catch (error) {\n throw new Error(\n `Invalid gateway URL: \"${gatewayUrl}\"\\n\\n` +\n `The URL must be a valid HTTP/HTTPS URL.\\n` +\n `Check your COMPUTESDK_GATEWAY_URL environment variable.`\n );\n }\n\n // Debug logging if enabled\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`✨ ComputeSDK: Auto-detected ${provider} provider`);\n console.log(`🌐 Gateway: ${gatewayUrl}`);\n console.log(`🔑 Provider headers:`, Object.keys(providerHeaders).join(', '));\n }\n\n return gatewayProvider({\n gatewayUrl,\n apiKey: computesdkApiKey,\n provider,\n providerHeaders\n });\n}\n","/**\n * Explicit Config\n *\n * Converts explicit compute configuration to a gateway provider.\n * Used when compute() is called as a function with configuration.\n */\n\nimport { gateway } from './providers/gateway';\nimport type { Provider, ExplicitComputeConfig } from './types';\nimport {\n PROVIDER_AUTH,\n PROVIDER_HEADERS,\n PROVIDER_DASHBOARD_URLS,\n PROVIDER_ENV_MAP,\n type ProviderName,\n} from './provider-config';\n\n/**\n * Build provider-specific headers for gateway authentication\n */\nfunction buildProviderHeaders(config: ExplicitComputeConfig): Record<string, string> {\n const headers: Record<string, string> = {};\n const provider = config.provider as ProviderName;\n const headerMap = PROVIDER_HEADERS[provider];\n const providerConfig = config[provider] as Record<string, string | undefined> | undefined;\n\n if (!providerConfig || !headerMap) return headers;\n\n for (const [configKey, headerName] of Object.entries(headerMap)) {\n const value = providerConfig[configKey];\n if (value) {\n headers[headerName] = value;\n }\n }\n\n return headers;\n}\n\n/**\n * Validate that the config has the required provider-specific credentials\n */\nfunction validateProviderConfig(config: ExplicitComputeConfig): void {\n const provider = config.provider as ProviderName;\n const authOptions = PROVIDER_AUTH[provider];\n const providerConfig = config[provider] as Record<string, string | undefined> | undefined;\n const dashboardUrl = PROVIDER_DASHBOARD_URLS[provider];\n\n if (!authOptions) {\n throw new Error(`Unknown provider: ${provider}`);\n }\n\n // Check if any auth option is satisfied\n // For explicit mode, we check config fields instead of env vars\n for (const option of authOptions) {\n // Map env vars to config field names and check if all are present\n const allPresent = option.every(envVar => {\n const configField = envVarToConfigField(provider, envVar);\n return providerConfig?.[configField];\n });\n\n if (allPresent) return; // Valid config found\n }\n\n // No valid config found, build helpful error message\n const configExample = buildConfigExample(provider, authOptions);\n throw new Error(\n `Missing ${provider} configuration. When using provider: '${provider}', you must provide:\\n` +\n `${configExample}\\n\\n` +\n `Get your credentials at: ${dashboardUrl}`\n );\n}\n\n/**\n * Map environment variable name to config field name\n * Uses shared PROVIDER_ENV_MAP as single source of truth\n */\nfunction envVarToConfigField(provider: ProviderName, envVar: string): string {\n return PROVIDER_ENV_MAP[provider]?.[envVar] ?? envVar.toLowerCase();\n}\n\n/**\n * Build example config for error message\n */\nfunction buildConfigExample(provider: ProviderName, authOptions: readonly (readonly string[])[]): string {\n if (authOptions.length === 1) {\n // Single option\n const fields = authOptions[0].map(envVar => {\n const field = envVarToConfigField(provider, envVar);\n return `${field}: '...'`;\n });\n return ` ${provider}: { ${fields.join(', ')} }`;\n }\n\n // Multiple options (like Vercel with OIDC or traditional)\n const options = authOptions.map((option, i) => {\n const fields = option.map(envVar => {\n const field = envVarToConfigField(provider, envVar);\n return `${field}: '...'`;\n });\n return ` Option ${i + 1}:\\n ${provider}: { ${fields.join(', ')} }`;\n });\n\n return options.join('\\n\\n');\n}\n\n/**\n * Create a gateway provider from explicit configuration\n *\n * @param config - Explicit compute configuration\n * @returns A configured gateway provider\n */\nexport function createProviderFromConfig(config: ExplicitComputeConfig): Provider {\n // Validate required fields\n if (!config.apiKey) {\n throw new Error(\n `Missing ComputeSDK API key. The 'apiKey' field is required.\\n\\n` +\n `Get your API key at: https://computesdk.com/dashboard`\n );\n }\n\n // Validate provider-specific config\n validateProviderConfig(config);\n\n // Build provider headers\n const providerHeaders = buildProviderHeaders(config);\n\n // Create and return gateway provider\n return gateway({\n apiKey: config.apiKey,\n provider: config.provider,\n providerHeaders,\n });\n}\n","/**\n * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers.\n * The `compute` export works as both a singleton and a callable function:\n *\n * - Singleton: `compute.sandbox.create()` (auto-detects from env vars)\n * - Callable: `compute({ provider: 'e2b', ... }).sandbox.create()` (explicit config, uses gateway)\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI, ExplicitComputeConfig, CallableCompute } from './types';\nimport { autoConfigureCompute } from './auto-detect';\nimport { createProviderFromConfig } from './explicit-config';\n\n/**\n * Compute singleton implementation - orchestrates all compute operations\n */\nclass ComputeManager implements ComputeAPI {\n private config: ComputeConfig | null = null;\n private autoConfigured = false;\n\n /**\n * Set default configuration with generic type preservation\n */\n setConfig<TProvider extends Provider>(config: ComputeConfig<TProvider>): void {\n // Validate that at least one provider is specified\n if (!config.defaultProvider && !config.provider) {\n throw new Error('Either defaultProvider or provider must be specified in setConfig');\n }\n\n // Handle backwards compatibility: if both are provided, defaultProvider takes precedence\n if (config.defaultProvider && config.provider) {\n console.warn('Both defaultProvider and provider specified in setConfig. Using defaultProvider. The provider key is deprecated, please use defaultProvider instead.');\n }\n\n // Normalize config to always have both fields for internal use (backward compatibility)\n const actualProvider = config.defaultProvider || config.provider!;\n this.config = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n };\n }\n\n /**\n * Get current configuration\n */\n getConfig(): ComputeConfig | null {\n return this.config;\n }\n\n /**\n * Clear current configuration\n */\n clearConfig(): void {\n this.config = null;\n }\n\n /**\n * Lazy auto-configure from environment if not explicitly configured\n */\n private ensureConfigured(): void {\n // Skip if already configured\n if (this.config) return;\n\n // Skip if already tried auto-detection\n if (this.autoConfigured) return;\n\n // Try auto-detection from environment\n const provider = autoConfigureCompute();\n \n // Mark as configured after detection completes (success or failure)\n // This prevents retry loops but allows exceptions to propagate\n this.autoConfigured = true;\n\n if (provider) {\n this.config = {\n provider,\n defaultProvider: provider,\n };\n }\n }\n\n /**\n * Get the default provider, throwing if not configured\n */\n private getDefaultProvider(): Provider {\n // Try auto-configuration first\n this.ensureConfigured();\n\n const provider = this.config?.defaultProvider || this.config?.provider;\n if (!provider) {\n throw new Error(\n 'No default provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Zero-config mode: Set COMPUTESDK_API_KEY and provider credentials (e.g., E2B_API_KEY)\\n' +\n '2. Explicit mode: Call compute.setConfig({ defaultProvider }) or pass provider to create()\\n\\n' +\n 'Docs: https://computesdk.com/docs/quickstart'\n );\n }\n return provider;\n }\n\n\n sandbox = {\n /**\n * Create a sandbox from a provider (or default provider if configured)\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { compute } from 'computesdk'\n *\n * // With explicit provider\n * const sandbox = await compute.sandbox.create({\n * provider: e2b({ apiKey: 'your-key' })\n * })\n *\n * // With default provider\n * compute.setConfig({ defaultProvider: e2b({ apiKey: 'your-key' }) })\n * const sandbox = await compute.sandbox.create()\n * ```\n */\n create: async (params?: CreateSandboxParams | CreateSandboxParamsWithOptionalProvider): Promise<ProviderSandbox> => {\n const provider = params && 'provider' in params && params.provider ? params.provider : this.getDefaultProvider();\n const options = params?.options;\n return await provider.sandbox.create(options);\n },\n\n /**\n * Get an existing sandbox by ID from a provider (or default provider if configured)\n */\n getById: async (providerOrSandboxId: Provider | string, sandboxId?: string): Promise<ProviderSandbox | null> => {\n if (typeof providerOrSandboxId === 'string') {\n // Called with just sandboxId, use default provider\n const provider = this.getDefaultProvider();\n return await provider.sandbox.getById(providerOrSandboxId);\n } else {\n // Called with provider and sandboxId\n if (!sandboxId) {\n throw new Error('sandboxId is required when provider is specified');\n }\n return await providerOrSandboxId.sandbox.getById(sandboxId);\n }\n },\n\n /**\n * List all active sandboxes from a provider (or default provider if configured)\n */\n list: async (provider?: Provider): Promise<ProviderSandbox[]> => {\n const actualProvider = provider || this.getDefaultProvider();\n return await actualProvider.sandbox.list();\n },\n\n /**\n * Destroy a sandbox via a provider (or default provider if configured)\n */\n destroy: async (providerOrSandboxId: Provider | string, sandboxId?: string): Promise<void> => {\n if (typeof providerOrSandboxId === 'string') {\n // Called with just sandboxId, use default provider\n const provider = this.getDefaultProvider();\n return await provider.sandbox.destroy(providerOrSandboxId);\n } else {\n // Called with provider and sandboxId\n if (!sandboxId) {\n throw new Error('sandboxId is required when provider is specified');\n }\n return await providerOrSandboxId.sandbox.destroy(sandboxId);\n }\n }\n };\n}\n\n/**\n * Singleton instance for property access (internal)\n */\nconst singletonInstance = new ComputeManager();\n\n/**\n * Factory function for explicit configuration\n * Creates a new compute instance using the gateway provider\n */\nfunction computeFactory(config: ExplicitComputeConfig): ComputeAPI {\n const provider = createProviderFromConfig(config);\n return createCompute({ provider });\n}\n\n/**\n * Callable compute - works as both singleton and factory function\n *\n * @example\n * ```typescript\n * import { compute } from 'computesdk';\n *\n * // Singleton mode (auto-detects from env vars)\n * const sandbox1 = await compute.sandbox.create();\n *\n * // Callable mode (explicit config, uses gateway)\n * const sandbox2 = await compute({\n * provider: 'e2b',\n * apiKey: 'computesdk_xxx',\n * e2b: { apiKey: 'e2b_xxx' }\n * }).sandbox.create();\n * ```\n */\nexport const compute: CallableCompute = new Proxy(\n computeFactory as CallableCompute,\n {\n get(_target, prop, _receiver) {\n // Delegate property access to singleton instance\n const singleton = singletonInstance as unknown as Record<string | symbol, unknown>;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return (value as (...args: unknown[]) => unknown).bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n // Handle function call: compute({...})\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n\n\n/**\n * Create a compute instance with proper typing\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { createCompute } from 'computesdk'\n *\n * // Zero-config mode (auto-detects from environment)\n * const compute = createCompute();\n * const sandbox = await compute.sandbox.create();\n *\n * // Explicit mode\n * const compute2 = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * });\n *\n * const sandbox2 = await compute2.sandbox.create();\n * const instance = sandbox2.getInstance(); // ✅ Properly typed!\n * ```\n */\n// Zero-config mode (no arguments)\nexport function createCompute(): ComputeAPI;\n// Explicit mode with provider\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider>;\n// Implementation\nexport function createCompute<TProvider extends Provider>(\n config?: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider> | ComputeAPI {\n const manager = new ComputeManager();\n\n // Zero-config mode: No config provided, will auto-detect on first use\n if (!config) {\n return manager as ComputeAPI;\n }\n\n // Explicit mode: Set config directly\n const actualProvider = config.defaultProvider || config.provider!;\n manager['config'] = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n };\n\n const api: TypedComputeAPI<TProvider> = {\n setConfig: <T extends Provider>(cfg: ComputeConfig<T>) => createCompute(cfg),\n getConfig: () => manager.getConfig(),\n clearConfig: () => manager.clearConfig(),\n\n sandbox: {\n create: async (params?: Omit<CreateSandboxParamsWithOptionalProvider, 'provider'>) => {\n const sandbox = await manager.sandbox.create(params);\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n getById: async (sandboxId: string) => {\n const sandbox = await manager.sandbox.getById(sandboxId);\n if (!sandbox) return null;\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n list: async () => {\n const sandboxes = await manager.sandbox.list();\n return sandboxes as TypedProviderSandbox<TProvider>[];\n },\n\n destroy: async (sandboxId: string) => {\n return await manager.sandbox.destroy(sandboxId);\n }\n }\n };\n return api;\n}\n","/**\n * Simplified Request Handler for Web Framework Integration\n * \n * Handles JSON requests for sandbox and code execution operations.\n * Terminal support removed - will be re-added with WebSocket VM connections.\n */\n\nimport type { Provider, Runtime } from './types';\nimport { compute } from './compute';\n\n/**\n * Request structure supporting sandbox and code execution capabilities\n */\nexport interface ComputeRequest {\n /** Action in dot notation (e.g., 'compute.sandbox.create') */\n action: string;\n \n /** Parameters for the action */\n sandboxId?: string;\n code?: string;\n command?: string;\n args?: string[];\n runtime?: Runtime;\n path?: string;\n content?: string;\n \n /** Command options (for runCommand action) */\n commandOptions?: {\n background?: boolean;\n };\n \n /** Sandbox creation options */\n options?: {\n runtime?: Runtime;\n timeout?: number;\n sandboxId?: string;\n };\n}\n\n/**\n * Response structure for compute operations\n */\nexport interface ComputeResponse {\n success: boolean;\n error?: string;\n sandboxId: string;\n provider: string;\n [key: string]: any; // Allow any additional response data\n}\n\n/**\n * Execute compute action using targeted handling\n */\nasync function executeAction(body: ComputeRequest, provider: Provider): Promise<ComputeResponse> {\n try {\n const { action, sandboxId } = body;\n \n // Sandbox management operations\n if (action === 'compute.sandbox.create') {\n const sandbox = await compute.sandbox.create({\n provider,\n options: body.options || { runtime: 'python' }\n });\n return {\n success: true,\n sandboxId: sandbox.sandboxId,\n provider: provider.name\n };\n }\n \n if (action === 'compute.sandbox.list') {\n const sandboxes = await compute.sandbox.list(provider);\n return {\n success: true,\n sandboxId: '',\n provider: provider.name,\n sandboxes: sandboxes.map(sb => ({\n sandboxId: sb.sandboxId,\n provider: sb.provider\n }))\n };\n }\n \n if (action === 'compute.sandbox.destroy') {\n if (!sandboxId) {\n throw new Error('sandboxId is required for destroy action');\n }\n await compute.sandbox.destroy(provider, sandboxId);\n return {\n success: true,\n sandboxId,\n provider: provider.name\n };\n }\n \n // For sandbox instance methods, get the sandbox first\n if (!sandboxId) {\n throw new Error('sandboxId is required for this action');\n }\n \n const sandbox = await compute.sandbox.getById(provider, sandboxId);\n if (!sandbox) {\n throw new Error(`Sandbox ${sandboxId} not found`);\n }\n \n // Sandbox info\n if (action === 'compute.sandbox.getInfo') {\n const result = await sandbox.getInfo();\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n info: {\n id: result.id,\n provider: result.provider,\n runtime: result.runtime,\n status: result.status,\n createdAt: result.createdAt.toISOString(),\n timeout: result.timeout,\n metadata: result.metadata\n }\n };\n }\n \n // Code execution\n if (action === 'compute.sandbox.runCode') {\n if (!body.code) throw new Error('code is required');\n const result = await sandbox.runCode(body.code, body.runtime);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n result: {\n output: result.output,\n exitCode: result.exitCode,\n language: result.language\n }\n };\n }\n\n if (action === 'compute.sandbox.runCommand') {\n if (!body.command) throw new Error('command is required');\n const result = await sandbox.runCommand(body.command, body.args, body.commandOptions);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n result: {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n durationMs: result.durationMs\n }\n };\n }\n \n // Filesystem operations\n if (action === 'compute.sandbox.filesystem.readFile') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.readFile(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n fileContent: result\n };\n }\n \n if (action === 'compute.sandbox.filesystem.writeFile') {\n if (!body.path) throw new Error('path is required');\n if (body.content === undefined) throw new Error('content is required');\n await sandbox.filesystem.writeFile(body.path, body.content);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n if (action === 'compute.sandbox.filesystem.mkdir') {\n if (!body.path) throw new Error('path is required');\n await sandbox.filesystem.mkdir(body.path);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n if (action === 'compute.sandbox.filesystem.readdir') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.readdir(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n files: result.map((entry: any) => ({\n name: entry.name,\n path: entry.path,\n isDirectory: entry.isDirectory,\n size: entry.size,\n lastModified: entry.lastModified.toISOString()\n }))\n };\n }\n \n if (action === 'compute.sandbox.filesystem.exists') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.exists(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n exists: result\n };\n }\n \n if (action === 'compute.sandbox.filesystem.remove') {\n if (!body.path) throw new Error('path is required');\n await sandbox.filesystem.remove(body.path);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n throw new Error(`Unknown action: ${action}`);\n \n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n sandboxId: body.sandboxId || '',\n provider: provider.name\n };\n }\n}\n\n/**\n * Main request handler - handles HTTP requests and pre-parsed bodies\n */\nexport async function handleComputeRequest(\n params: HandleComputeRequestParams\n): Promise<ComputeResponse>;\nexport async function handleComputeRequest(\n requestOrBody: Request | ComputeRequest,\n provider: Provider\n): Promise<Response>;\nexport async function handleComputeRequest(\n paramsOrRequestOrBody: HandleComputeRequestParams | Request | ComputeRequest,\n provider?: Provider\n): Promise<ComputeResponse | Response> {\n // Handle object-style API\n if (typeof paramsOrRequestOrBody === 'object' && 'request' in paramsOrRequestOrBody && 'provider' in paramsOrRequestOrBody) {\n const params = paramsOrRequestOrBody as HandleComputeRequestParams;\n return await executeAction(params.request, params.provider);\n }\n \n // Handle original API\n if (!provider) {\n throw new Error('Provider is required when not using object-style API');\n }\n \n const requestOrBody = paramsOrRequestOrBody as Request | ComputeRequest;\n try {\n let body: ComputeRequest;\n \n if (requestOrBody instanceof Request) {\n // Handle HTTP method validation\n if (requestOrBody.method !== 'POST') {\n return Response.json({\n success: false,\n error: 'Only POST requests are supported',\n sandboxId: '',\n provider: provider.name\n }, { status: 405 });\n }\n \n // Parse JSON body with better error handling\n try {\n body = await requestOrBody.json();\n } catch (parseError) {\n return Response.json({\n success: false,\n error: 'Invalid JSON in request body',\n sandboxId: '',\n provider: provider.name\n }, { status: 400 });\n }\n } else {\n body = requestOrBody;\n }\n \n // Execute the action\n const result = await executeAction(body, provider);\n \n return Response.json(result, {\n status: result.success ? 200 : 500\n });\n \n } catch (error) {\n return Response.json({\n success: false,\n error: error instanceof Error ? error.message : 'Request handling failed',\n sandboxId: '',\n provider: provider.name\n }, { status: 500 });\n }\n}\n\n/**\n * Legacy export for backward compatibility\n */\nexport interface HandleComputeRequestParams {\n request: ComputeRequest;\n provider: Provider;\n}\n\nexport { handleComputeRequest as handleHttpComputeRequest };"],"mappings":"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","names":["import_client","import_client","import_client","ClientSandbox","buildProviderHeaders","sandbox"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/sandbox.ts","../src/provider-config.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.ts","../src/explicit-config.ts","../src/compute.ts","../src/request-handler.ts"],"sourcesContent":["/**\n * ComputeSDK Core\n *\n * Clean Provider/Sandbox separation architecture with extensible compute.* API\n *\n * Zero-Config Mode (Gateway):\n * Set COMPUTESDK_API_KEY and provider credentials (e.g., E2B_API_KEY)\n * No explicit configuration needed - auto-detects from environment\n *\n * Explicit Mode:\n * Call compute.setConfig({ defaultProvider }) or use createCompute()\n *\n * Callable Mode:\n * compute({ provider: 'e2b', apiKey: '...', e2b: { apiKey: '...' } })\n * Always uses gateway mode, returns new instance\n */\n\n// Export all types\nexport * from './types';\n\n// Export compute singleton/callable - the main API\n// Works as both: compute.sandbox.create() and compute({...}).sandbox.create()\nexport { compute, createCompute } from './compute';\n\n// Export explicit config helper (for advanced usage)\nexport { createProviderFromConfig } from './explicit-config';\n\n// Export gateway provider - built-in provider for gateway mode\nexport { gateway, type GatewayConfig } from './providers/gateway';\n\n// Export auto-detection utilities (for advanced usage)\nexport {\n isGatewayModeEnabled,\n detectProvider,\n getProviderHeaders,\n autoConfigureCompute\n} from './auto-detect';\n\n// Export constants and provider config utilities\nexport {\n GATEWAY_URL,\n PROVIDER_PRIORITY,\n PROVIDER_ENV_VARS,\n PROVIDER_AUTH,\n PROVIDER_NAMES,\n PROVIDER_HEADERS,\n PROVIDER_ENV_MAP,\n PROVIDER_DASHBOARD_URLS,\n type ProviderName,\n isValidProvider,\n buildProviderHeaders,\n getProviderConfigFromEnv,\n isProviderAuthComplete,\n getMissingEnvVars,\n} from './constants';\n\n// Export utilities\nexport { calculateBackoff } from './utils';\n\n// Export request handler for web framework integration\nexport { handleComputeRequest } from './request-handler';\n\n// Export compute request/response types\nexport type {\n ComputeRequest,\n ComputeResponse,\n HandleComputeRequestParams\n} from './request-handler';\n\n// Export provider factory for creating custom providers\nexport { createProvider } from './factory';\nexport type { ProviderConfig, SandboxMethods, TemplateMethods, SnapshotMethods, BaseProviderConfig, ProviderMode } from './factory';\n\n// Export error handling utilities (explicitly for clarity)\nexport { CommandExitError, isCommandExitError } from './types/sandbox';\n\n// Test suite is available separately via @computesdk/test-utils package\n","/**\n * Sandbox Types\n *\n * Types related to sandbox execution, filesystem, terminal operations\n *\n * Key types:\n * - Sandbox: The full-featured sandbox from @computesdk/client (terminals, watchers, signals)\n * - ProviderSandbox: Base interface that provider implementations return (e2b, railway, etc.)\n */\n\n// Re-export the full Sandbox from @computesdk/client\n// This is THE Sandbox that users interact with\nexport { Sandbox, type SandboxConfig } from '@computesdk/client';\n\n// Re-export execution result types from @computesdk/client\n// These are the canonical types for code and command execution\nexport {\n type CodeResult,\n type CommandResult,\n type CodeLanguage,\n type CodeRunOptions,\n type CommandRunOptions,\n} from '@computesdk/client';\n\n// Re-export shared types from @computesdk/client (canonical source)\nexport {\n type Runtime,\n type SandboxStatus,\n type RunCommandOptions,\n type CreateSandboxOptions,\n type FileEntry,\n type SandboxFileSystem,\n CommandExitError,\n isCommandExitError,\n} from '@computesdk/client';\n\n// Import ProviderSandboxInfo and re-export as SandboxInfo for backwards compatibility\nimport type { ProviderSandboxInfo } from '@computesdk/client';\n\n/**\n * Information about a sandbox (provider-agnostic)\n * @see ProviderSandboxInfo in @computesdk/client for the canonical definition\n */\nexport type SandboxInfo = ProviderSandboxInfo;\n\n// Import for use within this file\nimport type { CodeResult, CommandResult, Runtime, SandboxFileSystem, RunCommandOptions } from '@computesdk/client';\n\n// Import Provider type - TypeScript handles circular type dependencies fine\nimport type { Provider } from './provider';\n\n// ============================================================================\n// Provider Sandbox - Base interface for provider implementations\n// ============================================================================\n\n/**\n * Provider sandbox interface - what external providers (e2b, railway, etc.) return\n *\n * This is the base interface that all provider sandboxes must implement.\n * The gateway provider returns the full Sandbox from @computesdk/client which\n * extends this with ComputeClient features (terminals, watchers, signals).\n *\n * @example Provider implementation\n * ```typescript\n * // In @computesdk/e2b\n * const e2bProvider = createProvider<E2BSandbox, E2BConfig>({\n * name: 'e2b',\n * methods: {\n * sandbox: {\n * create: async (config, options) => {\n * const sandbox = await E2BSandbox.create({ ... });\n * return { sandbox, sandboxId: sandbox.id };\n * },\n * // ... other methods\n * }\n * }\n * });\n * ```\n */\nexport interface ProviderSandbox<TSandbox = any> {\n /** Unique identifier for the sandbox */\n readonly sandboxId: string;\n /** Provider that created this sandbox */\n readonly provider: string;\n\n /** Execute code in the sandbox */\n runCode(code: string, runtime?: Runtime): Promise<CodeResult>;\n /** Execute shell commands */\n runCommand(\n commandOrArray: string | [string, ...string[]],\n argsOrOptions?: string[] | RunCommandOptions,\n maybeOptions?: RunCommandOptions\n ): Promise<CommandResult>;\n /** Get information about the sandbox */\n getInfo(): Promise<SandboxInfo>;\n /** Get URL for accessing the sandbox on a specific port */\n getUrl(options: { port: number; protocol?: string }): Promise<string>;\n /** Get the provider instance that created this sandbox */\n getProvider(): import('./provider').Provider<TSandbox>;\n /** Get the native provider sandbox instance with proper typing */\n getInstance(): TSandbox;\n /** Kill the sandbox */\n kill(): Promise<void>;\n /** Destroy the sandbox and clean up resources */\n destroy(): Promise<void>;\n\n /** File system operations */\n readonly filesystem: SandboxFileSystem;\n\n // ============================================================================\n // Enhanced Features (Optional - available on gateway provider's Sandbox)\n // ============================================================================\n\n /**\n * Create an interactive terminal (PTY or exec mode)\n * @optional Available when using gateway provider\n */\n createTerminal?(options?: {\n shell?: string;\n pty?: boolean;\n encoding?: 'utf8' | 'binary';\n }): Promise<any>;\n\n /**\n * Create a file system watcher\n * @optional Available when using gateway provider\n */\n createWatcher?(path: string, options?: {\n recursive?: boolean;\n includeContent?: boolean;\n }): Promise<any>;\n\n /**\n * Send a signal to a process\n * @optional Available when using gateway provider\n */\n sendSignal?(pid: number, signal: string): Promise<void>;\n}\n\n// ============================================================================\n// Typed Variants\n// ============================================================================\n\n/**\n * Extract the sandbox type from a provider using generic inference\n */\nexport type ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox, any, any> ? TSandbox : any;\n\n/**\n * Typed provider sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedProviderSandbox<TProvider extends Provider<any, any, any>> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {\n /** Get the provider instance that created this sandbox with proper typing */\n getProvider(): TProvider;\n /** Get the native provider sandbox instance with proper typing */\n getInstance(): ExtractProviderSandboxType<TProvider>;\n}\n","/**\n * Unified Provider Configuration\n *\n * Single source of truth for all provider auth requirements.\n * Used by both explicit mode (computesdk) and magic mode (workbench).\n */\n\n/**\n * Provider auth requirements\n *\n * Structure: { provider: [[option1_vars], [option2_vars], ...] }\n * - Outer array: OR conditions (any option can satisfy auth)\n * - Inner arrays: AND conditions (all vars in option must be present)\n *\n * Example: vercel: [['OIDC_TOKEN'], ['TOKEN', 'TEAM_ID', 'PROJECT_ID']]\n * -> Ready if OIDC_TOKEN is set, OR if all three traditional vars are set\n */\nexport const PROVIDER_AUTH = {\n e2b: [['E2B_API_KEY']],\n modal: [['MODAL_TOKEN_ID', 'MODAL_TOKEN_SECRET']],\n railway: [['RAILWAY_API_KEY', 'RAILWAY_PROJECT_ID', 'RAILWAY_ENVIRONMENT_ID']],\n daytona: [['DAYTONA_API_KEY']],\n vercel: [\n ['VERCEL_OIDC_TOKEN'],\n ['VERCEL_TOKEN', 'VERCEL_TEAM_ID', 'VERCEL_PROJECT_ID'],\n ],\n runloop: [['RUNLOOP_API_KEY']],\n cloudflare: [['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID']],\n codesandbox: [['CSB_API_KEY']],\n blaxel: [['BL_API_KEY', 'BL_WORKSPACE']],\n} as const;\n\n/**\n * All supported provider names (excluding gateway which is special)\n */\nexport const PROVIDER_NAMES = Object.keys(PROVIDER_AUTH) as ProviderName[];\n\n/**\n * Provider name type derived from PROVIDER_AUTH\n */\nexport type ProviderName = keyof typeof PROVIDER_AUTH;\n\n/**\n * Header mapping for each provider\n * Maps config field names to HTTP header names\n */\nexport const PROVIDER_HEADERS: Record<ProviderName, Record<string, string>> = {\n e2b: {\n apiKey: 'X-E2B-API-Key',\n },\n modal: {\n tokenId: 'X-Modal-Token-Id',\n tokenSecret: 'X-Modal-Token-Secret',\n },\n railway: {\n apiToken: 'X-Railway-API-Token',\n },\n daytona: {\n apiKey: 'X-Daytona-API-Key',\n },\n vercel: {\n oidcToken: 'X-Vercel-OIDC-Token',\n token: 'X-Vercel-Token',\n teamId: 'X-Vercel-Team-Id',\n projectId: 'X-Vercel-Project-Id',\n },\n runloop: {\n apiKey: 'X-Runloop-API-Key',\n },\n cloudflare: {\n apiToken: 'X-Cloudflare-API-Token',\n accountId: 'X-Cloudflare-Account-Id',\n },\n codesandbox: {\n apiKey: 'X-CSB-API-Key',\n },\n blaxel: {\n apiKey: 'X-BL-API-Key',\n workspace: 'X-BL-Workspace',\n },\n};\n\n/**\n * Environment variable to config field mapping for each provider\n */\nexport const PROVIDER_ENV_MAP: Record<ProviderName, Record<string, string>> = {\n e2b: {\n E2B_API_KEY: 'apiKey',\n },\n modal: {\n MODAL_TOKEN_ID: 'tokenId',\n MODAL_TOKEN_SECRET: 'tokenSecret',\n },\n railway: {\n RAILWAY_API_KEY: 'apiToken',\n RAILWAY_PROJECT_ID: 'projectId',\n RAILWAY_ENVIRONMENT_ID: 'environmentId',\n },\n daytona: {\n DAYTONA_API_KEY: 'apiKey',\n },\n vercel: {\n VERCEL_OIDC_TOKEN: 'oidcToken',\n VERCEL_TOKEN: 'token',\n VERCEL_TEAM_ID: 'teamId',\n VERCEL_PROJECT_ID: 'projectId',\n },\n runloop: {\n RUNLOOP_API_KEY: 'apiKey',\n },\n cloudflare: {\n CLOUDFLARE_API_TOKEN: 'apiToken',\n CLOUDFLARE_ACCOUNT_ID: 'accountId',\n },\n codesandbox: {\n CSB_API_KEY: 'apiKey',\n },\n blaxel: {\n BL_API_KEY: 'apiKey',\n BL_WORKSPACE: 'workspace',\n },\n};\n\n/**\n * Dashboard URLs for each provider (for error messages)\n */\nexport const PROVIDER_DASHBOARD_URLS: Record<ProviderName, string> = {\n e2b: 'https://e2b.dev/dashboard',\n modal: 'https://modal.com/settings',\n railway: 'https://railway.app/account/tokens',\n daytona: 'https://daytona.io/dashboard',\n vercel: 'https://vercel.com/account/tokens',\n runloop: 'https://runloop.ai/dashboard',\n cloudflare: 'https://dash.cloudflare.com/profile/api-tokens',\n codesandbox: 'https://codesandbox.io/dashboard/settings',\n blaxel: 'https://blaxel.ai/dashboard',\n};\n\n/**\n * Check if a provider name is valid\n */\nexport function isValidProvider(name: string): name is ProviderName {\n return name in PROVIDER_AUTH;\n}\n\n/**\n * Build headers from provider config\n */\nexport function buildProviderHeaders(\n provider: ProviderName,\n config: Record<string, string | undefined>\n): Record<string, string> {\n const headers: Record<string, string> = {};\n const headerMap = PROVIDER_HEADERS[provider];\n\n for (const [configKey, headerName] of Object.entries(headerMap)) {\n const value = config[configKey];\n if (value) {\n headers[headerName] = value;\n }\n }\n\n return headers;\n}\n\n/**\n * Get provider config from environment variables\n */\nexport function getProviderConfigFromEnv(provider: ProviderName): Record<string, string> {\n const config: Record<string, string> = {};\n const envMap = PROVIDER_ENV_MAP[provider];\n\n for (const [envVar, configKey] of Object.entries(envMap)) {\n const value = process.env[envVar];\n if (value) {\n config[configKey] = value;\n }\n }\n\n return config;\n}\n\n/**\n * Check if provider has complete auth from environment\n */\nexport function isProviderAuthComplete(provider: ProviderName): boolean {\n const authOptions = PROVIDER_AUTH[provider];\n\n for (const option of authOptions) {\n const allPresent = option.every(envVar => !!process.env[envVar]);\n if (allPresent) return true;\n }\n\n return false;\n}\n\n/**\n * Get missing env vars for a provider (returns the option closest to completion)\n */\nexport function getMissingEnvVars(provider: ProviderName): string[] {\n const authOptions = PROVIDER_AUTH[provider];\n let bestOption: { presentCount: number; missing: string[] } | null = null;\n\n for (const option of authOptions) {\n const missing: string[] = [];\n let presentCount = 0;\n\n for (const envVar of option) {\n if (process.env[envVar]) {\n presentCount++;\n } else {\n missing.push(envVar);\n }\n }\n\n if (missing.length === 0) return [];\n\n if (!bestOption || presentCount > bestOption.presentCount) {\n bestOption = { presentCount, missing };\n }\n }\n\n return bestOption?.missing ?? [];\n}\n","/**\n * ComputeSDK Constants\n *\n * Default configuration values and provider definitions\n */\n\n// Re-export provider config as the single source of truth\nexport {\n PROVIDER_AUTH,\n PROVIDER_NAMES,\n PROVIDER_HEADERS,\n PROVIDER_ENV_MAP,\n PROVIDER_DASHBOARD_URLS,\n type ProviderName,\n isValidProvider,\n buildProviderHeaders,\n getProviderConfigFromEnv,\n isProviderAuthComplete,\n getMissingEnvVars,\n} from './provider-config';\n\n/**\n * Default gateway URL for sandbox lifecycle operations\n */\nexport const GATEWAY_URL = 'https://gateway.computesdk.com';\n\n/**\n * Provider detection priority order\n * When multiple provider credentials are detected, use the first one in this list\n */\nexport const PROVIDER_PRIORITY = [\n 'e2b',\n 'railway',\n 'daytona',\n 'modal',\n 'runloop',\n 'vercel',\n 'cloudflare',\n 'codesandbox',\n 'blaxel',\n] as const;\n\n/**\n * Required environment variables for each provider\n * @deprecated Use PROVIDER_AUTH from provider-config instead\n */\nexport const PROVIDER_ENV_VARS = {\n e2b: ['E2B_API_KEY'],\n railway: ['RAILWAY_API_KEY', 'RAILWAY_PROJECT_ID', 'RAILWAY_ENVIRONMENT_ID'],\n daytona: ['DAYTONA_API_KEY'],\n modal: ['MODAL_TOKEN_ID', 'MODAL_TOKEN_SECRET'],\n runloop: ['RUNLOOP_API_KEY'],\n vercel: ['VERCEL_TOKEN', 'VERCEL_TEAM_ID', 'VERCEL_PROJECT_ID'],\n cloudflare: ['CLOUDFLARE_API_TOKEN', 'CLOUDFLARE_ACCOUNT_ID'],\n codesandbox: ['CSB_API_KEY'],\n blaxel: ['BL_API_KEY', 'BL_WORKSPACE'],\n} as const;\n","/**\n * Gateway Provider\n *\n * Built-in provider that communicates with the ComputeSDK gateway for sandbox lifecycle\n * and uses ClientSandbox (from @computesdk/client) for all sandbox operations.\n *\n * Architecture:\n * - Lifecycle operations (create/destroy) → Gateway API\n * - Sandbox operations → ClientSandbox directly\n */\n\nimport { Sandbox as ClientSandbox } from '@computesdk/client';\nimport { createProvider, type BaseProviderConfig } from '../factory';\nimport { waitForComputeReady } from '../compute-daemon/lifecycle';\nimport type { Runtime, SandboxInfo } from '../types';\nimport { calculateBackoff } from '../utils';\n\n/**\n * Gateway provider configuration\n */\nexport interface GatewayConfig extends BaseProviderConfig {\n /** Gateway URL (default: https://gateway.computesdk.com) */\n gatewayUrl?: string;\n /** ComputeSDK API key for authentication */\n apiKey: string;\n /** Backend provider name (e2b, railway, etc.) */\n provider: string;\n /** Provider-specific headers to pass through to gateway */\n providerHeaders?: Record<string, string>;\n /** Request timeout in milliseconds (default: 30000) */\n requestTimeout?: number;\n /** Maximum retry attempts for transient failures (default: 3) */\n maxRetries?: number;\n /** Initial retry delay in milliseconds (default: 1000) */\n retryDelay?: number;\n /** HTTP status codes that should trigger a retry (default: [408, 429, 502, 503, 504]) */\n retryableStatuses?: number[];\n}\n\nconst DEFAULT_GATEWAY_URL = 'https://gateway.computesdk.com';\nconst DEFAULT_REQUEST_TIMEOUT = 30000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\nconst DEFAULT_RETRYABLE_STATUSES = [408, 429, 502, 503, 504];\n\n// Track if we've already warned about missing tokens to avoid spam\nlet hasWarnedAboutMissingToken = false;\n\n/**\n * Custom error class for gateway-specific errors with enhanced context\n */\nexport class GatewayError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly provider?: string,\n public readonly sandboxId?: string,\n public readonly requestId?: string\n ) {\n super(message);\n this.name = 'GatewayError';\n }\n}\n\n/**\n * Helper to call gateway API with timeout, retry logic, and better error handling\n * \n * Error handling strategy:\n * - 404 (Not Found): Returns { success: false } without throwing - allows callers to handle missing resources gracefully\n * - Other HTTP errors: Throws GatewayError with detailed context - indicates actual API problems\n * - Network errors: Throws GatewayError after retries exhausted\n */\nasync function gatewayFetch<T>(\n url: string,\n config: GatewayConfig,\n options: RequestInit = {}\n): Promise<{ success: boolean; data?: T }> {\n const timeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT;\n const maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;\n const retryDelay = config.retryDelay ?? DEFAULT_RETRY_DELAY;\n const retryableStatuses = config.retryableStatuses ?? DEFAULT_RETRYABLE_STATUSES;\n\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n const startTime = Date.now();\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n signal: controller.signal,\n headers: {\n 'Content-Type': 'application/json',\n 'X-ComputeSDK-API-Key': config.apiKey,\n 'X-Provider': config.provider,\n ...(config.providerHeaders || {}),\n ...options.headers,\n },\n });\n\n clearTimeout(timeoutId);\n const duration = Date.now() - startTime;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] ${options.method || 'GET'} ${url} - ${response.status} (${duration}ms)`);\n }\n\n if (!response.ok) {\n if (response.status === 404) {\n return { success: false };\n }\n\n const errorText = await response.text().catch(() => response.statusText);\n const requestId = response.headers.get('x-request-id');\n\n // Check if this error is retryable\n const isRetryable = retryableStatuses.includes(response.status);\n const shouldRetry = isRetryable && attempt < maxRetries;\n\n if (shouldRetry) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (status: ${response.status})...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n // Build helpful error message\n let errorMessage = `Gateway API error: ${errorText}`;\n if (response.status === 401) {\n errorMessage = `Invalid ComputeSDK API key.\\n\\nCheck your COMPUTESDK_API_KEY environment variable.\\nGet your key at: https://computesdk.com/dashboard`;\n } else if (response.status === 403) {\n errorMessage = `Access forbidden. Your API key may not have permission to use provider \"${config.provider}\".\\n\\nVisit https://computesdk.com/dashboard to check your plan.`;\n } else if (response.status === 429) {\n errorMessage = `Rate limit exceeded. Please try again in a moment.\\n\\nIf this persists, visit https://computesdk.com/dashboard to upgrade your plan.`;\n } else if (response.status >= 500) {\n errorMessage = `Gateway server error (${response.status}). This is temporary - please try again.\\n\\nIf this persists, check status at https://status.computesdk.com`;\n }\n\n throw new GatewayError(\n errorMessage,\n response.status,\n config.provider,\n undefined,\n requestId || undefined\n );\n }\n\n return response.json();\n } catch (error) {\n clearTimeout(timeoutId);\n\n // If it's already a GatewayError, just rethrow\n if (error instanceof GatewayError) {\n lastError = error;\n throw error;\n }\n\n // Handle timeout errors\n if (error instanceof Error && error.name === 'AbortError') {\n const timeoutError = new GatewayError(\n `Request timed out after ${timeout}ms.\\n\\nThe gateway may be experiencing high load or network issues.\\nCheck your connection and try again.`,\n 408,\n config.provider\n );\n\n // Retry on timeout if attempts remain\n if (attempt < maxRetries) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (timeout)...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n lastError = timeoutError;\n continue;\n }\n\n throw timeoutError;\n }\n\n // Handle network errors\n const networkError = new GatewayError(\n `Failed to connect to gateway: ${error instanceof Error ? error.message : String(error)}\\n\\nCheck your internet connection and gateway URL.`,\n 0,\n config.provider\n );\n\n // Retry on network error if attempts remain\n if (attempt < maxRetries) {\n const delay = calculateBackoff(attempt, retryDelay);\n\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Retry ${attempt + 1}/${maxRetries} after ${delay.toFixed(0)}ms (network error)...`);\n }\n\n await new Promise(resolve => setTimeout(resolve, delay));\n lastError = networkError;\n continue;\n }\n\n throw networkError;\n }\n }\n\n // If we get here, all retries failed\n throw lastError || new Error('Max retries exceeded');\n}\n\n/**\n * Gateway Provider factory\n *\n * Uses ClientSandbox directly as the sandbox type - no wrapper needed.\n */\nexport const gateway = createProvider<ClientSandbox, GatewayConfig>({\n name: 'gateway',\n methods: {\n sandbox: {\n create: async (config, options) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n const result = await gatewayFetch<{\n sandboxId: string;\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n name?: string;\n namespace?: string;\n }>(`${gatewayUrl}/v1/sandboxes`, config, {\n method: 'POST',\n body: JSON.stringify(options || {}),\n });\n\n if (!result.success || !result.data) {\n throw new Error(`Gateway returned invalid response: ${JSON.stringify(result)}`);\n }\n\n const { sandboxId, url, token, provider, metadata, name, namespace } = result.data;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Sandbox created:`, {\n sandboxId,\n url,\n hasToken: !!token,\n tokenPrefix: token ? token.substring(0, 10) + '...' : 'none',\n provider,\n });\n }\n\n // Warn if token is missing (indicates gateway may be running old version)\n // Only warn once to avoid log spam\n if (!token && !hasWarnedAboutMissingToken) {\n hasWarnedAboutMissingToken = true;\n console.warn(\n `[Gateway] No token received from gateway for sandbox ${sandboxId}. ` +\n `Falling back to API key for authentication. ` +\n `This may indicate the gateway is running an outdated version. ` +\n `Check gateway deployment at ${config.gatewayUrl || DEFAULT_GATEWAY_URL}`\n );\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey, // Use token from gateway, fallback to API key\n metadata: {\n ...metadata,\n ...(name && { name }),\n ...(namespace && { namespace }),\n },\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n getById: async (config, sandboxId) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n const result = await gatewayFetch<{\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n }>(`${gatewayUrl}/v1/sandboxes/${sandboxId}`, config);\n\n if (!result.success || !result.data) {\n return null;\n }\n\n const { url, token, provider, metadata } = result.data;\n\n // Warn if token is missing on reconnection\n // Only warn once to avoid log spam\n if (!token && !hasWarnedAboutMissingToken) {\n hasWarnedAboutMissingToken = true;\n console.warn(\n `[Gateway] No token received when reconnecting to sandbox ${sandboxId}. ` +\n `Falling back to API key for authentication. ` +\n `This may indicate the gateway is running an outdated version.`\n );\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey, // Use token from gateway, fallback to API key\n metadata,\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n list: async () => {\n throw new Error(\n 'Gateway provider does not support listing sandboxes. Use getById() with a known sandbox ID instead.'\n );\n },\n\n destroy: async (config, sandboxId) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n await gatewayFetch(`${gatewayUrl}/v1/sandboxes/${sandboxId}`, config, {\n method: 'DELETE',\n });\n },\n\n findOrCreate: async (config, options) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n // Extract name and namespace from options, pass rest through\n const { name: requestedName, namespace: requestedNamespace, ...restOptions } = options;\n\n const result = await gatewayFetch<{\n sandboxId: string;\n name: string;\n namespace: string;\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n }>(`${gatewayUrl}/v1/sandboxes/find-or-create`, config, {\n method: 'POST',\n body: JSON.stringify({\n namespace: requestedNamespace || 'default',\n name: requestedName,\n ...restOptions,\n }),\n });\n\n if (!result.success || !result.data) {\n throw new Error(`Gateway returned invalid response: ${JSON.stringify(result)}`);\n }\n\n const { sandboxId, url, token, provider, metadata, name, namespace } = result.data;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Named sandbox found/created:`, {\n sandboxId,\n name,\n namespace,\n url,\n hasToken: !!token,\n provider,\n });\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey,\n metadata: {\n ...metadata,\n name,\n namespace,\n },\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n find: async (config, options) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n\n const result = await gatewayFetch<{\n sandboxId: string;\n name: string;\n namespace: string;\n url: string;\n token: string;\n provider: string;\n metadata?: Record<string, unknown>;\n } | null>(`${gatewayUrl}/v1/sandboxes/find`, config, {\n method: 'POST',\n body: JSON.stringify({\n namespace: options.namespace || 'default',\n name: options.name,\n }),\n });\n\n if (!result.success || !result.data) {\n return null;\n }\n\n const { sandboxId, url, token, provider, metadata, name, namespace } = result.data;\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Named sandbox found:`, {\n sandboxId,\n name,\n namespace,\n url,\n });\n }\n\n const sandbox = new ClientSandbox({\n sandboxUrl: url,\n sandboxId,\n provider,\n token: token || config.apiKey,\n metadata: {\n ...metadata,\n name,\n namespace,\n },\n WebSocket: globalThis.WebSocket,\n });\n\n await waitForComputeReady(sandbox);\n\n return { sandbox, sandboxId };\n },\n\n extendTimeout: async (config, sandboxId, options) => {\n const gatewayUrl = config.gatewayUrl || DEFAULT_GATEWAY_URL;\n const duration = options?.duration ?? 900000; // Default to 15 minutes\n\n // Debug logging\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Gateway] Extending timeout for sandbox ${sandboxId} by ${duration}ms`);\n }\n\n await gatewayFetch(`${gatewayUrl}/v1/sandboxes/${sandboxId}/extend`, config, {\n method: 'POST',\n body: JSON.stringify({ duration }),\n });\n },\n\n // All operations delegate directly to ClientSandbox\n runCode: async (sandbox, code, runtime) => sandbox.runCode(code, runtime),\n runCommand: async (sandbox, command, args) => sandbox.runCommand(command, args),\n getUrl: async (sandbox, options) => sandbox.getUrl(options),\n\n getInfo: async (sandbox): Promise<SandboxInfo> => {\n const info = await sandbox.getInfo();\n return {\n id: info.id,\n provider: info.provider,\n runtime: info.runtime as Runtime,\n status: info.status,\n createdAt: info.createdAt,\n timeout: info.timeout,\n metadata: info.metadata || {},\n };\n },\n\n // Filesystem delegates directly to ClientSandbox\n filesystem: {\n readFile: async (sandbox, path) => sandbox.filesystem.readFile(path),\n writeFile: async (sandbox, path, content) => sandbox.filesystem.writeFile(path, content),\n mkdir: async (sandbox, path) => sandbox.filesystem.mkdir(path),\n readdir: async (sandbox, path) => sandbox.filesystem.readdir(path),\n exists: async (sandbox, path) => sandbox.filesystem.exists(path),\n remove: async (sandbox, path) => sandbox.filesystem.remove(path),\n },\n\n // getInstance returns the ClientSandbox directly\n getInstance: (sandbox) => sandbox,\n },\n },\n});\n\n// Re-export Sandbox type for users who want direct client access\nexport { Sandbox } from '@computesdk/client';\n","/**\n * Provider Factory - Creates providers from method definitions\n * \n * Eliminates boilerplate by auto-generating Provider/Sandbox classes\n * from simple method definitions with automatic feature detection.\n */\n\nimport type {\n Provider,\n ProviderSandboxManager,\n ProviderTemplateManager,\n ProviderSnapshotManager,\n ProviderSandbox,\n SandboxFileSystem,\n SandboxInfo,\n CodeResult,\n CommandResult,\n Runtime,\n CreateSandboxOptions,\n FileEntry,\n RunCommandOptions,\n CreateSnapshotOptions,\n ListSnapshotsOptions,\n CreateTemplateOptions,\n ListTemplatesOptions,\n FindOrCreateSandboxOptions,\n FindSandboxOptions,\n ExtendTimeoutOptions,\n} from './types/index.js';\nimport { cmd, type Command } from '@computesdk/cmd';\n\n/**\n * Flat sandbox method implementations - all operations in one place\n */\nexport interface SandboxMethods<TSandbox = any, TConfig = any> {\n // Collection operations (map to compute.sandbox.*)\n create: (config: TConfig, options?: CreateSandboxOptions) => Promise<{ sandbox: TSandbox; sandboxId: string }>;\n getById: (config: TConfig, sandboxId: string) => Promise<{ sandbox: TSandbox; sandboxId: string } | null>;\n list: (config: TConfig) => Promise<Array<{ sandbox: TSandbox; sandboxId: string }>>;\n destroy: (config: TConfig, sandboxId: string) => Promise<void>;\n\n // Optional named sandbox operations\n findOrCreate?: (config: TConfig, options: FindOrCreateSandboxOptions) => Promise<{ sandbox: TSandbox; sandboxId: string }>;\n find?: (config: TConfig, options: FindSandboxOptions) => Promise<{ sandbox: TSandbox; sandboxId: string } | null>;\n \n // Optional timeout management\n extendTimeout?: (config: TConfig, sandboxId: string, options?: ExtendTimeoutOptions) => Promise<void>;\n\n // Instance operations\n runCode: (sandbox: TSandbox, code: string, runtime?: Runtime, config?: TConfig) => Promise<CodeResult>;\n runCommand: (sandbox: TSandbox, command: string, args?: string[], options?: RunCommandOptions) => Promise<CommandResult>;\n getInfo: (sandbox: TSandbox) => Promise<SandboxInfo>;\n getUrl: (sandbox: TSandbox, options: { port: number; protocol?: string }) => Promise<string>;\n\n // Optional provider-specific typed getInstance method\n getInstance?: (sandbox: TSandbox) => TSandbox;\n\n // Optional filesystem methods\n filesystem?: {\n readFile: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<string>;\n writeFile: (sandbox: TSandbox, path: string, content: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n mkdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n readdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<FileEntry[]>;\n exists: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<boolean>;\n remove: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<CommandResult>) => Promise<void>;\n };\n}\n\n/**\n * Template method implementations\n */\nexport interface TemplateMethods<TTemplate = any, TConfig = any, TCreateOptions extends CreateTemplateOptions = CreateTemplateOptions> {\n create: (config: TConfig, options: TCreateOptions) => Promise<TTemplate>;\n list: (config: TConfig, options?: ListTemplatesOptions) => Promise<TTemplate[]>;\n delete: (config: TConfig, templateId: string) => Promise<void>;\n}\n\n/**\n * Snapshot method implementations \n */\nexport interface SnapshotMethods<TSnapshot = any, TConfig = any> {\n create: (config: TConfig, sandboxId: string, options?: CreateSnapshotOptions) => Promise<TSnapshot>;\n list: (config: TConfig, options?: ListSnapshotsOptions) => Promise<TSnapshot[]>;\n delete: (config: TConfig, snapshotId: string) => Promise<void>;\n}\n\n/**\n * Provider execution modes\n *\n * - 'raw': Use raw provider methods directly (for gateway internal use)\n * - 'direct': Use provider's native SDK directly (for providers with sandbox capabilities)\n * - 'gateway': Route through ComputeSDK gateway (for providers without native sandbox)\n */\nexport type ProviderMode = 'raw' | 'direct' | 'gateway';\n\n/**\n * Provider configuration for createProvider()\n */\nexport interface ProviderConfig<TSandbox = any, TConfig = any, TTemplate = any, TSnapshot = any> {\n name: string;\n /**\n * Default execution mode for this provider (defaults to 'gateway' if not specified)\n *\n * - 'direct': Provider has native sandbox capabilities (e.g., E2B) - uses provider SDK directly\n * - 'gateway': Provider only has infrastructure (e.g., Railway) - routes through gateway\n *\n * Can be overridden at runtime with `mode` in config.\n */\n defaultMode?: 'direct' | 'gateway';\n methods: {\n sandbox: SandboxMethods<TSandbox, TConfig>;\n template?: TemplateMethods<TTemplate, TConfig>;\n snapshot?: SnapshotMethods<TSnapshot, TConfig>;\n };\n}\n\n/**\n * Base config that all provider configs should extend\n * Includes the `mode` option for controlling execution mode\n */\nexport interface BaseProviderConfig {\n /**\n * Execution mode override\n *\n * - 'raw': Use raw provider methods directly (for gateway internal use)\n * - 'direct': Use provider's native SDK directly\n * - 'gateway': Route through ComputeSDK gateway\n *\n * If not specified, uses the provider's `defaultMode`.\n */\n mode?: ProviderMode;\n}\n\n/**\n * Auto-generated filesystem implementation that throws \"not supported\" errors\n */\nclass UnsupportedFileSystem implements SandboxFileSystem {\n private readonly providerName: string;\n\n constructor(providerName: string) {\n this.providerName = providerName;\n }\n\n async readFile(_path: string): Promise<string> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async mkdir(_path: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async readdir(_path: string): Promise<FileEntry[]> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async exists(_path: string): Promise<boolean> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n\n async remove(_path: string): Promise<void> {\n throw new Error(`Filesystem operations are not supported by ${this.providerName}'s sandbox environment. ${this.providerName} sandboxes are designed for code execution only.`);\n }\n}\n\n\n\n/**\n * Auto-generated filesystem implementation that wraps provider methods\n */\nclass SupportedFileSystem<TSandbox> implements SandboxFileSystem {\n constructor(\n private sandbox: TSandbox,\n private methods: NonNullable<SandboxMethods<TSandbox>['filesystem']>,\n private allMethods: SandboxMethods<TSandbox>\n ) {}\n\n async readFile(path: string): Promise<string> {\n return this.methods.readFile(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async writeFile(path: string, content: string): Promise<void> {\n return this.methods.writeFile(this.sandbox, path, content, this.allMethods.runCommand);\n }\n\n async mkdir(path: string): Promise<void> {\n return this.methods.mkdir(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async readdir(path: string): Promise<FileEntry[]> {\n return this.methods.readdir(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async exists(path: string): Promise<boolean> {\n return this.methods.exists(this.sandbox, path, this.allMethods.runCommand);\n }\n\n async remove(path: string): Promise<void> {\n return this.methods.remove(this.sandbox, path, this.allMethods.runCommand);\n }\n}\n\n\n\n\n\n/**\n * Generated sandbox class - implements the ProviderSandbox interface\n */\nclass GeneratedSandbox<TSandbox = any> implements ProviderSandbox<TSandbox> {\n readonly sandboxId: string;\n readonly provider: string;\n readonly filesystem: SandboxFileSystem;\n\n constructor(\n private sandbox: TSandbox,\n sandboxId: string,\n providerName: string,\n private methods: SandboxMethods<TSandbox>,\n private config: any,\n private destroyMethod: (config: any, sandboxId: string) => Promise<void>,\n private providerInstance: Provider\n ) {\n this.sandboxId = sandboxId;\n this.provider = providerName;\n\n // Auto-detect filesystem support\n if (methods.filesystem) {\n this.filesystem = new SupportedFileSystem(sandbox, methods.filesystem, methods);\n } else {\n this.filesystem = new UnsupportedFileSystem(providerName);\n }\n }\n\n getInstance(): TSandbox {\n // Use provider-specific typed getInstance if available\n if (this.methods.getInstance) {\n return this.methods.getInstance(this.sandbox);\n }\n // Fallback to returning the sandbox directly\n return this.sandbox;\n }\n\n async runCode(code: string, runtime?: Runtime): Promise<CodeResult> {\n return await this.methods.runCode(this.sandbox, code, runtime, this.config);\n }\n\n async runCommand(\n commandOrArray: string | [string, ...string[]],\n argsOrOptions?: string[] | RunCommandOptions,\n maybeOptions?: RunCommandOptions\n ): Promise<CommandResult> {\n // Parse overloaded arguments\n let command: string;\n let args: string[];\n let options: RunCommandOptions | undefined;\n\n if (Array.isArray(commandOrArray)) {\n // Array form: runCommand(['npm', 'install'], { cwd: '/app' })\n [command, ...args] = commandOrArray;\n options = argsOrOptions as RunCommandOptions | undefined;\n } else {\n // Traditional form: runCommand('npm', ['install'], { cwd: '/app' })\n command = commandOrArray;\n args = (Array.isArray(argsOrOptions) ? argsOrOptions : []) as string[];\n options = Array.isArray(argsOrOptions) ? maybeOptions : argsOrOptions as RunCommandOptions | undefined;\n }\n\n // Build the command tuple\n const baseCommand: Command = args.length > 0 ? [command, ...args] : [command];\n\n // Use cmd() helper to handle cwd and background options\n if (options?.cwd || options?.background) {\n const wrappedCommand = cmd(baseCommand, {\n cwd: options.cwd,\n background: options.background,\n });\n const [wrappedCmd, ...wrappedArgs] = wrappedCommand;\n return await this.methods.runCommand(this.sandbox, wrappedCmd, wrappedArgs, undefined);\n }\n\n return await this.methods.runCommand(this.sandbox, command, args, options);\n }\n\n async getInfo(): Promise<SandboxInfo> {\n return await this.methods.getInfo(this.sandbox);\n }\n\n async getUrl(options: { port: number; protocol?: string }): Promise<string> {\n return await this.methods.getUrl(this.sandbox, options);\n }\n\n getProvider(): Provider<TSandbox> {\n return this.providerInstance;\n }\n\n async kill(): Promise<void> {\n // For backward compatibility, kill() delegates to destroy()\n await this.destroy();\n }\n\n async destroy(): Promise<void> {\n // Destroy via the provider's destroy method using our sandboxId\n await this.destroyMethod(this.config, this.sandboxId);\n }\n}\n\n/**\n * Determines the effective execution mode\n *\n * @param config - Runtime config (may contain `mode` override)\n * @param defaultMode - Provider's default mode\n * @returns The effective execution mode\n */\nfunction getEffectiveMode(config: BaseProviderConfig, defaultMode: 'direct' | 'gateway'): ProviderMode {\n // If mode is explicitly set in config, use it\n if (config.mode) {\n return config.mode;\n }\n\n // Otherwise use provider's default mode\n return defaultMode;\n}\n\n/**\n * Auto-generated Sandbox Manager implementation\n */\nclass GeneratedSandboxManager<TSandbox, TConfig> implements ProviderSandboxManager<TSandbox> {\n private readonly effectiveMode: ProviderMode;\n\n constructor(\n private config: TConfig,\n private providerName: string,\n private methods: SandboxMethods<TSandbox, TConfig>,\n private providerInstance: Provider,\n defaultMode: 'direct' | 'gateway'\n ) {\n this.effectiveMode = getEffectiveMode(config as BaseProviderConfig, defaultMode);\n }\n\n async create(options?: CreateSandboxOptions): Promise<ProviderSandbox<TSandbox>> {\n // Default to 'node' runtime if not specified for consistency across providers\n const optionsWithDefaults = { runtime: 'node' as Runtime, ...options };\n const result = await this.methods.create(this.config, optionsWithDefaults);\n \n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async getById(sandboxId: string): Promise<ProviderSandbox<TSandbox> | null> {\n const result = await this.methods.getById(this.config, sandboxId);\n if (!result) {\n return null;\n }\n\n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async list(): Promise<ProviderSandbox<TSandbox>[]> {\n const results = await this.methods.list(this.config);\n \n return results.map(result => new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n ));\n }\n\n async destroy(sandboxId: string): Promise<void> {\n await this.methods.destroy(this.config, sandboxId);\n }\n\n async findOrCreate(options: FindOrCreateSandboxOptions): Promise<ProviderSandbox<TSandbox>> {\n if (!this.methods.findOrCreate) {\n throw new Error(\n `Provider '${this.providerName}' does not support findOrCreate.\\n` +\n `This feature requires gateway provider with named sandbox support.`\n );\n }\n\n const result = await this.methods.findOrCreate(this.config, options);\n \n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async find(options: FindSandboxOptions): Promise<ProviderSandbox<TSandbox> | null> {\n if (!this.methods.find) {\n throw new Error(\n `Provider '${this.providerName}' does not support find.\\n` +\n `This feature requires gateway provider with named sandbox support.`\n );\n }\n\n const result = await this.methods.find(this.config, options);\n if (!result) {\n return null;\n }\n\n return new GeneratedSandbox<TSandbox>(\n result.sandbox,\n result.sandboxId,\n this.providerName,\n this.methods,\n this.config,\n this.methods.destroy,\n this.providerInstance\n );\n }\n\n async extendTimeout(sandboxId: string, options?: ExtendTimeoutOptions): Promise<void> {\n if (!this.methods.extendTimeout) {\n throw new Error(\n `Provider '${this.providerName}' does not support extendTimeout.\\n` +\n `This feature requires gateway provider with timeout extension support.`\n );\n }\n\n await this.methods.extendTimeout(this.config, sandboxId, options);\n }\n}\n\n/**\n * Auto-generated Template Manager implementation\n */\nclass GeneratedTemplateManager<TTemplate, TConfig, TCreateOptions extends CreateTemplateOptions = CreateTemplateOptions> implements ProviderTemplateManager<TTemplate, TCreateOptions> {\n constructor(\n private config: TConfig,\n private methods: TemplateMethods<TTemplate, TConfig, TCreateOptions>\n ) {}\n\n async create(options: TCreateOptions): Promise<TTemplate> {\n return await this.methods.create(this.config, options);\n }\n\n async list(options?: ListTemplatesOptions): Promise<TTemplate[]> {\n return await this.methods.list(this.config, options);\n }\n\n async delete(templateId: string): Promise<void> {\n return await this.methods.delete(this.config, templateId);\n }\n}\n\n/**\n * Auto-generated Snapshot Manager implementation\n */\nclass GeneratedSnapshotManager<TSnapshot, TConfig> implements ProviderSnapshotManager<TSnapshot> {\n constructor(\n private config: TConfig,\n private methods: SnapshotMethods<TSnapshot, TConfig>\n ) {}\n\n async create(sandboxId: string, options?: CreateSnapshotOptions): Promise<TSnapshot> {\n return await this.methods.create(this.config, sandboxId, options);\n }\n\n async list(options?: ListSnapshotsOptions): Promise<TSnapshot[]> {\n return await this.methods.list(this.config, options);\n }\n\n async delete(snapshotId: string): Promise<void> {\n return await this.methods.delete(this.config, snapshotId);\n }\n}\n\n/**\n * Auto-generated Provider implementation\n */\nclass GeneratedProvider<TSandbox, TConfig, TTemplate, TSnapshot> implements Provider<TSandbox, TTemplate, TSnapshot> {\n readonly name: string;\n readonly sandbox: ProviderSandboxManager<TSandbox>;\n readonly template?: ProviderTemplateManager<TTemplate>;\n readonly snapshot?: ProviderSnapshotManager<TSnapshot>;\n\n constructor(config: TConfig, providerConfig: ProviderConfig<TSandbox, TConfig, TTemplate, TSnapshot>) {\n this.name = providerConfig.name;\n this.sandbox = new GeneratedSandboxManager(\n config,\n providerConfig.name,\n providerConfig.methods.sandbox,\n this,\n providerConfig.defaultMode ?? 'gateway'\n );\n\n // Initialize optional managers if methods are provided\n if (providerConfig.methods.template) {\n this.template = new GeneratedTemplateManager(config, providerConfig.methods.template);\n }\n \n if (providerConfig.methods.snapshot) {\n this.snapshot = new GeneratedSnapshotManager(config, providerConfig.methods.snapshot);\n }\n }\n\n getSupportedRuntimes(): Runtime[] {\n // For now, all providers support both node and python\n // In the future, this could be configurable per provider\n return ['node', 'python'];\n }\n}\n\n/**\n * Create a provider from method definitions\n *\n * Auto-generates all boilerplate classes and provides feature detection\n * based on which methods are implemented.\n */\nexport function createProvider<TSandbox, TConfig = any, TTemplate = any, TSnapshot = any>(\n providerConfig: ProviderConfig<TSandbox, TConfig, TTemplate, TSnapshot>\n): (config: TConfig & BaseProviderConfig) => Provider<TSandbox, TTemplate, TSnapshot> {\n return (config: TConfig & BaseProviderConfig) => {\n return new GeneratedProvider(config, providerConfig);\n };\n}","/**\n * Compute daemon lifecycle management\n *\n * Handles health checks and waiting for the compute daemon\n * to become ready after installation.\n */\n\nimport { ComputeClient } from '@computesdk/client';\n\n/**\n * Options for waiting for compute daemon to be ready\n */\nexport interface WaitForComputeReadyOptions {\n /** Maximum number of retry attempts (default: 30) */\n maxRetries?: number;\n /** Initial delay between retries in milliseconds (default: 500) */\n initialDelayMs?: number;\n /** Maximum delay between retries in milliseconds (default: 5000) */\n maxDelayMs?: number;\n /** Backoff multiplier for exponential backoff (default: 1.5) */\n backoffFactor?: number;\n}\n\n/**\n * Wait for compute daemon to be ready by polling the health endpoint\n * with exponential backoff for faster success and less noise\n */\nexport async function waitForComputeReady(\n client: ComputeClient,\n options: WaitForComputeReadyOptions = {}\n): Promise<void> {\n const maxRetries = options.maxRetries ?? 30;\n const initialDelayMs = options.initialDelayMs ?? 500;\n const maxDelayMs = options.maxDelayMs ?? 5000;\n const backoffFactor = options.backoffFactor ?? 1.5;\n\n let lastError: Error | null = null;\n let currentDelay = initialDelayMs;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n await client.health();\n \n // Success! Log if in debug mode\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`[Lifecycle] Sandbox ready after ${i + 1} attempt${i === 0 ? '' : 's'}`);\n }\n \n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // On last attempt, throw detailed error\n if (i === maxRetries - 1) {\n throw new Error(\n `Sandbox failed to become ready after ${maxRetries} attempts.\\n` +\n `Last error: ${lastError.message}\\n\\n` +\n `Possible causes:\\n` +\n ` 1. Sandbox failed to start (check provider dashboard for errors)\\n` +\n ` 2. Network connectivity issues between your app and the sandbox\\n` +\n ` 3. Sandbox is taking longer than expected to initialize\\n` +\n ` 4. Invalid sandbox URL or authentication credentials\\n\\n` +\n `Troubleshooting:\\n` +\n ` - Check sandbox logs in your provider dashboard\\n` +\n ` - Verify your network connection\\n` +\n ` - Try increasing maxRetries if initialization is slow\\n` +\n ` - Enable debug mode: export COMPUTESDK_DEBUG=1`\n );\n }\n\n // Wait with exponential backoff before next attempt\n await new Promise(resolve => setTimeout(resolve, currentDelay));\n \n // Increase delay for next attempt (exponential backoff with cap)\n currentDelay = Math.min(currentDelay * backoffFactor, maxDelayMs);\n }\n }\n}\n","/**\n * Utility functions for ComputeSDK\n */\n\n/**\n * Calculate exponential backoff delay with jitter\n * \n * Uses exponential backoff (2^attempt) multiplied by base delay,\n * plus random jitter to prevent thundering herd.\n * \n * @param attempt - Current retry attempt (0-indexed)\n * @param baseDelay - Base delay in milliseconds (default: 1000)\n * @param jitterMax - Maximum random jitter in milliseconds (default: 100)\n * @returns Delay in milliseconds\n * \n * @example\n * ```typescript\n * // First retry: 1000-1100ms\n * calculateBackoff(0);\n * \n * // Second retry: 2000-2100ms\n * calculateBackoff(1);\n * \n * // Third retry: 4000-4100ms\n * calculateBackoff(2);\n * ```\n */\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number = 1000,\n jitterMax: number = 100\n): number {\n return baseDelay * Math.pow(2, attempt) + Math.random() * jitterMax;\n}\n","/**\n * Auto-Detection Module\n * \n * Automatically detects gateway mode and provider from environment variables.\n * Enables zero-config usage of ComputeSDK.\n */\n\nimport { GATEWAY_URL, PROVIDER_PRIORITY, PROVIDER_ENV_VARS, type ProviderName } from './constants';\nimport { gateway as gatewayProvider } from './providers/gateway';\nimport type { Provider } from './types';\n\n/**\n * Check if gateway mode is enabled\n * Gateway mode requires COMPUTESDK_API_KEY to be set\n */\nexport function isGatewayModeEnabled(): boolean {\n return !!(typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n}\n\n/**\n * Check if all required environment variables exist for a provider\n */\nfunction hasProviderEnv(provider: ProviderName): boolean {\n if (typeof process === 'undefined') return false;\n \n const requiredVars = PROVIDER_ENV_VARS[provider];\n if (!requiredVars) return false; // Safety check for invalid provider names\n \n return requiredVars.every(varName => !!process.env?.[varName]);\n}\n\n/**\n * Get detailed status of provider credentials\n */\nfunction getProviderEnvStatus(provider: ProviderName): {\n provider: string;\n present: string[];\n missing: string[];\n isComplete: boolean;\n} {\n const requiredVars = PROVIDER_ENV_VARS[provider];\n \n if (typeof process === 'undefined' || !requiredVars) {\n return { provider, present: [], missing: requiredVars ? [...requiredVars] : [], isComplete: false };\n }\n \n const present = requiredVars.filter(varName => !!process.env?.[varName]);\n const missing = requiredVars.filter(varName => !process.env?.[varName]);\n \n return {\n provider,\n present: [...present],\n missing: [...missing],\n isComplete: missing.length === 0\n };\n}\n\n/**\n * Detect which provider to use from environment variables\n * \n * Detection order:\n * 1. Check for explicit COMPUTESDK_PROVIDER override\n * 2. Auto-detect based on PROVIDER_PRIORITY order\n * \n * @returns Provider name or null if none detected\n */\nexport function detectProvider(): string | null {\n if (typeof process === 'undefined') return null;\n \n // Check for explicit override\n const explicit = process.env.COMPUTESDK_PROVIDER?.toLowerCase();\n if (explicit && hasProviderEnv(explicit as ProviderName)) {\n return explicit;\n }\n \n // Warn if explicit provider set but credentials missing\n if (explicit && !hasProviderEnv(explicit as ProviderName)) {\n console.warn(\n `⚠️ COMPUTESDK_PROVIDER is set to \"${explicit}\" but required credentials are missing.\\n` +\n ` Required: ${PROVIDER_ENV_VARS[explicit as ProviderName]?.join(', ') || 'unknown'}\\n` +\n ` Falling back to auto-detection...`\n );\n }\n \n // Auto-detect based on priority order\n for (const provider of PROVIDER_PRIORITY) {\n if (hasProviderEnv(provider)) {\n return provider;\n }\n }\n \n return null;\n}\n\n/**\n * Build provider-specific headers from environment variables\n * These headers are passed through to the gateway\n */\nexport function getProviderHeaders(provider: string): Record<string, string> {\n if (typeof process === 'undefined') return {};\n \n const headers: Record<string, string> = {};\n \n switch (provider) {\n case 'e2b':\n if (process.env.E2B_API_KEY) {\n headers['X-E2B-API-Key'] = process.env.E2B_API_KEY;\n }\n break;\n \n case 'railway':\n if (process.env.RAILWAY_API_KEY) {\n headers['X-Railway-API-Key'] = process.env.RAILWAY_API_KEY;\n }\n if (process.env.RAILWAY_PROJECT_ID) {\n headers['X-Railway-Project-ID'] = process.env.RAILWAY_PROJECT_ID;\n }\n if (process.env.RAILWAY_ENVIRONMENT_ID) {\n headers['X-Railway-Environment-ID'] = process.env.RAILWAY_ENVIRONMENT_ID;\n }\n break;\n \n case 'daytona':\n if (process.env.DAYTONA_API_KEY) {\n headers['X-Daytona-API-Key'] = process.env.DAYTONA_API_KEY;\n }\n break;\n \n case 'modal':\n if (process.env.MODAL_TOKEN_ID) {\n headers['X-Modal-Token-ID'] = process.env.MODAL_TOKEN_ID;\n }\n if (process.env.MODAL_TOKEN_SECRET) {\n headers['X-Modal-Token-Secret'] = process.env.MODAL_TOKEN_SECRET;\n }\n break;\n \n case 'runloop':\n if (process.env.RUNLOOP_API_KEY) {\n headers['X-Runloop-API-Key'] = process.env.RUNLOOP_API_KEY;\n }\n break;\n \n case 'vercel':\n if (process.env.VERCEL_TOKEN) {\n headers['X-Vercel-Token'] = process.env.VERCEL_TOKEN;\n }\n if (process.env.VERCEL_TEAM_ID) {\n headers['X-Vercel-Team-ID'] = process.env.VERCEL_TEAM_ID;\n }\n if (process.env.VERCEL_PROJECT_ID) {\n headers['X-Vercel-Project-ID'] = process.env.VERCEL_PROJECT_ID;\n }\n break;\n \n case 'cloudflare':\n if (process.env.CLOUDFLARE_API_TOKEN) {\n headers['X-Cloudflare-API-Token'] = process.env.CLOUDFLARE_API_TOKEN;\n }\n if (process.env.CLOUDFLARE_ACCOUNT_ID) {\n headers['X-Cloudflare-Account-ID'] = process.env.CLOUDFLARE_ACCOUNT_ID;\n }\n break;\n \n case 'codesandbox':\n if (process.env.CSB_API_KEY) {\n headers['X-CodeSandbox-API-Key'] = process.env.CSB_API_KEY;\n }\n break;\n \n case 'blaxel':\n if (process.env.BL_API_KEY) {\n headers['X-Blaxel-API-Key'] = process.env.BL_API_KEY;\n }\n if (process.env.BL_WORKSPACE) {\n headers['X-Blaxel-Workspace'] = process.env.BL_WORKSPACE;\n }\n break;\n }\n \n return headers;\n}\n\n/**\n * Main auto-configuration function\n * Returns configured HTTP provider or null if auto-detection not possible\n *\n * @throws Error if COMPUTESDK_API_KEY is set but no provider detected\n */\nexport function autoConfigureCompute(): Provider | null {\n // Only auto-configure in gateway mode\n if (!isGatewayModeEnabled()) {\n return null;\n }\n\n const provider = detectProvider();\n if (!provider) {\n // Build detailed diagnostic information\n const detectionResults = PROVIDER_PRIORITY.map(p => getProviderEnvStatus(p));\n \n // Create status indicators\n const statusLines = detectionResults.map(result => {\n const status = result.isComplete ? '✅' : \n result.present.length > 0 ? '⚠️ ' : '❌';\n const ratio = `${result.present.length}/${result.present.length + result.missing.length}`;\n let line = ` ${status} ${result.provider.padEnd(12)} ${ratio} credentials`;\n \n // Show what's missing for partial matches\n if (result.present.length > 0 && result.missing.length > 0) {\n line += ` (missing: ${result.missing.join(', ')})`;\n }\n \n return line;\n });\n \n throw new Error(\n `COMPUTESDK_API_KEY is set but no provider detected.\\n\\n` +\n `Provider detection results:\\n` +\n statusLines.join('\\n') +\n `\\n\\n` +\n `To fix this, set one of the following:\\n\\n` +\n ` E2B: export E2B_API_KEY=xxx\\n` +\n ` Railway: export RAILWAY_API_KEY=xxx RAILWAY_PROJECT_ID=xxx RAILWAY_ENVIRONMENT_ID=xxx\\n` +\n ` Daytona: export DAYTONA_API_KEY=xxx\\n` +\n ` Modal: export MODAL_TOKEN_ID=xxx MODAL_TOKEN_SECRET=xxx\\n` +\n ` Runloop: export RUNLOOP_API_KEY=xxx\\n` +\n ` Vercel: export VERCEL_TOKEN=xxx VERCEL_TEAM_ID=xxx VERCEL_PROJECT_ID=xxx\\n` +\n ` Cloudflare: export CLOUDFLARE_API_TOKEN=xxx CLOUDFLARE_ACCOUNT_ID=xxx\\n` +\n ` CodeSandbox: export CSB_API_KEY=xxx\\n` +\n ` Blaxel: export BL_API_KEY=xxx BL_WORKSPACE=xxx\\n\\n` +\n `Or set COMPUTESDK_PROVIDER to specify explicitly:\\n` +\n ` export COMPUTESDK_PROVIDER=e2b\\n\\n` +\n `Docs: https://computesdk.com/docs/quickstart`\n );\n }\n\n const gatewayUrl = process.env.COMPUTESDK_GATEWAY_URL || GATEWAY_URL;\n const computesdkApiKey = process.env.COMPUTESDK_API_KEY!;\n const providerHeaders = getProviderHeaders(provider);\n\n // Validate gateway URL\n try {\n new URL(gatewayUrl);\n } catch (error) {\n throw new Error(\n `Invalid gateway URL: \"${gatewayUrl}\"\\n\\n` +\n `The URL must be a valid HTTP/HTTPS URL.\\n` +\n `Check your COMPUTESDK_GATEWAY_URL environment variable.`\n );\n }\n\n // Debug logging if enabled\n if (process.env.COMPUTESDK_DEBUG) {\n console.log(`✨ ComputeSDK: Auto-detected ${provider} provider`);\n console.log(`🌐 Gateway: ${gatewayUrl}`);\n console.log(`🔑 Provider headers:`, Object.keys(providerHeaders).join(', '));\n }\n\n return gatewayProvider({\n gatewayUrl,\n apiKey: computesdkApiKey,\n provider,\n providerHeaders\n });\n}\n","/**\n * Explicit Config\n *\n * Converts explicit compute configuration to a gateway provider.\n * Used when compute() is called as a function with configuration.\n */\n\nimport { gateway } from './providers/gateway';\nimport type { Provider, ExplicitComputeConfig } from './types';\nimport {\n PROVIDER_AUTH,\n PROVIDER_HEADERS,\n PROVIDER_DASHBOARD_URLS,\n PROVIDER_ENV_MAP,\n type ProviderName,\n} from './provider-config';\n\n/**\n * Build provider-specific headers for gateway authentication\n */\nfunction buildProviderHeaders(config: ExplicitComputeConfig): Record<string, string> {\n const headers: Record<string, string> = {};\n const provider = config.provider as ProviderName;\n const headerMap = PROVIDER_HEADERS[provider];\n const providerConfig = config[provider] as Record<string, string | undefined> | undefined;\n\n if (!providerConfig || !headerMap) return headers;\n\n for (const [configKey, headerName] of Object.entries(headerMap)) {\n const value = providerConfig[configKey];\n if (value) {\n headers[headerName] = value;\n }\n }\n\n return headers;\n}\n\n/**\n * Validate that the config has the required provider-specific credentials\n */\nfunction validateProviderConfig(config: ExplicitComputeConfig): void {\n const provider = config.provider as ProviderName;\n const authOptions = PROVIDER_AUTH[provider];\n const providerConfig = config[provider] as Record<string, string | undefined> | undefined;\n const dashboardUrl = PROVIDER_DASHBOARD_URLS[provider];\n\n if (!authOptions) {\n throw new Error(`Unknown provider: ${provider}`);\n }\n\n // Check if any auth option is satisfied\n // For explicit mode, we check config fields instead of env vars\n for (const option of authOptions) {\n // Map env vars to config field names and check if all are present\n const allPresent = option.every(envVar => {\n const configField = envVarToConfigField(provider, envVar);\n return providerConfig?.[configField];\n });\n\n if (allPresent) return; // Valid config found\n }\n\n // No valid config found, build helpful error message\n const configExample = buildConfigExample(provider, authOptions);\n throw new Error(\n `Missing ${provider} configuration. When using provider: '${provider}', you must provide:\\n` +\n `${configExample}\\n\\n` +\n `Get your credentials at: ${dashboardUrl}`\n );\n}\n\n/**\n * Map environment variable name to config field name\n * Uses shared PROVIDER_ENV_MAP as single source of truth\n */\nfunction envVarToConfigField(provider: ProviderName, envVar: string): string {\n return PROVIDER_ENV_MAP[provider]?.[envVar] ?? envVar.toLowerCase();\n}\n\n/**\n * Build example config for error message\n */\nfunction buildConfigExample(provider: ProviderName, authOptions: readonly (readonly string[])[]): string {\n if (authOptions.length === 1) {\n // Single option\n const fields = authOptions[0].map(envVar => {\n const field = envVarToConfigField(provider, envVar);\n return `${field}: '...'`;\n });\n return ` ${provider}: { ${fields.join(', ')} }`;\n }\n\n // Multiple options (like Vercel with OIDC or traditional)\n const options = authOptions.map((option, i) => {\n const fields = option.map(envVar => {\n const field = envVarToConfigField(provider, envVar);\n return `${field}: '...'`;\n });\n return ` Option ${i + 1}:\\n ${provider}: { ${fields.join(', ')} }`;\n });\n\n return options.join('\\n\\n');\n}\n\n/**\n * Create a gateway provider from explicit configuration\n *\n * @param config - Explicit compute configuration\n * @returns A configured gateway provider\n */\nexport function createProviderFromConfig(config: ExplicitComputeConfig): Provider {\n // Validate required fields\n if (!config.apiKey) {\n throw new Error(\n `Missing ComputeSDK API key. The 'apiKey' field is required.\\n\\n` +\n `Get your API key at: https://computesdk.com/dashboard`\n );\n }\n\n // Validate provider-specific config\n validateProviderConfig(config);\n\n // Build provider headers\n const providerHeaders = buildProviderHeaders(config);\n\n // Create and return gateway provider\n return gateway({\n apiKey: config.apiKey,\n provider: config.provider,\n providerHeaders,\n });\n}\n","/**\n * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers.\n * The `compute` export works as both a singleton and a callable function:\n *\n * - Singleton: `compute.sandbox.create()` (auto-detects from env vars)\n * - Callable: `compute({ provider: 'e2b', ... }).sandbox.create()` (explicit config, uses gateway)\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI, ExplicitComputeConfig, CallableCompute, FindOrCreateSandboxOptions, FindSandboxOptions, ExtendTimeoutOptions } from './types';\nimport { autoConfigureCompute } from './auto-detect';\nimport { createProviderFromConfig } from './explicit-config';\n\n/**\n * Compute singleton implementation - orchestrates all compute operations\n */\nclass ComputeManager implements ComputeAPI {\n private config: ComputeConfig | null = null;\n private autoConfigured = false;\n\n /**\n * Set default configuration with generic type preservation\n */\n setConfig<TProvider extends Provider>(config: ComputeConfig<TProvider>): void {\n // Validate that at least one provider is specified\n if (!config.defaultProvider && !config.provider) {\n throw new Error('Either defaultProvider or provider must be specified in setConfig');\n }\n\n // Handle backwards compatibility: if both are provided, defaultProvider takes precedence\n if (config.defaultProvider && config.provider) {\n console.warn('Both defaultProvider and provider specified in setConfig. Using defaultProvider. The provider key is deprecated, please use defaultProvider instead.');\n }\n\n // Normalize config to always have both fields for internal use (backward compatibility)\n const actualProvider = config.defaultProvider || config.provider!;\n this.config = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n };\n }\n\n /**\n * Get current configuration\n */\n getConfig(): ComputeConfig | null {\n return this.config;\n }\n\n /**\n * Clear current configuration\n */\n clearConfig(): void {\n this.config = null;\n }\n\n /**\n * Lazy auto-configure from environment if not explicitly configured\n */\n private ensureConfigured(): void {\n // Skip if already configured\n if (this.config) return;\n\n // Skip if already tried auto-detection\n if (this.autoConfigured) return;\n\n // Try auto-detection from environment\n const provider = autoConfigureCompute();\n \n // Mark as configured after detection completes (success or failure)\n // This prevents retry loops but allows exceptions to propagate\n this.autoConfigured = true;\n\n if (provider) {\n this.config = {\n provider,\n defaultProvider: provider,\n };\n }\n }\n\n /**\n * Get the default provider, throwing if not configured\n */\n private getDefaultProvider(): Provider {\n // Try auto-configuration first\n this.ensureConfigured();\n\n const provider = this.config?.defaultProvider || this.config?.provider;\n if (!provider) {\n throw new Error(\n 'No default provider configured.\\n\\n' +\n 'Options:\\n' +\n '1. Zero-config mode: Set COMPUTESDK_API_KEY and provider credentials (e.g., E2B_API_KEY)\\n' +\n '2. Explicit mode: Call compute.setConfig({ defaultProvider }) or pass provider to create()\\n\\n' +\n 'Docs: https://computesdk.com/docs/quickstart'\n );\n }\n return provider;\n }\n\n\n sandbox = {\n /**\n * Create a sandbox from a provider (or default provider if configured)\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { compute } from 'computesdk'\n *\n * // With explicit provider\n * const sandbox = await compute.sandbox.create({\n * provider: e2b({ apiKey: 'your-key' })\n * })\n *\n * // With default provider\n * compute.setConfig({ defaultProvider: e2b({ apiKey: 'your-key' }) })\n * const sandbox = await compute.sandbox.create()\n * ```\n */\n create: async (params?: CreateSandboxParams | CreateSandboxParamsWithOptionalProvider): Promise<ProviderSandbox> => {\n const provider = params && 'provider' in params && params.provider ? params.provider : this.getDefaultProvider();\n const options = params?.options;\n return await provider.sandbox.create(options);\n },\n\n /**\n * Get an existing sandbox by ID from a provider (or default provider if configured)\n */\n getById: async (providerOrSandboxId: Provider | string, sandboxId?: string): Promise<ProviderSandbox | null> => {\n if (typeof providerOrSandboxId === 'string') {\n // Called with just sandboxId, use default provider\n const provider = this.getDefaultProvider();\n return await provider.sandbox.getById(providerOrSandboxId);\n } else {\n // Called with provider and sandboxId\n if (!sandboxId) {\n throw new Error('sandboxId is required when provider is specified');\n }\n return await providerOrSandboxId.sandbox.getById(sandboxId);\n }\n },\n\n /**\n * List all active sandboxes from a provider (or default provider if configured)\n */\n list: async (provider?: Provider): Promise<ProviderSandbox[]> => {\n const actualProvider = provider || this.getDefaultProvider();\n return await actualProvider.sandbox.list();\n },\n\n /**\n * Destroy a sandbox via a provider (or default provider if configured)\n */\n destroy: async (providerOrSandboxId: Provider | string, sandboxId?: string): Promise<void> => {\n if (typeof providerOrSandboxId === 'string') {\n // Called with just sandboxId, use default provider\n const provider = this.getDefaultProvider();\n return await provider.sandbox.destroy(providerOrSandboxId);\n } else {\n // Called with provider and sandboxId\n if (!sandboxId) {\n throw new Error('sandboxId is required when provider is specified');\n }\n return await providerOrSandboxId.sandbox.destroy(sandboxId);\n }\n },\n\n /**\n * Find existing or create new sandbox by (namespace, name)\n *\n * @example\n * ```typescript\n * // Find or create sandbox for a user's project\n * const sandbox = await compute.sandbox.findOrCreate({\n * name: 'my-app',\n * namespace: 'user-123',\n * timeout: 1800000\n * });\n * ```\n */\n findOrCreate: async (options: FindOrCreateSandboxOptions): Promise<ProviderSandbox> => {\n const provider = this.getDefaultProvider();\n \n if (!provider.sandbox.findOrCreate) {\n throw new Error(\n `Provider '${provider.name}' does not support findOrCreate.\\n` +\n `This feature requires gateway provider with named sandbox support.`\n );\n }\n \n return await provider.sandbox.findOrCreate(options);\n },\n\n /**\n * Find existing sandbox by (namespace, name) without creating\n *\n * @example\n * ```typescript\n * // Find existing sandbox\n * const sandbox = await compute.sandbox.find({\n * name: 'my-app',\n * namespace: 'user-123'\n * });\n * \n * if (sandbox) {\n * console.log('Found sandbox:', sandbox.sandboxId);\n * }\n * ```\n */\n find: async (options: FindSandboxOptions): Promise<ProviderSandbox | null> => {\n const provider = this.getDefaultProvider();\n \n if (!provider.sandbox.find) {\n throw new Error(\n `Provider '${provider.name}' does not support find.\\n` +\n `This feature requires gateway provider with named sandbox support.`\n );\n }\n \n return await provider.sandbox.find(options);\n },\n\n /**\n * Extend sandbox timeout/expiration\n *\n * @example\n * ```typescript\n * // Extend timeout by 15 minutes (default)\n * await compute.sandbox.extendTimeout('sandbox-123');\n * \n * // Extend timeout by custom duration\n * await compute.sandbox.extendTimeout('sandbox-123', {\n * duration: 1800000 // 30 minutes\n * });\n * ```\n */\n extendTimeout: async (sandboxId: string, options?: ExtendTimeoutOptions): Promise<void> => {\n const provider = this.getDefaultProvider();\n \n if (!provider.sandbox.extendTimeout) {\n throw new Error(\n `Provider '${provider.name}' does not support extendTimeout.\\n` +\n `This feature requires gateway provider with timeout extension support.`\n );\n }\n \n return await provider.sandbox.extendTimeout(sandboxId, options);\n }\n };\n}\n\n/**\n * Singleton instance for property access (internal)\n */\nconst singletonInstance = new ComputeManager();\n\n/**\n * Factory function for explicit configuration\n * Creates a new compute instance using the gateway provider\n */\nfunction computeFactory(config: ExplicitComputeConfig): ComputeAPI {\n const provider = createProviderFromConfig(config);\n return createCompute({ provider });\n}\n\n/**\n * Callable compute - works as both singleton and factory function\n *\n * @example\n * ```typescript\n * import { compute } from 'computesdk';\n *\n * // Singleton mode (auto-detects from env vars)\n * const sandbox1 = await compute.sandbox.create();\n *\n * // Callable mode (explicit config, uses gateway)\n * const sandbox2 = await compute({\n * provider: 'e2b',\n * apiKey: 'computesdk_xxx',\n * e2b: { apiKey: 'e2b_xxx' }\n * }).sandbox.create();\n * ```\n */\nexport const compute: CallableCompute = new Proxy(\n computeFactory as CallableCompute,\n {\n get(_target, prop, _receiver) {\n // Delegate property access to singleton instance\n const singleton = singletonInstance as unknown as Record<string | symbol, unknown>;\n const value = singleton[prop];\n if (typeof value === 'function') {\n return (value as (...args: unknown[]) => unknown).bind(singletonInstance);\n }\n return value;\n },\n apply(_target, _thisArg, args) {\n // Handle function call: compute({...})\n return computeFactory(args[0] as ExplicitComputeConfig);\n }\n }\n);\n\n\n/**\n * Create a compute instance with proper typing\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { createCompute } from 'computesdk'\n *\n * // Zero-config mode (auto-detects from environment)\n * const compute = createCompute();\n * const sandbox = await compute.sandbox.create();\n *\n * // Explicit mode\n * const compute2 = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * });\n *\n * const sandbox2 = await compute2.sandbox.create();\n * const instance = sandbox2.getInstance(); // ✅ Properly typed!\n * ```\n */\n// Zero-config mode (no arguments)\nexport function createCompute(): ComputeAPI;\n// Explicit mode with provider\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider>;\n// Implementation\nexport function createCompute<TProvider extends Provider>(\n config?: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider> | ComputeAPI {\n const manager = new ComputeManager();\n\n // Zero-config mode: No config provided, will auto-detect on first use\n if (!config) {\n return manager as ComputeAPI;\n }\n\n // Explicit mode: Set config directly\n const actualProvider = config.defaultProvider || config.provider!;\n manager['config'] = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n };\n\n const api: TypedComputeAPI<TProvider> = {\n setConfig: <T extends Provider>(cfg: ComputeConfig<T>) => createCompute(cfg),\n getConfig: () => manager.getConfig(),\n clearConfig: () => manager.clearConfig(),\n\n sandbox: {\n create: async (params?: Omit<CreateSandboxParamsWithOptionalProvider, 'provider'>) => {\n const sandbox = await manager.sandbox.create(params);\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n getById: async (sandboxId: string) => {\n const sandbox = await manager.sandbox.getById(sandboxId);\n if (!sandbox) return null;\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n list: async () => {\n const sandboxes = await manager.sandbox.list();\n return sandboxes as TypedProviderSandbox<TProvider>[];\n },\n\n destroy: async (sandboxId: string) => {\n return await manager.sandbox.destroy(sandboxId);\n },\n\n findOrCreate: async (options: FindOrCreateSandboxOptions) => {\n const sandbox = await manager.sandbox.findOrCreate(options);\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n find: async (options: FindSandboxOptions) => {\n const sandbox = await manager.sandbox.find(options);\n if (!sandbox) return null;\n return sandbox as TypedProviderSandbox<TProvider>;\n },\n\n extendTimeout: async (sandboxId: string, options?: ExtendTimeoutOptions) => {\n return await manager.sandbox.extendTimeout(sandboxId, options);\n }\n }\n };\n return api;\n}\n","/**\n * Simplified Request Handler for Web Framework Integration\n * \n * Handles JSON requests for sandbox and code execution operations.\n * Terminal support removed - will be re-added with WebSocket VM connections.\n */\n\nimport type { Provider, Runtime } from './types';\nimport { compute } from './compute';\n\n/**\n * Request structure supporting sandbox and code execution capabilities\n */\nexport interface ComputeRequest {\n /** Action in dot notation (e.g., 'compute.sandbox.create') */\n action: string;\n \n /** Parameters for the action */\n sandboxId?: string;\n code?: string;\n command?: string;\n args?: string[];\n runtime?: Runtime;\n path?: string;\n content?: string;\n \n /** Command options (for runCommand action) */\n commandOptions?: {\n background?: boolean;\n };\n \n /** Sandbox creation options */\n options?: {\n runtime?: Runtime;\n timeout?: number;\n sandboxId?: string;\n };\n}\n\n/**\n * Response structure for compute operations\n */\nexport interface ComputeResponse {\n success: boolean;\n error?: string;\n sandboxId: string;\n provider: string;\n [key: string]: any; // Allow any additional response data\n}\n\n/**\n * Execute compute action using targeted handling\n */\nasync function executeAction(body: ComputeRequest, provider: Provider): Promise<ComputeResponse> {\n try {\n const { action, sandboxId } = body;\n \n // Sandbox management operations\n if (action === 'compute.sandbox.create') {\n const sandbox = await compute.sandbox.create({\n provider,\n options: body.options || { runtime: 'python' }\n });\n return {\n success: true,\n sandboxId: sandbox.sandboxId,\n provider: provider.name\n };\n }\n \n if (action === 'compute.sandbox.list') {\n const sandboxes = await compute.sandbox.list(provider);\n return {\n success: true,\n sandboxId: '',\n provider: provider.name,\n sandboxes: sandboxes.map(sb => ({\n sandboxId: sb.sandboxId,\n provider: sb.provider\n }))\n };\n }\n \n if (action === 'compute.sandbox.destroy') {\n if (!sandboxId) {\n throw new Error('sandboxId is required for destroy action');\n }\n await compute.sandbox.destroy(provider, sandboxId);\n return {\n success: true,\n sandboxId,\n provider: provider.name\n };\n }\n \n // For sandbox instance methods, get the sandbox first\n if (!sandboxId) {\n throw new Error('sandboxId is required for this action');\n }\n \n const sandbox = await compute.sandbox.getById(provider, sandboxId);\n if (!sandbox) {\n throw new Error(`Sandbox ${sandboxId} not found`);\n }\n \n // Sandbox info\n if (action === 'compute.sandbox.getInfo') {\n const result = await sandbox.getInfo();\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n info: {\n id: result.id,\n provider: result.provider,\n runtime: result.runtime,\n status: result.status,\n createdAt: result.createdAt.toISOString(),\n timeout: result.timeout,\n metadata: result.metadata\n }\n };\n }\n \n // Code execution\n if (action === 'compute.sandbox.runCode') {\n if (!body.code) throw new Error('code is required');\n const result = await sandbox.runCode(body.code, body.runtime);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n result: {\n output: result.output,\n exitCode: result.exitCode,\n language: result.language\n }\n };\n }\n\n if (action === 'compute.sandbox.runCommand') {\n if (!body.command) throw new Error('command is required');\n const result = await sandbox.runCommand(body.command, body.args, body.commandOptions);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n result: {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n durationMs: result.durationMs\n }\n };\n }\n \n // Filesystem operations\n if (action === 'compute.sandbox.filesystem.readFile') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.readFile(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n fileContent: result\n };\n }\n \n if (action === 'compute.sandbox.filesystem.writeFile') {\n if (!body.path) throw new Error('path is required');\n if (body.content === undefined) throw new Error('content is required');\n await sandbox.filesystem.writeFile(body.path, body.content);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n if (action === 'compute.sandbox.filesystem.mkdir') {\n if (!body.path) throw new Error('path is required');\n await sandbox.filesystem.mkdir(body.path);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n if (action === 'compute.sandbox.filesystem.readdir') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.readdir(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n files: result.map((entry: any) => ({\n name: entry.name,\n path: entry.path,\n isDirectory: entry.isDirectory,\n size: entry.size,\n lastModified: entry.lastModified.toISOString()\n }))\n };\n }\n \n if (action === 'compute.sandbox.filesystem.exists') {\n if (!body.path) throw new Error('path is required');\n const result = await sandbox.filesystem.exists(body.path);\n return {\n success: true,\n sandboxId,\n provider: provider.name,\n exists: result\n };\n }\n \n if (action === 'compute.sandbox.filesystem.remove') {\n if (!body.path) throw new Error('path is required');\n await sandbox.filesystem.remove(body.path);\n return { success: true, sandboxId, provider: provider.name };\n }\n \n throw new Error(`Unknown action: ${action}`);\n \n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error occurred',\n sandboxId: body.sandboxId || '',\n provider: provider.name\n };\n }\n}\n\n/**\n * Main request handler - handles HTTP requests and pre-parsed bodies\n */\nexport async function handleComputeRequest(\n params: HandleComputeRequestParams\n): Promise<ComputeResponse>;\nexport async function handleComputeRequest(\n requestOrBody: Request | ComputeRequest,\n provider: Provider\n): Promise<Response>;\nexport async function handleComputeRequest(\n paramsOrRequestOrBody: HandleComputeRequestParams | Request | ComputeRequest,\n provider?: Provider\n): Promise<ComputeResponse | Response> {\n // Handle object-style API\n if (typeof paramsOrRequestOrBody === 'object' && 'request' in paramsOrRequestOrBody && 'provider' in paramsOrRequestOrBody) {\n const params = paramsOrRequestOrBody as HandleComputeRequestParams;\n return await executeAction(params.request, params.provider);\n }\n \n // Handle original API\n if (!provider) {\n throw new Error('Provider is required when not using object-style API');\n }\n \n const requestOrBody = paramsOrRequestOrBody as Request | ComputeRequest;\n try {\n let body: ComputeRequest;\n \n if (requestOrBody instanceof Request) {\n // Handle HTTP method validation\n if (requestOrBody.method !== 'POST') {\n return Response.json({\n success: false,\n error: 'Only POST requests are supported',\n sandboxId: '',\n provider: provider.name\n }, { status: 405 });\n }\n \n // Parse JSON body with better error handling\n try {\n body = await requestOrBody.json();\n } catch (parseError) {\n return Response.json({\n success: false,\n error: 'Invalid JSON in request body',\n sandboxId: '',\n provider: provider.name\n }, { status: 400 });\n }\n } else {\n body = requestOrBody;\n }\n \n // Execute the action\n const result = await executeAction(body, provider);\n \n return Response.json(result, {\n status: result.success ? 200 : 500\n });\n \n } catch (error) {\n return Response.json({\n success: false,\n error: error instanceof Error ? error.message : 'Request handling failed',\n sandboxId: '',\n provider: provider.name\n }, { status: 500 });\n }\n}\n\n/**\n * Legacy export for backward compatibility\n */\nexport interface HandleComputeRequestParams {\n request: ComputeRequest;\n provider: Provider;\n}\n\nexport { handleComputeRequest as handleHttpComputeRequest };"],"mappings":"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","names":["import_client","import_client","import_client","ClientSandbox","buildProviderHeaders","sandbox"]}
|