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":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","parseSandboxOperation","sandboxProtocolVersion","sandboxForOperation","runSandboxCommandForOperation","sandboxProcessForOperation","validateSandboxResult","SandboxValidationError","findSandboxErrorOptions","SandboxError","findSandboxValidationError","parseWithSchema","sandboxProcessRefSchema","facade: DurableSandboxProcess","parseSandboxOperationForAction","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","facade: DurableSandbox","normalizeSandboxCommandOptions","decodeUtf8","decodeBase64","normalizeSandboxProcessStartOptions","normalizeSandboxProcessListOptions","canonicalUuidSchema","normalizeSandboxWaitUntilRunningOptions","normalizeSandboxCreateOptions","normalizeSandboxListOptions"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport {\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n} from \"./client.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await client.create({\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n }\n case \"destroy\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).destroy();\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n }\n};\n\nconst callRawTool = async <A extends SandboxAction>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n): Promise<SandboxResultForAction<A>> => {\n try {\n const rawTool = await rawToolResolver();\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n );\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n throw new SandboxError(options);\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","parseSandboxOperation","createSandboxForOperation","sandboxProtocolVersion","sandboxForOperation","runSandboxCommandForOperation","sandboxProcessForOperation","createSandboxSnapshotForOperation","listSandboxSnapshotsForOperation","getSandboxSnapshotForOperation","waitUntilSandboxSnapshotReadyForOperation","deleteSandboxSnapshotForOperation","validateSandboxResult","SandboxValidationError","findSandboxErrorOptions","SandboxError","findSandboxValidationError","parseWithSchema","sandboxSnapshotRefSchema","facade: DurableSandboxSnapshot","parseSandboxOperationForAction","normalizeSandboxSnapshotWaitOptions","normalizeSandboxCreateOptions","sandboxProcessRefSchema","facade: DurableSandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","createSnapshot: DurableSandbox[\"snapshot\"]","normalizeSandboxSnapshotCreateOptions","facade: DurableSandbox","normalizeSandboxCommandOptions","decodeUtf8","decodeBase64","normalizeSandboxProcessStartOptions","normalizeSandboxProcessListOptions","canonicalUuidSchema","normalizeSandboxWaitUntilRunningOptions","normalizeSandboxListOptions","normalizeSandboxSnapshotListOptions"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport {\n createSandboxForOperation,\n createSandboxSnapshotForOperation,\n deleteSandboxSnapshotForOperation,\n getSandboxSnapshotForOperation,\n listSandboxSnapshotsForOperation,\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n waitUntilSandboxSnapshotReadyForOperation,\n} from \"./client.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxSnapshot,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n type SandboxSnapshotRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxSnapshotCreateOptions,\n normalizeSandboxSnapshotListOptions,\n normalizeSandboxSnapshotWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n sandboxSnapshotRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\nconst snapshotRefForWire = (snapshot: SandboxSnapshotRef) => ({\n ...snapshot,\n resources: { ...snapshot.resources },\n});\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await createSandboxForOperation(client, {\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n }\n case \"destroy\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).destroy();\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"pause\":\n case \"resume\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n )[operation.action]({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n case \"snapshot.create\": {\n const snapshot = await createSandboxSnapshotForOperation(\n client,\n operation.target.sandbox.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.list\": {\n const result = await listSandboxSnapshotsForOperation(\n client,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshots: result.items.map(snapshotRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"snapshot.get\": {\n const snapshot = await getSandboxSnapshotForOperation(\n client,\n operation.target.snapshotId,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshot ? snapshotRefForWire(snapshot) : null,\n };\n }\n case \"snapshot.waitUntilReady\": {\n const snapshot = await waitUntilSandboxSnapshotReadyForOperation(\n client,\n operation.target.snapshot,\n operation.input[0].timeoutMs,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.delete\": {\n await deleteSandboxSnapshotForOperation(\n client,\n operation.target.snapshot.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n }\n};\n\nconst callRawTool = async <A extends SandboxAction>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n): Promise<SandboxResultForAction<A>> => {\n try {\n const rawTool = await rawToolResolver();\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n );\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n throw new SandboxError(options);\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\nconst snapshotWaitStepOptions = (\n idOrOptions: StepOptionsOrId,\n): StepOptionsOrId => {\n if (typeof idOrOptions === \"string\") {\n return `${idOrOptions}:wait-until-ready`;\n }\n return {\n ...idOrOptions,\n id: `${idOrOptions.id}:wait-until-ready`,\n ...(idOrOptions.name && {\n name: `${idOrOptions.name} (wait until ready)`,\n }),\n };\n};\n\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\nconst snapshotTarget = (snapshot: SandboxSnapshotRef) => ({ snapshot });\n\nexport const createDurableSandboxSnapshotFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxSnapshot => {\n const ref = parseWithSchema(\n sandboxSnapshotRefSchema,\n rawRef,\n \"sandbox snapshot reference\",\n );\n const facade: DurableSandboxSnapshot = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n waitUntilReady: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(ref),\n input: [normalizeSandboxSnapshotWaitOptions(options)],\n },\n );\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxSnapshotFacade(\n result.snapshot,\n rawToolResolver,\n );\n },\n delete: async (idOrOptions) => {\n const operation = parseSandboxOperationForAction(\"snapshot.delete\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.delete\",\n target: snapshotTarget(ref),\n input: [],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n clone: async (idOrOptions, options, waitOptions) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [\n normalizeSandboxCreateOptions({\n name: options.name,\n snapshotId: ref.id,\n runningTimeout: options.runningTimeout ?? waitOptions?.timeout,\n }),\n ],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const createSnapshot: DurableSandbox[\"snapshot\"] = async (\n idOrOptions,\n options,\n waitOptions,\n ) => {\n const createOptions = normalizeSandboxSnapshotCreateOptions(options);\n const wait = normalizeSandboxSnapshotWaitOptions({\n timeout: waitOptions?.timeout ?? 5 * 60_000,\n });\n const createOperation = parseSandboxOperationForAction(\"snapshot.create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.create\",\n target: sandboxTarget(ref),\n input: [createOptions],\n });\n const created = await callRawTool(\n rawToolResolver,\n idOrOptions,\n createOperation,\n );\n const waitOperation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(created.snapshot),\n input: [wait],\n },\n );\n const ready = await callRawTool(\n rawToolResolver,\n snapshotWaitStepOptions(idOrOptions),\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n snapshots: Object.freeze({\n create: createSnapshot,\n }),\n snapshot: createSnapshot,\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n pause: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"pause\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"pause\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n resume: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"resume\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"resume\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n snapshots: {\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"snapshot.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.list\",\n input: [normalizeSandboxSnapshotListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.snapshots.map((snapshot) =>\n createDurableSandboxSnapshotFacade(snapshot, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, snapshotId) => {\n const parsedSnapshotId = parseWithSchema(\n canonicalUuidSchema,\n snapshotId,\n \"sandbox snapshot ID\",\n );\n const operation = parseSandboxOperationForAction(\"snapshot.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.get\",\n target: { snapshotId: parsedSnapshotId },\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.snapshot\n ? createDurableSandboxSnapshotFacade(result.snapshot, rawToolResolver)\n : null;\n },\n },\n});\n"],"mappings":";;;;;;AAoEA,MAAM,+BACJ,QACA,WAKG;CACH,MAAM,gBAAgB;EACpB,QAAQ,OAAO;EACf,QAAQ,OAAO;EAChB;AACD,KACE,cAAc,SAAS,cAAc,UACrCA,kDAEA,QAAO;EAAE;EAAQ;EAAQ,QAAQ,EAAE,WAAW,OAAO;EAAE;CAQzD,MAAM,cAAc,KAAK,MAAMA,oDAAmC,EAAE;CACpE,IAAI,sBAAsB,KAAK,IAAI,cAAc,QAAQ,YAAY;CACrE,IAAI,sBAAsB,KAAK,IAAI,cAAc,QAAQ,YAAY;CACrE,IAAI,iBACFA,oDACA,sBACA;CAEF,MAAM,mBAAmB,KAAK,IAC5B,cAAc,SAAS,qBACvB,eACD;AACD,wBAAuB;AACvB,mBAAkB;AAClB,wBAAuB,KAAK,IAC1B,cAAc,SAAS,qBACvB,eACD;CAED,MAAM,gBAAgB;EACpB,QAAQ;EACR,QAAQ;EACT;AACD,QAAO;EACL,QAAQ,OAAO,SAAS,cAAc,SAAS,cAAc,OAAO;EACpE,QAAQ,OAAO,SAAS,cAAc,SAAS,cAAc,OAAO;EACpE,QAAQ;GACN,WAAW;GACX,UAAU;GACV;GACA;GACD;EACF;;AAGH,MAAM,qBACJ,WAMI;CACJ,QAAQ,MAAM;CACd,MAAMC,gCAAa,MAAM,KAAK;CAC9B,UAAU;CACV,GAAI,MAAM,OAAO,UAAa,EAAE,IAAI,MAAM,IAAI;CAC/C;AAED,MAAM,qBAAqB,aAAkC;CAC3D,MAAM,QAAQ;CACd,SAAS,QAAQ;CACjB,IAAI,QAAQ;CACZ,MAAM,QAAQ;CACd,QAAQ,QAAQ;CAChB,OAAO,QAAQ;CACf,UAAU,QAAQ;CAClB,WAAW,EAAE,GAAG,QAAQ,WAAW;CACnC,WAAW,QAAQ;CACnB,GAAI,QAAQ,cAAc,UAAa,EAAE,WAAW,QAAQ,WAAW;CACvE,GAAI,QAAQ,YAAY,UAAa,EAAE,SAAS,QAAQ,SAAS;CACjE,GAAI,QAAQ,UAAU,UAAa,EAAE,OAAO,QAAQ,OAAO;CAC5D;AAED,MAAM,qBAAqB,aAA6B;CACtD,MAAM,QAAQ;CACd,SAAS,QAAQ;CACjB,WAAW,QAAQ;CACnB,IAAI,QAAQ;CACZ,SAAS,CAAC,GAAG,QAAQ,QAAQ;CAC7B,GAAI,QAAQ,QAAQ,UAAa,EAAE,KAAK,QAAQ,KAAK;CACrD,OAAO,QAAQ;CACf,GAAI,QAAQ,aAAa,UAAa,EAAE,UAAU,QAAQ,UAAU;CACpE,GAAI,QAAQ,sBAAsB,UAAa,EAC7C,mBAAmB,QAAQ,mBAC5B;CACD,GAAI,QAAQ,cAAc,UAAa,EAAE,WAAW,QAAQ,WAAW;CACvE,GAAI,QAAQ,YAAY,UAAa,EAAE,SAAS,QAAQ,SAAS;CAClE;AAED,MAAM,sBAAsB,cAAkC;CAC5D,GAAG;CACH,WAAW,EAAE,GAAG,SAAS,WAAW;CACrC;;;;;AAMD,MAAa,0BAA0B,OACrC,QACA,iBACsC;CACtC,MAAM,YAAYC,uCAAsB,aAAa;AAErD,SAAQ,UAAU,QAAlB;EACE,KAAK,UAAU;GACb,MAAM,EAAE,kBAAkB,GAAG,YAAY,UAAU,MAAM;GACzD,MAAM,UAAU,MAAMC,yCAA0B,QAAQ;IACtD,GAAG;IACH,GAAI,qBAAqB,UAAa,EACpC,gBAAgB,kBACjB;IACF,CAAC;AACF,UAAO;IACL,iBAAiBC;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,QAAQ;GACX,MAAM,SAAS,MAAM,OAAO,KAAK,UAAU,MAAM,GAAG;AACpD,UAAO;IACL,iBAAiBA;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,kBAAkB;IAC9C,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;;EAEH,KAAK,OAAO;GACV,MAAM,UAAU,MAAM,OAAO,IAAI,UAAU,MAAM,GAAG,UAAU;AAC9D,UAAO;IACL,iBAAiBA;IACjB,QAAQ,UAAU;IAClB,SAAS,UAAU,kBAAkB,QAAQ,GAAG;IACjD;;EAEH,KAAK,oBAAoB;GACvB,MAAM,UAAU,MAAMC,mCACpB,QACA,UAAU,OAAO,QAClB,CAAC,iBAAiB,EACjB,SAAS,UAAU,MAAM,GAAG,WAC7B,CAAC;AACF,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,QAAQ;GACX,MAAM,EAAE,SAAS,WAAW,GAAG,YAAY,UAAU,MAAM;GAE3D,MAAM,SAAS,MAAME,6CADLD,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,EACT,SAAS;IACnE,GAAG;IACH,SAAS;IACV,CAAC;GACF,MAAM,SAAS,4BAA4B,OAAO,QAAQ,OAAO,OAAO;AACxE,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,QAAQ;KACN,QAAQH,gCAAa,OAAO,OAAO;KACnC,QAAQA,gCAAa,OAAO,OAAO;KACnC,UAAU;KACV,UAAU,OAAO;KACjB,QAAQ,OAAO;KAChB;IACF;;EAEH,KAAK,WAAW;GACd,MAAM,SAAS,MAAMI,mCACnB,QACA,UAAU,OAAO,QAClB,CAAC,SAAS;AACX,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB;IACD;;EAEH,KAAK;EACL,KAAK,UAAU;GACb,MAAM,UAAU,MAAMC,mCACpB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,QAAQ,EAAE,SAAS,UAAU,MAAM,GAAG,WAAW,CAAC;AAC9D,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,iBAAiB;GAEpB,MAAM,UAAU,MADAC,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CACvC,UAAU,MAAM,UAAU,MAAM,GAAG;AACjE,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,gBAAgB;GACnB,MAAM,SAAS,MAAMC,mCACnB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,KAAK,UAAU,MAAM,GAAG;AACpC,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,kBAAkB;IAC9C,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,eAAe;GAElB,MAAM,UAAU,MADAC,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CACvC,UAAU,IAAI,UAAU,OAAO,UAAU;AACvE,UAAO;IACL,iBAAiBD;IACjB,QAAQ,UAAU;IAClB,SAAS,UAAU,kBAAkB,QAAQ,GAAG;IACjD;;EAEH,KAAK;AACH,SAAMG,0CAA2B,QAAQ,UAAU,OAAO,QAAQ,CAAC,OACjE,UAAU,MAAM,GACjB;AACD,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,QAAQ;IACT;EAEH,KAAK,gBAAgB;GACnB,MAAM,UAAU,MAAMG,0CACpB,QACA,UAAU,OAAO,QAClB,CAAC,KAAK,EAAE,SAAS,UAAU,MAAM,GAAG,WAAW,CAAC;AACjD,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,SAAS;KACP,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,WAAW,QAAQ;KACnB,IAAI,QAAQ;KACZ,OAAO,QAAQ;KACf,GAAI,QAAQ,aAAa,UAAa,EACpC,UAAU,QAAQ,UACnB;KACD,GAAI,QAAQ,sBAAsB,UAAa,EAC7C,mBAAmB,QAAQ,mBAC5B;KACF;IACF;;EAEH,KAAK,kBAAkB;GACrB,MAAM,SAAS,MAAMG,0CACnB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,UAAU,MAAM,GAAG;AAC/B,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,QAAQ,EAAE,QAAQ,OAAO,OAAO,IAAI,kBAAkB,EAAE;IACzD;;EAEH,KAAK,mBAAmB;GACtB,MAAM,WAAW,MAAMI,iDACrB,QACA,UAAU,OAAO,QAAQ,GAC1B;AACD,UAAO;IACL,iBAAiBJ;IACjB,QAAQ,UAAU;IAClB,UAAU,mBAAmB,SAAS;IACvC;;EAEH,KAAK,iBAAiB;GACpB,MAAM,SAAS,MAAMK,gDACnB,QACA,UAAU,MAAM,GACjB;AACD,UAAO;IACL,iBAAiBL;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,mBAAmB;IAC/C,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,gBAAgB;GACnB,MAAM,WAAW,MAAMM,8CACrB,QACA,UAAU,OAAO,WAClB;AACD,UAAO;IACL,iBAAiBN;IACjB,QAAQ,UAAU;IAClB,UAAU,WAAW,mBAAmB,SAAS,GAAG;IACrD;;EAEH,KAAK,2BAA2B;GAC9B,MAAM,WAAW,MAAMO,yDACrB,QACA,UAAU,OAAO,UACjB,UAAU,MAAM,GAAG,UACpB;AACD,UAAO;IACL,iBAAiBP;IACjB,QAAQ,UAAU;IAClB,UAAU,mBAAmB,SAAS;IACvC;;EAEH,KAAK;AACH,SAAMQ,iDACJ,QACA,UAAU,OAAO,SAAS,GAC3B;AACD,UAAO;IACL,iBAAiBR;IACjB,QAAQ,UAAU;IAClB,QAAQ;IACT;;;AAKP,MAAM,cAAc,OAClB,iBACA,aACA,cACuC;AACvC,KAAI;AAEF,SAAOS,uCACL,WACA,OAHc,MAAM,iBAAiB,EAGvB,aAAa,UAAU,CACtC;UACM,OAAO;AACd,MAAI,iBAAiBC,qCACnB,OAAM;EAER,MAAM,UAAUC,yCAAwB,MAAM;AAC9C,MAAI,SAAS;AACX,OAAI,QAAQ,WAAW,UAAU,OAC/B,OAAM,IAAID,qCACR,gCAAgC,QAAQ,OAAO,aAAa,UAAU,SACvE;AAEH,SAAM,IAAIE,2BAAa,QAAQ;;EAEjC,MAAM,kBAAkBC,4CAA2B,MAAM;AACzD,MAAI,gBACF,OAAM,IAAIH,qCAAuB,gBAAgB,SAAS,EACxD,OAAO,OACR,CAAC;AAEJ,QAAM;;;AAIV,MAAM,2BACJ,gBACoB;AACpB,KAAI,OAAO,gBAAgB,SACzB,QAAO,GAAG,YAAY;AAExB,QAAO;EACL,GAAG;EACH,IAAI,GAAG,YAAY,GAAG;EACtB,GAAI,YAAY,QAAQ,EACtB,MAAM,GAAG,YAAY,KAAK,sBAC3B;EACF;;AAGH,MAAM,iBAAiB,SAAqB,EAAE,SAAS,KAAK;AAC5D,MAAM,iBAAiB,SAAqB,aAAgC;CAC1E;CACA;CACD;AACD,MAAM,kBAAkB,cAAkC,EAAE,UAAU;AAEtE,MAAa,sCACX,QACA,oBAC2B;CAC3B,MAAM,MAAMI,mCACVC,6CACA,QACA,6BACD;CACD,MAAMC,SAAiC;EACrC,GAAG;EACH,WAAW,OAAO,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC;EAC9C,gBAAgB,OAAO,aAAa,YAAY;AAW9C,UAAO,oCADQ,MAAM,YAAY,iBAAiB,aAThCC,gDAChB,2BACA;IACE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,eAAe,IAAI;IAC3B,OAAO,CAACkB,uDAAoC,QAAQ,CAAC;IACtD,CACF,CACwE,EAEhE,UACP,gBACD;;EAEH,QAAQ,OAAO,gBAAgB;AAO7B,SAAM,YAAY,iBAAiB,aANjBD,gDAA+B,mBAAmB;IAClE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,eAAe,IAAI;IAC3B,OAAO,EAAE;IACV,CAAC,CACwD;;EAE5D,OAAO,OAAO,aAAa,SAAS,gBAAgB;AAalD,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aAXhCiB,gDAA+B,UAAU;IACzD,iBAAiBjB;IACjB,QAAQ;IACR,OAAO,CACLmB,iDAA8B;KAC5B,MAAM,QAAQ;KACd,YAAY,IAAI;KAChB,gBAAgB,QAAQ,kBAAkB,aAAa;KACxD,CAAC,CACH;IACF,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAErE;AACD,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,qCACX,QACA,YACA,oBAC0B;CAC1B,MAAM,MAAML,mCACVM,4CACA,QACA,4BACD;AACD,KAAI,IAAI,cAAc,WAAW,GAC/B,OAAM,IAAIV,qCACR,uDACD;CAEH,MAAMW,SAAgC;EACpC,GAAG;EACH,SAAS,OAAO,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC;EACxC,QAAQ,OAAO,aAAa,YAAY;AAOtC,SAAM,YAAY,iBAAiB,aANjBJ,gDAA+B,kBAAkB;IACjE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAACsB,wDAAqC,QAAQ,CAAC;IACvD,CAAC,CACwD;;EAE5D,MAAM,OAAO,aAAa,YAAY;GAOpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aANhCL,gDAA+B,gBAAgB;IAC/D,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAACuB,sDAAmC,QAAQ,CAAC;IACrD,CAAC,CACuE;GACzE,MAAM,EACJ,UAAU,mBACV,mBAAmB,4BACnB,GAAG,YACD;AACJ,UAAO,kCACLT,mCACEM,4CACA;IACE,GAAG;IACH,OAAO,OAAO,QAAQ;IACtB,GAAI,OAAO,QAAQ,aAAa,UAAa,EAC3C,UAAU,OAAO,QAAQ,UAC1B;IACD,GAAI,OAAO,QAAQ,sBAAsB,UAAa,EACpD,mBAAmB,OAAO,QAAQ,mBACnC;IACF,EACD,4BACD,EACD,YACA,gBACD;;EAEH,WAAW,OAAO,aAAa,YAAY;AAQzC,UAAO,EACL,SAFa,MAAM,YAAY,iBAAiB,aANhCH,gDAA+B,kBAAkB;IACjE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAACwB,wDAAqC,QAAQ,CAAC;IACvD,CAAC,CACuE,EAExD,OAAO,OAAO,IAAIC,qCAAkB,EACpD;;EAEJ;AACD,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,8BACX,QACA,oBACmB;CACnB,MAAM,MAAMX,mCAAgBY,qCAAkB,QAAQ,oBAAoB;CAC1E,MAAMC,iBAA6C,OACjD,aACA,SACA,gBACG;EACH,MAAM,gBAAgBC,yDAAsC,QAAQ;EACpE,MAAM,OAAOV,uDAAoC,EAC/C,SAAS,aAAa,WAAW,IAAI,KACtC,CAAC;EAYF,MAAM,gBAAgBD,gDACpB,2BACA;GACE,iBAAiBjB;GACjB,QAAQ;GACR,QAAQ,gBAVI,MAAM,YACpB,iBACA,aARsBiB,gDAA+B,mBAAmB;IACxE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,cAAc;IACvB,CAAC,CAKD,EAMkC,SAAS;GACxC,OAAO,CAAC,KAAK;GACd,CACF;AAMD,SAAO,oCALO,MAAM,YAClB,iBACA,wBAAwB,YAAY,EACpC,cACD,EAC+C,UAAU,gBAAgB;;CAE5E,MAAM6B,SAAyB;EAC7B,GAAG;EACH,WAAW,OAAO,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC;EAC9C,UAAU,OAAO,OAAO,EACtB,KAAK,OAAO,aAAa,SAAS,YAAY;GAE5C,MAAM,EAAE,SAAS,UAAU,GAAG,UADXC,kDAA+B,SAAS,QAAQ;GAQnE,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBb,gDAA+B,QAAQ;IACvD,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,CAKD;AACD,UAAO;IACL,QAAQ+B,8BACNC,gCAAa,OAAO,OAAO,QAAQ,sBAAsB,CAC1D;IACD,QAAQD,8BACNC,gCAAa,OAAO,OAAO,QAAQ,sBAAsB,CAC1D;IACD,UAAU,OAAO,OAAO;IACxB,QAAQ,OAAO,OAAO;IACvB;KAEJ,CAAC;EACF,WAAW,OAAO,OAAO;GACvB,OAAO,OAAO,aAAa,YAAY;AAYrC,WAAO,mCALQ,MAAM,YACnB,iBACA,aARgBf,gDAA+B,iBAAiB;KAChE,iBAAiBjB;KACjB,QAAQ;KACR,QAAQ,cAAc,IAAI;KAC1B,OAAO,CAACiC,uDAAoC,QAAQ,CAAC;KACtD,CAAC,CAKD,EAEQ,SACP,KACA,gBACD;;GAEH,MAAM,OAAO,aAAa,YAAY;IAOpC,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBhB,gDAA+B,gBAAgB;KAC/D,iBAAiBjB;KACjB,QAAQ;KACR,QAAQ,cAAc,IAAI;KAC1B,OAAO,CAACkC,sDAAmC,QAAQ,CAAC;KACrD,CAAC,CAKD;AACD,WAAO;KACL,OAAO,OAAO,UAAU,KAAK,YAC3B,kCAAkC,SAAS,KAAK,gBAAgB,CACjE;KACD,MAAM,EAAE,GAAG,OAAO,MAAM;KACxB,WAAW,OAAO;KACnB;;GAEH,KAAK,OAAO,aAAa,cAAc;IAYrC,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBjB,gDAA+B,eAAe;KAC9D,iBAAiBjB;KACjB,QAAQ;KACR,QAAQ;MAAE,SAAS;MAAK,WARFc,mCACtBqB,wCACA,WACA,qBACD;MAIqD;KACpD,OAAO,EAAE;KACV,CAAC,CAKD;AACD,WAAO,OAAO,UACV,kCACE,OAAO,SACP,KACA,gBACD,GACD;;GAEP,CAAC;EACF,WAAW,OAAO,OAAO,EACvB,QAAQ,gBACT,CAAC;EACF,UAAU;EACV,kBAAkB,OAAO,aAAa,YAAY;AAQhD,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhClB,gDAA+B,oBAAoB;IACnE,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAACoC,2DAAwC,QAAQ,CAAC;IAC1D,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,OAAO,OAAO,aAAa,YAAY;GACrC,MAAM,QAAQA,2DAAwC,EACpD,SAAS,SAAS,WAAW,IAAI,KAClC,CAAC;AAQF,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhCnB,gDAA+B,SAAS;IACxD,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,QAAQ,OAAO,aAAa,YAAY;GACtC,MAAM,QAAQoC,2DAAwC,EACpD,SAAS,SAAS,WAAW,IAAI,KAClC,CAAC;AAQF,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhCnB,gDAA+B,UAAU;IACzD,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,SAAS,OAAO,gBAA+C;AAQ7D,WADe,MAAM,YAAY,iBAAiB,aANhCiB,gDAA+B,WAAW;IAC1D,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,EAAE;IACV,CAAC,CACuE,EAC3D;;EAEjB;AACD,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,sBACX,qBACyB;CACzB,QAAQ,OAAO,aAAa,YAAY;AAOtC,SAAO,4BADQ,MAAM,YAAY,iBAAiB,aALhCiB,gDAA+B,UAAU;GACzD,iBAAiBjB;GACjB,QAAQ;GACR,OAAO,CAACmB,iDAA8B,QAAQ,CAAC;GAChD,CAAC,CACuE,EAChC,SAAS,gBAAgB;;CAEpE,MAAM,OAAO,aAAa,YAAY;EAMpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhCF,gDAA+B,QAAQ;GACvD,iBAAiBjB;GACjB,QAAQ;GACR,OAAO,CAACqC,+CAA4B,QAAQ,CAAC;GAC9C,CAAC,CACuE;AACzE,SAAO;GACL,OAAO,OAAO,UAAU,KAAK,YAC3B,2BAA2B,SAAS,gBAAgB,CACrD;GACD,MAAM,EAAE,GAAG,OAAO,MAAM;GACxB,WAAW,OAAO;GACnB;;CAEH,KAAK,OAAO,aAAa,cAAc;EAWrC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhCpB,gDAA+B,OAAO;GACtD,iBAAiBjB;GACjB,QAAQ;GACR,OAAO,CAAC,EAAE,WARYc,mCACtBqB,wCACA,WACA,aACD,EAIuC,CAAC;GACxC,CAAC,CACuE;AACzE,SAAO,OAAO,UACV,2BAA2B,OAAO,SAAS,gBAAgB,GAC3D;;CAEN,WAAW;EACT,MAAM,OAAO,aAAa,YAAY;GAMpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhClB,gDAA+B,iBAAiB;IAChE,iBAAiBjB;IACjB,QAAQ;IACR,OAAO,CAACsC,uDAAoC,QAAQ,CAAC;IACtD,CAAC,CACuE;AACzE,UAAO;IACL,OAAO,OAAO,UAAU,KAAK,aAC3B,mCAAmC,UAAU,gBAAgB,CAC9D;IACD,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,OAAO,aAAa,eAAe;GAYtC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aANhCrB,gDAA+B,gBAAgB;IAC/D,iBAAiBjB;IACjB,QAAQ;IACR,QAAQ,EAAE,YARac,mCACvBqB,wCACA,YACA,sBACD,EAIyC;IACxC,OAAO,EAAE;IACV,CAAC,CACuE;AACzE,UAAO,OAAO,WACV,mCAAmC,OAAO,UAAU,gBAAgB,GACpE;;EAEP;CACF"}
@@ -1,6 +1,6 @@
1
1
  import { SandboxError, SandboxValidationError, sandboxProtocolVersion } from "./types.js";
