import type { PlayRunnerBackend } from './types'; import { daytonaPlayRunnerBackend } from './backends/daytona'; import { daytonaModalFallbackPlayRunnerBackend, daytonaOnlyPlayRunnerBackend, modalOnlyPlayRunnerBackend, resolveDefaultRuntimeSandboxPlacementBackend, } from './backends/daytona-modal-fallback'; import { localProcessPlayRunnerBackend } from './backends/local-process'; import { modalPlayRunnerBackend } from './backends/modal'; import { PLAY_RUNTIME_BACKENDS, normalizePlayRuntimeBackend, type PlayRuntimeBackendId, } from '@shared_libs/play-runtime/backend'; import { runtimeSandboxPlacementPolicyForBackend, type RuntimeSandboxPlacementPolicyId, } from '@shared_libs/play-runtime/runtime-sandbox-placement-policy'; export function resolveRuntimeSandboxPlacementBackend( policyId: RuntimeSandboxPlacementPolicyId | string, ): PlayRunnerBackend { return resolveDefaultRuntimeSandboxPlacementBackend(policyId); } export function resolvePlayRunnerBackend( backendId?: PlayRuntimeBackendId | string | null, ): PlayRunnerBackend { const backend = normalizePlayRuntimeBackend( backendId ?? process.env.DEEPLINE_PLAY_RUNNER_BACKEND, ); const placementPolicy = runtimeSandboxPlacementPolicyForBackend(backend); if (placementPolicy) { return resolveRuntimeSandboxPlacementBackend(placementPolicy.id); } if (backend === PLAY_RUNTIME_BACKENDS.localProcess) { return localProcessPlayRunnerBackend; } throw new Error(`Unsupported play runner backend: ${backend}`); } export { daytonaPlayRunnerBackend, daytonaModalFallbackPlayRunnerBackend, daytonaOnlyPlayRunnerBackend, localProcessPlayRunnerBackend, modalOnlyPlayRunnerBackend, modalPlayRunnerBackend, }; export type { PlayRunnerBackend };