computesdk 1.8.6 → 1.8.8

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/sandbox.ts","../src/compute.ts","../src/request-handler.ts","../src/factory.ts"],"sourcesContent":["/**\n * Sandbox Types\n * \n * Types related to sandbox execution, filesystem, terminal operations\n */\n\n// Forward declaration to avoid circular dependency\ninterface Provider {\n readonly name: string;\n readonly sandbox: any; // Will be properly typed when imported together\n}\n\n/**\n * Type mapping for provider names to their sandbox types\n * Manually defined for known providers since declaration merging isn't working reliably\n */\nexport interface ProviderSandboxTypeMap {\n e2b: any; // We can't import the E2B type directly, but we'll handle it differently\n vercel: any;\n daytona: any;\n}\n\n/**\n * Utility type to extract the native instance type from a provider\n * Uses provider name and manual type inference\n */\nexport type ExtractSandboxInstanceType<TProvider extends Provider> = \n TProvider extends { readonly name: 'e2b' }\n ? any // For now, let's just try to make the runtime casting work\n : TProvider extends { readonly name: 'vercel' }\n ? any\n : TProvider extends { readonly name: 'daytona' }\n ? any\n : any;\n\n/**\n * Supported runtime environments\n */\nexport type Runtime = 'node' | 'python';\n\n/**\n * Sandbox status types\n */\nexport type SandboxStatus = 'running' | 'stopped' | 'error';\n\n/**\n * Options for running commands\n */\nexport interface RunCommandOptions {\n /** Run command in background (non-blocking) */\n background?: boolean;\n}\n\n/**\n * Result of code execution\n */\nexport interface ExecutionResult {\n /** Standard output from the execution */\n stdout: string;\n /** Standard error from the execution */\n stderr: string;\n /** Exit code from the execution */\n exitCode: number;\n /** Time taken for execution in milliseconds */\n executionTime: number;\n /** ID of the sandbox where the code was executed */\n sandboxId: string;\n /** Provider that executed the code */\n provider: string;\n /** Process ID for background jobs (if applicable) */\n pid?: number;\n /** Whether this command is running in background */\n isBackground?: boolean;\n}\n\n/**\n * Information about a sandbox\n */\nexport interface SandboxInfo {\n /** Unique identifier for the sandbox */\n id: string;\n /** Provider hosting the sandbox */\n provider: string;\n /** Runtime environment in the sandbox */\n runtime: Runtime;\n /** Current status of the sandbox */\n status: SandboxStatus;\n /** When the sandbox was created */\n createdAt: Date;\n /** Execution timeout in milliseconds */\n timeout: number;\n /** Additional provider-specific metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for creating a sandbox\n */\nexport interface CreateSandboxOptions {\n /** Runtime environment (defaults to 'node' if not specified) */\n runtime?: Runtime;\n /** Execution timeout in milliseconds */\n timeout?: number;\n /** Custom sandbox ID (if supported by provider) */\n sandboxId?: string;\n /** Template ID for sandbox creation (provider-specific) */\n templateId?: string;\n /** Additional metadata for the sandbox */\n metadata?: Record<string, any>;\n /** Domain for sandbox connection (provider-specific) */\n domain?: string;\n /** Environment variables for the sandbox */\n envs?: Record<string, string>;\n}\n\n/**\n * File system entry information\n */\nexport interface FileEntry {\n /** File/directory name */\n name: string;\n /** Full path to the entry */\n path: string;\n /** Whether this is a directory */\n isDirectory: boolean;\n /** File size in bytes (0 for directories) */\n size: number;\n /** Last modified timestamp */\n lastModified: Date;\n}\n\n/**\n * File system interface for sandbox operations\n */\nexport interface SandboxFileSystem {\n /** Read file contents */\n readFile(path: string): Promise<string>;\n /** Write file contents */\n writeFile(path: string, content: string): Promise<void>;\n /** Create directory */\n mkdir(path: string): Promise<void>;\n /** List directory contents */\n readdir(path: string): Promise<FileEntry[]>;\n /** Check if file/directory exists */\n exists(path: string): Promise<boolean>;\n /** Remove file or directory */\n remove(path: string): Promise<void>;\n}\n\n/**\n * Error thrown when a command exits with a non-zero status\n */\nexport class CommandExitError extends Error {\n name = 'CommandExitError';\n constructor(public result: {\n exitCode: number;\n stdout: string;\n stderr: string;\n error: boolean;\n }) {\n super(`Command exited with code ${result.exitCode}`);\n }\n}\n\n/**\n * Type guard to check if an error is a CommandExitError\n */\nexport function isCommandExitError(error: unknown): error is CommandExitError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'CommandExitError' &&\n 'result' in error\n );\n}\n\n\n\n\n\n/**\n * Base sandbox interface - what developers interact with\n */\nexport interface Sandbox<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<ExecutionResult>;\n /** Execute shell commands */\n runCommand(command: string, args?: string[], options?: RunCommandOptions): Promise<ExecutionResult>;\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/**\n * Extract the sandbox type from a provider\n */\ntype ExtractProviderSandboxType<TProvider extends Provider> = TProvider extends { readonly __sandboxType: infer TSandbox } ? TSandbox : any;\n\n/**\n * Typed sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedSandbox<TProvider extends Provider> extends Omit<Sandbox<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/**\n * Enhanced sandbox type that includes ComputeClient features\n *\n * When a sandbox is created with an API key/JWT, it gets wrapped with ComputeClient\n * which adds powerful features like WebSocket terminals, file watchers, and signals.\n *\n * @example\n * ```typescript\n * const sandbox = await compute.sandbox.create();\n *\n * // ComputeClient features (only available when API key is configured)\n * const terminal = await sandbox.createTerminal();\n * const watcher = await sandbox.createWatcher('/home/project');\n * const signals = await sandbox.startSignals();\n *\n * // Original sandbox features still work\n * await sandbox.runCommand('ls');\n * const instance = sandbox.getInstance();\n * ```\n */\nexport type ComputeEnhancedSandbox<TSandbox = any> = Sandbox<TSandbox> & {\n /** The original provider sandbox instance */\n __originalSandbox: Sandbox<TSandbox>;\n\n // ComputeClient enhanced features\n /** Create a persistent terminal session with WebSocket integration */\n createTerminal(shell?: string, encoding?: 'raw' | 'base64'): Promise<import('@computesdk/client').Terminal>;\n /** Create a file watcher with real-time change notifications */\n createWatcher(path: string, options?: {\n includeContent?: boolean;\n ignored?: string[];\n encoding?: 'raw' | 'base64';\n }): Promise<import('@computesdk/client').FileWatcher>;\n /** Start the signal service for port and error monitoring */\n startSignals(): Promise<import('@computesdk/client').SignalService>;\n /** Execute a one-off command without creating a persistent terminal */\n execute(options: { command: string; shell?: string }): Promise<any>;\n /** List all active terminals */\n listTerminals(): Promise<any[]>;\n /** Get terminal by ID */\n getTerminal(id: string): Promise<any>;\n /** List all active file watchers */\n listWatchers(): Promise<any>;\n /** Get file watcher by ID */\n getWatcher(id: string): Promise<any>;\n /** Get signal service status */\n getSignalStatus(): Promise<any>;\n /** Create a session token (requires access token) */\n createSessionToken(options?: { description?: string; expiresIn?: number }): Promise<any>;\n /** List all session tokens (requires access token) */\n listSessionTokens(): Promise<any>;\n /** Get session token details (requires access token) */\n getSessionToken(tokenId: string): Promise<any>;\n /** Revoke a session token (requires access token) */\n revokeSessionToken(tokenId: string): Promise<void>;\n /** Create a magic link for browser authentication (requires access token) */\n createMagicLink(options?: { redirectUrl?: string }): Promise<any>;\n /** Check authentication status */\n getAuthStatus(): Promise<any>;\n /** Get authentication information */\n getAuthInfo(): Promise<any>;\n /** Set authentication token manually */\n setToken(token: string): void;\n /** Get current authentication token */\n getToken(): string | null;\n /** Get current sandbox URL */\n getSandboxUrl(): string;\n /** Disconnect WebSocket connection */\n disconnect(): Promise<void>;\n}\n\n/**\n * Typed enhanced sandbox that preserves both provider typing and ComputeClient features\n */\nexport type TypedEnhancedSandbox<TProvider extends Provider> =\n ComputeEnhancedSandbox<ExtractProviderSandboxType<TProvider>> &\n Omit<TypedSandbox<TProvider>, keyof Sandbox>;","/**\n * Compute Singleton - Main API Orchestrator\n *\n * Provides the unified compute.* API and delegates to specialized managers\n */\n\nimport { ComputeClient } from '@computesdk/client';\nimport type { ComputeAPI, CreateSandboxParams, CreateSandboxParamsWithOptionalProvider, ComputeConfig, Sandbox, Provider, TypedSandbox, TypedComputeAPI, ComputeEnhancedSandbox, TypedEnhancedSandbox } from './types';\n\n/**\n * Authorization response from license server\n */\ninterface AuthorizationResponse {\n access_token: string;\n sandbox_url: string;\n preview_url: string;\n}\n\n/**\n * Authorize license key and get JWT token + URLs from license server\n */\nasync function authorizeApiKey(apiKey: string): Promise<AuthorizationResponse> {\n try {\n const response = await fetch('https://preview.computesdk.com/__api/license/authorize', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: apiKey,\n increment_usage: 1\n })\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => response.statusText);\n throw new Error(`License authorization failed (${response.status}): ${errorText}`);\n }\n\n const data = await response.json();\n\n if (!data.access_token) {\n throw new Error('No access token received from license server');\n }\n\n if (!data.sandbox_url) {\n throw new Error('No sandbox_url received from license server');\n }\n\n if (!data.preview_url) {\n throw new Error('No preview_url received from license server');\n }\n\n return {\n access_token: data.access_token,\n sandbox_url: data.sandbox_url,\n preview_url: data.preview_url\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes('License authorization failed')) {\n throw error; // Re-throw our formatted error\n }\n // Network or other errors\n throw new Error(`Failed to authorize API key (network error): ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\n/**\n * Check if a command is available in the sandbox\n */\nasync function isCommandAvailable(sandbox: Sandbox, command: string): Promise<boolean> {\n const result = await sandbox.runCommand('sh', ['-c', `command -v ${command}`]);\n return result.exitCode === 0;\n}\n\n/**\n * Detect package manager available in the sandbox\n */\nasync function detectPackageManager(sandbox: Sandbox): Promise<'apk' | 'apt' | null> {\n // Try Alpine's apk first (most common in minimal containers)\n if (await isCommandAvailable(sandbox, 'apk')) {\n return 'apk';\n }\n\n // Fall back to Debian/Ubuntu apt\n if (await isCommandAvailable(sandbox, 'apt-get')) {\n return 'apt';\n }\n\n return null;\n}\n\n/**\n * Install required dependencies (curl and bash) if missing\n */\nasync function ensureDependencies(sandbox: Sandbox): Promise<void> {\n const hasCurl = await isCommandAvailable(sandbox, 'curl');\n const hasBash = await isCommandAvailable(sandbox, 'bash');\n\n // If both are available, nothing to do\n if (hasCurl && hasBash) {\n return;\n }\n\n const packageManager = await detectPackageManager(sandbox);\n\n if (!packageManager) {\n throw new Error(\n `Missing required tools (curl: ${hasCurl}, bash: ${hasBash}), but no supported package manager found.\\n` +\n `Supported package managers: apk (Alpine), apt-get (Debian/Ubuntu).\\n` +\n `Please use a sandbox image that includes curl and bash, or install them manually first.`\n );\n }\n\n let installResult;\n\n if (packageManager === 'apk') {\n // Alpine Linux\n installResult = await sandbox.runCommand('sh', ['-c', 'apk add --no-cache curl bash 2>&1']);\n } else {\n // Debian/Ubuntu\n installResult = await sandbox.runCommand('sh', ['-c', 'apt-get update -qq && apt-get install -qq -y curl bash 2>&1']);\n }\n\n if (installResult.exitCode !== 0) {\n throw new Error(\n `Failed to install curl and bash using ${packageManager}.\\n` +\n `Install output: ${installResult.stderr || installResult.stdout}\\n` +\n `Please install curl and bash manually or use a different sandbox image.`\n );\n }\n}\n\n/**\n * Check if compute CLI is already installed in the sandbox\n */\nasync function isComputeInstalled(sandbox: Sandbox): Promise<boolean> {\n const result = await sandbox.runCommand('sh', ['-c', 'test -f /usr/local/bin/compute && echo \"exists\" || echo \"missing\"']);\n return result.stdout?.trim() === 'exists';\n}\n\n/**\n * Download the compute install script\n */\nasync function downloadInstallScript(sandbox: Sandbox): Promise<void> {\n const downloadResult = await sandbox.runCommand('sh', ['-c', 'curl -fsSL https://computesdk.com/install.sh -o /tmp/compute-install.sh 2>&1']);\n\n if (downloadResult.exitCode !== 0) {\n const errorOutput = downloadResult.stderr || downloadResult.stdout || 'unknown error';\n throw new Error(\n `Failed to download install script from https://computesdk.com/install.sh: ${errorOutput}`\n );\n }\n}\n\n/**\n * Run the compute install script\n */\nasync function runInstallScript(sandbox: Sandbox, accessToken?: string): Promise<void> {\n const installCommand = accessToken\n ? `bash /tmp/compute-install.sh --non-interactive --access-token \"${accessToken}\" --location /usr/local/bin`\n : `bash /tmp/compute-install.sh --non-interactive --location /usr/local/bin`;\n\n const installResult = await sandbox.runCommand('bash', ['-c', installCommand]);\n\n if (installResult.exitCode !== 0) {\n const errorOutput = installResult.stderr || installResult.stdout || 'unknown error';\n throw new Error(`Failed to install compute CLI: ${errorOutput}`);\n }\n}\n\n/**\n * Install and start compute CLI inside a sandbox\n *\n * This is the main installation orchestrator that:\n * 1. Checks if compute is already installed\n * 2. Ensures curl and bash are available (installs if needed)\n * 3. Downloads the install script\n * 4. Runs the install script with proper credentials\n * 5. Verifies the installation succeeded\n */\nasync function installComputeInSandbox(\n sandbox: Sandbox,\n config?: { apiKey?: string; accessToken?: string }\n): Promise<AuthorizationResponse | null> {\n // Get access token and URLs from API key if provided\n let authResponse: AuthorizationResponse | null = null;\n let accessToken = config?.accessToken;\n\n if (config?.apiKey && !accessToken) {\n authResponse = await authorizeApiKey(config.apiKey);\n accessToken = authResponse.access_token;\n }\n\n // Check if compute is already installed\n if (await isComputeInstalled(sandbox)) {\n return authResponse;\n }\n\n // Ensure required dependencies are available\n await ensureDependencies(sandbox);\n\n // Download install script\n await downloadInstallScript(sandbox);\n\n // Run install script with credentials\n await runInstallScript(sandbox, accessToken);\n\n // Verify installation succeeded\n if (!await isComputeInstalled(sandbox)) {\n throw new Error('Compute binary not found at /usr/local/bin/compute after installation');\n }\n\n return authResponse;\n}\n\n/**\n * Wait for compute CLI to be ready by polling the health endpoint\n */\nasync function waitForComputeReady(client: ComputeClient, maxRetries = 30, delayMs = 2000): Promise<void> {\n let lastError: Error | null = null;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n await client.health();\n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Only log on last attempt to avoid noise\n if (i === maxRetries - 1) {\n throw new Error(\n `Compute CLI failed to start after ${maxRetries} attempts (${maxRetries * delayMs / 1000}s).\\n` +\n `Last error: ${lastError.message}\\n` +\n `This could indicate:\\n` +\n ` 1. The compute daemon failed to start in the sandbox\\n` +\n ` 2. The sandbox_url is incorrect or unreachable\\n` +\n ` 3. The sandbox is taking longer than expected to initialize`\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n}\n\n/**\n * Compute singleton implementation - orchestrates all compute operations\n */\nclass ComputeManager implements ComputeAPI {\n private config: ComputeConfig | null = null;\n private computeAuth: { apiKey?: string; accessToken?: string } = {};\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 const accessToken = config.accessToken || config.jwt; // Support both accessToken and deprecated jwt\n this.config = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n\n // Store compute auth credentials\n this.computeAuth = {\n apiKey: config.apiKey,\n accessToken: accessToken\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 * Get the default provider, throwing if not configured\n */\n private getDefaultProvider(): Provider {\n const provider = this.config?.defaultProvider || this.config?.provider;\n if (!provider) {\n throw new Error(\n 'No default provider configured. Either call compute.setConfig({ defaultProvider }) or pass provider explicitly.'\n );\n }\n return provider;\n }\n\n /**\n * Wrap a provider sandbox with ComputeClient while preserving the original sandbox\n * This adds powerful features like WebSocket terminals, file watchers, and signals\n */\n private async wrapWithComputeClient(originalSandbox: Sandbox, authResponse: AuthorizationResponse): Promise<ComputeEnhancedSandbox> {\n const client = new ComputeClient({\n sandboxUrl: authResponse.sandbox_url,\n sandboxId: originalSandbox.sandboxId,\n provider: originalSandbox.provider,\n token: authResponse.access_token,\n WebSocket: globalThis.WebSocket\n });\n\n // Wait for compute CLI to be ready before returning\n await waitForComputeReady(client);\n\n // Store the original sandbox for getInstance() and getProvider() calls\n // We create a proxy-like object that delegates most calls to ComputeClient\n // but preserves access to the original provider sandbox\n const wrappedSandbox = Object.assign(client, {\n __originalSandbox: originalSandbox,\n\n // Override getInstance to return the original provider's instance\n getInstance: () => originalSandbox.getInstance(),\n\n // Override getProvider to return the original provider\n getProvider: () => originalSandbox.getProvider()\n });\n\n return wrappedSandbox as ComputeEnhancedSandbox;\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 (both forms work)\n * compute.setConfig({ defaultProvider: e2b({ apiKey: 'your-key' }) })\n * const sandbox1 = await compute.sandbox.create({})\n * const sandbox2 = await compute.sandbox.create()\n * ```\n */\n create: async (params?: CreateSandboxParams | CreateSandboxParamsWithOptionalProvider): Promise<Sandbox | ComputeEnhancedSandbox> => {\n const provider = params && 'provider' in params && params.provider ? params.provider : this.getDefaultProvider();\n const options = params?.options;\n const sandbox = await provider.sandbox.create(options);\n\n // Install compute CLI and wrap with ComputeClient if auth is configured\n if (this.computeAuth.apiKey || this.computeAuth.accessToken) {\n // Install compute CLI in the sandbox with auth credentials\n const authResponse = await installComputeInSandbox(sandbox, this.computeAuth);\n\n // Wrap with ComputeClient if we have authorization info\n // This adds features like createTerminal(), createWatcher(), startSignals()\n if (authResponse) {\n return await this.wrapWithComputeClient(sandbox, authResponse);\n }\n }\n\n return sandbox;\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<Sandbox | 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<Sandbox[]> => {\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 // Future: compute.blob.*, compute.database.*, compute.git.* will be added here\n // blob = new BlobManager();\n // database = new DatabaseManager(); \n // git = new GitManager();\n\n\n}\n\n/**\n * Singleton instance - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\n\n\n\n/**\n * Create a compute instance with proper typing\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { createCompute } from 'computesdk'\n *\n * // With API key (automatically gets access token from license server)\n * const compute = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * apiKey: 'computesdk_live_...' // Returns enhanced sandboxes\n * });\n *\n * // Or with direct access token\n * const compute2 = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * accessToken: 'your-access-token' // Returns enhanced sandboxes\n * });\n *\n * const sandbox = await compute.sandbox.create();\n * const instance = sandbox.getInstance(); // ✅ Properly typed E2B Sandbox!\n * await sandbox.createTerminal(); // ✅ Enhanced sandbox features!\n * ```\n */\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { apiKey: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { accessToken: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { jwt: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider, false>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider, boolean> {\n const manager = new ComputeManager();\n\n // Set config directly without calling the public setConfig method\n const actualProvider = config.defaultProvider || config.provider!;\n const accessToken = config.accessToken || config.jwt; // Support both accessToken and deprecated jwt\n manager['config'] = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n manager['computeAuth'] = {\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n\n const isEnhanced = !!(config.apiKey || config.accessToken || config.jwt);\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 // If API key/JWT is configured, the sandbox will be enhanced with ComputeClient features\n // Cast to the appropriate type based on whether it's enhanced or not\n if (isEnhanced) {\n return sandbox as TypedEnhancedSandbox<TProvider>;\n }\n return sandbox as TypedSandbox<TProvider>;\n },\n\n getById: async (sandboxId: string) => {\n const sandbox = await manager.sandbox.getById(sandboxId);\n if (!sandbox) return null;\n // Type depends on whether auth is configured\n if (isEnhanced) {\n return sandbox as TypedEnhancedSandbox<TProvider>;\n }\n return sandbox as TypedSandbox<TProvider>;\n },\n\n list: async () => {\n const sandboxes = await manager.sandbox.list();\n // Type depends on whether auth is configured\n if (isEnhanced) {\n return sandboxes as TypedEnhancedSandbox<TProvider>[];\n }\n return sandboxes as TypedSandbox<TProvider>[];\n },\n\n destroy: async (sandboxId: string) => {\n return await manager.sandbox.destroy(sandboxId);\n }\n }\n } as TypedComputeAPI<TProvider, typeof isEnhanced>;\n}\n\n\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 stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n executionTime: result.executionTime\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 executionTime: result.executionTime,\n ...(result.isBackground && { isBackground: result.isBackground }),\n ...(result.pid && { pid: result.pid })\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 };","/**\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 Sandbox,\n SandboxFileSystem,\n SandboxInfo,\n ExecutionResult,\n Runtime,\n CreateSandboxOptions,\n FileEntry,\n RunCommandOptions,\n CreateSnapshotOptions,\n ListSnapshotsOptions,\n CreateTemplateOptions,\n ListTemplatesOptions,\n} from './types/index.js';\n\n/**\n * Helper function to handle background command execution\n * Providers can use this to implement background job support\n */\nexport function createBackgroundCommand(command: string, args: string[] = [], options?: RunCommandOptions): { command: string; args: string[]; isBackground: boolean } {\n if (!options?.background) {\n return { command, args, isBackground: false };\n }\n\n // For background execution, we modify the command to run in background\n // Default approach: append & to make it run in background\n const fullCommand = args.length > 0 ? `${command} ${args.join(' ')}` : command;\n \n return {\n command: 'sh',\n args: ['-c', `${fullCommand} &`],\n isBackground: true\n };\n}\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 (map to individual Sandbox methods)\n runCode: (sandbox: TSandbox, code: string, runtime?: Runtime, config?: TConfig) => Promise<ExecutionResult>;\n runCommand: (sandbox: TSandbox, command: string, args?: string[], options?: RunCommandOptions) => Promise<ExecutionResult>;\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<ExecutionResult>) => Promise<string>;\n writeFile: (sandbox: TSandbox, path: string, content: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n mkdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n readdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<FileEntry[]>;\n exists: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<boolean>;\n remove: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n };\n}\n\n/**\n * Template method implementations\n */\nexport interface TemplateMethods<TTemplate = any, TConfig = any> {\n create: (config: TConfig, options: CreateTemplateOptions | any) => 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 configuration for createProvider()\n */\nexport interface ProviderConfig<TSandbox = any, TConfig = any, TTemplate = any, TSnapshot = any> {\n name: string;\n methods: {\n sandbox: SandboxMethods<TSandbox, TConfig>;\n template?: TemplateMethods<TTemplate, TConfig>;\n snapshot?: SnapshotMethods<TSnapshot, TConfig>;\n };\n}\n\n/**\n * Default filesystem implementations based on shell commands\n * These work for any provider that supports shell command execution\n */\nconst defaultFilesystemMethods = {\n readFile: async (sandbox: any, path: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<string> => {\n const result = await runCommand(sandbox, 'cat', [path]);\n if (result.exitCode !== 0) {\n throw new Error(`Failed to read file ${path}: ${result.stderr}`);\n }\n // Trim trailing newline that cat command adds\n return result.stdout.replace(/\\n$/, '');\n },\n\n writeFile: async (sandbox: any, path: string, content: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<void> => {\n const result = await runCommand(sandbox, 'sh', ['-c', `echo ${JSON.stringify(content)} > ${JSON.stringify(path)}`]);\n if (result.exitCode !== 0) {\n throw new Error(`Failed to write file ${path}: ${result.stderr}`);\n }\n },\n\n mkdir: async (sandbox: any, path: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<void> => {\n const result = await runCommand(sandbox, 'mkdir', ['-p', path]);\n if (result.exitCode !== 0) {\n throw new Error(`Failed to create directory ${path}: ${result.stderr}`);\n }\n },\n\n readdir: async (sandbox: any, path: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<FileEntry[]> => {\n // Try different ls variations for maximum compatibility\n let result = await runCommand(sandbox, 'ls', ['-la', path]);\n let hasDetailedOutput = true;\n \n // Fall back to basic ls if detailed flags not supported\n if (result.exitCode !== 0) {\n result = await runCommand(sandbox, 'ls', ['-l', path]);\n }\n if (result.exitCode !== 0) {\n result = await runCommand(sandbox, 'ls', [path]);\n hasDetailedOutput = false;\n }\n \n if (result.exitCode !== 0) {\n throw new Error(`Failed to list directory ${path}: ${result.stderr}`);\n }\n\n const lines = (result.stdout || '').split('\\n').filter((line: string) => line.trim() && !line.startsWith('total'));\n\n return lines.map((line: string) => {\n if (hasDetailedOutput && line.includes(' ')) {\n // Parse detailed ls output (ls -la or ls -l)\n const parts = line.trim().split(/\\s+/);\n const name = parts[parts.length - 1];\n const isDirectory = line.startsWith('d');\n \n return {\n name,\n path: `${path}/${name}`,\n isDirectory,\n size: parseInt(parts[4]) || 0,\n lastModified: new Date()\n };\n } else {\n // Parse simple ls output (just filenames)\n const name = line.trim();\n return {\n name,\n path: `${path}/${name}`,\n isDirectory: false, // Can't determine from simple ls\n size: 0,\n lastModified: new Date()\n };\n }\n });\n },\n\n exists: async (sandbox: any, path: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<boolean> => {\n const result = await runCommand(sandbox, 'test', ['-e', path]);\n return result.exitCode === 0; // Exit code 0 means file exists\n },\n\n remove: async (sandbox: any, path: string, runCommand: (sandbox: any, command: string, args?: string[]) => Promise<ExecutionResult>): Promise<void> => {\n const result = await runCommand(sandbox, 'rm', ['-rf', path]);\n if (result.exitCode !== 0) {\n throw new Error(`Failed to remove ${path}: ${result.stderr}`);\n }\n }\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 Sandbox interface\n */\nclass GeneratedSandbox<TSandbox = any> implements Sandbox<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<ExecutionResult> {\n return await this.methods.runCode(this.sandbox, code, runtime, this.config);\n }\n\n async runCommand(command: string, args?: string[], options?: RunCommandOptions): Promise<ExecutionResult> {\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 * Auto-generated Sandbox Manager implementation\n */\nclass GeneratedSandboxManager<TSandbox, TConfig> implements ProviderSandboxManager<TSandbox> {\n private activeSandboxes: Map<string, GeneratedSandbox<TSandbox>> = new Map();\n\n constructor(\n private config: TConfig,\n private providerName: string,\n private methods: SandboxMethods<TSandbox, TConfig>,\n private providerInstance: Provider\n ) {}\n\n async create(options?: CreateSandboxOptions): Promise<Sandbox<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 const sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n return sandbox;\n }\n\n async getById(sandboxId: string): Promise<Sandbox<TSandbox> | null> {\n // Check active sandboxes first\n const existing = this.activeSandboxes.get(sandboxId);\n if (existing) {\n return existing;\n }\n\n // Try to reconnect\n const result = await this.methods.getById(this.config, sandboxId);\n if (!result) {\n return null;\n }\n\n const sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n return sandbox;\n }\n\n async list(): Promise<Sandbox<TSandbox>[]> {\n const results = await this.methods.list(this.config);\n const sandboxes: Sandbox[] = [];\n\n for (const result of results) {\n let sandbox = this.activeSandboxes.get(result.sandboxId);\n if (!sandbox) {\n sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n }\n sandboxes.push(sandbox);\n }\n\n return sandboxes;\n }\n\n async destroy(sandboxId: string): Promise<void> {\n await this.methods.destroy(this.config, sandboxId);\n this.activeSandboxes.delete(sandboxId);\n }\n}\n\n/**\n * Auto-generated Template Manager implementation\n */\nclass GeneratedTemplateManager<TTemplate, TConfig> implements ProviderTemplateManager<TTemplate> {\n constructor(\n private config: TConfig,\n private methods: TemplateMethods<TTemplate, TConfig>\n ) {}\n\n async create(options: CreateTemplateOptions | any): 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 readonly __sandboxType!: TSandbox; // Phantom type for TypeScript inference\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 );\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) => Provider<TSandbox, TTemplate, TSnapshot> {\n // Auto-inject default filesystem methods if none provided\n if (!providerConfig.methods.sandbox.filesystem) {\n providerConfig.methods.sandbox.filesystem = defaultFilesystemMethods;\n }\n\n return (config: TConfig) => {\n return new GeneratedProvider(config, providerConfig);\n };\n}"],"mappings":"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","names":["sandbox"]}
1
+ {"version":3,"sources":["../src/types/sandbox.ts","../src/auth/license.ts","../src/compute-daemon/dependencies.ts","../src/compute-daemon/installer.ts","../src/sandbox/wrapper.ts","../src/compute-daemon/lifecycle.ts","../src/compute.ts","../src/request-handler.ts","../src/factory.ts"],"sourcesContent":["/**\n * Sandbox Types\n * \n * Types related to sandbox execution, filesystem, terminal operations\n */\n\n// Forward declaration to avoid circular dependency\ninterface Provider {\n readonly name: string;\n readonly sandbox: any; // Will be properly typed when imported together\n}\n\n/**\n * Type mapping for provider names to their sandbox types\n * Manually defined for known providers since declaration merging isn't working reliably\n */\nexport interface ProviderSandboxTypeMap {\n e2b: any; // We can't import the E2B type directly, but we'll handle it differently\n vercel: any;\n daytona: any;\n}\n\n/**\n * Utility type to extract the native instance type from a provider\n * Uses provider name and manual type inference\n */\nexport type ExtractSandboxInstanceType<TProvider extends Provider> = \n TProvider extends { readonly name: 'e2b' }\n ? any // For now, let's just try to make the runtime casting work\n : TProvider extends { readonly name: 'vercel' }\n ? any\n : TProvider extends { readonly name: 'daytona' }\n ? any\n : any;\n\n/**\n * Supported runtime environments\n */\nexport type Runtime = 'node' | 'python';\n\n/**\n * Sandbox status types\n */\nexport type SandboxStatus = 'running' | 'stopped' | 'error';\n\n/**\n * Options for running commands\n */\nexport interface RunCommandOptions {\n /** Run command in background (non-blocking) */\n background?: boolean;\n}\n\n/**\n * Result of code execution\n */\nexport interface ExecutionResult {\n /** Standard output from the execution */\n stdout: string;\n /** Standard error from the execution */\n stderr: string;\n /** Exit code from the execution */\n exitCode: number;\n /** Time taken for execution in milliseconds */\n executionTime: number;\n /** ID of the sandbox where the code was executed */\n sandboxId: string;\n /** Provider that executed the code */\n provider: string;\n /** Process ID for background jobs (if applicable) */\n pid?: number;\n /** Whether this command is running in background */\n isBackground?: boolean;\n}\n\n/**\n * Information about a sandbox\n */\nexport interface SandboxInfo {\n /** Unique identifier for the sandbox */\n id: string;\n /** Provider hosting the sandbox */\n provider: string;\n /** Runtime environment in the sandbox */\n runtime: Runtime;\n /** Current status of the sandbox */\n status: SandboxStatus;\n /** When the sandbox was created */\n createdAt: Date;\n /** Execution timeout in milliseconds */\n timeout: number;\n /** Additional provider-specific metadata */\n metadata?: Record<string, any>;\n}\n\n/**\n * Options for creating a sandbox\n */\nexport interface CreateSandboxOptions {\n /** Runtime environment (defaults to 'node' if not specified) */\n runtime?: Runtime;\n /** Execution timeout in milliseconds */\n timeout?: number;\n /** Custom sandbox ID (if supported by provider) */\n sandboxId?: string;\n /** Template ID for sandbox creation (provider-specific) */\n templateId?: string;\n /** Additional metadata for the sandbox */\n metadata?: Record<string, any>;\n /** Domain for sandbox connection (provider-specific) */\n domain?: string;\n /** Environment variables for the sandbox */\n envs?: Record<string, string>;\n}\n\n/**\n * File system entry information\n */\nexport interface FileEntry {\n /** File/directory name */\n name: string;\n /** Full path to the entry */\n path: string;\n /** Whether this is a directory */\n isDirectory: boolean;\n /** File size in bytes (0 for directories) */\n size: number;\n /** Last modified timestamp */\n lastModified: Date;\n}\n\n/**\n * File system interface for sandbox operations\n */\nexport interface SandboxFileSystem {\n /** Read file contents */\n readFile(path: string): Promise<string>;\n /** Write file contents */\n writeFile(path: string, content: string): Promise<void>;\n /** Create directory */\n mkdir(path: string): Promise<void>;\n /** List directory contents */\n readdir(path: string): Promise<FileEntry[]>;\n /** Check if file/directory exists */\n exists(path: string): Promise<boolean>;\n /** Remove file or directory */\n remove(path: string): Promise<void>;\n}\n\n/**\n * Error thrown when a command exits with a non-zero status\n */\nexport class CommandExitError extends Error {\n name = 'CommandExitError';\n constructor(public result: {\n exitCode: number;\n stdout: string;\n stderr: string;\n error: boolean;\n }) {\n super(`Command exited with code ${result.exitCode}`);\n }\n}\n\n/**\n * Type guard to check if an error is a CommandExitError\n */\nexport function isCommandExitError(error: unknown): error is CommandExitError {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'CommandExitError' &&\n 'result' in error\n );\n}\n\n\n\n\n\n/**\n * Base sandbox interface - what developers interact with\n */\nexport interface Sandbox<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<ExecutionResult>;\n /** Execute shell commands */\n runCommand(command: string, args?: string[], options?: RunCommandOptions): Promise<ExecutionResult>;\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/**\n * Extract the sandbox type from a provider\n */\ntype ExtractProviderSandboxType<TProvider extends Provider> = TProvider extends { readonly __sandboxType: infer TSandbox } ? TSandbox : any;\n\n/**\n * Typed sandbox interface that preserves the provider's native instance type\n */\nexport interface TypedSandbox<TProvider extends Provider> extends Omit<Sandbox<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/**\n * Enhanced sandbox type that includes ComputeClient features\n *\n * When a sandbox is created with an API key/JWT, it gets wrapped with ComputeClient\n * which adds powerful features like WebSocket terminals, file watchers, and signals.\n *\n * @example\n * ```typescript\n * const sandbox = await compute.sandbox.create();\n *\n * // ComputeClient features (only available when API key is configured)\n * const terminal = await sandbox.createTerminal();\n * const watcher = await sandbox.createWatcher('/home/project');\n * const signals = await sandbox.startSignals();\n *\n * // Original sandbox features still work\n * await sandbox.runCommand('ls');\n * const instance = sandbox.getInstance();\n * ```\n */\nexport type ComputeEnhancedSandbox<TSandbox = any> = Sandbox<TSandbox> & {\n /** The original provider sandbox instance */\n __originalSandbox: Sandbox<TSandbox>;\n\n // ComputeClient enhanced features\n /** Create a persistent terminal session with WebSocket integration */\n createTerminal(shell?: string, encoding?: 'raw' | 'base64'): Promise<import('@computesdk/client').Terminal>;\n /** Create a file watcher with real-time change notifications */\n createWatcher(path: string, options?: {\n includeContent?: boolean;\n ignored?: string[];\n encoding?: 'raw' | 'base64';\n }): Promise<import('@computesdk/client').FileWatcher>;\n /** Start the signal service for port and error monitoring */\n startSignals(): Promise<import('@computesdk/client').SignalService>;\n /** Execute a one-off command without creating a persistent terminal */\n execute(options: { command: string; shell?: string }): Promise<any>;\n /** List all active terminals */\n listTerminals(): Promise<any[]>;\n /** Get terminal by ID */\n getTerminal(id: string): Promise<any>;\n /** List all active file watchers */\n listWatchers(): Promise<any>;\n /** Get file watcher by ID */\n getWatcher(id: string): Promise<any>;\n /** Get signal service status */\n getSignalStatus(): Promise<any>;\n /** Create a session token (requires access token) */\n createSessionToken(options?: { description?: string; expiresIn?: number }): Promise<any>;\n /** List all session tokens (requires access token) */\n listSessionTokens(): Promise<any>;\n /** Get session token details (requires access token) */\n getSessionToken(tokenId: string): Promise<any>;\n /** Revoke a session token (requires access token) */\n revokeSessionToken(tokenId: string): Promise<void>;\n /** Create a magic link for browser authentication (requires access token) */\n createMagicLink(options?: { redirectUrl?: string }): Promise<any>;\n /** Check authentication status */\n getAuthStatus(): Promise<any>;\n /** Get authentication information */\n getAuthInfo(): Promise<any>;\n /** Set authentication token manually */\n setToken(token: string): void;\n /** Get current authentication token */\n getToken(): string | null;\n /** Get current sandbox URL */\n getSandboxUrl(): string;\n /** Disconnect WebSocket connection */\n disconnect(): Promise<void>;\n}\n\n/**\n * Typed enhanced sandbox that preserves both provider typing and ComputeClient features\n */\nexport type TypedEnhancedSandbox<TProvider extends Provider> =\n ComputeEnhancedSandbox<ExtractProviderSandboxType<TProvider>> &\n Omit<TypedSandbox<TProvider>, keyof Sandbox>;","/**\n * License authorization and token management\n *\n * Handles API key exchange with the license server to obtain\n * JWT access tokens and sandbox URLs.\n */\n\n/**\n * Authorization response from license server\n */\nexport interface AuthorizationResponse {\n access_token: string;\n sandbox_url: string;\n preview_url: string;\n}\n\n/**\n * Authorize license key and get JWT token + URLs from license server\n */\nexport async function authorizeApiKey(apiKey: string): Promise<AuthorizationResponse> {\n try {\n const response = await fetch('https://sandbox.computesdk.com/__api/license/authorize', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n key: apiKey,\n increment_usage: 1\n })\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => response.statusText);\n throw new Error(`License authorization failed (${response.status}): ${errorText}`);\n }\n\n const data = await response.json();\n\n if (!data.access_token) {\n throw new Error('No access token received from license server');\n }\n\n if (!data.sandbox_url) {\n throw new Error('No sandbox_url received from license server');\n }\n\n if (!data.preview_url) {\n throw new Error('No preview_url received from license server');\n }\n\n return {\n access_token: data.access_token,\n sandbox_url: data.sandbox_url,\n preview_url: data.preview_url\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes('License authorization failed')) {\n throw error; // Re-throw our formatted error\n }\n // Network or other errors\n throw new Error(`Failed to authorize API key (network error): ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * Dependency management for compute daemon installation\n *\n * Handles detection and installation of required system dependencies\n * (curl and bash) needed to run the compute daemon install script.\n */\n\nimport type { Sandbox } from '../types';\n\n/**\n * Check if a command is available in the sandbox\n */\nasync function isCommandAvailable(sandbox: Sandbox, command: string): Promise<boolean> {\n const result = await sandbox.runCommand('sh', ['-c', `command -v ${command}`]);\n return result.exitCode === 0;\n}\n\n/**\n * Detect package manager available in the sandbox\n */\nexport async function detectPackageManager(sandbox: Sandbox): Promise<'apk' | 'apt' | null> {\n // Try Alpine's apk first (most common in minimal containers)\n if (await isCommandAvailable(sandbox, 'apk')) {\n return 'apk';\n }\n\n // Fall back to Debian/Ubuntu apt\n if (await isCommandAvailable(sandbox, 'apt-get')) {\n return 'apt';\n }\n\n return null;\n}\n\n/**\n * Install required dependencies (curl and bash) if missing\n */\nexport async function ensureDependencies(sandbox: Sandbox): Promise<void> {\n const hasCurl = await isCommandAvailable(sandbox, 'curl');\n const hasBash = await isCommandAvailable(sandbox, 'bash');\n\n // If both are available, nothing to do\n if (hasCurl && hasBash) {\n return;\n }\n\n const packageManager = await detectPackageManager(sandbox);\n\n if (!packageManager) {\n throw new Error(\n `Missing required tools (curl: ${hasCurl}, bash: ${hasBash}), but no supported package manager found.\\n` +\n `Supported package managers: apk (Alpine), apt-get (Debian/Ubuntu).\\n` +\n `Please use a sandbox image that includes curl and bash, or install them manually first.`\n );\n }\n\n let installResult;\n\n if (packageManager === 'apk') {\n // Alpine Linux\n installResult = await sandbox.runCommand('sh', ['-c', 'apk add --no-cache curl bash 2>&1']);\n } else {\n // Debian/Ubuntu\n installResult = await sandbox.runCommand('sh', ['-c', 'apt-get update -qq && apt-get install -qq -y curl bash 2>&1']);\n }\n\n if (installResult.exitCode !== 0) {\n throw new Error(\n `Failed to install curl and bash using ${packageManager}.\\n` +\n `Install output: ${installResult.stderr || installResult.stdout}\\n` +\n `Please install curl and bash manually or use a different sandbox image.`\n );\n }\n}\n","/**\n * Compute daemon installation orchestration\n *\n * Handles downloading and installing the compute daemon binary\n * inside sandboxes, including dependency management and verification.\n */\n\nimport type { Sandbox } from '../types';\nimport type { AuthorizationResponse } from '../auth/license';\nimport { ensureDependencies } from './dependencies';\n\n/**\n * Check if compute daemon is already installed in the sandbox\n */\nasync function isComputeInstalled(sandbox: Sandbox): Promise<boolean> {\n const result = await sandbox.runCommand('sh', ['-c', 'test -f /usr/local/bin/compute && echo \"exists\" || echo \"missing\"']);\n return result.stdout?.trim() === 'exists';\n}\n\n/**\n * Download the compute install script\n */\nasync function downloadInstallScript(sandbox: Sandbox): Promise<void> {\n const downloadResult = await sandbox.runCommand('sh', ['-c', 'curl -fsSL https://computesdk.com/install.sh -o /tmp/compute-install.sh 2>&1']);\n\n if (downloadResult.exitCode !== 0) {\n const errorOutput = downloadResult.stderr || downloadResult.stdout || 'unknown error';\n throw new Error(\n `Failed to download install script from https://computesdk.com/install.sh: ${errorOutput}`\n );\n }\n}\n\n/**\n * Run the compute install script\n */\nasync function runInstallScript(sandbox: Sandbox, accessToken?: string): Promise<void> {\n const installCommand = accessToken\n ? `bash /tmp/compute-install.sh --non-interactive --access-token \"${accessToken}\" --location /usr/local/bin`\n : `bash /tmp/compute-install.sh --non-interactive --location /usr/local/bin`;\n\n const installResult = await sandbox.runCommand('bash', ['-c', installCommand]);\n\n if (installResult.exitCode !== 0) {\n const errorOutput = installResult.stderr || installResult.stdout || 'unknown error';\n throw new Error(`Failed to install compute daemon: ${errorOutput}`);\n }\n}\n\n/**\n * Install and start compute daemon inside a sandbox\n *\n * This is the main installation orchestrator that:\n * 1. Checks if compute is already installed\n * 2. Ensures curl and bash are available (installs if needed)\n * 3. Downloads the install script\n * 4. Runs the install script with proper credentials\n * 5. Verifies the installation succeeded\n */\nexport async function installComputeDaemon(\n sandbox: Sandbox,\n accessToken?: string\n): Promise<void> {\n // Check if compute is already installed\n if (await isComputeInstalled(sandbox)) {\n return;\n }\n\n // Ensure required dependencies are available\n await ensureDependencies(sandbox);\n\n // Download install script\n await downloadInstallScript(sandbox);\n\n // Run install script with credentials\n await runInstallScript(sandbox, accessToken);\n\n // Verify installation succeeded\n if (!await isComputeInstalled(sandbox)) {\n throw new Error('Compute binary not found at /usr/local/bin/compute after installation');\n }\n}\n","/**\n * Sandbox wrapper with ComputeClient enhancement\n *\n * Wraps provider sandboxes with ComputeClient to add powerful features\n * like WebSocket terminals, file watchers, and signals while preserving\n * access to the original provider-specific instance.\n */\n\nimport { ComputeClient } from '@computesdk/client';\nimport type { Sandbox, ComputeEnhancedSandbox } from '../types';\nimport type { AuthorizationResponse } from '../auth/license';\nimport { waitForComputeReady } from '../compute-daemon/lifecycle';\n\n/**\n * Wrap a provider sandbox with ComputeClient while preserving the original sandbox\n * This adds powerful features like WebSocket terminals, file watchers, and signals\n */\nexport async function wrapWithComputeClient(\n originalSandbox: Sandbox,\n authResponse: AuthorizationResponse\n): Promise<ComputeEnhancedSandbox> {\n const client = new ComputeClient({\n sandboxUrl: authResponse.sandbox_url,\n sandboxId: originalSandbox.sandboxId,\n provider: originalSandbox.provider,\n token: authResponse.access_token,\n WebSocket: globalThis.WebSocket\n });\n\n // Wait for compute daemon to be ready before returning\n await waitForComputeReady(client);\n\n // Store the original sandbox for getInstance() and getProvider() calls\n // We create a proxy-like object that delegates most calls to ComputeClient\n // but preserves access to the original provider sandbox\n const wrappedSandbox = Object.assign(client, {\n __originalSandbox: originalSandbox,\n\n // Override getInstance to return the original provider's instance\n getInstance: () => originalSandbox.getInstance(),\n\n // Override getProvider to return the original provider\n getProvider: () => originalSandbox.getProvider()\n });\n\n return wrappedSandbox as ComputeEnhancedSandbox;\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 * Wait for compute daemon to be ready by polling the health endpoint\n */\nexport async function waitForComputeReady(\n client: ComputeClient,\n maxRetries = 30,\n delayMs = 2000\n): Promise<void> {\n let lastError: Error | null = null;\n\n for (let i = 0; i < maxRetries; i++) {\n try {\n await client.health();\n return;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Only log on last attempt to avoid noise\n if (i === maxRetries - 1) {\n throw new Error(\n `Compute daemon failed to start after ${maxRetries} attempts (${maxRetries * delayMs / 1000}s).\\n` +\n `Last error: ${lastError.message}\\n` +\n `This could indicate:\\n` +\n ` 1. The compute daemon failed to start in the sandbox\\n` +\n ` 2. The sandbox_url is incorrect or unreachable\\n` +\n ` 3. The sandbox is taking longer than expected to initialize`\n );\n }\n\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\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, Sandbox, Provider, TypedSandbox, TypedComputeAPI, ComputeEnhancedSandbox, TypedEnhancedSandbox } from './types';\nimport { authorizeApiKey, type AuthorizationResponse } from './auth/license';\nimport { installComputeDaemon } from './compute-daemon/installer';\nimport { wrapWithComputeClient } from './sandbox/wrapper';\n\n/**\n * Compute singleton implementation - orchestrates all compute operations\n */\nclass ComputeManager implements ComputeAPI {\n private config: ComputeConfig | null = null;\n private computeAuth: { apiKey?: string; accessToken?: string } = {};\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 const accessToken = config.accessToken || config.jwt; // Support both accessToken and deprecated jwt\n this.config = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n\n // Store compute auth credentials\n this.computeAuth = {\n apiKey: config.apiKey,\n accessToken: accessToken\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 * Get the default provider, throwing if not configured\n */\n private getDefaultProvider(): Provider {\n const provider = this.config?.defaultProvider || this.config?.provider;\n if (!provider) {\n throw new Error(\n 'No default provider configured. Either call compute.setConfig({ defaultProvider }) or pass provider explicitly.'\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 (both forms work)\n * compute.setConfig({ defaultProvider: e2b({ apiKey: 'your-key' }) })\n * const sandbox1 = await compute.sandbox.create({})\n * const sandbox2 = await compute.sandbox.create()\n * ```\n */\n create: async (params?: CreateSandboxParams | CreateSandboxParamsWithOptionalProvider): Promise<Sandbox | ComputeEnhancedSandbox> => {\n const provider = params && 'provider' in params && params.provider ? params.provider : this.getDefaultProvider();\n const options = params?.options;\n const sandbox = await provider.sandbox.create(options);\n\n // Install compute daemon and wrap with ComputeClient if auth is configured\n if (this.computeAuth.apiKey || this.computeAuth.accessToken) {\n // Get access token from API key if needed\n let authResponse: AuthorizationResponse | null = null;\n let accessToken = this.computeAuth.accessToken;\n\n if (this.computeAuth.apiKey && !accessToken) {\n authResponse = await authorizeApiKey(this.computeAuth.apiKey);\n accessToken = authResponse.access_token;\n }\n\n // Install compute daemon in the sandbox\n await installComputeDaemon(sandbox, accessToken);\n\n // Wrap with ComputeClient if we have authorization info\n // This adds features like createTerminal(), createWatcher(), startSignals()\n if (authResponse) {\n return await wrapWithComputeClient(sandbox, authResponse);\n } else if (accessToken) {\n // If we only have access token (no API key), we still need sandbox_url and preview_url\n // For now, we'll use default URLs - this could be improved\n const defaultAuthResponse: AuthorizationResponse = {\n access_token: accessToken,\n sandbox_url: 'https://sandbox.computesdk.com',\n preview_url: 'https://preview.computesdk.com'\n };\n return await wrapWithComputeClient(sandbox, defaultAuthResponse);\n }\n }\n\n return sandbox;\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<Sandbox | 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<Sandbox[]> => {\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 // Future: compute.blob.*, compute.database.*, compute.git.* will be added here\n // blob = new BlobManager();\n // database = new DatabaseManager(); \n // git = new GitManager();\n\n\n}\n\n/**\n * Singleton instance - the main API (untyped)\n */\nexport const compute: ComputeAPI = new ComputeManager();\n\n\n\n/**\n * Create a compute instance with proper typing\n *\n * @example\n * ```typescript\n * import { e2b } from '@computesdk/e2b'\n * import { createCompute } from 'computesdk'\n *\n * // With API key (automatically gets access token from license server)\n * const compute = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * apiKey: 'computesdk_live_...' // Returns enhanced sandboxes\n * });\n *\n * // Or with direct access token\n * const compute2 = createCompute({\n * defaultProvider: e2b({ apiKey: 'your-key' }),\n * accessToken: 'your-access-token' // Returns enhanced sandboxes\n * });\n *\n * const sandbox = await compute.sandbox.create();\n * const instance = sandbox.getInstance(); // ✅ Properly typed E2B Sandbox!\n * await sandbox.createTerminal(); // ✅ Enhanced sandbox features!\n * ```\n */\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { apiKey: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { accessToken: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider> & { jwt: string }\n): TypedComputeAPI<TProvider, true>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider, false>;\nexport function createCompute<TProvider extends Provider>(\n config: ComputeConfig<TProvider>\n): TypedComputeAPI<TProvider, boolean> {\n const manager = new ComputeManager();\n\n // Set config directly without calling the public setConfig method\n const actualProvider = config.defaultProvider || config.provider!;\n const accessToken = config.accessToken || config.jwt; // Support both accessToken and deprecated jwt\n manager['config'] = {\n provider: actualProvider,\n defaultProvider: actualProvider,\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n manager['computeAuth'] = {\n apiKey: config.apiKey,\n accessToken: accessToken\n };\n\n const isEnhanced = !!(config.apiKey || config.accessToken || config.jwt);\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 // If API key/JWT is configured, the sandbox will be enhanced with ComputeClient features\n // Cast to the appropriate type based on whether it's enhanced or not\n if (isEnhanced) {\n return sandbox as TypedEnhancedSandbox<TProvider>;\n }\n return sandbox as TypedSandbox<TProvider>;\n },\n\n getById: async (sandboxId: string) => {\n const sandbox = await manager.sandbox.getById(sandboxId);\n if (!sandbox) return null;\n // Type depends on whether auth is configured\n if (isEnhanced) {\n return sandbox as TypedEnhancedSandbox<TProvider>;\n }\n return sandbox as TypedSandbox<TProvider>;\n },\n\n list: async () => {\n const sandboxes = await manager.sandbox.list();\n // Type depends on whether auth is configured\n if (isEnhanced) {\n return sandboxes as TypedEnhancedSandbox<TProvider>[];\n }\n return sandboxes as TypedSandbox<TProvider>[];\n },\n\n destroy: async (sandboxId: string) => {\n return await manager.sandbox.destroy(sandboxId);\n }\n }\n } as TypedComputeAPI<TProvider, typeof isEnhanced>;\n}\n\n\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 stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode,\n executionTime: result.executionTime\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 executionTime: result.executionTime,\n ...(result.isBackground && { isBackground: result.isBackground }),\n ...(result.pid && { pid: result.pid })\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 };","/**\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 Sandbox,\n SandboxFileSystem,\n SandboxInfo,\n ExecutionResult,\n Runtime,\n CreateSandboxOptions,\n FileEntry,\n RunCommandOptions,\n CreateSnapshotOptions,\n ListSnapshotsOptions,\n CreateTemplateOptions,\n ListTemplatesOptions,\n} from './types/index.js';\n\n/**\n * Helper function to handle background command execution\n * Providers can use this to implement background job support\n */\nexport function createBackgroundCommand(command: string, args: string[] = [], options?: RunCommandOptions): { command: string; args: string[]; isBackground: boolean } {\n if (!options?.background) {\n return { command, args, isBackground: false };\n }\n\n // For background execution, use nohup to detach from terminal and & to background\n // nohup ensures the process survives after the shell exits\n const fullCommand = args.length > 0 ? `${command} ${args.join(' ')}` : command;\n\n return {\n command: 'sh',\n args: ['-c', `nohup ${fullCommand} > /dev/null 2>&1 &`],\n isBackground: true\n };\n}\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 (map to individual Sandbox methods)\n runCode: (sandbox: TSandbox, code: string, runtime?: Runtime, config?: TConfig) => Promise<ExecutionResult>;\n runCommand: (sandbox: TSandbox, command: string, args?: string[], options?: RunCommandOptions) => Promise<ExecutionResult>;\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<ExecutionResult>) => Promise<string>;\n writeFile: (sandbox: TSandbox, path: string, content: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n mkdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n readdir: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<FileEntry[]>;\n exists: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<boolean>;\n remove: (sandbox: TSandbox, path: string, runCommand: (sandbox: TSandbox, command: string, args?: string[]) => Promise<ExecutionResult>) => Promise<void>;\n };\n}\n\n/**\n * Template method implementations\n */\nexport interface TemplateMethods<TTemplate = any, TConfig = any> {\n create: (config: TConfig, options: CreateTemplateOptions | any) => 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 configuration for createProvider()\n */\nexport interface ProviderConfig<TSandbox = any, TConfig = any, TTemplate = any, TSnapshot = any> {\n name: string;\n methods: {\n sandbox: SandboxMethods<TSandbox, TConfig>;\n template?: TemplateMethods<TTemplate, TConfig>;\n snapshot?: SnapshotMethods<TSnapshot, TConfig>;\n };\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 Sandbox interface\n */\nclass GeneratedSandbox<TSandbox = any> implements Sandbox<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<ExecutionResult> {\n return await this.methods.runCode(this.sandbox, code, runtime, this.config);\n }\n\n async runCommand(command: string, args?: string[], options?: RunCommandOptions): Promise<ExecutionResult> {\n // Handle background execution at the factory level\n if (options?.background) {\n const fullCommand = args?.length ? `${command} ${args.join(' ')}` : command;\n const bgCommand = `nohup ${fullCommand} > /dev/null 2>&1 &`;\n const result = await this.methods.runCommand(this.sandbox, 'sh', ['-c', bgCommand], undefined);\n return {\n ...result,\n isBackground: true,\n pid: -1\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 * Auto-generated Sandbox Manager implementation\n */\nclass GeneratedSandboxManager<TSandbox, TConfig> implements ProviderSandboxManager<TSandbox> {\n private activeSandboxes: Map<string, GeneratedSandbox<TSandbox>> = new Map();\n\n constructor(\n private config: TConfig,\n private providerName: string,\n private methods: SandboxMethods<TSandbox, TConfig>,\n private providerInstance: Provider\n ) {}\n\n async create(options?: CreateSandboxOptions): Promise<Sandbox<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 const sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n return sandbox;\n }\n\n async getById(sandboxId: string): Promise<Sandbox<TSandbox> | null> {\n // Check active sandboxes first\n const existing = this.activeSandboxes.get(sandboxId);\n if (existing) {\n return existing;\n }\n\n // Try to reconnect\n const result = await this.methods.getById(this.config, sandboxId);\n if (!result) {\n return null;\n }\n\n const sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n return sandbox;\n }\n\n async list(): Promise<Sandbox<TSandbox>[]> {\n const results = await this.methods.list(this.config);\n const sandboxes: Sandbox[] = [];\n\n for (const result of results) {\n let sandbox = this.activeSandboxes.get(result.sandboxId);\n if (!sandbox) {\n sandbox = 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 this.activeSandboxes.set(result.sandboxId, sandbox);\n }\n sandboxes.push(sandbox);\n }\n\n return sandboxes;\n }\n\n async destroy(sandboxId: string): Promise<void> {\n await this.methods.destroy(this.config, sandboxId);\n this.activeSandboxes.delete(sandboxId);\n }\n}\n\n/**\n * Auto-generated Template Manager implementation\n */\nclass GeneratedTemplateManager<TTemplate, TConfig> implements ProviderTemplateManager<TTemplate> {\n constructor(\n private config: TConfig,\n private methods: TemplateMethods<TTemplate, TConfig>\n ) {}\n\n async create(options: CreateTemplateOptions | any): 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 readonly __sandboxType!: TSandbox; // Phantom type for TypeScript inference\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 );\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) => Provider<TSandbox, TTemplate, TSnapshot> {\n return (config: TConfig) => {\n return new GeneratedProvider(config, providerConfig);\n };\n}"],"mappings":"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","names":["sandbox"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "computesdk",
3
- "version": "1.8.6",
3
+ "version": "1.8.8",
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",