computesdk 1.9.1 → 1.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -7,10 +7,6 @@ export { CodeLanguage, CodeResult, CodeRunOptions, CommandExitError, CommandResu
7
7
  */
8
8
  type SandboxInfo = ProviderSandboxInfo;
9
9
 
10
- interface Provider$1<TSandbox = any> {
11
- readonly name: string;
12
- readonly sandbox: any;
13
- }
14
10
  /**
15
11
  * Provider sandbox interface - what external providers (e2b, railway, etc.) return
16
12
  *
@@ -87,11 +83,11 @@ interface ProviderSandbox<TSandbox = any> {
87
83
  /**
88
84
  * Extract the sandbox type from a provider using generic inference
89
85
  */
90
- type ExtractProviderSandboxType<TProvider> = TProvider extends Provider$1<infer TSandbox> ? TSandbox : any;
86
+ type ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox, any, any> ? TSandbox : any;
91
87
  /**
92
88
  * Typed provider sandbox interface that preserves the provider's native instance type
93
89
  */
94
- interface TypedProviderSandbox<TProvider extends Provider$1> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {
90
+ interface TypedProviderSandbox<TProvider extends Provider<any, any, any>> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {
95
91
  /** Get the provider instance that created this sandbox with proper typing */
96
92
  getProvider(): TProvider;
97
93
  /** Get the native provider sandbox instance with proper typing */
@@ -587,4 +583,4 @@ interface HandleComputeRequestParams {
587
583
  provider: Provider;
588
584
  }
589
585
 
590
- export { type BaseProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeRequest, type ComputeResponse, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, GATEWAY_URL, type GatewayConfig, type HandleComputeRequestParams, type ListSnapshotsOptions, type ListTemplatesOptions, PROVIDER_ENV_VARS, PROVIDER_PRIORITY, type Provider, type ProviderConfig, type ProviderMode, type ProviderName, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type SandboxInfo, type SandboxMethods, type SnapshotMethods, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, autoConfigureCompute, calculateBackoff, compute, createCompute, createProvider, detectProvider, gateway, getProviderHeaders, handleComputeRequest, isGatewayModeEnabled };
586
+ export { type BaseProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeRequest, type ComputeResponse, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, type ExtractProviderSandboxType, GATEWAY_URL, type GatewayConfig, type HandleComputeRequestParams, type ListSnapshotsOptions, type ListTemplatesOptions, PROVIDER_ENV_VARS, PROVIDER_PRIORITY, type Provider, type ProviderConfig, type ProviderMode, type ProviderName, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type SandboxInfo, type SandboxMethods, type SnapshotMethods, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, autoConfigureCompute, calculateBackoff, compute, createCompute, createProvider, detectProvider, gateway, getProviderHeaders, handleComputeRequest, isGatewayModeEnabled };
package/dist/index.d.ts CHANGED
@@ -7,10 +7,6 @@ export { CodeLanguage, CodeResult, CodeRunOptions, CommandExitError, CommandResu
7
7
  */
8
8
  type SandboxInfo = ProviderSandboxInfo;
9
9
 
10
- interface Provider$1<TSandbox = any> {
11
- readonly name: string;
12
- readonly sandbox: any;
13
- }
14
10
  /**
15
11
  * Provider sandbox interface - what external providers (e2b, railway, etc.) return
16
12
  *
@@ -87,11 +83,11 @@ interface ProviderSandbox<TSandbox = any> {
87
83
  /**
88
84
  * Extract the sandbox type from a provider using generic inference
89
85
  */
90
- type ExtractProviderSandboxType<TProvider> = TProvider extends Provider$1<infer TSandbox> ? TSandbox : any;
86
+ type ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox, any, any> ? TSandbox : any;
91
87
  /**
92
88
  * Typed provider sandbox interface that preserves the provider's native instance type
93
89
  */
94
- interface TypedProviderSandbox<TProvider extends Provider$1> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {
90
+ interface TypedProviderSandbox<TProvider extends Provider<any, any, any>> extends Omit<ProviderSandbox<ExtractProviderSandboxType<TProvider>>, 'getProvider'> {
95
91
  /** Get the provider instance that created this sandbox with proper typing */
96
92
  getProvider(): TProvider;
97
93
  /** Get the native provider sandbox instance with proper typing */
@@ -587,4 +583,4 @@ interface HandleComputeRequestParams {
587
583
  provider: Provider;
588
584
  }
589
585
 
590
- export { type BaseProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeRequest, type ComputeResponse, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, GATEWAY_URL, type GatewayConfig, type HandleComputeRequestParams, type ListSnapshotsOptions, type ListTemplatesOptions, PROVIDER_ENV_VARS, PROVIDER_PRIORITY, type Provider, type ProviderConfig, type ProviderMode, type ProviderName, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type SandboxInfo, type SandboxMethods, type SnapshotMethods, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, autoConfigureCompute, calculateBackoff, compute, createCompute, createProvider, detectProvider, gateway, getProviderHeaders, handleComputeRequest, isGatewayModeEnabled };
586
+ export { type BaseProviderConfig, type ComputeAPI, type ComputeConfig, type ComputeRequest, type ComputeResponse, type CreateSandboxParams, type CreateSandboxParamsWithOptionalProvider, type CreateSnapshotOptions, type CreateTemplateOptions, type ExtractProviderSandboxType, GATEWAY_URL, type GatewayConfig, type HandleComputeRequestParams, type ListSnapshotsOptions, type ListTemplatesOptions, PROVIDER_ENV_VARS, PROVIDER_PRIORITY, type Provider, type ProviderConfig, type ProviderMode, type ProviderName, type ProviderSandbox, type ProviderSandboxManager, type ProviderSnapshotManager, type ProviderTemplateManager, type SandboxInfo, type SandboxMethods, type SnapshotMethods, type TemplateMethods, type TypedComputeAPI, type TypedProviderSandbox, autoConfigureCompute, calculateBackoff, compute, createCompute, createProvider, detectProvider, gateway, getProviderHeaders, handleComputeRequest, isGatewayModeEnabled };
package/dist/index.js CHANGED
@@ -906,7 +906,7 @@ function createCompute(config) {
906
906
  provider: actualProvider,
907
907
  defaultProvider: actualProvider
908
908
  };
909
- return {
909
+ const api = {
910
910
  setConfig: (cfg) => createCompute(cfg),
911
911
  getConfig: () => manager.getConfig(),
912
912
  clearConfig: () => manager.clearConfig(),
@@ -929,6 +929,7 @@ function createCompute(config) {
929
929
  }
930
930
  }
931
931
  };
932
+ return api;
932
933
  }
933
934
 
934
935
  // src/request-handler.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/sandbox.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.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\n// Export all types\nexport * from './types';\n\n// Export compute singleton - the main API\nexport { compute, createCompute } from './compute';\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\nexport { GATEWAY_URL, PROVIDER_PRIORITY, PROVIDER_ENV_VARS, type ProviderName } 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// Forward declaration to avoid circular dependency with provider.ts\ninterface Provider<TSandbox = any> {\n readonly name: string;\n readonly sandbox: any;\n}\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 */\ntype ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox> ? TSandbox : any;\n\n/**\n * Typed provider sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedProviderSandbox<TProvider extends Provider> 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 * ComputeSDK Constants\n * \n * Default configuration values and provider definitions\n */\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 * Used to detect which provider to use from environment\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/**\n * Type for provider names\n */\nexport type ProviderName = keyof typeof PROVIDER_ENV_VARS;\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}/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}/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}/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 * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI } from './types';\nimport { autoConfigureCompute } from './auto-detect';\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 - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\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 return {\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 } as TypedComputeAPI<TProvider>;\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","sandbox"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/sandbox.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.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\n// Export all types\nexport * from './types';\n\n// Export compute singleton - the main API\nexport { compute, createCompute } from './compute';\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\nexport { GATEWAY_URL, PROVIDER_PRIORITY, PROVIDER_ENV_VARS, type ProviderName } 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 * ComputeSDK Constants\n * \n * Default configuration values and provider definitions\n */\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 * Used to detect which provider to use from environment\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/**\n * Type for provider names\n */\nexport type ProviderName = keyof typeof PROVIDER_ENV_VARS;\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}/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}/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}/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 * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI } from './types';\nimport { autoConfigureCompute } from './auto-detect';\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 - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\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","sandbox"]}
package/dist/index.mjs CHANGED
@@ -868,7 +868,7 @@ function createCompute(config) {
868
868
  provider: actualProvider,
869
869
  defaultProvider: actualProvider
870
870
  };
871
- return {
871
+ const api = {
872
872
  setConfig: (cfg) => createCompute(cfg),
873
873
  getConfig: () => manager.getConfig(),
874
874
  clearConfig: () => manager.clearConfig(),
@@ -891,6 +891,7 @@ function createCompute(config) {
891
891
  }
892
892
  }
893
893
  };
894
+ return api;
894
895
  }
895
896
 
896
897
  // src/request-handler.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/sandbox.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.ts","../src/compute.ts","../src/request-handler.ts"],"sourcesContent":["/**\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// Forward declaration to avoid circular dependency with provider.ts\ninterface Provider<TSandbox = any> {\n readonly name: string;\n readonly sandbox: any;\n}\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 */\ntype ExtractProviderSandboxType<TProvider> = TProvider extends Provider<infer TSandbox> ? TSandbox : any;\n\n/**\n * Typed provider sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedProviderSandbox<TProvider extends Provider> 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 * ComputeSDK Constants\n * \n * Default configuration values and provider definitions\n */\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 * Used to detect which provider to use from environment\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/**\n * Type for provider names\n */\nexport type ProviderName = keyof typeof PROVIDER_ENV_VARS;\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}/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}/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}/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 * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI } from './types';\nimport { autoConfigureCompute } from './auto-detect';\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 - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\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 return {\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 } as TypedComputeAPI<TProvider>;\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":";AAYA,SAAS,eAAmC;AAa5C;AAAA,EAOE;AAAA,EACA;AAAA,OACK;;;ACzBA,IAAM,cAAc;AAMpB,IAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,oBAAoB;AAAA,EAC/B,KAAK,CAAC,aAAa;AAAA,EACnB,SAAS,CAAC,mBAAmB,sBAAsB,wBAAwB;AAAA,EAC3E,SAAS,CAAC,iBAAiB;AAAA,EAC3B,OAAO,CAAC,kBAAkB,oBAAoB;AAAA,EAC9C,SAAS,CAAC,iBAAiB;AAAA,EAC3B,QAAQ,CAAC,gBAAgB,kBAAkB,mBAAmB;AAAA,EAC9D,YAAY,CAAC,wBAAwB,uBAAuB;AAAA,EAC5D,aAAa,CAAC,aAAa;AAAA,EAC3B,QAAQ,CAAC,cAAc,cAAc;AACvC;;;AC9BA,SAAS,WAAW,qBAAqB;;;ACezC,SAAS,WAAyB;AAoGlC,IAAM,wBAAN,MAAyD;AAAA,EAGvD,YAAY,cAAsB;AAChC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,SAAS,OAAgC;AAC7C,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AAAA,EAEA,MAAM,UAAU,OAAe,UAAiC;AAC9D,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AAAA,EAEA,MAAM,MAAM,OAA8B;AACxC,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AAAA,EAEA,MAAM,QAAQ,OAAqC;AACjD,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AAAA,EAEA,MAAM,OAAO,OAAiC;AAC5C,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AAAA,EAEA,MAAM,OAAO,OAA8B;AACzC,UAAM,IAAI,MAAM,8CAA8C,KAAK,YAAY,2BAA2B,KAAK,YAAY,kDAAkD;AAAA,EAC/K;AACF;AAOA,IAAM,sBAAN,MAAiE;AAAA,EAC/D,YACU,SACA,SACA,YACR;AAHQ;AACA;AACA;AAAA,EACP;AAAA,EAEH,MAAM,SAAS,MAA+B;AAC5C,WAAO,KAAK,QAAQ,SAAS,KAAK,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,EAC7E;AAAA,EAEA,MAAM,UAAU,MAAc,SAAgC;AAC5D,WAAO,KAAK,QAAQ,UAAU,KAAK,SAAS,MAAM,SAAS,KAAK,WAAW,UAAU;AAAA,EACvF;AAAA,EAEA,MAAM,MAAM,MAA6B;AACvC,WAAO,KAAK,QAAQ,MAAM,KAAK,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,EAC1E;AAAA,EAEA,MAAM,QAAQ,MAAoC;AAChD,WAAO,KAAK,QAAQ,QAAQ,KAAK,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,EAC5E;AAAA,EAEA,MAAM,OAAO,MAAgC;AAC3C,WAAO,KAAK,QAAQ,OAAO,KAAK,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,EAC3E;AAAA,EAEA,MAAM,OAAO,MAA6B;AACxC,WAAO,KAAK,QAAQ,OAAO,KAAK,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,EAC3E;AACF;AASA,IAAM,mBAAN,MAA4E;AAAA,EAK1E,YACU,SACR,WACA,cACQ,SACA,QACA,eACA,kBACR;AAPQ;AAGA;AACA;AACA;AACA;AAER,SAAK,YAAY;AACjB,SAAK,WAAW;AAGhB,QAAI,QAAQ,YAAY;AACtB,WAAK,aAAa,IAAI,oBAAoB,SAAS,QAAQ,YAAY,OAAO;AAAA,IAChF,OAAO;AACL,WAAK,aAAa,IAAI,sBAAsB,YAAY;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,cAAwB;AAEtB,QAAI,KAAK,QAAQ,aAAa;AAC5B,aAAO,KAAK,QAAQ,YAAY,KAAK,OAAO;AAAA,IAC9C;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,QAAQ,MAAc,SAAwC;AAClE,WAAO,MAAM,KAAK,QAAQ,QAAQ,KAAK,SAAS,MAAM,SAAS,KAAK,MAAM;AAAA,EAC5E;AAAA,EAEA,MAAM,WACJ,gBACA,eACA,cACwB;AAExB,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,MAAM,QAAQ,cAAc,GAAG;AAEjC,OAAC,SAAS,GAAG,IAAI,IAAI;AACrB,gBAAU;AAAA,IACZ,OAAO;AAEL,gBAAU;AACV,aAAQ,MAAM,QAAQ,aAAa,IAAI,gBAAgB,CAAC;AACxD,gBAAU,MAAM,QAAQ,aAAa,IAAI,eAAe;AAAA,IAC1D;AAGA,UAAM,cAAuB,KAAK,SAAS,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO;AAG5E,QAAI,SAAS,OAAO,SAAS,YAAY;AACvC,YAAM,iBAAiB,IAAI,aAAa;AAAA,QACtC,KAAK,QAAQ;AAAA,QACb,YAAY,QAAQ;AAAA,MACtB,CAAC;AACD,YAAM,CAAC,YAAY,GAAG,WAAW,IAAI;AACrC,aAAO,MAAM,KAAK,QAAQ,WAAW,KAAK,SAAS,YAAY,aAAa,MAAS;AAAA,IACvF;AAEA,WAAO,MAAM,KAAK,QAAQ,WAAW,KAAK,SAAS,SAAS,MAAM,OAAO;AAAA,EAC3E;AAAA,EAEA,MAAM,UAAgC;AACpC,WAAO,MAAM,KAAK,QAAQ,QAAQ,KAAK,OAAO;AAAA,EAChD;AAAA,EAEA,MAAM,OAAO,SAA+D;AAC1E,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,SAAS,OAAO;AAAA,EACxD;AAAA,EAEA,cAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,OAAsB;AAE1B,UAAM,KAAK,QAAQ;AAAA,EACrB;AAAA,EAEA,MAAM,UAAyB;AAE7B,UAAM,KAAK,cAAc,KAAK,QAAQ,KAAK,SAAS;AAAA,EACtD;AACF;AASA,SAAS,iBAAiB,QAA4B,aAAiD;AAErG,MAAI,OAAO,MAAM;AACf,WAAO,OAAO;AAAA,EAChB;AAGA,SAAO;AACT;AAKA,IAAM,0BAAN,MAA6F;AAAA,EAG3F,YACU,QACA,cACA,SACA,kBACR,aACA;AALQ;AACA;AACA;AACA;AAGR,SAAK,gBAAgB,iBAAiB,QAA8B,WAAW;AAAA,EACjF;AAAA,EAEA,MAAM,OAAO,SAAoE;AAE/E,UAAM,sBAAsB,EAAE,SAAS,QAAmB,GAAG,QAAQ;AACrE,UAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,KAAK,QAAQ,mBAAmB;AAEzE,WAAO,IAAI;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,WAA8D;AAC1E,UAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AAChE,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAEA,WAAO,IAAI;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,MAAM,OAA6C;AACjD,UAAM,UAAU,MAAM,KAAK,QAAQ,KAAK,KAAK,MAAM;AAEnD,WAAO,QAAQ,IAAI,YAAU,IAAI;AAAA,MAC/B,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,WAAkC;AAC9C,UAAM,KAAK,QAAQ,QAAQ,KAAK,QAAQ,SAAS;AAAA,EACnD;AACF;AAKA,IAAM,2BAAN,MAAuL;AAAA,EACrL,YACU,QACA,SACR;AAFQ;AACA;AAAA,EACP;AAAA,EAEH,MAAM,OAAO,SAA6C;AACxD,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,QAAQ,OAAO;AAAA,EACvD;AAAA,EAEA,MAAM,KAAK,SAAsD;AAC/D,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,YAAmC;AAC9C,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,QAAQ,UAAU;AAAA,EAC1D;AACF;AAKA,IAAM,2BAAN,MAAiG;AAAA,EAC/F,YACU,QACA,SACR;AAFQ;AACA;AAAA,EACP;AAAA,EAEH,MAAM,OAAO,WAAmB,SAAqD;AACnF,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,QAAQ,WAAW,OAAO;AAAA,EAClE;AAAA,EAEA,MAAM,KAAK,SAAsD;AAC/D,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,YAAmC;AAC9C,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,QAAQ,UAAU;AAAA,EAC1D;AACF;AAKA,IAAM,oBAAN,MAAqH;AAAA,EAMnH,YAAY,QAAiB,gBAAyE;AACpG,SAAK,OAAO,eAAe;AAC3B,SAAK,UAAU,IAAI;AAAA,MACjB;AAAA,MACA,eAAe;AAAA,MACf,eAAe,QAAQ;AAAA,MACvB;AAAA,MACA,eAAe,eAAe;AAAA,IAChC;AAGA,QAAI,eAAe,QAAQ,UAAU;AACnC,WAAK,WAAW,IAAI,yBAAyB,QAAQ,eAAe,QAAQ,QAAQ;AAAA,IACtF;AAEA,QAAI,eAAe,QAAQ,UAAU;AACnC,WAAK,WAAW,IAAI,yBAAyB,QAAQ,eAAe,QAAQ,QAAQ;AAAA,IACtF;AAAA,EACF;AAAA,EAEA,uBAAkC;AAGhC,WAAO,CAAC,QAAQ,QAAQ;AAAA,EAC1B;AACF;AAQO,SAAS,eACd,gBACoF;AACpF,SAAO,CAAC,WAAyC;AAC/C,WAAO,IAAI,kBAAkB,QAAQ,cAAc;AAAA,EACrD;AACF;;;AClcA,eAAsB,oBACpB,QACA,UAAsC,CAAC,GACxB;AACf,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAM,iBAAiB,QAAQ,kBAAkB;AACjD,QAAM,aAAa,QAAQ,cAAc;AACzC,QAAM,gBAAgB,QAAQ,iBAAiB;AAE/C,MAAI,YAA0B;AAC9B,MAAI,eAAe;AAEnB,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,QAAI;AACF,YAAM,OAAO,OAAO;AAGpB,UAAI,QAAQ,IAAI,kBAAkB;AAChC,gBAAQ,IAAI,mCAAmC,IAAI,CAAC,WAAW,MAAM,IAAI,KAAK,GAAG,EAAE;AAAA,MACrF;AAEA;AAAA,IACF,SAAS,OAAO;AACd,kBAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAGpE,UAAI,MAAM,aAAa,GAAG;AACxB,cAAM,IAAI;AAAA,UACR,wCAAwC,UAAU;AAAA,cACnC,UAAU,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWlC;AAAA,MACF;AAGA,YAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,YAAY,CAAC;AAG9D,qBAAe,KAAK,IAAI,eAAe,eAAe,UAAU;AAAA,IAClE;AAAA,EACF;AACF;;;AClDO,SAAS,iBACd,SACA,YAAoB,KACpB,YAAoB,KACZ;AACR,SAAO,YAAY,KAAK,IAAI,GAAG,OAAO,IAAI,KAAK,OAAO,IAAI;AAC5D;;;AHmVA,SAAS,WAAAA,gBAAe;AA7UxB,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAChC,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,6BAA6B,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAG3D,IAAI,6BAA6B;AAK1B,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACE,SACgB,YACA,UACA,WACA,WAChB;AACA,UAAM,OAAO;AALG;AACA;AACA;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAUA,eAAe,aACb,KACA,QACA,UAAuB,CAAC,GACiB;AACzC,QAAM,UAAU,OAAO,kBAAkB;AACzC,QAAM,aAAa,OAAO,cAAc;AACxC,QAAM,aAAa,OAAO,cAAc;AACxC,QAAM,oBAAoB,OAAO,qBAAqB;AAEtD,MAAI,YAA0B;AAE9B,WAAS,UAAU,GAAG,WAAW,YAAY,WAAW;AACtD,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,OAAO;AAE9D,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,GAAG;AAAA,QACH,QAAQ,WAAW;AAAA,QACnB,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,wBAAwB,OAAO;AAAA,UAC/B,cAAc,OAAO;AAAA,UACrB,GAAI,OAAO,mBAAmB,CAAC;AAAA,UAC/B,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AAED,mBAAa,SAAS;AACtB,YAAM,WAAW,KAAK,IAAI,IAAI;AAG9B,UAAI,QAAQ,IAAI,kBAAkB;AAChC,gBAAQ,IAAI,aAAa,QAAQ,UAAU,KAAK,IAAI,GAAG,MAAM,SAAS,MAAM,KAAK,QAAQ,KAAK;AAAA,MAChG;AAEA,UAAI,CAAC,SAAS,IAAI;AAChB,YAAI,SAAS,WAAW,KAAK;AAC3B,iBAAO,EAAE,SAAS,MAAM;AAAA,QAC1B;AAEA,cAAM,YAAY,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,SAAS,UAAU;AACvE,cAAM,YAAY,SAAS,QAAQ,IAAI,cAAc;AAGrD,cAAM,cAAc,kBAAkB,SAAS,SAAS,MAAM;AAC9D,cAAM,cAAc,eAAe,UAAU;AAE7C,YAAI,aAAa;AACf,gBAAM,QAAQ,iBAAiB,SAAS,UAAU;AAElD,cAAI,QAAQ,IAAI,kBAAkB;AAChC,oBAAQ,IAAI,mBAAmB,UAAU,CAAC,IAAI,UAAU,UAAU,MAAM,QAAQ,CAAC,CAAC,eAAe,SAAS,MAAM,MAAM;AAAA,UACxH;AAEA,gBAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,KAAK,CAAC;AACvD;AAAA,QACF;AAGA,YAAI,eAAe,sBAAsB,SAAS;AAClD,YAAI,SAAS,WAAW,KAAK;AAC3B,yBAAe;AAAA;AAAA;AAAA;AAAA,QACjB,WAAW,SAAS,WAAW,KAAK;AAClC,yBAAe,2EAA2E,OAAO,QAAQ;AAAA;AAAA;AAAA,QAC3G,WAAW,SAAS,WAAW,KAAK;AAClC,yBAAe;AAAA;AAAA;AAAA,QACjB,WAAW,SAAS,UAAU,KAAK;AACjC,yBAAe,yBAAyB,SAAS,MAAM;AAAA;AAAA;AAAA,QACzD;AAEA,cAAM,IAAI;AAAA,UACR;AAAA,UACA,SAAS;AAAA,UACT,OAAO;AAAA,UACP;AAAA,UACA,aAAa;AAAA,QACf;AAAA,MACF;AAEA,aAAO,SAAS,KAAK;AAAA,IACvB,SAAS,OAAO;AACd,mBAAa,SAAS;AAGtB,UAAI,iBAAiB,cAAc;AACjC,oBAAY;AACZ,cAAM;AAAA,MACR;AAGA,UAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,cAAM,eAAe,IAAI;AAAA,UACvB,2BAA2B,OAAO;AAAA;AAAA;AAAA;AAAA,UAClC;AAAA,UACA,OAAO;AAAA,QACT;AAGA,YAAI,UAAU,YAAY;AACxB,gBAAM,QAAQ,iBAAiB,SAAS,UAAU;AAElD,cAAI,QAAQ,IAAI,kBAAkB;AAChC,oBAAQ,IAAI,mBAAmB,UAAU,CAAC,IAAI,UAAU,UAAU,MAAM,QAAQ,CAAC,CAAC,iBAAiB;AAAA,UACrG;AAEA,gBAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,KAAK,CAAC;AACvD,sBAAY;AACZ;AAAA,QACF;AAEA,cAAM;AAAA,MACR;AAGA,YAAM,eAAe,IAAI;AAAA,QACvB,iCAAiC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA,QACvF;AAAA,QACA,OAAO;AAAA,MACT;AAGA,UAAI,UAAU,YAAY;AACxB,cAAM,QAAQ,iBAAiB,SAAS,UAAU;AAElD,YAAI,QAAQ,IAAI,kBAAkB;AAChC,kBAAQ,IAAI,mBAAmB,UAAU,CAAC,IAAI,UAAU,UAAU,MAAM,QAAQ,CAAC,CAAC,uBAAuB;AAAA,QAC3G;AAEA,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,KAAK,CAAC;AACvD,oBAAY;AACZ;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAGA,QAAM,aAAa,IAAI,MAAM,sBAAsB;AACrD;AAOO,IAAM,UAAU,eAA6C;AAAA,EAClE,MAAM;AAAA,EACN,SAAS;AAAA,IACP,SAAS;AAAA,MACP,QAAQ,OAAO,QAAQ,YAAY;AACjC,cAAM,aAAa,OAAO,cAAc;AAExC,cAAM,SAAS,MAAM,aAMlB,GAAG,UAAU,YAAY,QAAQ;AAAA,UAClC,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,WAAW,CAAC,CAAC;AAAA,QACpC,CAAC;AAED,YAAI,CAAC,OAAO,WAAW,CAAC,OAAO,MAAM;AACnC,gBAAM,IAAI,MAAM,sCAAsC,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,QAChF;AAEA,cAAM,EAAE,WAAW,KAAK,OAAO,UAAU,SAAS,IAAI,OAAO;AAG7D,YAAI,QAAQ,IAAI,kBAAkB;AAChC,kBAAQ,IAAI,8BAA8B;AAAA,YACxC;AAAA,YACA;AAAA,YACA,UAAU,CAAC,CAAC;AAAA,YACZ,aAAa,QAAQ,MAAM,UAAU,GAAG,EAAE,IAAI,QAAQ;AAAA,YACtD;AAAA,UACF,CAAC;AAAA,QACH;AAIA,YAAI,CAAC,SAAS,CAAC,4BAA4B;AACzC,uCAA6B;AAC7B,kBAAQ;AAAA,YACN,wDAAwD,SAAS,2IAGlC,OAAO,cAAc,mBAAmB;AAAA,UACzE;AAAA,QACF;AAEA,cAAM,UAAU,IAAI,cAAc;AAAA,UAChC,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA,OAAO,SAAS,OAAO;AAAA;AAAA,UACvB;AAAA,UACA,WAAW,WAAW;AAAA,QACxB,CAAC;AAED,cAAM,oBAAoB,OAAO;AAEjC,eAAO,EAAE,SAAS,UAAU;AAAA,MAC9B;AAAA,MAEA,SAAS,OAAO,QAAQ,cAAc;AACpC,cAAM,aAAa,OAAO,cAAc;AAExC,cAAM,SAAS,MAAM,aAKlB,GAAG,UAAU,YAAY,SAAS,IAAI,MAAM;AAE/C,YAAI,CAAC,OAAO,WAAW,CAAC,OAAO,MAAM;AACnC,iBAAO;AAAA,QACT;AAEA,cAAM,EAAE,KAAK,OAAO,UAAU,SAAS,IAAI,OAAO;AAIlD,YAAI,CAAC,SAAS,CAAC,4BAA4B;AACzC,uCAA6B;AAC7B,kBAAQ;AAAA,YACN,4DAA4D,SAAS;AAAA,UAGvE;AAAA,QACF;AAEA,cAAM,UAAU,IAAI,cAAc;AAAA,UAChC,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA,OAAO,SAAS,OAAO;AAAA;AAAA,UACvB;AAAA,UACA,WAAW,WAAW;AAAA,QACxB,CAAC;AAED,cAAM,oBAAoB,OAAO;AAEjC,eAAO,EAAE,SAAS,UAAU;AAAA,MAC9B;AAAA,MAEA,MAAM,YAAY;AAChB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS,OAAO,QAAQ,cAAc;AACpC,cAAM,aAAa,OAAO,cAAc;AAExC,cAAM,aAAa,GAAG,UAAU,YAAY,SAAS,IAAI,QAAQ;AAAA,UAC/D,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,SAAS,OAAO,SAAS,MAAM,YAAY,QAAQ,QAAQ,MAAM,OAAO;AAAA,MACxE,YAAY,OAAO,SAAS,SAAS,SAAS,QAAQ,WAAW,SAAS,IAAI;AAAA,MAC9E,QAAQ,OAAO,SAAS,YAAY,QAAQ,OAAO,OAAO;AAAA,MAE1D,SAAS,OAAO,YAAkC;AAChD,cAAM,OAAO,MAAM,QAAQ,QAAQ;AACnC,eAAO;AAAA,UACL,IAAI,KAAK;AAAA,UACT,UAAU,KAAK;AAAA,UACf,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK;AAAA,UAChB,SAAS,KAAK;AAAA,UACd,UAAU,KAAK,YAAY,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA;AAAA,MAGA,YAAY;AAAA,QACV,UAAU,OAAO,SAAS,SAAS,QAAQ,WAAW,SAAS,IAAI;AAAA,QACnE,WAAW,OAAO,SAAS,MAAM,YAAY,QAAQ,WAAW,UAAU,MAAM,OAAO;AAAA,QACvF,OAAO,OAAO,SAAS,SAAS,QAAQ,WAAW,MAAM,IAAI;AAAA,QAC7D,SAAS,OAAO,SAAS,SAAS,QAAQ,WAAW,QAAQ,IAAI;AAAA,QACjE,QAAQ,OAAO,SAAS,SAAS,QAAQ,WAAW,OAAO,IAAI;AAAA,QAC/D,QAAQ,OAAO,SAAS,SAAS,QAAQ,WAAW,OAAO,IAAI;AAAA,MACjE;AAAA;AAAA,MAGA,aAAa,CAAC,YAAY;AAAA,IAC5B;AAAA,EACF;AACF,CAAC;;;AIlWM,SAAS,uBAAgC;AAC9C,SAAO,CAAC,EAAE,OAAO,YAAY,eAAe,QAAQ,KAAK;AAC3D;AAKA,SAAS,eAAe,UAAiC;AACvD,MAAI,OAAO,YAAY,YAAa,QAAO;AAE3C,QAAM,eAAe,kBAAkB,QAAQ;AAC/C,MAAI,CAAC,aAAc,QAAO;AAE1B,SAAO,aAAa,MAAM,aAAW,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC;AAC/D;AAKA,SAAS,qBAAqB,UAK5B;AACA,QAAM,eAAe,kBAAkB,QAAQ;AAE/C,MAAI,OAAO,YAAY,eAAe,CAAC,cAAc;AACnD,WAAO,EAAE,UAAU,SAAS,CAAC,GAAG,SAAS,eAAe,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,YAAY,MAAM;AAAA,EACpG;AAEA,QAAM,UAAU,aAAa,OAAO,aAAW,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC;AACvE,QAAM,UAAU,aAAa,OAAO,aAAW,CAAC,QAAQ,MAAM,OAAO,CAAC;AAEtE,SAAO;AAAA,IACL;AAAA,IACA,SAAS,CAAC,GAAG,OAAO;AAAA,IACpB,SAAS,CAAC,GAAG,OAAO;AAAA,IACpB,YAAY,QAAQ,WAAW;AAAA,EACjC;AACF;AAWO,SAAS,iBAAgC;AAC9C,MAAI,OAAO,YAAY,YAAa,QAAO;AAG3C,QAAM,WAAW,QAAQ,IAAI,qBAAqB,YAAY;AAC9D,MAAI,YAAY,eAAe,QAAwB,GAAG;AACxD,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,CAAC,eAAe,QAAwB,GAAG;AACzD,YAAQ;AAAA,MACN,gDAAsC,QAAQ;AAAA,eAC9B,kBAAkB,QAAwB,GAAG,KAAK,IAAI,KAAK,SAAS;AAAA;AAAA,IAEtF;AAAA,EACF;AAGA,aAAW,YAAY,mBAAmB;AACxC,QAAI,eAAe,QAAQ,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,mBAAmB,UAA0C;AAC3E,MAAI,OAAO,YAAY,YAAa,QAAO,CAAC;AAE5C,QAAM,UAAkC,CAAC;AAEzC,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,UAAI,QAAQ,IAAI,aAAa;AAC3B,gBAAQ,eAAe,IAAI,QAAQ,IAAI;AAAA,MACzC;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,iBAAiB;AAC/B,gBAAQ,mBAAmB,IAAI,QAAQ,IAAI;AAAA,MAC7C;AACA,UAAI,QAAQ,IAAI,oBAAoB;AAClC,gBAAQ,sBAAsB,IAAI,QAAQ,IAAI;AAAA,MAChD;AACA,UAAI,QAAQ,IAAI,wBAAwB;AACtC,gBAAQ,0BAA0B,IAAI,QAAQ,IAAI;AAAA,MACpD;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,iBAAiB;AAC/B,gBAAQ,mBAAmB,IAAI,QAAQ,IAAI;AAAA,MAC7C;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,gBAAgB;AAC9B,gBAAQ,kBAAkB,IAAI,QAAQ,IAAI;AAAA,MAC5C;AACA,UAAI,QAAQ,IAAI,oBAAoB;AAClC,gBAAQ,sBAAsB,IAAI,QAAQ,IAAI;AAAA,MAChD;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,iBAAiB;AAC/B,gBAAQ,mBAAmB,IAAI,QAAQ,IAAI;AAAA,MAC7C;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,cAAc;AAC5B,gBAAQ,gBAAgB,IAAI,QAAQ,IAAI;AAAA,MAC1C;AACA,UAAI,QAAQ,IAAI,gBAAgB;AAC9B,gBAAQ,kBAAkB,IAAI,QAAQ,IAAI;AAAA,MAC5C;AACA,UAAI,QAAQ,IAAI,mBAAmB;AACjC,gBAAQ,qBAAqB,IAAI,QAAQ,IAAI;AAAA,MAC/C;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,sBAAsB;AACpC,gBAAQ,wBAAwB,IAAI,QAAQ,IAAI;AAAA,MAClD;AACA,UAAI,QAAQ,IAAI,uBAAuB;AACrC,gBAAQ,yBAAyB,IAAI,QAAQ,IAAI;AAAA,MACnD;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,aAAa;AAC3B,gBAAQ,uBAAuB,IAAI,QAAQ,IAAI;AAAA,MACjD;AACA;AAAA,IAEF,KAAK;AACH,UAAI,QAAQ,IAAI,YAAY;AAC1B,gBAAQ,kBAAkB,IAAI,QAAQ,IAAI;AAAA,MAC5C;AACA,UAAI,QAAQ,IAAI,cAAc;AAC5B,gBAAQ,oBAAoB,IAAI,QAAQ,IAAI;AAAA,MAC9C;AACA;AAAA,EACJ;AAEA,SAAO;AACT;AAQO,SAAS,uBAAwC;AAEtD,MAAI,CAAC,qBAAqB,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,eAAe;AAChC,MAAI,CAAC,UAAU;AAEb,UAAM,mBAAmB,kBAAkB,IAAI,OAAK,qBAAqB,CAAC,CAAC;AAG3E,UAAM,cAAc,iBAAiB,IAAI,YAAU;AACjD,YAAM,SAAS,OAAO,aAAa,WACpB,OAAO,QAAQ,SAAS,IAAI,kBAAQ;AACnD,YAAM,QAAQ,GAAG,OAAO,QAAQ,MAAM,IAAI,OAAO,QAAQ,SAAS,OAAO,QAAQ,MAAM;AACvF,UAAI,OAAO,KAAK,MAAM,IAAI,OAAO,SAAS,OAAO,EAAE,CAAC,IAAI,KAAK;AAG7D,UAAI,OAAO,QAAQ,SAAS,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC1D,gBAAQ,cAAc,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,MACjD;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,IAAI;AAAA,MACR;AAAA;AAAA;AAAA,IAEA,YAAY,KAAK,IAAI,IACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcF;AAAA,EACF;AAEA,QAAM,aAAa,QAAQ,IAAI,0BAA0B;AACzD,QAAM,mBAAmB,QAAQ,IAAI;AACrC,QAAM,kBAAkB,mBAAmB,QAAQ;AAGnD,MAAI;AACF,QAAI,IAAI,UAAU;AAAA,EACpB,SAAS,OAAO;AACd,UAAM,IAAI;AAAA,MACR,yBAAyB,UAAU;AAAA;AAAA;AAAA;AAAA,IAGrC;AAAA,EACF;AAGA,MAAI,QAAQ,IAAI,kBAAkB;AAChC,YAAQ,IAAI,oCAA+B,QAAQ,WAAW;AAC9D,YAAQ,IAAI,sBAAe,UAAU,EAAE;AACvC,YAAQ,IAAI,+BAAwB,OAAO,KAAK,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA,EAC7E;AAEA,SAAO,QAAgB;AAAA,IACrB;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AC5PA,IAAM,iBAAN,MAA2C;AAAA,EAA3C;AACE,SAAQ,SAA+B;AACvC,SAAQ,iBAAiB;AAoFzB,mBAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBR,QAAQ,OAAO,WAAqG;AAClH,cAAM,WAAW,UAAU,cAAc,UAAU,OAAO,WAAW,OAAO,WAAW,KAAK,mBAAmB;AAC/G,cAAM,UAAU,QAAQ;AACxB,eAAO,MAAM,SAAS,QAAQ,OAAO,OAAO;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA,MAKA,SAAS,OAAO,qBAAwC,cAAwD;AAC9G,YAAI,OAAO,wBAAwB,UAAU;AAE3C,gBAAM,WAAW,KAAK,mBAAmB;AACzC,iBAAO,MAAM,SAAS,QAAQ,QAAQ,mBAAmB;AAAA,QAC3D,OAAO;AAEL,cAAI,CAAC,WAAW;AACd,kBAAM,IAAI,MAAM,kDAAkD;AAAA,UACpE;AACA,iBAAO,MAAM,oBAAoB,QAAQ,QAAQ,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,OAAO,aAAoD;AAC/D,cAAM,iBAAiB,YAAY,KAAK,mBAAmB;AAC3D,eAAO,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA,MAKA,SAAS,OAAO,qBAAwC,cAAsC;AAC5F,YAAI,OAAO,wBAAwB,UAAU;AAE3C,gBAAM,WAAW,KAAK,mBAAmB;AACzC,iBAAO,MAAM,SAAS,QAAQ,QAAQ,mBAAmB;AAAA,QAC3D,OAAO;AAEL,cAAI,CAAC,WAAW;AACd,kBAAM,IAAI,MAAM,kDAAkD;AAAA,UACpE;AACA,iBAAO,MAAM,oBAAoB,QAAQ,QAAQ,SAAS;AAAA,QAC5D;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAjJA,UAAsC,QAAwC;AAE5E,QAAI,CAAC,OAAO,mBAAmB,CAAC,OAAO,UAAU;AAC/C,YAAM,IAAI,MAAM,mEAAmE;AAAA,IACrF;AAGA,QAAI,OAAO,mBAAmB,OAAO,UAAU;AAC7C,cAAQ,KAAK,sJAAsJ;AAAA,IACrK;AAGA,UAAM,iBAAiB,OAAO,mBAAmB,OAAO;AACxD,SAAK,SAAS;AAAA,MACZ,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAoB;AAClB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAyB;AAE/B,QAAI,KAAK,OAAQ;AAGjB,QAAI,KAAK,eAAgB;AAGzB,UAAM,WAAW,qBAAqB;AAItC,SAAK,iBAAiB;AAEtB,QAAI,UAAU;AACZ,WAAK,SAAS;AAAA,QACZ;AAAA,QACA,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAA+B;AAErC,SAAK,iBAAiB;AAEtB,UAAM,WAAW,KAAK,QAAQ,mBAAmB,KAAK,QAAQ;AAC9D,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR;AAAA,MAKF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAsEF;AAKO,IAAM,UAAsB,IAAI,eAAe;AA+B/C,SAAS,cACd,QACyC;AACzC,QAAM,UAAU,IAAI,eAAe;AAGnC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAGA,QAAM,iBAAiB,OAAO,mBAAmB,OAAO;AACxD,UAAQ,QAAQ,IAAI;AAAA,IAClB,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AAEA,SAAO;AAAA,IACL,WAAW,CAAqB,QAA0B,cAAc,GAAG;AAAA,IAC3E,WAAW,MAAM,QAAQ,UAAU;AAAA,IACnC,aAAa,MAAM,QAAQ,YAAY;AAAA,IAEvC,SAAS;AAAA,MACP,QAAQ,OAAO,WAAuE;AACpF,cAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,MAAM;AACnD,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAO,cAAsB;AACpC,cAAM,UAAU,MAAM,QAAQ,QAAQ,QAAQ,SAAS;AACvD,YAAI,CAAC,QAAS,QAAO;AACrB,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,YAAY;AAChB,cAAM,YAAY,MAAM,QAAQ,QAAQ,KAAK;AAC7C,eAAO;AAAA,MACT;AAAA,MAEA,SAAS,OAAO,cAAsB;AACpC,eAAO,MAAM,QAAQ,QAAQ,QAAQ,SAAS;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACF;;;AChMA,eAAe,cAAc,MAAsB,UAA8C;AAC/F,MAAI;AACF,UAAM,EAAE,QAAQ,UAAU,IAAI;AAG9B,QAAI,WAAW,0BAA0B;AACvC,YAAMC,WAAU,MAAM,QAAQ,QAAQ,OAAO;AAAA,QAC3C;AAAA,QACA,SAAS,KAAK,WAAW,EAAE,SAAS,SAAS;AAAA,MAC/C,CAAC;AACD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAWA,SAAQ;AAAA,QACnB,UAAU,SAAS;AAAA,MACrB;AAAA,IACF;AAEA,QAAI,WAAW,wBAAwB;AACrC,YAAM,YAAY,MAAM,QAAQ,QAAQ,KAAK,QAAQ;AACrD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU,SAAS;AAAA,QACnB,WAAW,UAAU,IAAI,SAAO;AAAA,UAC9B,WAAW,GAAG;AAAA,UACd,UAAU,GAAG;AAAA,QACf,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,QAAI,WAAW,2BAA2B;AACxC,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,YAAM,QAAQ,QAAQ,QAAQ,UAAU,SAAS;AACjD,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,MACrB;AAAA,IACF;AAGA,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,UAAM,UAAU,MAAM,QAAQ,QAAQ,QAAQ,UAAU,SAAS;AACjE,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,WAAW,SAAS,YAAY;AAAA,IAClD;AAGA,QAAI,WAAW,2BAA2B;AACxC,YAAM,SAAS,MAAM,QAAQ,QAAQ;AACrC,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,MAAM;AAAA,UACJ,IAAI,OAAO;AAAA,UACX,UAAU,OAAO;AAAA,UACjB,SAAS,OAAO;AAAA,UAChB,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO,UAAU,YAAY;AAAA,UACxC,SAAS,OAAO;AAAA,UAChB,UAAU,OAAO;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,WAAW,2BAA2B;AACxC,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,SAAS,MAAM,QAAQ,QAAQ,KAAK,MAAM,KAAK,OAAO;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,QAAQ;AAAA,UACN,QAAQ,OAAO;AAAA,UACf,UAAU,OAAO;AAAA,UACjB,UAAU,OAAO;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,8BAA8B;AAC3C,UAAI,CAAC,KAAK,QAAS,OAAM,IAAI,MAAM,qBAAqB;AACxD,YAAM,SAAS,MAAM,QAAQ,WAAW,KAAK,SAAS,KAAK,MAAM,KAAK,cAAc;AACpF,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,QAAQ;AAAA,UACN,QAAQ,OAAO;AAAA,UACf,QAAQ,OAAO;AAAA,UACf,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,WAAW,uCAAuC;AACpD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,SAAS,MAAM,QAAQ,WAAW,SAAS,KAAK,IAAI;AAC1D,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,aAAa;AAAA,MACf;AAAA,IACF;AAEA,QAAI,WAAW,wCAAwC;AACrD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,UAAI,KAAK,YAAY,OAAW,OAAM,IAAI,MAAM,qBAAqB;AACrE,YAAM,QAAQ,WAAW,UAAU,KAAK,MAAM,KAAK,OAAO;AAC1D,aAAO,EAAE,SAAS,MAAM,WAAW,UAAU,SAAS,KAAK;AAAA,IAC7D;AAEA,QAAI,WAAW,oCAAoC;AACjD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,QAAQ,WAAW,MAAM,KAAK,IAAI;AACxC,aAAO,EAAE,SAAS,MAAM,WAAW,UAAU,SAAS,KAAK;AAAA,IAC7D;AAEA,QAAI,WAAW,sCAAsC;AACnD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,SAAS,MAAM,QAAQ,WAAW,QAAQ,KAAK,IAAI;AACzD,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,OAAO,OAAO,IAAI,CAAC,WAAgB;AAAA,UACjC,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,aAAa,MAAM;AAAA,UACnB,MAAM,MAAM;AAAA,UACZ,cAAc,MAAM,aAAa,YAAY;AAAA,QAC/C,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,QAAI,WAAW,qCAAqC;AAClD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,SAAS,MAAM,QAAQ,WAAW,OAAO,KAAK,IAAI;AACxD,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,QAAI,WAAW,qCAAqC;AAClD,UAAI,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,kBAAkB;AAClD,YAAM,QAAQ,WAAW,OAAO,KAAK,IAAI;AACzC,aAAO,EAAE,SAAS,MAAM,WAAW,UAAU,SAAS,KAAK;AAAA,IAC7D;AAEA,UAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,EAE7C,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,WAAW,KAAK,aAAa;AAAA,MAC7B,UAAU,SAAS;AAAA,IACrB;AAAA,EACF;AACF;AAYA,eAAsB,qBACpB,uBACA,UACqC;AAErC,MAAI,OAAO,0BAA0B,YAAY,aAAa,yBAAyB,cAAc,uBAAuB;AAC1H,UAAM,SAAS;AACf,WAAO,MAAM,cAAc,OAAO,SAAS,OAAO,QAAQ;AAAA,EAC5D;AAGA,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AAEA,QAAM,gBAAgB;AACtB,MAAI;AACF,QAAI;AAEJ,QAAI,yBAAyB,SAAS;AAEpC,UAAI,cAAc,WAAW,QAAQ;AACnC,eAAO,SAAS,KAAK;AAAA,UACnB,SAAS;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,UAAU,SAAS;AAAA,QACrB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACpB;AAGA,UAAI;AACF,eAAO,MAAM,cAAc,KAAK;AAAA,MAClC,SAAS,YAAY;AACnB,eAAO,SAAS,KAAK;AAAA,UACnB,SAAS;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,UAAU,SAAS;AAAA,QACrB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,MACpB;AAAA,IACF,OAAO;AACL,aAAO;AAAA,IACT;AAGA,UAAM,SAAS,MAAM,cAAc,MAAM,QAAQ;AAEjD,WAAO,SAAS,KAAK,QAAQ;AAAA,MAC3B,QAAQ,OAAO,UAAU,MAAM;AAAA,IACjC,CAAC;AAAA,EAEH,SAAS,OAAO;AACd,WAAO,SAAS,KAAK;AAAA,MACnB,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,WAAW;AAAA,MACX,UAAU,SAAS;AAAA,IACrB,GAAG,EAAE,QAAQ,IAAI,CAAC;AAAA,EACpB;AACF;","names":["Sandbox","sandbox"]}
1
+ {"version":3,"sources":["../src/types/sandbox.ts","../src/constants.ts","../src/providers/gateway.ts","../src/factory.ts","../src/compute-daemon/lifecycle.ts","../src/utils.ts","../src/auto-detect.ts","../src/compute.ts","../src/request-handler.ts"],"sourcesContent":["/**\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 * ComputeSDK Constants\n * \n * Default configuration values and provider definitions\n */\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 * Used to detect which provider to use from environment\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/**\n * Type for provider names\n */\nexport type ProviderName = keyof typeof PROVIDER_ENV_VARS;\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}/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}/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}/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 * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers\n */\n\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, ProviderSandbox, Provider, TypedProviderSandbox, TypedComputeAPI } from './types';\nimport { autoConfigureCompute } from './auto-detect';\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 - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\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":["Sandbox","sandbox"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "computesdk",
3
- "version": "1.9.1",
3
+ "version": "1.9.3",
4
4
  "description": "A free and open-source toolkit for running other people's code in your applications.",
5
5
  "author": "Garrison",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "type": "git",
33
33
  "url": "https://github.com/computesdk/computesdk.git"
34
34
  },
35
- "homepage": "https://github.com/computesdk/computesdk",
35
+ "homepage": "https://www.computesdk.com/",
36
36
  "bugs": {
37
37
  "url": "https://github.com/computesdk/computesdk/issues"
38
38
  },