{"record":{"id":"efde29fb9ce2e1c4","repo":"paperclipai/paperclip","slug":"daytona-sandbox-environments-require-an-api-key-in","errorCode":null,"errorMessage":"Daytona sandbox environments require an API key in config or DAYTONA_API_KEY.","messagePattern":"Daytona sandbox environments require an API key in config or DAYTONA_API_KEY\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/plugins/sandbox-providers/daytona/src/plugin.ts","lineNumber":297,"sourceCode":"  return {\n    apiKey: parseOptionalString(raw.apiKey),\n    apiUrl: parseOptionalString(raw.apiUrl),\n    target: parseOptionalString(raw.target),\n    snapshot: parseOptionalString(raw.snapshot),\n    image: parseOptionalString(raw.image),\n    language: parseOptionalString(raw.language),\n    timeoutMs: Number.isFinite(timeoutMs) ? Math.trunc(timeoutMs) : 300_000,\n    livenessTimeoutMs: Number.isFinite(livenessTimeoutMs) ? Math.trunc(livenessTimeoutMs) : DEFAULT_LIVENESS_TIMEOUT_MS,\n    cpu: parseOptionalNumber(raw.cpu),\n    memory: parseOptionalNumber(raw.memory),\n    disk: parseOptionalNumber(raw.disk),\n    gpu: parseOptionalNumber(raw.gpu),\n    autoStopInterval: parseOptionalInteger(raw.autoStopInterval) ?? DEFAULT_AUTO_STOP_INTERVAL_MINUTES,\n    autoArchiveInterval: parseOptionalInteger(raw.autoArchiveInterval) ?? DEFAULT_AUTO_ARCHIVE_INTERVAL_MINUTES,\n    autoDeleteInterval: parseOptionalInteger(raw.autoDeleteInterval) ?? DEFAULT_AUTO_DELETE_INTERVAL_MINUTES,\n    reuseLease: raw.reuseLease === true,\n    archiveOnRelease: raw.archiveOnRelease === true,\n  };\n}\n\nfunction resolveApiKey(config: DaytonaDriverConfig): string {\n  if (config.apiKey) {\n    return config.apiKey;\n  }\n  const envApiKey = process.env.DAYTONA_API_KEY?.trim() ?? \"\";\n  if (!envApiKey) {\n    throw new Error(\"Daytona sandbox environments require an API key in config or DAYTONA_API_KEY.\");\n  }\n  return envApiKey;\n}\n\nfunction createDaytonaClient(config: DaytonaDriverConfig): Daytona {\n  const clientConfig: DaytonaConfig = {\n    apiKey: resolveApiKey(config),\n  };\n  if (config.apiUrl) clientConfig.apiUrl = config.apiUrl;","sourceCodeStart":279,"sourceCodeEnd":315,"githubUrl":"https://github.com/paperclipai/paperclip/blob/3f1d897a7c018d76563a21c6e39c3c9b03933622/packages/plugins/sandbox-providers/daytona/src/plugin.ts#L279-L315","documentation":"Credential resolution failure in parseDriverConfig for the Daytona sandbox driver: no API key was found in the environment config, so resolution fell back to the DAYTONA_API_KEY env var and found nothing there either. Without a key the driver cannot talk to the Daytona API at all, so config parsing fails immediately with this guard.","triggerScenarios":"Thrown at packages/plugins/sandbox-providers/daytona/src/plugin.ts:278 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set DAYTONA_API_KEY or configure apiKey in the environment config."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3f1d897a7c018d76563a21c6e39c3c9b03933622","analyzedAt":"2026-08-18T22:49:45.177Z","contentChangedAt":"2026-08-18T22:49:45.177Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}