inngest 4.19.0 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/components/realtime/types.d.cts +3 -3
  3. package/components/realtime/types.d.cts.map +1 -1
  4. package/components/realtime/types.d.ts +3 -3
  5. package/components/realtime/types.d.ts.map +1 -1
  6. package/components/sandbox/client.cjs +243 -29
  7. package/components/sandbox/client.cjs.map +1 -1
  8. package/components/sandbox/client.js +239 -31
  9. package/components/sandbox/client.js.map +1 -1
  10. package/components/sandbox/durable.cjs +158 -1
  11. package/components/sandbox/durable.cjs.map +1 -1
  12. package/components/sandbox/durable.js +160 -3
  13. package/components/sandbox/durable.js.map +1 -1
  14. package/components/sandbox/middleware.cjs +1 -0
  15. package/components/sandbox/middleware.cjs.map +1 -1
  16. package/components/sandbox/middleware.d.cts.map +1 -1
  17. package/components/sandbox/middleware.d.ts.map +1 -1
  18. package/components/sandbox/middleware.js +1 -0
  19. package/components/sandbox/middleware.js.map +1 -1
  20. package/components/sandbox/protocol.cjs +100 -4
  21. package/components/sandbox/protocol.cjs.map +1 -1
  22. package/components/sandbox/protocol.js +101 -5
  23. package/components/sandbox/protocol.js.map +1 -1
  24. package/components/sandbox/types.cjs +2 -0
  25. package/components/sandbox/types.cjs.map +1 -1
  26. package/components/sandbox/types.d.cts +100 -15
  27. package/components/sandbox/types.d.cts.map +1 -1
  28. package/components/sandbox/types.d.ts +100 -15
  29. package/components/sandbox/types.d.ts.map +1 -1
  30. package/components/sandbox/types.js +2 -0
  31. package/components/sandbox/types.js.map +1 -1
  32. package/components/sandbox/validation.cjs +75 -3
  33. package/components/sandbox/validation.cjs.map +1 -1
  34. package/components/sandbox/validation.js +71 -4
  35. package/components/sandbox/validation.js.map +1 -1
  36. package/experimental.d.cts +2 -2
  37. package/experimental.d.ts +2 -2
  38. package/package.json +1 -1
  39. package/react.d.cts +1 -1
  40. package/react.d.ts +1 -1
  41. package/types.d.cts +8 -8
  42. package/types.d.ts +8 -8
  43. package/version.cjs +1 -1
  44. package/version.cjs.map +1 -1
  45. package/version.d.cts +1 -1
  46. package/version.d.ts +1 -1
  47. package/version.js +1 -1
  48. package/version.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","names":["z","restOutputChunkSchema","canonicalUuidSchema","config: SandboxClientConfig","parseWithSchema","SandboxValidationError","decodeOutputChunk","requestInit: RequestInit & { duplex?: \"half\" }","SandboxError","sandboxProcessRefSchema","facade: SandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","sandboxRefSchema","normalizeSandboxCommandOptions","decodeBase64","facade: Sandbox","decodeUtf8","normalizeFileUploadOptions","normalizeFileDownloadOptions","normalizeSandboxProcessStartOptions","sandboxProcessRefFromResource","normalizeSandboxProcessListOptions","normalizeSandboxWaitUntilRunningOptions","sandboxRefFromResource","client: SandboxClient","normalizeSandboxCreateOptions","normalizeSandboxListOptions"],"sources":["../../../src/components/sandbox/client.ts"],"sourcesContent":["import { z } from \"zod/v3\";\n\nimport {\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxErrorCode,\n type SandboxErrorDetail,\n type SandboxFileUploadResult,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxRef,\n type SandboxStatus,\n SandboxValidationError,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n normalizeFileDownloadOptions,\n normalizeFileUploadOptions,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n restOutputChunkSchema,\n sandboxProcessRefFromResource,\n sandboxProcessRefSchema,\n sandboxRefFromResource,\n sandboxRefSchema,\n} from \"./validation.ts\";\n\ntype FetchT = typeof fetch;\n\nexport interface SandboxClientConfig {\n baseUrl: () => string;\n apiKey: () => string | undefined;\n headers: () => Record<string, string>;\n fetch: () => FetchT;\n}\n\nconst metadataSchema = z.object({ fetchedAt: z.string().min(1) }).passthrough();\nconst errorItemSchema = z\n .object({\n code: z.string().min(1),\n message: z.string().min(1),\n })\n .passthrough();\nconst errorEnvelopeSchema = z\n .object({ errors: z.array(errorItemSchema).min(1) })\n .passthrough();\nconst streamErrorFrameSchema = z\n .object({\n type: z.literal(\"error\"),\n error: errorItemSchema,\n })\n .passthrough();\nconst responseEnvelopeSchema = z\n .object({\n data: z.unknown(),\n metadata: metadataSchema.optional(),\n page: z.unknown().optional(),\n })\n .passthrough();\n\nconst sandboxPageSchema = z\n .object({\n cursor: z.string().min(1).nullish(),\n hasMore: z.boolean(),\n limit: z.number().int().min(1).max(250),\n })\n .strip();\n\nconst wireCommandResultSchema = z\n .object({\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n encoding: z.literal(\"base64\"),\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff),\n })\n .strip();\n\nconst outputResponseSchema = z\n .object({ chunks: z.array(restOutputChunkSchema) })\n .passthrough();\n\nconst fileUploadResultSchema = z\n .object({\n path: z.string(),\n bytesWritten: z.number().int().nonnegative().safe(),\n })\n .strip();\n\nconst waitProcessSchema = z\n .object({\n id: canonicalUuidSchema,\n state: z.enum([\"EXITED\", \"KILLED\", \"FAILED\", \"LOST\"]),\n exitCode: z.number().int().optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n })\n .strip()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n });\n }\n });\n\nconst safeRepeatActions = new Set<SandboxAction>([\n \"create\",\n \"destroy\",\n \"file.upload\",\n \"list\",\n \"get\",\n \"waitUntilRunning\",\n \"process.list\",\n \"process.get\",\n \"process.wait\",\n \"process.output\",\n \"process.stream\",\n \"logs.stream\",\n \"file.download\",\n]);\n\nconst sandboxTransportFailureMessage = (action: SandboxAction): string => {\n switch (action) {\n case \"create\":\n return \"The Sandbox Create response was not confirmed. Repeating the same Create request is safe\";\n case \"destroy\":\n return \"Sandbox teardown may have been accepted. Get the sandbox; repeating Destroy is safe\";\n case \"file.upload\":\n return \"The sandbox file may have been replaced. Repeating the same upload is safe\";\n case \"exec\":\n return \"The sandbox command may have run. Inspect its external effects before running it again\";\n case \"process.start\":\n return \"A sandbox process may be running. List processes and reconcile before starting another\";\n case \"process.signal\":\n return \"The sandbox process signal may have been delivered. Get or wait for the process before sending another\";\n default:\n return \"Compute is temporarily unavailable. Retry this operation\";\n }\n};\n\nconst sandboxAmbiguousResponseMessage = (action: SandboxAction): string => {\n if (action === \"create\") {\n return \"A sandbox was created, but its current resource could not be loaded. List sandboxes and reconcile by name before creating another\";\n }\n return sandboxTransportFailureMessage(action);\n};\n\nclass SandboxRestTransport {\n constructor(private readonly config: SandboxClientConfig) {}\n\n async json(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: unknown;\n statuses: readonly number[];\n sandboxId?: string;\n processId?: string;\n },\n ): Promise<{\n status: number;\n envelope?: z.infer<typeof responseEnvelopeSchema>;\n }> {\n const response = await this.send(action, method, path, {\n body:\n options.body === undefined ? undefined : JSON.stringify(options.body),\n headers:\n options.body === undefined\n ? undefined\n : { \"Content-Type\": \"application/json\" },\n sandboxId: options.sandboxId,\n processId: options.processId,\n });\n if (!options.statuses.includes(response.status)) {\n await this.throwResponseError(\n action,\n response,\n options.sandboxId,\n options.processId,\n );\n }\n if (response.status === 204) {\n return { status: response.status };\n }\n const raw = await this.readResponseJSON(\n action,\n response,\n options.sandboxId,\n options.processId,\n );\n return {\n status: response.status,\n envelope: parseWithSchema(\n responseEnvelopeSchema,\n raw,\n \"sandbox API response\",\n ),\n };\n }\n\n async raw(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: BodyInit;\n headers?: Record<string, string>;\n sandboxId?: string;\n processId?: string;\n },\n ): Promise<Response> {\n const response = await this.send(action, method, path, options);\n if (!response.ok) {\n await this.throwResponseError(\n action,\n response,\n options.sandboxId,\n options.processId,\n );\n }\n return response;\n }\n\n async readResponseEnvelope(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n ): Promise<z.infer<typeof responseEnvelopeSchema>> {\n return parseWithSchema(\n responseEnvelopeSchema,\n await this.readResponseJSON(action, response, sandboxId, processId),\n \"sandbox API response\",\n );\n }\n\n async stream(\n action: SandboxAction,\n path: string,\n sandboxId: string,\n processId?: string,\n ): Promise<ReadableStream<SandboxOutputChunk>> {\n const abortController = new AbortController();\n const response = await this.send(action, \"GET\", path, {\n sandboxId,\n processId,\n signal: abortController.signal,\n });\n if (!response.ok) {\n await this.throwResponseError(action, response, sandboxId, processId);\n }\n if (!response.body) {\n throw new SandboxValidationError(\n \"Sandbox API returned a stream without a body\",\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let ended = false;\n\n const nextLine = async (): Promise<string | undefined> => {\n for (;;) {\n const newline = buffer.indexOf(\"\\n\");\n if (newline >= 0) {\n const line = buffer.slice(0, newline).trim();\n buffer = buffer.slice(newline + 1);\n if (line) {\n return line;\n }\n continue;\n }\n if (ended) {\n const line = buffer.trim();\n buffer = \"\";\n return line || undefined;\n }\n const result = await reader.read();\n ended = result.done;\n buffer += decoder.decode(result.value, { stream: !result.done });\n }\n };\n\n return new ReadableStream<SandboxOutputChunk>({\n pull: async (controller) => {\n try {\n const line = await nextLine();\n if (line === undefined) {\n controller.close();\n return;\n }\n const frame = JSON.parse(line) as unknown;\n if (\n typeof frame === \"object\" &&\n frame !== null &&\n \"type\" in frame &&\n frame.type === \"error\"\n ) {\n const errorFrame = parseWithSchema(\n streamErrorFrameSchema,\n frame,\n \"sandbox stream error\",\n );\n throw this.errorFromItem(\n action,\n response.status,\n errorFrame.error,\n sandboxId,\n processId,\n response.headers.get(\"x-request-id\") ?? undefined,\n );\n }\n if (\n typeof frame !== \"object\" ||\n frame === null ||\n !(\"type\" in frame) ||\n frame.type !== \"log\"\n ) {\n throw new SandboxValidationError(\n \"Sandbox API returned an invalid stream frame\",\n );\n }\n const { type: _type, ...chunk } = frame as Record<string, unknown>;\n controller.enqueue(decodeOutputChunk(chunk));\n } catch (error) {\n abortController.abort();\n controller.error(error);\n }\n },\n cancel: async () => {\n abortController.abort();\n await reader.cancel().catch(() => undefined);\n },\n });\n }\n\n private async send(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: BodyInit;\n headers?: Record<string, string>;\n sandboxId?: string;\n processId?: string;\n signal?: AbortSignal;\n },\n ): Promise<Response> {\n const apiKey = this.config.apiKey()?.trim();\n if (!apiKey) {\n throw new SandboxValidationError(\n \"A signing or API key is required to use inngest.sandboxes\",\n );\n }\n const requestInit: RequestInit & { duplex?: \"half\" } = {\n method,\n headers: {\n ...this.config.headers(),\n Authorization: `Bearer ${apiKey}`,\n ...options.headers,\n },\n body: options.body,\n signal: options.signal,\n };\n if (options.body instanceof ReadableStream) {\n requestInit.duplex = \"half\";\n }\n try {\n return await this.config.fetch()(\n new URL(path, this.config.baseUrl()),\n requestInit,\n );\n } catch (error) {\n throw this.transportFailure(\n action,\n error,\n options.sandboxId,\n options.processId,\n );\n }\n }\n\n private async readResponseJSON(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n ): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n throw this.transportFailure(action, error, sandboxId, processId);\n }\n }\n\n private transportFailure(\n action: SandboxAction,\n cause: unknown,\n sandboxId?: string,\n processId?: string,\n ): SandboxError {\n const safeToRepeat = safeRepeatActions.has(action);\n return new SandboxError({\n action,\n code: safeToRepeat ? \"compute_unavailable\" : \"operation_ambiguous\",\n message: sandboxTransportFailureMessage(action),\n sandboxId,\n processId,\n ambiguous: !safeToRepeat,\n retryable: safeToRepeat,\n details: [],\n cause,\n });\n }\n\n private async throwResponseError(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n ): Promise<never> {\n const raw = await response.json().catch(() => undefined);\n const parsed = errorEnvelopeSchema.safeParse(raw);\n const item = parsed.success\n ? parsed.data.errors[0]!\n : {\n code: \"internal_error\",\n message: `Sandbox API returned HTTP ${response.status}`,\n };\n throw this.errorFromItem(\n action,\n response.status,\n item,\n sandboxId,\n processId,\n response.headers.get(\"x-request-id\") ?? undefined,\n parsed.success ? (parsed.data.errors as SandboxErrorDetail[]) : [],\n );\n }\n\n private errorFromItem(\n action: SandboxAction,\n status: number,\n item: { code: string; message: string },\n sandboxId?: string,\n processId?: string,\n requestId?: string,\n details: readonly SandboxErrorDetail[] = [],\n ): SandboxError {\n const ambiguous =\n item.code === \"operation_ambiguous\" ||\n item.code === \"sandbox_exec_output_too_large\" ||\n item.code === \"sandbox_exec_timed_out\";\n const availability =\n item.code === \"compute_unavailable\" ||\n item.code === \"rate_limited\" ||\n status === 429 ||\n status === 503;\n return new SandboxError({\n action,\n code: item.code as SandboxErrorCode,\n message:\n item.code === \"operation_ambiguous\"\n ? sandboxAmbiguousResponseMessage(action)\n : item.message,\n status,\n sandboxId,\n processId,\n ambiguous,\n retryable: !ambiguous && availability,\n requestId,\n details,\n });\n }\n}\n\nconst processPath = (sandboxId: string, processId: string): string =>\n `/v2/sandboxes/${encodeURIComponent(sandboxId)}/processes/${encodeURIComponent(processId)}`;\n\nconst sandboxStartingStatuses = new Set<SandboxStatus>([\"PENDING\", \"STARTING\"]);\nconst sandboxRunningPollIntervalMs = 1_000;\n\nconst delay = async (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nconst sandboxStartFailedError = (\n action: \"create\" | \"waitUntilRunning\",\n sandbox: SandboxRef,\n): SandboxError =>\n new SandboxError({\n action,\n code: \"sandbox_start_failed\",\n message: `Sandbox entered ${sandbox.status} before reaching RUNNING`,\n sandboxId: sandbox.id,\n retryable: false,\n details: [\n {\n status: sandbox.status,\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n },\n ],\n });\n\nconst sandboxStartTimedOutError = (\n action: \"create\" | \"waitUntilRunning\",\n sandbox: SandboxRef,\n timeoutMs: number,\n): SandboxError =>\n new SandboxError({\n action,\n code: \"sandbox_start_timed_out\",\n message: `Sandbox did not reach RUNNING within ${timeoutMs} milliseconds`,\n sandboxId: sandbox.id,\n retryable: false,\n details: [{ status: sandbox.status, timeoutMs }],\n });\n\nconst createDirectProcessFacade = (\n rawRef: unknown,\n transport: SandboxRestTransport,\n): SandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n const basePath = processPath(ref.sandboxId, ref.id);\n const facade: SandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (options) => {\n await transport.json(\"process.signal\", \"POST\", `${basePath}/signals`, {\n body: normalizeSandboxProcessSignalOptions(options),\n statuses: [204],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n });\n },\n wait: async (options) => {\n const normalized = normalizeSandboxProcessWaitOptions(options);\n const query = new URLSearchParams({\n timeout: `${normalized.timeoutMs}ms`,\n });\n const { envelope } = await transport.json(\n \"process.wait\",\n \"POST\",\n `${basePath}/wait?${query}`,\n {\n statuses: [200],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n },\n );\n const terminal = parseWithSchema(\n waitProcessSchema,\n envelope?.data,\n \"sandbox process wait result\",\n );\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDirectProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: terminal.state,\n ...(terminal.exitCode !== undefined && {\n exitCode: terminal.exitCode,\n }),\n ...(terminal.terminationSignal !== undefined && {\n terminationSignal: terminal.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n transport,\n );\n },\n getOutput: async (options) => {\n const { tailBytes } = normalizeSandboxProcessOutputOptions(options);\n const query = new URLSearchParams({ tailBytes: `${tailBytes}` });\n const { envelope } = await transport.json(\n \"process.output\",\n \"GET\",\n `${basePath}/output?${query}`,\n {\n statuses: [200],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n },\n );\n const output = parseWithSchema(\n outputResponseSchema,\n envelope?.data,\n \"sandbox process output\",\n );\n return { chunks: output.chunks.map(decodeOutputChunk) };\n },\n streamOutput: async (options) => {\n const { tailBytes } = normalizeSandboxProcessOutputOptions(options);\n const query = new URLSearchParams({ tailBytes: `${tailBytes}` });\n return transport.stream(\n \"process.stream\",\n `${basePath}/output/stream?${query}`,\n ref.sandboxId,\n ref.id,\n );\n },\n };\n return Object.freeze(facade);\n};\n\ninterface SandboxCommandByteResult {\n stdout: Uint8Array;\n stderr: Uint8Array;\n exitCode: number;\n output: SandboxCommandOutputMetadata;\n}\n\ntype DirectSandboxCommandRunner = (\n command: SandboxCommand,\n options?: SandboxCommandOptions,\n) => Promise<SandboxCommandByteResult>;\n\nconst directSandboxCommandRunners = new WeakMap<\n Sandbox,\n DirectSandboxCommandRunner\n>();\n\n/** Internal byte-preserving command execution used by the durable adapter. */\nexport const runSandboxCommandForOperation = (\n sandbox: Sandbox,\n command: SandboxCommand,\n options?: SandboxCommandOptions,\n): Promise<SandboxCommandByteResult> => {\n const run = directSandboxCommandRunners.get(sandbox);\n if (!run) {\n throw new SandboxValidationError(\n \"Sandbox commands can only run on an SDK sandbox resource\",\n );\n }\n return run(command, options);\n};\n\nconst createDirectSandboxFacade = (\n rawRef: unknown,\n transport: SandboxRestTransport,\n): Sandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const basePath = `/v2/sandboxes/${encodeURIComponent(ref.id)}`;\n const runCommand = async (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n ): Promise<SandboxCommandByteResult> => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, timeoutMs, ...spec } = normalized;\n const { envelope } = await transport.json(\n \"exec\",\n \"POST\",\n `${basePath}/exec`,\n {\n body: {\n ...spec,\n timeout: `${timeoutMs}ms`,\n },\n statuses: [200],\n sandboxId: ref.id,\n },\n );\n const result = parseWithSchema(\n wireCommandResultSchema,\n envelope?.data,\n \"sandbox exec result\",\n );\n return {\n stdout: decodeBase64(result.stdout ?? \"\", \"sandbox exec stdout\"),\n stderr: decodeBase64(result.stderr ?? \"\", \"sandbox exec stderr\"),\n exitCode: result.exitCode,\n output: { truncated: false },\n };\n };\n const facade: Sandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (command, options) => {\n const result = await runCommand(command, options);\n return {\n stdout: decodeUtf8(result.stdout),\n stderr: decodeUtf8(result.stderr),\n exitCode: result.exitCode,\n output: result.output,\n };\n },\n }),\n logs: Object.freeze({\n stream: async (options = {}) => {\n const parsed = parseWithSchema(\n z.object({ follow: z.boolean().optional() }).strict(),\n options,\n \"sandbox log stream options\",\n );\n const query = new URLSearchParams({\n follow: `${parsed.follow ?? false}`,\n });\n return transport.stream(\n \"logs.stream\",\n `${basePath}/logs?${query}`,\n ref.id,\n );\n },\n }),\n files: Object.freeze({\n upload: async (options): Promise<SandboxFileUploadResult> => {\n const normalized = normalizeFileUploadOptions(options);\n const query = new URLSearchParams({ path: normalized.path });\n if (normalized.mode !== undefined) {\n query.set(\"mode\", normalized.mode.toString(8).padStart(4, \"0\"));\n }\n const response = await transport.raw(\n \"file.upload\",\n \"PUT\",\n `${basePath}/files?${query}`,\n {\n body: normalized.data,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n sandboxId: ref.id,\n },\n );\n const envelope = await transport.readResponseEnvelope(\n \"file.upload\",\n response,\n ref.id,\n );\n return parseWithSchema(\n fileUploadResultSchema,\n envelope.data,\n \"sandbox file upload result\",\n );\n },\n download: async (options) => {\n const normalized = normalizeFileDownloadOptions(options);\n const query = new URLSearchParams({ path: normalized.path });\n return transport.raw(\n \"file.download\",\n \"GET\",\n `${basePath}/files?${query}`,\n { sandboxId: ref.id },\n );\n },\n }),\n processes: Object.freeze({\n start: async (options) => {\n const body = normalizeSandboxProcessStartOptions(options);\n const { envelope } = await transport.json(\n \"process.start\",\n \"POST\",\n `${basePath}/processes`,\n {\n body,\n statuses: [201],\n sandboxId: ref.id,\n },\n );\n const process = sandboxProcessRefFromResource(ref.id, envelope?.data);\n if (process.state !== \"RUNNING\" || process.pid === undefined) {\n throw new SandboxValidationError(\n \"Sandbox process Start returned a process that is not RUNNING\",\n );\n }\n return createDirectProcessFacade(process, transport);\n },\n list: async (options) => {\n const normalized = normalizeSandboxProcessListOptions(options);\n const query = new URLSearchParams({ limit: `${normalized.limit}` });\n if (normalized.cursor !== undefined) {\n query.set(\"cursor\", normalized.cursor);\n }\n const { envelope } = await transport.json(\n \"process.list\",\n \"GET\",\n `${basePath}/processes?${query}`,\n { statuses: [200], sandboxId: ref.id },\n );\n const processes = parseWithSchema(\n z.array(z.unknown()),\n envelope?.data,\n \"sandbox process list\",\n );\n const metadata = parseWithSchema(\n metadataSchema,\n envelope?.metadata,\n \"sandbox process list metadata\",\n );\n const page = parseWithSchema(\n sandboxPageSchema,\n envelope?.page,\n \"sandbox process list page\",\n );\n const items = processes\n .map((process) =>\n createDirectProcessFacade(\n sandboxProcessRefFromResource(ref.id, process),\n transport,\n ),\n )\n .sort((left, right) => left.id.localeCompare(right.id));\n return {\n items,\n page: {\n hasMore: page.hasMore,\n limit: page.limit,\n ...(page.cursor != null && { cursor: page.cursor }),\n },\n fetchedAt: metadata.fetchedAt,\n };\n },\n get: async (processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n try {\n const { envelope } = await transport.json(\n \"process.get\",\n \"GET\",\n processPath(ref.id, parsedProcessId),\n {\n statuses: [200],\n sandboxId: ref.id,\n processId: parsedProcessId,\n },\n );\n return createDirectProcessFacade(\n sandboxProcessRefFromResource(ref.id, envelope?.data),\n transport,\n );\n } catch (error) {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_process_not_found\"\n ) {\n return null;\n }\n throw error;\n }\n },\n }),\n waitUntilRunning: async (options) =>\n waitUntilSandboxRunning(\n ref,\n normalizeSandboxWaitUntilRunningOptions(options).timeoutMs,\n transport,\n \"waitUntilRunning\",\n ),\n destroy: async (): Promise<SandboxDestroyResult> => {\n const { status, envelope } = await transport.json(\n \"destroy\",\n \"DELETE\",\n basePath,\n { statuses: [202, 204], sandboxId: ref.id },\n );\n if (status === 204) {\n return { status: \"TERMINATED\", sandbox: null };\n }\n const sandbox = sandboxRefFromResource(envelope?.data);\n if (sandbox.status !== \"TERMINATING\") {\n throw new SandboxValidationError(\n \"Sandbox Destroy returned a resource that is not TERMINATING\",\n );\n }\n return {\n status: \"TERMINATING\",\n sandbox,\n };\n },\n };\n directSandboxCommandRunners.set(facade, runCommand);\n return Object.freeze(facade);\n};\n\nconst waitUntilSandboxRunning = async (\n initialSandbox: SandboxRef,\n timeoutMs: number,\n transport: SandboxRestTransport,\n action: \"create\" | \"waitUntilRunning\",\n): Promise<Sandbox> => {\n let sandbox = initialSandbox;\n if (sandbox.status === \"RUNNING\") {\n return createDirectSandboxFacade(sandbox, transport);\n }\n if (!sandboxStartingStatuses.has(sandbox.status)) {\n throw sandboxStartFailedError(action, sandbox);\n }\n\n const deadline = Date.now() + timeoutMs;\n const path = `/v2/sandboxes/${encodeURIComponent(sandbox.id)}`;\n for (;;) {\n if (deadline - Date.now() <= 0) {\n throw sandboxStartTimedOutError(action, sandbox, timeoutMs);\n }\n\n try {\n const { envelope } = await transport.json(action, \"GET\", path, {\n statuses: [200],\n sandboxId: sandbox.id,\n });\n sandbox = sandboxRefFromResource(envelope?.data);\n } catch (error) {\n if (!(error instanceof SandboxError && error.retryable)) {\n throw error;\n }\n }\n\n if (sandbox.status === \"RUNNING\") {\n return createDirectSandboxFacade(sandbox, transport);\n }\n if (!sandboxStartingStatuses.has(sandbox.status)) {\n throw sandboxStartFailedError(action, sandbox);\n }\n\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n throw sandboxStartTimedOutError(action, sandbox, timeoutMs);\n }\n await delay(Math.min(sandboxRunningPollIntervalMs, remainingMs));\n }\n};\n\nconst sandboxClientTransports = new WeakMap<\n SandboxClient,\n SandboxRestTransport\n>();\n\nconst transportForClient = (client: SandboxClient): SandboxRestTransport => {\n const transport = sandboxClientTransports.get(client);\n if (!transport) {\n throw new SandboxValidationError(\n \"Sandbox resources can only be reconstructed for an SDK sandbox client\",\n );\n }\n return transport;\n};\n\n/**\n * Internal reconstruction used by the durable adapter. Public callers reload\n * resources with Get so they receive current state.\n */\nexport const sandboxForOperation = (\n client: SandboxClient,\n ref: unknown,\n): Sandbox => createDirectSandboxFacade(ref, transportForClient(client));\n\nexport const sandboxProcessForOperation = (\n client: SandboxClient,\n ref: unknown,\n): SandboxProcess => createDirectProcessFacade(ref, transportForClient(client));\n\nexport const createSandboxClient = (\n config: SandboxClientConfig,\n): SandboxClient => {\n const transport = new SandboxRestTransport(config);\n const client: SandboxClient = {\n create: async (options) => {\n const { runningTimeoutMs, ...body } =\n normalizeSandboxCreateOptions(options);\n const { status, envelope } = await transport.json(\n \"create\",\n \"POST\",\n \"/v2/sandboxes\",\n { body, statuses: [200, 201, 202] },\n );\n const sandbox = sandboxRefFromResource(envelope?.data);\n if (\n (status === 201 && sandbox.status !== \"RUNNING\") ||\n (status === 202 && sandbox.status !== \"STARTING\")\n ) {\n throw new SandboxValidationError(\n `Sandbox Create returned HTTP ${status} with status ${sandbox.status}`,\n );\n }\n return runningTimeoutMs === false\n ? createDirectSandboxFacade(sandbox, transport)\n : waitUntilSandboxRunning(\n sandbox,\n runningTimeoutMs,\n transport,\n \"create\",\n );\n },\n list: async (options) => {\n const normalized = normalizeSandboxListOptions(options);\n const query = new URLSearchParams({ limit: `${normalized.limit}` });\n if (normalized.cursor !== undefined) {\n query.set(\"cursor\", normalized.cursor);\n }\n const { envelope } = await transport.json(\n \"list\",\n \"GET\",\n `/v2/sandboxes?${query}`,\n { statuses: [200] },\n );\n const resources = parseWithSchema(\n z.array(z.unknown()),\n envelope?.data,\n \"sandbox list\",\n );\n const page = parseWithSchema(\n sandboxPageSchema,\n envelope?.page,\n \"sandbox list page\",\n );\n const metadata = parseWithSchema(\n metadataSchema,\n envelope?.metadata,\n \"sandbox list metadata\",\n );\n return {\n items: resources.map((resource) =>\n createDirectSandboxFacade(\n sandboxRefFromResource(resource),\n transport,\n ),\n ),\n page: {\n hasMore: page.hasMore,\n limit: page.limit,\n ...(page.cursor != null && { cursor: page.cursor }),\n },\n fetchedAt: metadata.fetchedAt,\n };\n },\n get: async (sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n try {\n const { envelope } = await transport.json(\n \"get\",\n \"GET\",\n `/v2/sandboxes/${encodeURIComponent(parsedSandboxId)}`,\n { statuses: [200], sandboxId: parsedSandboxId },\n );\n return createDirectSandboxFacade(\n sandboxRefFromResource(envelope?.data),\n transport,\n );\n } catch (error) {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_not_found\"\n ) {\n return null;\n }\n throw error;\n }\n },\n };\n sandboxClientTransports.set(client, transport);\n return client;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs","names":["z","restOutputChunkSchema","canonicalUuidSchema","config: SandboxClientConfig","parseWithSchema","SandboxValidationError","decodeOutputChunk","requestInit: RequestInit & { duplex?: \"half\" }","SandboxError","normalizeSandboxWaitUntilRunningOptions","sandboxProcessRefSchema","facade: SandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","sandboxRefFromResource","sandboxSnapshotRefFromResource","sandboxRefSchema","normalizeSandboxCommandOptions","decodeBase64","facade: Sandbox","decodeUtf8","normalizeFileUploadOptions","normalizeFileDownloadOptions","normalizeSandboxProcessStartOptions","sandboxProcessRefFromResource","normalizeSandboxProcessListOptions","normalizeSandboxSnapshotListOptions","sandboxSnapshotRefSchema","normalizeSandboxCreateOptions","client: SandboxClient","normalizeSandboxListOptions"],"sources":["../../../src/components/sandbox/client.ts"],"sourcesContent":["import { z } from \"zod/v3\";\n\nimport {\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCommandOutputMetadata,\n type SandboxCreateOptions,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxErrorCode,\n type SandboxErrorDetail,\n type SandboxFileUploadResult,\n type SandboxLifecycleOptions,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxRef,\n type SandboxSnapshot,\n type SandboxSnapshotCloneOptions,\n type SandboxSnapshotListResult,\n type SandboxSnapshotRef,\n type SandboxStatus,\n SandboxValidationError,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n normalizeFileDownloadOptions,\n normalizeFileUploadOptions,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxSnapshotCreateOptions,\n normalizeSandboxSnapshotListOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n restOutputChunkSchema,\n sandboxProcessRefFromResource,\n sandboxProcessRefSchema,\n sandboxRefFromResource,\n sandboxRefSchema,\n sandboxSnapshotRefFromResource,\n sandboxSnapshotRefSchema,\n} from \"./validation.ts\";\n\ntype FetchT = typeof fetch;\n\nexport interface SandboxClientConfig {\n baseUrl: () => string;\n apiKey: () => string | undefined;\n headers: () => Record<string, string>;\n fetch: () => FetchT;\n}\n\nconst metadataSchema = z.object({ fetchedAt: z.string().min(1) }).passthrough();\nconst errorItemSchema = z\n .object({\n code: z.string().min(1),\n message: z.string().min(1),\n })\n .passthrough();\nconst errorEnvelopeSchema = z\n .object({ errors: z.array(errorItemSchema).min(1) })\n .passthrough();\nconst streamErrorFrameSchema = z\n .object({\n type: z.literal(\"error\"),\n error: errorItemSchema,\n })\n .passthrough();\nconst responseEnvelopeSchema = z\n .object({\n data: z.unknown(),\n metadata: metadataSchema.optional(),\n page: z.unknown().optional(),\n })\n .passthrough();\n\nconst sandboxPageSchema = z\n .object({\n cursor: z.string().min(1).nullish(),\n hasMore: z.boolean(),\n limit: z.number().int().min(1).max(250),\n })\n .strip();\n\nconst wireCommandResultSchema = z\n .object({\n stdout: z.string().optional(),\n stderr: z.string().optional(),\n encoding: z.literal(\"base64\"),\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff),\n })\n .strip();\n\nconst outputResponseSchema = z\n .object({ chunks: z.array(restOutputChunkSchema) })\n .passthrough();\n\nconst fileUploadResultSchema = z\n .object({\n path: z.string(),\n bytesWritten: z.number().int().nonnegative().safe(),\n })\n .strip();\n\nconst waitProcessSchema = z\n .object({\n id: canonicalUuidSchema,\n state: z.enum([\"EXITED\", \"KILLED\", \"FAILED\", \"LOST\"]),\n exitCode: z.number().int().optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n })\n .strip()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n });\n }\n });\n\nconst safeRepeatActions = new Set<SandboxAction>([\n \"create\",\n \"destroy\",\n \"pause\",\n \"resume\",\n \"file.upload\",\n \"list\",\n \"get\",\n \"waitUntilRunning\",\n \"process.list\",\n \"process.get\",\n \"process.wait\",\n \"process.output\",\n \"process.stream\",\n \"logs.stream\",\n \"file.download\",\n \"snapshot.list\",\n \"snapshot.get\",\n \"snapshot.waitUntilReady\",\n \"snapshot.delete\",\n]);\n\nconst sandboxTransportFailureMessage = (action: SandboxAction): string => {\n switch (action) {\n case \"create\":\n return \"The Sandbox Create response was not confirmed. Repeating the same Create request is safe\";\n case \"destroy\":\n return \"Sandbox teardown may have been accepted. Get the sandbox; repeating Destroy is safe\";\n case \"file.upload\":\n return \"The sandbox file may have been replaced. Repeating the same upload is safe\";\n case \"exec\":\n return \"The sandbox command may have run. Inspect its external effects before running it again\";\n case \"process.start\":\n return \"A sandbox process may be running. List processes and reconcile before starting another\";\n case \"process.signal\":\n return \"The sandbox process signal may have been delivered. Get or wait for the process before sending another\";\n case \"snapshot.create\":\n return \"Snapshot creation may have started and a retry may create a second snapshot. Check snapshots.list() before creating another\";\n case \"snapshot.delete\":\n return \"Snapshot deletion may have started. Repeating Delete is safe\";\n default:\n return \"Compute is temporarily unavailable. Retry this operation\";\n }\n};\n\nconst sandboxAmbiguousResponseMessage = (action: SandboxAction): string => {\n if (action === \"create\") {\n return \"A sandbox was created, but its current resource could not be loaded. List sandboxes and reconcile by name before creating another\";\n }\n return sandboxTransportFailureMessage(action);\n};\n\nclass SandboxRestTransport {\n constructor(private readonly config: SandboxClientConfig) {}\n\n async json(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: unknown;\n statuses: readonly number[];\n sandboxId?: string;\n processId?: string;\n snapshotId?: string;\n signal?: AbortSignal;\n },\n ): Promise<{\n status: number;\n envelope?: z.infer<typeof responseEnvelopeSchema>;\n }> {\n const response = await this.send(action, method, path, {\n body:\n options.body === undefined ? undefined : JSON.stringify(options.body),\n headers:\n options.body === undefined\n ? undefined\n : { \"Content-Type\": \"application/json\" },\n sandboxId: options.sandboxId,\n processId: options.processId,\n snapshotId: options.snapshotId,\n signal: options.signal,\n });\n if (!options.statuses.includes(response.status)) {\n await this.throwResponseError(\n action,\n response,\n options.sandboxId,\n options.processId,\n options.snapshotId,\n );\n }\n if (response.status === 204) {\n return { status: response.status };\n }\n const raw = await this.readResponseJSON(\n action,\n response,\n options.sandboxId,\n options.processId,\n options.snapshotId,\n );\n return {\n status: response.status,\n envelope: parseWithSchema(\n responseEnvelopeSchema,\n raw,\n \"sandbox API response\",\n ),\n };\n }\n\n async raw(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: BodyInit;\n headers?: Record<string, string>;\n sandboxId?: string;\n processId?: string;\n snapshotId?: string;\n },\n ): Promise<Response> {\n const response = await this.send(action, method, path, options);\n if (!response.ok) {\n await this.throwResponseError(\n action,\n response,\n options.sandboxId,\n options.processId,\n options.snapshotId,\n );\n }\n return response;\n }\n\n async readResponseEnvelope(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n snapshotId?: string,\n ): Promise<z.infer<typeof responseEnvelopeSchema>> {\n return parseWithSchema(\n responseEnvelopeSchema,\n await this.readResponseJSON(\n action,\n response,\n sandboxId,\n processId,\n snapshotId,\n ),\n \"sandbox API response\",\n );\n }\n\n async stream(\n action: SandboxAction,\n path: string,\n sandboxId: string,\n processId?: string,\n ): Promise<ReadableStream<SandboxOutputChunk>> {\n const abortController = new AbortController();\n const response = await this.send(action, \"GET\", path, {\n sandboxId,\n processId,\n signal: abortController.signal,\n });\n if (!response.ok) {\n await this.throwResponseError(action, response, sandboxId, processId);\n }\n if (!response.body) {\n throw new SandboxValidationError(\n \"Sandbox API returned a stream without a body\",\n );\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let ended = false;\n\n const nextLine = async (): Promise<string | undefined> => {\n for (;;) {\n const newline = buffer.indexOf(\"\\n\");\n if (newline >= 0) {\n const line = buffer.slice(0, newline).trim();\n buffer = buffer.slice(newline + 1);\n if (line) {\n return line;\n }\n continue;\n }\n if (ended) {\n const line = buffer.trim();\n buffer = \"\";\n return line || undefined;\n }\n const result = await reader.read();\n ended = result.done;\n buffer += decoder.decode(result.value, { stream: !result.done });\n }\n };\n\n return new ReadableStream<SandboxOutputChunk>({\n pull: async (controller) => {\n try {\n const line = await nextLine();\n if (line === undefined) {\n controller.close();\n return;\n }\n const frame = JSON.parse(line) as unknown;\n if (\n typeof frame === \"object\" &&\n frame !== null &&\n \"type\" in frame &&\n frame.type === \"error\"\n ) {\n const errorFrame = parseWithSchema(\n streamErrorFrameSchema,\n frame,\n \"sandbox stream error\",\n );\n throw this.errorFromItem(\n action,\n response.status,\n errorFrame.error,\n sandboxId,\n processId,\n response.headers.get(\"x-request-id\") ?? undefined,\n );\n }\n if (\n typeof frame !== \"object\" ||\n frame === null ||\n !(\"type\" in frame) ||\n frame.type !== \"log\"\n ) {\n throw new SandboxValidationError(\n \"Sandbox API returned an invalid stream frame\",\n );\n }\n const { type: _type, ...chunk } = frame as Record<string, unknown>;\n controller.enqueue(decodeOutputChunk(chunk));\n } catch (error) {\n abortController.abort();\n controller.error(error);\n }\n },\n cancel: async () => {\n abortController.abort();\n await reader.cancel().catch(() => undefined);\n },\n });\n }\n\n private async send(\n action: SandboxAction,\n method: string,\n path: string,\n options: {\n body?: BodyInit;\n headers?: Record<string, string>;\n sandboxId?: string;\n processId?: string;\n snapshotId?: string;\n signal?: AbortSignal;\n },\n ): Promise<Response> {\n const apiKey = this.config.apiKey()?.trim();\n if (!apiKey) {\n throw new SandboxValidationError(\n \"A signing or API key is required to use inngest.sandboxes\",\n );\n }\n const requestInit: RequestInit & { duplex?: \"half\" } = {\n method,\n headers: {\n ...this.config.headers(),\n Authorization: `Bearer ${apiKey}`,\n ...options.headers,\n },\n body: options.body,\n signal: options.signal,\n };\n if (options.body instanceof ReadableStream) {\n requestInit.duplex = \"half\";\n }\n try {\n return await this.config.fetch()(\n new URL(path, this.config.baseUrl()),\n requestInit,\n );\n } catch (error) {\n throw this.transportFailure(\n action,\n error,\n options.sandboxId,\n options.processId,\n options.snapshotId,\n );\n }\n }\n\n private async readResponseJSON(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n snapshotId?: string,\n ): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n throw this.transportFailure(\n action,\n error,\n sandboxId,\n processId,\n snapshotId,\n );\n }\n }\n\n private transportFailure(\n action: SandboxAction,\n cause: unknown,\n sandboxId?: string,\n processId?: string,\n snapshotId?: string,\n ): SandboxError {\n const safeToRepeat = safeRepeatActions.has(action);\n return new SandboxError({\n action,\n code: safeToRepeat ? \"compute_unavailable\" : \"operation_ambiguous\",\n message: sandboxTransportFailureMessage(action),\n sandboxId,\n processId,\n snapshotId,\n ambiguous: !safeToRepeat,\n retryable: safeToRepeat,\n details: [],\n cause,\n });\n }\n\n private async throwResponseError(\n action: SandboxAction,\n response: Response,\n sandboxId?: string,\n processId?: string,\n snapshotId?: string,\n ): Promise<never> {\n const raw = await response.json().catch(() => undefined);\n const parsed = errorEnvelopeSchema.safeParse(raw);\n const item = parsed.success\n ? parsed.data.errors[0]!\n : {\n code: \"internal_error\",\n message: `Sandbox API returned HTTP ${response.status}`,\n };\n throw this.errorFromItem(\n action,\n response.status,\n item,\n sandboxId,\n processId,\n snapshotId,\n response.headers.get(\"x-request-id\") ?? undefined,\n parsed.success ? (parsed.data.errors as SandboxErrorDetail[]) : [],\n );\n }\n\n private errorFromItem(\n action: SandboxAction,\n status: number,\n item: { code: string; message: string },\n sandboxId?: string,\n processId?: string,\n snapshotId?: string,\n requestId?: string,\n details: readonly SandboxErrorDetail[] = [],\n ): SandboxError {\n const ambiguous =\n item.code === \"operation_ambiguous\" ||\n item.code === \"sandbox_exec_output_too_large\" ||\n item.code === \"sandbox_exec_timed_out\";\n const availability =\n item.code === \"compute_unavailable\" ||\n item.code === \"rate_limited\" ||\n status === 429 ||\n status === 503;\n return new SandboxError({\n action,\n code: item.code as SandboxErrorCode,\n message:\n item.code === \"operation_ambiguous\"\n ? sandboxAmbiguousResponseMessage(action)\n : item.message,\n status,\n sandboxId,\n processId,\n snapshotId,\n ambiguous,\n retryable: !ambiguous && availability,\n requestId,\n details,\n });\n }\n}\n\nconst processPath = (sandboxId: string, processId: string): string =>\n `/v2/sandboxes/${encodeURIComponent(sandboxId)}/processes/${encodeURIComponent(processId)}`;\n\nconst sandboxStartingStatuses = new Set<SandboxStatus>([\"PENDING\", \"STARTING\"]);\nconst sandboxRunningPollIntervalMs = 1_000;\n\nconst delay = async (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nconst lifecycleTimeout = (options?: SandboxLifecycleOptions): number =>\n normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n }).timeoutMs;\n\nconst abortableDelay = (milliseconds: number, signal?: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"));\n return;\n }\n const timer = setTimeout(resolve, milliseconds);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"));\n },\n { once: true },\n );\n });\nconst sandboxStartFailedError = (\n action: \"create\" | \"waitUntilRunning\",\n sandbox: SandboxRef,\n): SandboxError =>\n new SandboxError({\n action,\n code: \"sandbox_start_failed\",\n message: `Sandbox entered ${sandbox.status} before reaching RUNNING`,\n sandboxId: sandbox.id,\n retryable: false,\n details: [\n {\n status: sandbox.status,\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n },\n ],\n });\n\nconst sandboxStartTimedOutError = (\n action: \"create\" | \"waitUntilRunning\",\n sandbox: SandboxRef,\n timeoutMs: number,\n): SandboxError =>\n new SandboxError({\n action,\n code: \"sandbox_start_timed_out\",\n message: `Sandbox did not reach RUNNING within ${timeoutMs} milliseconds`,\n sandboxId: sandbox.id,\n retryable: false,\n details: [{ status: sandbox.status, timeoutMs }],\n });\n\nconst createDirectProcessFacade = (\n rawRef: unknown,\n transport: SandboxRestTransport,\n): SandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n const basePath = processPath(ref.sandboxId, ref.id);\n const facade: SandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (options) => {\n await transport.json(\"process.signal\", \"POST\", `${basePath}/signals`, {\n body: normalizeSandboxProcessSignalOptions(options),\n statuses: [204],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n });\n },\n wait: async (options) => {\n const normalized = normalizeSandboxProcessWaitOptions(options);\n const query = new URLSearchParams({\n timeout: `${normalized.timeoutMs}ms`,\n });\n const { envelope } = await transport.json(\n \"process.wait\",\n \"POST\",\n `${basePath}/wait?${query}`,\n {\n statuses: [200],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n },\n );\n const terminal = parseWithSchema(\n waitProcessSchema,\n envelope?.data,\n \"sandbox process wait result\",\n );\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDirectProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: terminal.state,\n ...(terminal.exitCode !== undefined && {\n exitCode: terminal.exitCode,\n }),\n ...(terminal.terminationSignal !== undefined && {\n terminationSignal: terminal.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n transport,\n );\n },\n getOutput: async (options) => {\n const { tailBytes } = normalizeSandboxProcessOutputOptions(options);\n const query = new URLSearchParams({ tailBytes: `${tailBytes}` });\n const { envelope } = await transport.json(\n \"process.output\",\n \"GET\",\n `${basePath}/output?${query}`,\n {\n statuses: [200],\n sandboxId: ref.sandboxId,\n processId: ref.id,\n },\n );\n const output = parseWithSchema(\n outputResponseSchema,\n envelope?.data,\n \"sandbox process output\",\n );\n return { chunks: output.chunks.map(decodeOutputChunk) };\n },\n streamOutput: async (options) => {\n const { tailBytes } = normalizeSandboxProcessOutputOptions(options);\n const query = new URLSearchParams({ tailBytes: `${tailBytes}` });\n return transport.stream(\n \"process.stream\",\n `${basePath}/output/stream?${query}`,\n ref.sandboxId,\n ref.id,\n );\n },\n };\n return Object.freeze(facade);\n};\n\ninterface SandboxCommandByteResult {\n stdout: Uint8Array;\n stderr: Uint8Array;\n exitCode: number;\n output: SandboxCommandOutputMetadata;\n}\n\ntype DirectSandboxCommandRunner = (\n command: SandboxCommand,\n options?: SandboxCommandOptions,\n) => Promise<SandboxCommandByteResult>;\n\nconst directSandboxCommandRunners = new WeakMap<\n Sandbox,\n DirectSandboxCommandRunner\n>();\n\n/** Internal byte-preserving command execution used by the durable adapter. */\nexport const runSandboxCommandForOperation = (\n sandbox: Sandbox,\n command: SandboxCommand,\n options?: SandboxCommandOptions,\n): Promise<SandboxCommandByteResult> => {\n const run = directSandboxCommandRunners.get(sandbox);\n if (!run) {\n throw new SandboxValidationError(\n \"Sandbox commands can only run on an SDK sandbox resource\",\n );\n }\n return run(command, options);\n};\n\nconst pollSandboxStatus = async (\n initial: SandboxRef,\n target: SandboxStatus,\n action: \"pause\" | \"resume\",\n transport: SandboxRestTransport,\n options?: SandboxLifecycleOptions,\n): Promise<Sandbox> => {\n const timeoutMs = lifecycleTimeout(options);\n const deadline = Date.now() + timeoutMs;\n let current = initial;\n while (current.status !== target) {\n if ([\"FAILED\", \"TERMINATED\"].includes(current.status)) {\n throw new SandboxError({\n action,\n code: \"invalid_request\",\n message: `Sandbox entered ${current.status} before reaching ${target}`,\n sandboxId: current.id,\n });\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) {\n throw new SandboxError({\n action,\n code: \"sandbox_start_timed_out\",\n message: `Sandbox did not reach ${target} within ${timeoutMs} milliseconds`,\n sandboxId: current.id,\n });\n }\n await abortableDelay(Math.min(1_000, remaining), options?.signal);\n const { envelope } = await transport.json(\n action,\n \"GET\",\n `/v2/sandboxes/${encodeURIComponent(current.id)}`,\n { statuses: [200], sandboxId: current.id, signal: options?.signal },\n );\n current = sandboxRefFromResource(envelope?.data);\n if (current.id !== initial.id || current.name !== initial.name) {\n throw new SandboxValidationError(\n \"Sandbox lifecycle operation returned an unrelated sandbox\",\n );\n }\n }\n return createDirectSandboxFacade(current, transport);\n};\n\nconst createDirectSnapshotFacade = (\n rawRef: unknown,\n transport: SandboxRestTransport,\n): SandboxSnapshot => {\n const ref = sandboxSnapshotRefFromResource(rawRef);\n return Object.freeze({\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n clone: async (\n options: SandboxSnapshotCloneOptions,\n waitOptions?: SandboxLifecycleOptions,\n ) =>\n createSandbox(transport, {\n name: options.name,\n snapshotId: ref.id,\n runningTimeout: options.runningTimeout ?? waitOptions?.timeout,\n }),\n delete: async () => deleteSandboxSnapshot(transport, ref.id),\n });\n};\nconst createDirectSandboxFacade = (\n rawRef: unknown,\n transport: SandboxRestTransport,\n): Sandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const basePath = `/v2/sandboxes/${encodeURIComponent(ref.id)}`;\n const runCommand = async (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n ): Promise<SandboxCommandByteResult> => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, timeoutMs, ...spec } = normalized;\n const { envelope } = await transport.json(\n \"exec\",\n \"POST\",\n `${basePath}/exec`,\n {\n body: {\n ...spec,\n timeout: `${timeoutMs}ms`,\n },\n statuses: [200],\n sandboxId: ref.id,\n },\n );\n const result = parseWithSchema(\n wireCommandResultSchema,\n envelope?.data,\n \"sandbox exec result\",\n );\n return {\n stdout: decodeBase64(result.stdout ?? \"\", \"sandbox exec stdout\"),\n stderr: decodeBase64(result.stderr ?? \"\", \"sandbox exec stderr\"),\n exitCode: result.exitCode,\n output: { truncated: false },\n };\n };\n const facade: Sandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (command, options) => {\n const result = await runCommand(command, options);\n return {\n stdout: decodeUtf8(result.stdout),\n stderr: decodeUtf8(result.stderr),\n exitCode: result.exitCode,\n output: result.output,\n };\n },\n }),\n logs: Object.freeze({\n stream: async (options = {}) => {\n const parsed = parseWithSchema(\n z.object({ follow: z.boolean().optional() }).strict(),\n options,\n \"sandbox log stream options\",\n );\n const query = new URLSearchParams({\n follow: `${parsed.follow ?? false}`,\n });\n return transport.stream(\n \"logs.stream\",\n `${basePath}/logs?${query}`,\n ref.id,\n );\n },\n }),\n files: Object.freeze({\n upload: async (options): Promise<SandboxFileUploadResult> => {\n const normalized = normalizeFileUploadOptions(options);\n const query = new URLSearchParams({ path: normalized.path });\n if (normalized.mode !== undefined) {\n query.set(\"mode\", normalized.mode.toString(8).padStart(4, \"0\"));\n }\n const response = await transport.raw(\n \"file.upload\",\n \"PUT\",\n `${basePath}/files?${query}`,\n {\n body: normalized.data,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n sandboxId: ref.id,\n },\n );\n const envelope = await transport.readResponseEnvelope(\n \"file.upload\",\n response,\n ref.id,\n );\n return parseWithSchema(\n fileUploadResultSchema,\n envelope.data,\n \"sandbox file upload result\",\n );\n },\n download: async (options) => {\n const normalized = normalizeFileDownloadOptions(options);\n const query = new URLSearchParams({ path: normalized.path });\n return transport.raw(\n \"file.download\",\n \"GET\",\n `${basePath}/files?${query}`,\n { sandboxId: ref.id },\n );\n },\n }),\n processes: Object.freeze({\n start: async (options) => {\n const body = normalizeSandboxProcessStartOptions(options);\n const { envelope } = await transport.json(\n \"process.start\",\n \"POST\",\n `${basePath}/processes`,\n {\n body,\n statuses: [201],\n sandboxId: ref.id,\n },\n );\n const process = sandboxProcessRefFromResource(ref.id, envelope?.data);\n if (process.state !== \"RUNNING\" || process.pid === undefined) {\n throw new SandboxValidationError(\n \"Sandbox process Start returned a process that is not RUNNING\",\n );\n }\n return createDirectProcessFacade(process, transport);\n },\n list: async (options) => {\n const normalized = normalizeSandboxProcessListOptions(options);\n const query = new URLSearchParams({ limit: `${normalized.limit}` });\n if (normalized.cursor !== undefined) {\n query.set(\"cursor\", normalized.cursor);\n }\n const { envelope } = await transport.json(\n \"process.list\",\n \"GET\",\n `${basePath}/processes?${query}`,\n { statuses: [200], sandboxId: ref.id },\n );\n const processes = parseWithSchema(\n z.array(z.unknown()),\n envelope?.data,\n \"sandbox process list\",\n );\n const metadata = parseWithSchema(\n metadataSchema,\n envelope?.metadata,\n \"sandbox process list metadata\",\n );\n const page = parseWithSchema(\n sandboxPageSchema,\n envelope?.page,\n \"sandbox process list page\",\n );\n const items = processes\n .map((process) =>\n createDirectProcessFacade(\n sandboxProcessRefFromResource(ref.id, process),\n transport,\n ),\n )\n .sort((left, right) => left.id.localeCompare(right.id));\n return {\n items,\n page: {\n hasMore: page.hasMore,\n limit: page.limit,\n ...(page.cursor != null && { cursor: page.cursor }),\n },\n fetchedAt: metadata.fetchedAt,\n };\n },\n get: async (processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n try {\n const { envelope } = await transport.json(\n \"process.get\",\n \"GET\",\n processPath(ref.id, parsedProcessId),\n {\n statuses: [200],\n sandboxId: ref.id,\n processId: parsedProcessId,\n },\n );\n return createDirectProcessFacade(\n sandboxProcessRefFromResource(ref.id, envelope?.data),\n transport,\n );\n } catch (error) {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_process_not_found\"\n ) {\n return null;\n }\n throw error;\n }\n },\n }),\n waitUntilRunning: async (options) =>\n waitUntilSandboxRunning(\n ref,\n normalizeSandboxWaitUntilRunningOptions(options).timeoutMs,\n transport,\n \"waitUntilRunning\",\n ),\n pause: async (options) => {\n const { envelope } = await transport.json(\n \"pause\",\n \"POST\",\n `${basePath}/pause`,\n {\n statuses: [200, 201, 202],\n sandboxId: ref.id,\n signal: options?.signal,\n },\n );\n const accepted =\n envelope?.data === undefined\n ? ref\n : sandboxRefFromResource(envelope.data);\n return pollSandboxStatus(accepted, \"PAUSED\", \"pause\", transport, options);\n },\n resume: async (options) => {\n const { envelope } = await transport.json(\n \"resume\",\n \"POST\",\n `${basePath}/resume`,\n {\n statuses: [200, 201, 202],\n sandboxId: ref.id,\n signal: options?.signal,\n },\n );\n const accepted =\n envelope?.data === undefined\n ? ref\n : sandboxRefFromResource(envelope.data);\n return pollSandboxStatus(\n accepted,\n \"RUNNING\",\n \"resume\",\n transport,\n options,\n );\n },\n snapshot: async (options = {}, waitOptions) => {\n normalizeSandboxSnapshotCreateOptions(options);\n const initial = await createSandboxSnapshot(\n transport,\n ref.id,\n waitOptions?.signal,\n );\n const ready = await waitUntilSandboxSnapshotReady(\n transport,\n initial,\n lifecycleTimeout(waitOptions),\n waitOptions?.signal,\n );\n return createDirectSnapshotFacade(ready, transport);\n },\n destroy: async (): Promise<SandboxDestroyResult> => {\n const { status, envelope } = await transport.json(\n \"destroy\",\n \"DELETE\",\n basePath,\n { statuses: [202, 204], sandboxId: ref.id },\n );\n if (status === 204) {\n return { status: \"TERMINATED\", sandbox: null };\n }\n const sandbox = sandboxRefFromResource(envelope?.data);\n if (sandbox.status !== \"TERMINATING\") {\n throw new SandboxValidationError(\n \"Sandbox Destroy returned a resource that is not TERMINATING\",\n );\n }\n return {\n status: \"TERMINATING\",\n sandbox,\n };\n },\n };\n directSandboxCommandRunners.set(facade, runCommand);\n return Object.freeze(facade);\n};\n\nconst waitUntilSandboxRunning = async (\n initialSandbox: SandboxRef,\n timeoutMs: number,\n transport: SandboxRestTransport,\n action: \"create\" | \"waitUntilRunning\",\n): Promise<Sandbox> => {\n let sandbox = initialSandbox;\n if (sandbox.status === \"RUNNING\") {\n return createDirectSandboxFacade(sandbox, transport);\n }\n if (!sandboxStartingStatuses.has(sandbox.status)) {\n throw sandboxStartFailedError(action, sandbox);\n }\n\n const deadline = Date.now() + timeoutMs;\n const path = `/v2/sandboxes/${encodeURIComponent(sandbox.id)}`;\n for (;;) {\n if (deadline - Date.now() <= 0) {\n throw sandboxStartTimedOutError(action, sandbox, timeoutMs);\n }\n\n try {\n const { envelope } = await transport.json(action, \"GET\", path, {\n statuses: [200],\n sandboxId: sandbox.id,\n });\n sandbox = sandboxRefFromResource(envelope?.data);\n } catch (error) {\n if (!(error instanceof SandboxError && error.retryable)) {\n throw error;\n }\n }\n\n if (sandbox.status === \"RUNNING\") {\n return createDirectSandboxFacade(sandbox, transport);\n }\n if (!sandboxStartingStatuses.has(sandbox.status)) {\n throw sandboxStartFailedError(action, sandbox);\n }\n\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n throw sandboxStartTimedOutError(action, sandbox, timeoutMs);\n }\n await delay(Math.min(sandboxRunningPollIntervalMs, remainingMs));\n }\n};\n\nconst sandboxClientTransports = new WeakMap<\n SandboxClient,\n SandboxRestTransport\n>();\n\nconst transportForClient = (client: SandboxClient): SandboxRestTransport => {\n const transport = sandboxClientTransports.get(client);\n if (!transport) {\n throw new SandboxValidationError(\n \"Sandbox resources can only be reconstructed for an SDK sandbox client\",\n );\n }\n return transport;\n};\n\n/**\n * Internal reconstruction used by the durable adapter. Public callers reload\n * resources with Get so they receive current state.\n */\nexport const sandboxForOperation = (\n client: SandboxClient,\n ref: unknown,\n): Sandbox => createDirectSandboxFacade(ref, transportForClient(client));\n\nexport const sandboxProcessForOperation = (\n client: SandboxClient,\n ref: unknown,\n): SandboxProcess => createDirectProcessFacade(ref, transportForClient(client));\n\nconst getSnapshotForOperation = async (\n transport: SandboxRestTransport,\n snapshotId: string,\n action: \"snapshot.get\" | \"snapshot.waitUntilReady\",\n): Promise<SandboxSnapshotRef | null> => {\n try {\n const { envelope } = await transport.json(\n action,\n \"GET\",\n `/v2/snapshots/${encodeURIComponent(snapshotId)}`,\n { statuses: [200], snapshotId },\n );\n return sandboxSnapshotRefFromResource(envelope?.data);\n } catch (error) {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_snapshot_not_found\"\n ) {\n return null;\n }\n throw error;\n }\n};\n\nconst createSandboxSnapshot = async (\n transport: SandboxRestTransport,\n sandboxId: string,\n signal?: AbortSignal,\n): Promise<SandboxSnapshotRef> => {\n const { status, envelope } = await transport.json(\n \"snapshot.create\",\n \"POST\",\n `/v2/sandboxes/${encodeURIComponent(sandboxId)}/snapshots`,\n {\n body: {},\n statuses: [201, 202],\n sandboxId,\n signal,\n },\n );\n const snapshot = sandboxSnapshotRefFromResource(envelope?.data);\n if (\n (status === 201 && snapshot.status !== \"READY\") ||\n (status === 202 && snapshot.status !== \"CREATING\")\n ) {\n throw new SandboxValidationError(\n `Sandbox snapshot Create returned HTTP ${status} with status ${snapshot.status}`,\n );\n }\n return snapshot;\n};\n\nconst listSandboxSnapshots = async (\n transport: SandboxRestTransport,\n options: Parameters<typeof normalizeSandboxSnapshotListOptions>[0],\n): Promise<SandboxSnapshotListResult> => {\n const normalized = normalizeSandboxSnapshotListOptions(options);\n const query = new URLSearchParams({ limit: `${normalized.limit}` });\n if (normalized.cursor !== undefined) {\n query.set(\"cursor\", normalized.cursor);\n }\n const { envelope } = await transport.json(\n \"snapshot.list\",\n \"GET\",\n `/v2/snapshots?${query}`,\n { statuses: [200] },\n );\n const resources = parseWithSchema(\n z.array(z.unknown()),\n envelope?.data,\n \"sandbox snapshot list\",\n );\n const page = parseWithSchema(\n sandboxPageSchema,\n envelope?.page,\n \"sandbox snapshot list page\",\n );\n const metadata = parseWithSchema(\n metadataSchema,\n envelope?.metadata,\n \"sandbox snapshot list metadata\",\n );\n return {\n items: resources.map(sandboxSnapshotRefFromResource),\n page: {\n hasMore: page.hasMore,\n limit: page.limit,\n ...(page.cursor != null && { cursor: page.cursor }),\n },\n fetchedAt: metadata.fetchedAt,\n };\n};\n\nexport const createSandboxSnapshotForOperation = async (\n client: SandboxClient,\n sandboxId: string,\n): Promise<SandboxSnapshotRef> =>\n createSandboxSnapshot(transportForClient(client), sandboxId);\n\nexport const listSandboxSnapshotsForOperation = async (\n client: SandboxClient,\n options: Parameters<typeof normalizeSandboxSnapshotListOptions>[0],\n): Promise<SandboxSnapshotListResult> =>\n listSandboxSnapshots(transportForClient(client), options);\n\nexport const getSandboxSnapshotForOperation = async (\n client: SandboxClient,\n snapshotId: string,\n): Promise<SandboxSnapshotRef | null> =>\n getSnapshotForOperation(\n transportForClient(client),\n snapshotId,\n \"snapshot.get\",\n );\n\nconst snapshotNotReadyError = (snapshot: SandboxSnapshotRef): SandboxError =>\n new SandboxError({\n action: \"snapshot.waitUntilReady\",\n code: \"sandbox_snapshot_not_ready\",\n message: `Snapshot entered ${snapshot.status} before reaching READY`,\n snapshotId: snapshot.id,\n retryable: false,\n details: [{ status: snapshot.status }],\n });\n\nconst snapshotWaitTimedOutError = (\n snapshot: SandboxSnapshotRef,\n timeoutMs: number,\n): SandboxError =>\n new SandboxError({\n action: \"snapshot.waitUntilReady\",\n code: \"sandbox_snapshot_wait_timed_out\",\n message: `Snapshot did not reach READY within ${timeoutMs} milliseconds`,\n snapshotId: snapshot.id,\n retryable: false,\n details: [{ status: snapshot.status, timeoutMs }],\n });\n\nconst waitUntilSandboxSnapshotReady = async (\n transport: SandboxRestTransport,\n initialSnapshot: SandboxSnapshotRef,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<SandboxSnapshotRef> => {\n let snapshot = parseWithSchema(\n sandboxSnapshotRefSchema,\n initialSnapshot,\n \"sandbox snapshot reference\",\n );\n if (snapshot.status === \"READY\") {\n return snapshot;\n }\n if (snapshot.status !== \"CREATING\") {\n throw snapshotNotReadyError(snapshot);\n }\n\n const deadline = Date.now() + timeoutMs;\n for (;;) {\n if (deadline - Date.now() <= 0) {\n throw snapshotWaitTimedOutError(snapshot, timeoutMs);\n }\n try {\n const current = await getSnapshotForOperation(\n transport,\n snapshot.id,\n \"snapshot.waitUntilReady\",\n );\n if (!current) {\n throw new SandboxError({\n action: \"snapshot.waitUntilReady\",\n code: \"sandbox_snapshot_not_found\",\n message: \"Snapshot not found\",\n snapshotId: snapshot.id,\n retryable: false,\n });\n }\n snapshot = current;\n } catch (error) {\n // Transient transport failures must not abort the wait; keep polling\n // until the deadline, matching waitUntilSandboxRunning.\n if (!(error instanceof SandboxError && error.retryable)) {\n throw error;\n }\n }\n\n if (snapshot.status === \"READY\") {\n return snapshot;\n }\n if (snapshot.status !== \"CREATING\") {\n throw snapshotNotReadyError(snapshot);\n }\n\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n throw snapshotWaitTimedOutError(snapshot, timeoutMs);\n }\n await abortableDelay(\n Math.min(sandboxRunningPollIntervalMs, remainingMs),\n signal,\n );\n }\n};\n\nexport const waitUntilSandboxSnapshotReadyForOperation = async (\n client: SandboxClient,\n initialSnapshot: SandboxSnapshotRef,\n timeoutMs: number,\n): Promise<SandboxSnapshotRef> =>\n waitUntilSandboxSnapshotReady(\n transportForClient(client),\n initialSnapshot,\n timeoutMs,\n );\n\nconst deleteSandboxSnapshot = async (\n transport: SandboxRestTransport,\n snapshotId: string,\n): Promise<void> => {\n await transport.json(\n \"snapshot.delete\",\n \"DELETE\",\n `/v2/snapshots/${encodeURIComponent(snapshotId)}`,\n { statuses: [204], snapshotId },\n );\n};\n\nexport const deleteSandboxSnapshotForOperation = async (\n client: SandboxClient,\n snapshotId: string,\n): Promise<void> =>\n deleteSandboxSnapshot(transportForClient(client), snapshotId);\n\nconst createSandbox = async (\n transport: SandboxRestTransport,\n options: SandboxCreateOptions,\n): Promise<Sandbox> => {\n const { runningTimeoutMs, ...body } = normalizeSandboxCreateOptions(options);\n const { status, envelope } = await transport.json(\n \"create\",\n \"POST\",\n \"/v2/sandboxes\",\n { body, statuses: [200, 201, 202] },\n );\n const sandbox = sandboxRefFromResource(envelope?.data);\n if (\n (status === 201 && sandbox.status !== \"RUNNING\") ||\n (status === 202 && sandbox.status !== \"STARTING\")\n ) {\n throw new SandboxValidationError(\n `Sandbox Create returned HTTP ${status} with status ${sandbox.status}`,\n );\n }\n return runningTimeoutMs === false\n ? createDirectSandboxFacade(sandbox, transport)\n : waitUntilSandboxRunning(sandbox, runningTimeoutMs, transport, \"create\");\n};\n\nexport const createSandboxForOperation = async (\n client: SandboxClient,\n options: SandboxCreateOptions,\n): Promise<Sandbox> => createSandbox(transportForClient(client), options);\n\nexport const createSandboxClient = (\n config: SandboxClientConfig,\n): SandboxClient => {\n const transport = new SandboxRestTransport(config);\n const client: SandboxClient = {\n create: async (options) => createSandbox(transport, options),\n list: async (options) => {\n const normalized = normalizeSandboxListOptions(options);\n const query = new URLSearchParams({ limit: `${normalized.limit}` });\n if (normalized.cursor !== undefined) {\n query.set(\"cursor\", normalized.cursor);\n }\n const { envelope } = await transport.json(\n \"list\",\n \"GET\",\n `/v2/sandboxes?${query}`,\n { statuses: [200] },\n );\n const resources = parseWithSchema(\n z.array(z.unknown()),\n envelope?.data,\n \"sandbox list\",\n );\n const page = parseWithSchema(\n sandboxPageSchema,\n envelope?.page,\n \"sandbox list page\",\n );\n const metadata = parseWithSchema(\n metadataSchema,\n envelope?.metadata,\n \"sandbox list metadata\",\n );\n return {\n items: resources.map((resource) =>\n createDirectSandboxFacade(\n sandboxRefFromResource(resource),\n transport,\n ),\n ),\n page: {\n hasMore: page.hasMore,\n limit: page.limit,\n ...(page.cursor != null && { cursor: page.cursor }),\n },\n fetchedAt: metadata.fetchedAt,\n };\n },\n get: async (sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n try {\n const { envelope } = await transport.json(\n \"get\",\n \"GET\",\n `/v2/sandboxes/${encodeURIComponent(parsedSandboxId)}`,\n { statuses: [200], sandboxId: parsedSandboxId },\n );\n return createDirectSandboxFacade(\n sandboxRefFromResource(envelope?.data),\n transport,\n );\n } catch (error) {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_not_found\"\n ) {\n return null;\n }\n throw error;\n }\n },\n snapshots: Object.freeze({\n list: async (options) => {\n const result = await listSandboxSnapshots(transport, options);\n return {\n items: result.items.map((snapshot) =>\n createDirectSnapshotFacade(snapshot, transport),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (snapshotId) => {\n const parsedSnapshotId = parseWithSchema(\n canonicalUuidSchema,\n snapshotId,\n \"sandbox snapshot ID\",\n );\n const snapshot = await getSnapshotForOperation(\n transport,\n parsedSnapshotId,\n \"snapshot.get\",\n );\n return snapshot\n ? createDirectSnapshotFacade(snapshot, transport)\n : null;\n },\n }),\n };\n sandboxClientTransports.set(client, transport);\n return client;\n};\n"],"mappings":"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"}