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
- 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.
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
- 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.
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
- No available method to write files to sandbox
- Unsupported sandbox type
- Failed to create zip: ${error}
- Failed to read zip file: ${error}
- Firecrawl API key not configured
AI-assisted analysis of firecrawl/open-lovable@69bd93bae7 (2026-08-28).
Data as JSON: /api/errors/0398542d41d925fd.
Report an issue: GitHub.