2
- import { canonicalUuidSchema, decodeBase64, decodeOutputChunk, decodeUtf8, encodeBase64, normalizeSandboxCommandOptions, normalizeSandboxCreateOptions, normalizeSandboxListOptions, normalizeSandboxProcessListOptions, normalizeSandboxProcessOutputOptions, normalizeSandboxProcessSignalOptions, normalizeSandboxProcessStartOptions, normalizeSandboxProcessWaitOptions, normalizeSandboxWaitUntilRunningOptions, parseWithSchema, sandboxProcessRefSchema, sandboxRefSchema } from "./validation.js";
3
- import { runSandboxCommandForOperation, sandboxForOperation, sandboxProcessForOperation } from "./client.js";
2
+ import { canonicalUuidSchema, decodeBase64, decodeOutputChunk, decodeUtf8, encodeBase64, normalizeSandboxCommandOptions, normalizeSandboxCreateOptions, normalizeSandboxListOptions, normalizeSandboxProcessListOptions, normalizeSandboxProcessOutputOptions, normalizeSandboxProcessSignalOptions, normalizeSandboxProcessStartOptions, normalizeSandboxProcessWaitOptions, normalizeSandboxSnapshotCreateOptions, normalizeSandboxSnapshotListOptions, normalizeSandboxSnapshotWaitOptions, normalizeSandboxWaitUntilRunningOptions, parseWithSchema, sandboxProcessRefSchema, sandboxRefSchema, sandboxSnapshotRefSchema } from "./validation.js";
3
+ import { createSandboxForOperation, createSandboxSnapshotForOperation, deleteSandboxSnapshotForOperation, getSandboxSnapshotForOperation, listSandboxSnapshotsForOperation, runSandboxCommandForOperation, sandboxForOperation, sandboxProcessForOperation, waitUntilSandboxSnapshotReadyForOperation } from "./client.js";
4
4
  import { findSandboxErrorOptions, findSandboxValidationError, maxDurableSandboxExecOutputBytes, parseSandboxOperation, parseSandboxOperationForAction, validateSandboxResult } from "./protocol.js";
