firecrawl/open-lovable · error · Error

Unknown sandbox provider: ${selectedProvider}. Supported pro

Error message

Unknown sandbox provider: ${selectedProvider}. Supported providers: e2b, vercel

What it means

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.

Source

Thrown at lib/sandbox/factory.ts:19

import { SandboxProvider, SandboxProviderConfig } from './types';
import { E2BProvider } from './providers/e2b-provider';
import { VercelProvider } from './providers/vercel-provider';

export class SandboxFactory {
  static create(provider?: string, config?: SandboxProviderConfig): SandboxProvider {
    // Use environment variable if provider not specified
    const selectedProvider = provider || process.env.SANDBOX_PROVIDER || 'e2b';
    
    
    switch (selectedProvider.toLowerCase()) {
      case 'e2b':
        return new E2BProvider(config || {});
      
      case 'vercel':
        return new VercelProvider(config || {});
      
      default:
        throw new Error(`Unknown sandbox provider: ${selectedProvider}. Supported providers: e2b, vercel`);
    }
  }
  
  static getAvailableProviders(): string[] {
    return ['e2b', 'vercel'];
  }
  
  static isProviderAvailable(provider: string): boolean {
    switch (provider.toLowerCase()) {
      case 'e2b':
        return !!process.env.E2B_API_KEY;
      
      case 'vercel':
        // Vercel can use OIDC (automatic) or PAT
        return !!process.env.VERCEL_OIDC_TOKEN || 
               (!!process.env.VERCEL_TOKEN && !!process.env.VERCEL_TEAM_ID && !!process.env.VERCEL_PROJECT_ID);
      
      default:

View on GitHub (pinned to 69bd93bae7)

Solutions

  1. Set SANDBOX_PROVIDER to exactly 'e2b' or 'vercel', or omit it to use the 'e2b' default.
  2. Check SandboxFactory.getAvailableProviders() for the current list of supported providers before calling create.
  3. Trim/normalize the env var value and remove quotes or whitespace in your deployment config.
  4. Use SandboxFactory.isProviderAvailable(provider) to validate both the name and its credentials before creating.
  5. Wrap create() in try/catch and fall back to the default provider with a logged warning.

Example fix

// before
const sandbox = SandboxFactory.create(process.env.SANDBOX_PROVIDER);
// after
const provider = (process.env.SANDBOX_PROVIDER || 'e2b').trim().toLowerCase();
if (!SandboxFactory.getAvailableProviders().includes(provider)) {
  throw new Error(`SANDBOX_PROVIDER must be one of: ${SandboxFactory.getAvailableProviders().join(', ')}; got "${provider}"`);
}
const sandbox = SandboxFactory.create(provider);
Defensive patterns

Strategy: validation

Validate before calling

const provider = (process.env.SANDBOX_PROVIDER || 'e2b').trim().toLowerCase();
if (!['e2b', 'vercel'].includes(provider)) {
  throw new Error(`Invalid SANDBOX_PROVIDER "${provider}"; expected e2b or vercel`);
}
const sandbox = SandboxFactory.create(provider);

Type guard

function isKnownProvider(p: unknown): p is 'e2b' | 'vercel' {
  return typeof p === 'string' && ['e2b', 'vercel'].includes(p.toLowerCase());
}

Try / catch

try {
  const sandbox = SandboxFactory.create(providerName);
} catch (err) {
  if (err instanceof Error && err.message.startsWith('Unknown sandbox provider')) {
    console.warn(`${err.message}; falling back to e2b`);
    return SandboxFactory.create('e2b');
  }
  throw err;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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').

Related errors


AI-assisted analysis of firecrawl/open-lovable@69bd93bae7 (2026-08-28). Data as JSON: /api/errors/0398542d41d925fd. Report an issue: GitHub.