openoperator / lib /sandbox /factory.ts
Leon4gr45's picture
Deploy to clean space
75fefa7 verified
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:
return false;
}
}
}