5
5
 
6
6
  //#region src/components/sandbox/durable.ts
@@ -70,6 +70,10 @@ const processRefForWire = (process) => ({
70
70
  ...process.startedAt !== void 0 && { startedAt: process.startedAt },
71
71
  ...process.endedAt !== void 0 && { endedAt: process.endedAt }
72
72
  });
73
+ const snapshotRefForWire = (snapshot) => ({
74
+ ...snapshot,
75
+ resources: { ...snapshot.resources }
76
+ });
73
77
  /**
74
78
  * Execute a durable sandbox operation through the public REST client and
75
79
  * reduce its result to JSON-safe data suitable for normal step memoization.
@@ -79,7 +83,7 @@ const executeSandboxOperation = async (client, rawOperation) => {
79
83
  switch (operation.action) {
80
84
  case "create": {
81
85
  const { runningTimeoutMs, ...options } = operation.input[0];
82
- const sandbox = await client.create({
86
+ const sandbox = await createSandboxForOperation(client, {
83
87
  ...options,
84
88
  ...runningTimeoutMs !== void 0 && { runningTimeout: runningTimeoutMs }
85
89
  });
@@ -142,6 +146,15 @@ const executeSandboxOperation = async (client, rawOperation) => {
142
146
  result
143
147
  };
144
148
  }
149
+ case "pause":
150
+ case "resume": {
151
+ const sandbox = await sandboxForOperation(client, operation.target.sandbox)[operation.action]({ timeout: operation.input[0].timeoutMs });
152
+ return {
153
+ protocolVersion: sandboxProtocolVersion,
154
+ action: operation.action,
155
+ sandbox: sandboxRefForWire(sandbox)
156
+ };
157
+ }
145
158
  case "process.start": {
146
159
  const process = await sandboxForOperation(client, operation.target.sandbox).processes.start(operation.input[0]);
147
160
  return {
@@ -199,6 +212,47 @@ const executeSandboxOperation = async (client, rawOperation) => {
199
212
  result: { chunks: result.chunks.map(encodeOutputChunk) }
200
213
  };
201
214
  }
215
+ case "snapshot.create": {
216
+ const snapshot = await createSandboxSnapshotForOperation(client, operation.target.sandbox.id);
217
+ return {
218
+ protocolVersion: sandboxProtocolVersion,
219
+ action: operation.action,
220
+ snapshot: snapshotRefForWire(snapshot)
221
+ };
222
+ }
223
+ case "snapshot.list": {
224
+ const result = await listSandboxSnapshotsForOperation(client, operation.input[0]);
225
+ return {
226
+ protocolVersion: sandboxProtocolVersion,
227
+ action: operation.action,
228
+ snapshots: result.items.map(snapshotRefForWire),
229
+ page: { ...result.page },
230
+ fetchedAt: result.fetchedAt
231
+ };
232
+ }
233
+ case "snapshot.get": {
234
+ const snapshot = await getSandboxSnapshotForOperation(client, operation.target.snapshotId);
235
+ return {
236
+ protocolVersion: sandboxProtocolVersion,
237
+ action: operation.action,
238
+ snapshot: snapshot ? snapshotRefForWire(snapshot) : null
239
+ };
240
+ }
241
+ case "snapshot.waitUntilReady": {
242
+ const snapshot = await waitUntilSandboxSnapshotReadyForOperation(client, operation.target.snapshot, operation.input[0].timeoutMs);
243
+ return {
244
+ protocolVersion: sandboxProtocolVersion,
245
+ action: operation.action,
246
+ snapshot: snapshotRefForWire(snapshot)
247
+ };
248
+ }
249
+ case "snapshot.delete":
250
+ await deleteSandboxSnapshotForOperation(client, operation.target.snapshot.id);
251
+ return {
252
+ protocolVersion: sandboxProtocolVersion,
253
+ action: operation.action,
254
+ result: null
255
+ };
202
256
  }
203
257
  };
204
258
  const callRawTool = async (rawToolResolver, idOrOptions, operation) => {
@@ -216,11 +270,55 @@ const callRawTool = async (rawToolResolver, idOrOptions, operation) => {
216
270
  throw error;
217
271
  }
218
272
  };
273
+ const snapshotWaitStepOptions = (idOrOptions) => {
274
+ if (typeof idOrOptions === "string") return `${idOrOptions}:wait-until-ready`;
275
+ return {
276
+ ...idOrOptions,
277
+ id: `${idOrOptions.id}:wait-until-ready`,
278
+ ...idOrOptions.name && { name: `${idOrOptions.name} (wait until ready)` }
279
+ };
280
+ };
219
281
  const sandboxTarget = (ref) => ({ sandbox: ref });
220
282
  const processTarget = (sandbox, process) => ({
221
283
  sandbox,
222
284
  process
223
285
  });
286
+ const snapshotTarget = (snapshot) => ({ snapshot });
287
+ const createDurableSandboxSnapshotFacade = (rawRef, rawToolResolver) => {
288
+ const ref = parseWithSchema(sandboxSnapshotRefSchema, rawRef, "sandbox snapshot reference");
289
+ const facade = {
290
+ ...ref,
291
+ resources: Object.freeze({ ...ref.resources }),
292
+ waitUntilReady: async (idOrOptions, options) => {
293
+ return createDurableSandboxSnapshotFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("snapshot.waitUntilReady", {
294
+ protocolVersion: sandboxProtocolVersion,
295
+ action: "snapshot.waitUntilReady",
296
+ target: snapshotTarget(ref),
297
+ input: [normalizeSandboxSnapshotWaitOptions(options)]
298
+ }))).snapshot, rawToolResolver);
299
+ },
300
+ delete: async (idOrOptions) => {
301
+ await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("snapshot.delete", {
302
+ protocolVersion: sandboxProtocolVersion,
303
+ action: "snapshot.delete",
304
+ target: snapshotTarget(ref),
305
+ input: []
306
+ }));
307
+ },
308
+ clone: async (idOrOptions, options, waitOptions) => {
309
+ return createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("create", {
310
+ protocolVersion: sandboxProtocolVersion,
311
+ action: "create",
312
+ input: [normalizeSandboxCreateOptions({
313
+ name: options.name,
314
+ snapshotId: ref.id,
315
+ runningTimeout: options.runningTimeout ?? waitOptions?.timeout
316
+ })]
317
+ }))).sandbox, rawToolResolver);
318
+ }
319
+ };
320
+ return Object.freeze(facade);
321
+ };
224
322
  const createDurableSandboxProcessFacade = (rawRef, sandboxRef, rawToolResolver) => {
225
323
  const ref = parseWithSchema(sandboxProcessRefSchema, rawRef, "sandbox process reference");
226
324
  if (ref.sandboxId !== sandboxRef.id) throw new SandboxValidationError("Sandbox process reference belongs to another sandbox");
@@ -263,6 +361,22 @@ const createDurableSandboxProcessFacade = (rawRef, sandboxRef, rawToolResolver)
263
361
  };
264
362
  const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
265
363
  const ref = parseWithSchema(sandboxRefSchema, rawRef, "sandbox reference");
364
+ const createSnapshot = async (idOrOptions, options, waitOptions) => {
365
+ const createOptions = normalizeSandboxSnapshotCreateOptions(options);
366
+ const wait = normalizeSandboxSnapshotWaitOptions({ timeout: waitOptions?.timeout ?? 5 * 6e4 });
367
+ const waitOperation = parseSandboxOperationForAction("snapshot.waitUntilReady", {
368
+ protocolVersion: sandboxProtocolVersion,
369
+ action: "snapshot.waitUntilReady",
370
+ target: snapshotTarget((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("snapshot.create", {
371
+ protocolVersion: sandboxProtocolVersion,
372
+ action: "snapshot.create",
373
+ target: sandboxTarget(ref),
374
+ input: [createOptions]
375
+ }))).snapshot),
376
+ input: [wait]
377
+ });
378
+ return createDurableSandboxSnapshotFacade((await callRawTool(rawToolResolver, snapshotWaitStepOptions(idOrOptions), waitOperation)).snapshot, rawToolResolver);
379
+ };
266
380
  const facade = {
267
381
  ...ref,
268
382
  resources: Object.freeze({ ...ref.resources }),
@@ -316,6 +430,8 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
316
430
  return result.process ? createDurableSandboxProcessFacade(result.process, ref, rawToolResolver) : null;
317
431
  }
318
432
  }),
433
+ snapshots: Object.freeze({ create: createSnapshot }),
434
+ snapshot: createSnapshot,
319
435
  waitUntilRunning: async (idOrOptions, options) => {
320
436
  return createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("waitUntilRunning", {
321
437
  protocolVersion: sandboxProtocolVersion,
@@ -324,6 +440,24 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
324
440
  input: [normalizeSandboxWaitUntilRunningOptions(options)]
325
441
  }))).sandbox, rawToolResolver);
326
442
  },
443
+ pause: async (idOrOptions, options) => {
444
+ const input = normalizeSandboxWaitUntilRunningOptions({ timeout: options?.timeout ?? 5 * 6e4 });
445
+ return createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("pause", {
446
+ protocolVersion: sandboxProtocolVersion,
447
+ action: "pause",
448
+ target: sandboxTarget(ref),
449
+ input: [input]
450
+ }))).sandbox, rawToolResolver);
451
+ },
452
+ resume: async (idOrOptions, options) => {
453
+ const input = normalizeSandboxWaitUntilRunningOptions({ timeout: options?.timeout ?? 5 * 6e4 });
454
+ return createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("resume", {
455
+ protocolVersion: sandboxProtocolVersion,
456
+ action: "resume",
457
+ target: sandboxTarget(ref),
458
+ input: [input]
459
+ }))).sandbox, rawToolResolver);
460
+ },
327
461
  destroy: async (idOrOptions) => {
328
462
  return (await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("destroy", {
329
463
  protocolVersion: sandboxProtocolVersion,
@@ -362,6 +496,29 @@ const createSandboxTools = (rawToolResolver) => ({
362
496
  input: [{ sandboxId: parseWithSchema(canonicalUuidSchema, sandboxId, "sandbox ID") }]
363
497
  }));
364
498
  return result.sandbox ? createDurableSandboxFacade(result.sandbox, rawToolResolver) : null;
499
+ },
500
+ snapshots: {
501
+ list: async (idOrOptions, options) => {
502
+ const result = await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("snapshot.list", {
503
+ protocolVersion: sandboxProtocolVersion,
504
+ action: "snapshot.list",
505
+ input: [normalizeSandboxSnapshotListOptions(options)]
506
+ }));
507
+ return {
508
+ items: result.snapshots.map((snapshot) => createDurableSandboxSnapshotFacade(snapshot, rawToolResolver)),
509
+ page: { ...result.page },
510
+ fetchedAt: result.fetchedAt
511
+ };
512
+ },
513
+ get: async (idOrOptions, snapshotId) => {
514
+ const result = await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("snapshot.get", {
515
+ protocolVersion: sandboxProtocolVersion,
516
+ action: "snapshot.get",
517
+ target: { snapshotId: parseWithSchema(canonicalUuidSchema, snapshotId, "sandbox snapshot ID") },
518
+ input: []
519
+ }));
520
+ return result.snapshot ? createDurableSandboxSnapshotFacade(result.snapshot, rawToolResolver) : null;
521
+ }
365
522
  }
366
523
  });
367
524
 
@@ -1 +1 @@
1
- {"version":3,"file":"durable.js","names":["facade: DurableSandboxProcess","facade: DurableSandbox"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport {\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n} from \"./client.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await client.create({\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n }\n case \"destroy\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).destroy();\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n }\n};\n\nconst callRawTool = async <A extends SandboxAction>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n): Promise<SandboxResultForAction<A>> => {\n try {\n const rawTool = await rawToolResolver();\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n );\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n throw new SandboxError(options);\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"durable.js","names":["facade: DurableSandboxSnapshot","facade: DurableSandboxProcess","createSnapshot: DurableSandbox[\"snapshot\"]","facade: DurableSandbox"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport {\n createSandboxForOperation,\n createSandboxSnapshotForOperation,\n deleteSandboxSnapshotForOperation,\n getSandboxSnapshotForOperation,\n listSandboxSnapshotsForOperation,\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n waitUntilSandboxSnapshotReadyForOperation,\n} from \"./client.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxSnapshot,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n type SandboxSnapshotRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxSnapshotCreateOptions,\n normalizeSandboxSnapshotListOptions,\n normalizeSandboxSnapshotWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n sandboxSnapshotRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\nconst snapshotRefForWire = (snapshot: SandboxSnapshotRef) => ({\n ...snapshot,\n resources: { ...snapshot.resources },\n});\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await createSandboxForOperation(client, {\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n }\n case \"destroy\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).destroy();\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"pause\":\n case \"resume\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n )[operation.action]({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n case \"snapshot.create\": {\n const snapshot = await createSandboxSnapshotForOperation(\n client,\n operation.target.sandbox.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.list\": {\n const result = await listSandboxSnapshotsForOperation(\n client,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshots: result.items.map(snapshotRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"snapshot.get\": {\n const snapshot = await getSandboxSnapshotForOperation(\n client,\n operation.target.snapshotId,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshot ? snapshotRefForWire(snapshot) : null,\n };\n }\n case \"snapshot.waitUntilReady\": {\n const snapshot = await waitUntilSandboxSnapshotReadyForOperation(\n client,\n operation.target.snapshot,\n operation.input[0].timeoutMs,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.delete\": {\n await deleteSandboxSnapshotForOperation(\n client,\n operation.target.snapshot.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n }\n};\n\nconst callRawTool = async <A extends SandboxAction>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n): Promise<SandboxResultForAction<A>> => {\n try {\n const rawTool = await rawToolResolver();\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n );\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n throw new SandboxError(options);\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\nconst snapshotWaitStepOptions = (\n idOrOptions: StepOptionsOrId,\n): StepOptionsOrId => {\n if (typeof idOrOptions === \"string\") {\n return `${idOrOptions}:wait-until-ready`;\n }\n return {\n ...idOrOptions,\n id: `${idOrOptions.id}:wait-until-ready`,\n ...(idOrOptions.name && {\n name: `${idOrOptions.name} (wait until ready)`,\n }),\n };\n};\n\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\nconst snapshotTarget = (snapshot: SandboxSnapshotRef) => ({ snapshot });\n\nexport const createDurableSandboxSnapshotFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxSnapshot => {\n const ref = parseWithSchema(\n sandboxSnapshotRefSchema,\n rawRef,\n \"sandbox snapshot reference\",\n );\n const facade: DurableSandboxSnapshot = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n waitUntilReady: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(ref),\n input: [normalizeSandboxSnapshotWaitOptions(options)],\n },\n );\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxSnapshotFacade(\n result.snapshot,\n rawToolResolver,\n );\n },\n delete: async (idOrOptions) => {\n const operation = parseSandboxOperationForAction(\"snapshot.delete\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.delete\",\n target: snapshotTarget(ref),\n input: [],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n clone: async (idOrOptions, options, waitOptions) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [\n normalizeSandboxCreateOptions({\n name: options.name,\n snapshotId: ref.id,\n runningTimeout: options.runningTimeout ?? waitOptions?.timeout,\n }),\n ],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const createSnapshot: DurableSandbox[\"snapshot\"] = async (\n idOrOptions,\n options,\n waitOptions,\n ) => {\n const createOptions = normalizeSandboxSnapshotCreateOptions(options);\n const wait = normalizeSandboxSnapshotWaitOptions({\n timeout: waitOptions?.timeout ?? 5 * 60_000,\n });\n const createOperation = parseSandboxOperationForAction(\"snapshot.create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.create\",\n target: sandboxTarget(ref),\n input: [createOptions],\n });\n const created = await callRawTool(\n rawToolResolver,\n idOrOptions,\n createOperation,\n );\n const waitOperation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(created.snapshot),\n input: [wait],\n },\n );\n const ready = await callRawTool(\n rawToolResolver,\n snapshotWaitStepOptions(idOrOptions),\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n snapshots: Object.freeze({\n create: createSnapshot,\n }),\n snapshot: createSnapshot,\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n pause: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"pause\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"pause\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n resume: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"resume\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"resume\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n snapshots: {\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"snapshot.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.list\",\n input: [normalizeSandboxSnapshotListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.snapshots.map((snapshot) =>\n createDurableSandboxSnapshotFacade(snapshot, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, snapshotId) => {\n const parsedSnapshotId = parseWithSchema(\n canonicalUuidSchema,\n snapshotId,\n \"sandbox snapshot ID\",\n );\n const operation = parseSandboxOperationForAction(\"snapshot.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.get\",\n target: { snapshotId: parsedSnapshotId },\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.snapshot\n ? createDurableSandboxSnapshotFacade(result.snapshot, rawToolResolver)\n : null;\n },\n },\n});\n"],"mappings":"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"}
@@ -17,6 +17,7 @@ const executeAsStep = async (client, operation) => {
17
17
  ...error.status !== void 0 && { status: error.status },
18
18
  ...error.sandboxId !== void 0 && { sandboxId: error.sandboxId },
19
19
  ...error.processId !== void 0 && { processId: error.processId },
20
+ ...error.snapshotId !== void 0 && { snapshotId: error.snapshotId },
20
21
  ambiguous: error.ambiguous,
21
22
  retryable: error.retryable,
22
23
  ...error.requestId !== void 0 && { requestId: error.requestId },
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.cjs","names":["executeSandboxOperation","SandboxError","NonRetriableError","SandboxValidationError","sandboxProtocolVersion","Middleware","rawTool: SandboxRawTool","createSandboxTools"],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":["import type { Inngest } from \"../Inngest.ts\";\nimport { Middleware } from \"../middleware/middleware.ts\";\nimport { NonRetriableError } from \"../NonRetriableError.ts\";\nimport { createSandboxTools, executeSandboxOperation } from \"./durable.ts\";\nimport type { SandboxRawTool } from \"./protocol.ts\";\nimport {\n type DurableSandboxTools,\n SandboxError,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\n\ntype SandboxStepExtension = {\n sandbox: DurableSandboxTools;\n};\n\nconst executeAsStep = async (\n client: Inngest.Any,\n operation: unknown,\n): Promise<unknown> => {\n try {\n return await executeSandboxOperation(client.sandboxes, operation);\n } catch (error) {\n if (error instanceof SandboxError) {\n const cause = {\n protocolVersion: error.protocolVersion,\n action: error.action,\n code: error.code,\n message: error.message,\n ...(error.status !== undefined && { status: error.status }),\n ...(error.sandboxId !== undefined && {\n sandboxId: error.sandboxId,\n }),\n ...(error.processId !== undefined && {\n processId: error.processId,\n }),\n ambiguous: error.ambiguous,\n retryable: error.retryable,\n ...(error.requestId !== undefined && {\n requestId: error.requestId,\n }),\n details: [...error.details],\n };\n if (error.retryable) {\n const retryableError = new Error(error.message, { cause });\n retryableError.name = error.name;\n throw retryableError;\n }\n throw new NonRetriableError(error.message, { cause });\n }\n if (error instanceof SandboxValidationError) {\n throw new NonRetriableError(error.message, {\n cause: {\n protocolVersion: sandboxProtocolVersion,\n type: \"sandbox_validation_error\" as const,\n message: error.message,\n },\n });\n }\n throw error;\n }\n};\n\n/**\n * Adds the durable `step.sandbox` facade using ordinary `step.run` calls.\n *\n * The executor only sees a normal planned step. Its handler calls the same REST\n * client exposed as `inngest.sandboxes`, then returns JSON-safe wire data for\n * replay.\n */\nexport class SandboxMiddleware extends Middleware.BaseMiddleware {\n readonly id = \"inngest:sandbox\";\n\n override transformFunctionInput(\n arg: Middleware.TransformFunctionInputArgs,\n ): Middleware.TransformFunctionInputArgs & {\n ctx: Middleware.TransformFunctionInputArgs[\"ctx\"] & {\n step: Middleware.TransformFunctionInputArgs[\"ctx\"][\"step\"] &\n SandboxStepExtension;\n };\n } {\n const rawTool: SandboxRawTool = (idOrOptions, operation) =>\n arg.ctx.step.run(\n idOrOptions,\n (input) => executeAsStep(this.client, input),\n operation,\n );\n\n return {\n ...arg,\n ctx: {\n ...arg.ctx,\n step: {\n ...arg.ctx.step,\n sandbox: createSandboxTools(() => rawTool),\n },\n },\n };\n }\n}\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Middleware that enables the experimental durable `step.sandbox` API.\n *\n * The direct `inngest.sandboxes` client does not require this middleware.\n *\n * @example\n * ```ts\n * import { sandboxMiddleware } from \"inngest/experimental\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * middleware: [sandboxMiddleware()],\n * });\n * ```\n */\nexport const sandboxMiddleware = () => SandboxMiddleware;\n"],"mappings":";;;;;;AAgBA,MAAM,gBAAgB,OACpB,QACA,cACqB;AACrB,KAAI;AACF,SAAO,MAAMA,wCAAwB,OAAO,WAAW,UAAU;UAC1D,OAAO;AACd,MAAI,iBAAiBC,4BAAc;GACjC,MAAM,QAAQ;IACZ,iBAAiB,MAAM;IACvB,QAAQ,MAAM;IACd,MAAM,MAAM;IACZ,SAAS,MAAM;IACf,GAAI,MAAM,WAAW,UAAa,EAAE,QAAQ,MAAM,QAAQ;IAC1D,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,SAAS,CAAC,GAAG,MAAM,QAAQ;IAC5B;AACD,OAAI,MAAM,WAAW;IACnB,MAAM,iBAAiB,IAAI,MAAM,MAAM,SAAS,EAAE,OAAO,CAAC;AAC1D,mBAAe,OAAO,MAAM;AAC5B,UAAM;;AAER,SAAM,IAAIC,4CAAkB,MAAM,SAAS,EAAE,OAAO,CAAC;;AAEvD,MAAI,iBAAiBC,qCACnB,OAAM,IAAID,4CAAkB,MAAM,SAAS,EACzC,OAAO;GACL,iBAAiBE;GACjB,MAAM;GACN,SAAS,MAAM;GAChB,EACF,CAAC;AAEJ,QAAM;;;;;;;;;;AAWV,IAAa,oBAAb,cAAuCC,8BAAW,eAAe;CAC/D,AAAS,KAAK;CAEd,AAAS,uBACP,KAMA;EACA,MAAMC,WAA2B,aAAa,cAC5C,IAAI,IAAI,KAAK,IACX,cACC,UAAU,cAAc,KAAK,QAAQ,MAAM,EAC5C,UACD;AAEH,SAAO;GACL,GAAG;GACH,KAAK;IACH,GAAG,IAAI;IACP,MAAM;KACJ,GAAG,IAAI,IAAI;KACX,SAASC,yCAAyB,QAAQ;KAC3C;IACF;GACF;;;;;;;;;;;;;;;;;;;;;AAsBL,MAAa,0BAA0B"}
1
+ {"version":3,"file":"middleware.cjs","names":["executeSandboxOperation","SandboxError","NonRetriableError","SandboxValidationError","sandboxProtocolVersion","Middleware","rawTool: SandboxRawTool","createSandboxTools"],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":["import type { Inngest } from \"../Inngest.ts\";\nimport { Middleware } from \"../middleware/middleware.ts\";\nimport { NonRetriableError } from \"../NonRetriableError.ts\";\nimport { createSandboxTools, executeSandboxOperation } from \"./durable.ts\";\nimport type { SandboxRawTool } from \"./protocol.ts\";\nimport {\n type DurableSandboxTools,\n SandboxError,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\n\ntype SandboxStepExtension = {\n sandbox: DurableSandboxTools;\n};\n\nconst executeAsStep = async (\n client: Inngest.Any,\n operation: unknown,\n): Promise<unknown> => {\n try {\n return await executeSandboxOperation(client.sandboxes, operation);\n } catch (error) {\n if (error instanceof SandboxError) {\n const cause = {\n protocolVersion: error.protocolVersion,\n action: error.action,\n code: error.code,\n message: error.message,\n ...(error.status !== undefined && { status: error.status }),\n ...(error.sandboxId !== undefined && {\n sandboxId: error.sandboxId,\n }),\n ...(error.processId !== undefined && {\n processId: error.processId,\n }),\n ...(error.snapshotId !== undefined && {\n snapshotId: error.snapshotId,\n }),\n ambiguous: error.ambiguous,\n retryable: error.retryable,\n ...(error.requestId !== undefined && {\n requestId: error.requestId,\n }),\n details: [...error.details],\n };\n if (error.retryable) {\n const retryableError = new Error(error.message, { cause });\n retryableError.name = error.name;\n throw retryableError;\n }\n throw new NonRetriableError(error.message, { cause });\n }\n if (error instanceof SandboxValidationError) {\n throw new NonRetriableError(error.message, {\n cause: {\n protocolVersion: sandboxProtocolVersion,\n type: \"sandbox_validation_error\" as const,\n message: error.message,\n },\n });\n }\n throw error;\n }\n};\n\n/**\n * Adds the durable `step.sandbox` facade using ordinary `step.run` calls.\n *\n * The executor only sees a normal planned step. Its handler calls the same REST\n * client exposed as `inngest.sandboxes`, then returns JSON-safe wire data for\n * replay.\n */\nexport class SandboxMiddleware extends Middleware.BaseMiddleware {\n readonly id = \"inngest:sandbox\";\n\n override transformFunctionInput(\n arg: Middleware.TransformFunctionInputArgs,\n ): Middleware.TransformFunctionInputArgs & {\n ctx: Middleware.TransformFunctionInputArgs[\"ctx\"] & {\n step: Middleware.TransformFunctionInputArgs[\"ctx\"][\"step\"] &\n SandboxStepExtension;\n };\n } {\n const rawTool: SandboxRawTool = (idOrOptions, operation) =>\n arg.ctx.step.run(\n idOrOptions,\n (input) => executeAsStep(this.client, input),\n operation,\n );\n\n return {\n ...arg,\n ctx: {\n ...arg.ctx,\n step: {\n ...arg.ctx.step,\n sandbox: createSandboxTools(() => rawTool),\n },\n },\n };\n }\n}\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Middleware that enables the experimental durable `step.sandbox` API.\n *\n * The direct `inngest.sandboxes` client does not require this middleware.\n *\n * @example\n * ```ts\n * import { sandboxMiddleware } from \"inngest/experimental\";\n *\n * const inngest = new Inngest({\n * id: \"my-app\",\n * middleware: [sandboxMiddleware()],\n * });\n * ```\n */\nexport const sandboxMiddleware = () => SandboxMiddleware;\n"],"mappings":";;;;;;AAgBA,MAAM,gBAAgB,OACpB,QACA,cACqB;AACrB,KAAI;AACF,SAAO,MAAMA,wCAAwB,OAAO,WAAW,UAAU;UAC1D,OAAO;AACd,MAAI,iBAAiBC,4BAAc;GACjC,MAAM,QAAQ;IACZ,iBAAiB,MAAM;IACvB,QAAQ,MAAM;IACd,MAAM,MAAM;IACZ,SAAS,MAAM;IACf,GAAI,MAAM,WAAW,UAAa,EAAE,QAAQ,MAAM,QAAQ;IAC1D,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,GAAI,MAAM,eAAe,UAAa,EACpC,YAAY,MAAM,YACnB;IACD,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,GAAI,MAAM,cAAc,UAAa,EACnC,WAAW,MAAM,WAClB;IACD,SAAS,CAAC,GAAG,MAAM,QAAQ;IAC5B;AACD,OAAI,MAAM,WAAW;IACnB,MAAM,iBAAiB,IAAI,MAAM,MAAM,SAAS,EAAE,OAAO,CAAC;AAC1D,mBAAe,OAAO,MAAM;AAC5B,UAAM;;AAER,SAAM,IAAIC,4CAAkB,MAAM,SAAS,EAAE,OAAO,CAAC;;AAEvD,MAAI,iBAAiBC,qCACnB,OAAM,IAAID,4CAAkB,MAAM,SAAS,EACzC,OAAO;GACL,iBAAiBE;GACjB,MAAM;GACN,SAAS,MAAM;GAChB,EACF,CAAC;AAEJ,QAAM;;;;;;;;;;AAWV,IAAa,oBAAb,cAAuCC,8BAAW,eAAe;CAC/D,AAAS,KAAK;CAEd,AAAS,uBACP,KAMA;EACA,MAAMC,WAA2B,aAAa,cAC5C,IAAI,IAAI,KAAK,IACX,cACC,UAAU,cAAc,KAAK,QAAQ,MAAM,EAC5C,UACD;AAEH,SAAO;GACL,GAAG;GACH,KAAK;IACH,GAAG,IAAI;IACP,MAAM;KACJ,GAAG,IAAI,IAAI;KACX,SAASC,yCAAyB,QAAQ;KAC3C;IACF;GACF;;;;;;;;;;;;;;;;;;;;;AAsBL,MAAa,0BAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.cts","names":[],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;WACM;AAHS,CAAA;AA4DpB;;;;;;;AAAuC,cAA1B,iBAAA,SAA0B,UAAA,CAAW,cAAA,CAAA;EAAc,SAAA,EAAA,GAAA,iBAAA;EAiDnD,sBAA2C,CAAA,GAAA,EA7C/C,UAAA,CAAW,0BA6CoC,CAAA,EA5CnD,UAAA,CAAW,0BA4CwC,GAAA;SA3C/C,UAAA,CAAW;YACR,UAAA,CAAW,4CACf;;;;;;;;;;;;;;;;;;;;;;cAyCK,gCAAiB"}
1
+ {"version":3,"file":"middleware.d.cts","names":[],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;WACM;AAHS,CAAA;AA+DpB;;;;;;;AAAuC,cAA1B,iBAAA,SAA0B,UAAA,CAAW,cAAA,CAAA;EAAc,SAAA,EAAA,GAAA,iBAAA;EAiDnD,sBAA2C,CAAA,GAAA,EA7C/C,UAAA,CAAW,0BA6CoC,CAAA,EA5CnD,UAAA,CAAW,0BA4CwC,GAAA;SA3C/C,UAAA,CAAW;YACR,UAAA,CAAW,4CACf;;;;;;;;;;;;;;;;;;;;;;cAyCK,gCAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","names":[],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;WACM;AAHS,CAAA;AA4DpB;;;;;;;AAAuC,cAA1B,iBAAA,SAA0B,UAAA,CAAW,cAAA,CAAA;EAAc,SAAA,EAAA,GAAA,iBAAA;EAiDnD,sBAA2C,CAAA,GAAA,EA7C/C,UAAA,CAAW,0BA6CoC,CAAA,EA5CnD,UAAA,CAAW,0BA4CwC,GAAA;SA3C/C,UAAA,CAAW;YACR,UAAA,CAAW,4CACf;;;;;;;;;;;;;;;;;;;;;;cAyCK,gCAAiB"}
1
+ {"version":3,"file":"middleware.d.ts","names":[],"sources":["../../../src/components/sandbox/middleware.ts"],"sourcesContent":[],"mappings":";;;;KAYK,oBAAA;WACM;AAHS,CAAA;AA+DpB;;;;;;;AAAuC,cAA1B,iBAAA,SAA0B,UAAA,CAAW,cAAA,CAAA;EAAc,SAAA,EAAA,GAAA,iBAAA;EAiDnD,sBAA2C,CAAA,GAAA,EA7C/C,UAAA,CAAW,0BA6CoC,CAAA,EA5CnD,UAAA,CAAW,0BA4CwC,GAAA;SA3C/C,UAAA,CAAW;YACR,UAAA,CAAW,4CACf;;;;;;;;;;;;;;;;;;;;;;cAyCK,gCAAiB"}