{"record":{"id":"0398542d41d925fd","repo":"firecrawl/open-lovable","slug":"unknown-sandbox-provider-selectedprovider-sup","errorCode":null,"errorMessage":"Unknown sandbox provider: ${selectedProvider}. Supported providers: e2b, vercel","messagePattern":"Unknown sandbox provider: (.+?)\\. Supported providers: e2b, vercel","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/sandbox/factory.ts","lineNumber":19,"sourceCode":"import { SandboxProvider, SandboxProviderConfig } from './types';\nimport { E2BProvider } from './providers/e2b-provider';\nimport { VercelProvider } from './providers/vercel-provider';\n\nexport class SandboxFactory {\n  static create(provider?: string, config?: SandboxProviderConfig): SandboxProvider {\n    // Use environment variable if provider not specified\n    const selectedProvider = provider || process.env.SANDBOX_PROVIDER || 'e2b';\n    \n    \n    switch (selectedProvider.toLowerCase()) {\n      case 'e2b':\n        return new E2BProvider(config || {});\n      \n      case 'vercel':\n        return new VercelProvider(config || {});\n      \n      default:\n        throw new Error(`Unknown sandbox provider: ${selectedProvider}. Supported providers: e2b, vercel`);\n    }\n  }\n  \n  static getAvailableProviders(): string[] {\n    return ['e2b', 'vercel'];\n  }\n  \n  static isProviderAvailable(provider: string): boolean {\n    switch (provider.toLowerCase()) {\n      case 'e2b':\n        return !!process.env.E2B_API_KEY;\n      \n      case 'vercel':\n        // Vercel can use OIDC (automatic) or PAT\n        return !!process.env.VERCEL_OIDC_TOKEN || \n               (!!process.env.VERCEL_TOKEN && !!process.env.VERCEL_TEAM_ID && !!process.env.VERCEL_PROJECT_ID);\n      \n      default:","sourceCodeStart":1,"sourceCodeEnd":37,"githubUrl":"https://github.com/firecrawl/open-lovable/blob/69bd93bae7a9c97ef989eb70aabe6797fb3dac89/lib/sandbox/factory.ts#L1-L37","documentation":"SandboxFactory.create resolves the provider name from its argument or the SANDBOX_PROVIDER env var and throws this error when the value is not one of the supported providers ('e2b', 'vercel', case-insensitively). It is a configuration guard ensuring an unknown provider string never reaches provider construction.","triggerScenarios":"Calling SandboxFactory.create('docker') or any name outside {e2b, vercel}; SANDBOX_PROVIDER env var set to a misspelled or unsupported value (e.g. 'E2B ' with trailing space is fine after toLowerCase, but 'e2bcloud' fails); provider passed as non-string with an unexpected stringified value.","commonSituations":"Typo in SANDBOX_PROVIDER env var during deployment config; following docs for a provider this fork does not implement; copying provider names from other sandbox libraries ('flyio', 'docker', 'local').","solutions":["Set SANDBOX_PROVIDER to exactly 'e2b' or 'vercel', or omit it to use the 'e2b' default.","Check SandboxFactory.getAvailableProviders() for the current list of supported providers before calling create.","Trim/normalize the env var value and remove quotes or whitespace in your deployment config.","Use SandboxFactory.isProviderAvailable(provider) to validate both the name and its credentials before creating.","Wrap create() in try/catch and fall back to the default provider with a logged warning."],"exampleFix":"// before\nconst sandbox = SandboxFactory.create(process.env.SANDBOX_PROVIDER);\n// after\nconst provider = (process.env.SANDBOX_PROVIDER || 'e2b').trim().toLowerCase();\nif (!SandboxFactory.getAvailableProviders().includes(provider)) {\n  throw new Error(`SANDBOX_PROVIDER must be one of: ${SandboxFactory.getAvailableProviders().join(', ')}; got \"${provider}\"`);\n}\nconst sandbox = SandboxFactory.create(provider);","handlingStrategy":"validation","validationCode":"const provider = (process.env.SANDBOX_PROVIDER || 'e2b').trim().toLowerCase();\nif (!['e2b', 'vercel'].includes(provider)) {\n  throw new Error(`Invalid SANDBOX_PROVIDER \"${provider}\"; expected e2b or vercel`);\n}\nconst sandbox = SandboxFactory.create(provider);","typeGuard":"function isKnownProvider(p: unknown): p is 'e2b' | 'vercel' {\n  return typeof p === 'string' && ['e2b', 'vercel'].includes(p.toLowerCase());\n}","tryCatchPattern":"try {\n  const sandbox = SandboxFactory.create(providerName);\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith('Unknown sandbox provider')) {\n    console.warn(`${err.message}; falling back to e2b`);\n    return SandboxFactory.create('e2b');\n  }\n  throw err;\n}","preventionTips":["Use SandboxFactory.getAvailableProviders() as the single source of truth in config validation.","Validate SANDBOX_PROVIDER at deployment startup, before any sandbox use.","Normalize (trim + lowercase) provider strings sourced from env or user input.","Gate provider choice behind isProviderAvailable() so credentials are checked too.","Avoid hardcoding provider names copied from other libraries' docs."],"tags":["configuration","sandbox","validation"],"backgroundTag":"invalid-provider-name","analyzedSha":"69bd93bae7a9c97ef989eb70aabe6797fb3dac89","analyzedAt":"2026-08-28T22:20:32.339Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}