inngest 4.23.0 → 4.24.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 (68) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/components/Inngest.cjs.map +1 -1
  3. package/components/Inngest.d.cts +5 -1
  4. package/components/Inngest.d.cts.map +1 -1
  5. package/components/Inngest.d.ts +5 -1
  6. package/components/Inngest.d.ts.map +1 -1
  7. package/components/Inngest.js.map +1 -1
  8. package/components/realtime/types.d.cts +4 -4
  9. package/components/realtime/types.d.cts.map +1 -1
  10. package/components/realtime/types.d.ts +4 -4
  11. package/components/realtime/types.d.ts.map +1 -1
  12. package/components/sandbox/durable.cjs +27 -5
  13. package/components/sandbox/durable.cjs.map +1 -1
  14. package/components/sandbox/durable.js +27 -5
  15. package/components/sandbox/durable.js.map +1 -1
  16. package/components/sandbox/group.cjs +56 -0
  17. package/components/sandbox/group.cjs.map +1 -0
  18. package/components/sandbox/group.d.cts +16 -0
  19. package/components/sandbox/group.d.cts.map +1 -0
  20. package/components/sandbox/group.d.ts +16 -0
  21. package/components/sandbox/group.d.ts.map +1 -0
  22. package/components/sandbox/group.js +56 -0
  23. package/components/sandbox/group.js.map +1 -0
  24. package/components/sandbox/middleware.cjs +10 -2
  25. package/components/sandbox/middleware.cjs.map +1 -1
  26. package/components/sandbox/middleware.d.cts +5 -0
  27. package/components/sandbox/middleware.d.cts.map +1 -1
  28. package/components/sandbox/middleware.d.ts +5 -0
  29. package/components/sandbox/middleware.d.ts.map +1 -1
  30. package/components/sandbox/middleware.js +11 -3
  31. package/components/sandbox/middleware.js.map +1 -1
  32. package/components/sandbox/types.cjs.map +1 -1
  33. package/components/sandbox/types.d.cts +8 -1
  34. package/components/sandbox/types.d.cts.map +1 -1
  35. package/components/sandbox/types.d.ts +8 -1
  36. package/components/sandbox/types.d.ts.map +1 -1
  37. package/components/sandbox/types.js.map +1 -1
  38. package/components/sandbox/validation.cjs +5 -9
  39. package/components/sandbox/validation.cjs.map +1 -1
  40. package/components/sandbox/validation.js +5 -8
  41. package/components/sandbox/validation.js.map +1 -1
  42. package/experimental.d.cts +2 -1
  43. package/experimental.d.ts +2 -1
  44. package/helpers/duration.cjs +46 -0
  45. package/helpers/duration.cjs.map +1 -0
  46. package/helpers/duration.d.cts +25 -0
  47. package/helpers/duration.d.cts.map +1 -0
  48. package/helpers/duration.d.ts +25 -0
  49. package/helpers/duration.d.ts.map +1 -0
  50. package/helpers/duration.js +44 -0
  51. package/helpers/duration.js.map +1 -0
  52. package/index.cjs +2 -0
  53. package/index.d.cts +2 -1
  54. package/index.d.ts +2 -1
  55. package/index.js +2 -1
  56. package/package.json +1 -1
  57. package/types.cjs.map +1 -1
  58. package/types.d.cts +16 -13
  59. package/types.d.cts.map +1 -1
  60. package/types.d.ts +16 -13
  61. package/types.d.ts.map +1 -1
  62. package/types.js.map +1 -1
  63. package/version.cjs +1 -1
  64. package/version.cjs.map +1 -1
  65. package/version.d.cts +1 -1
  66. package/version.d.ts +1 -1
  67. package/version.js +1 -1
  68. package/version.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","parseSandboxOperation","createSandboxForOperation","sandboxProtocolVersion","sandboxForOperation","runSandboxCommandForOperation","sandboxProcessForOperation","createSandboxSnapshotForOperation","listSandboxSnapshotsForOperation","getSandboxSnapshotForOperation","waitUntilSandboxSnapshotReadyForOperation","deleteSandboxSnapshotForOperation","validateSandboxResult","SandboxValidationError","findSandboxErrorOptions","StepError","SandboxError","findSandboxValidationError","version","parseWithSchema","sandboxSnapshotRefSchema","facade: DurableSandboxSnapshot","parseSandboxOperationForAction","normalizeSandboxSnapshotWaitOptions","normalizeSandboxCreateOptions","sandboxProcessRefSchema","facade: DurableSandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","createSnapshot: DurableSandbox[\"snapshot\"]","normalizeSandboxSnapshotCreateOptions","getStepOptions","snapshot: DurableSandbox[\"snapshot\"]","withSpan","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 { version } from \"../../version.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.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 operation.input[0],\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 // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\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\n/**\n * Marks the steps the SDK runs on the user's behalf, such as the create and\n * wait inside `snapshot()`. See `StepOptions[\"~origin\"]`.\n */\nconst sdkOrigin = `inngest@${version}`;\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 // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\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 {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one call, so they share one span.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name } = getStepOptions(idOrOptions);\n return withSpan({ id, name }, () => createSnapshot(idOrOptions, ...args));\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: snapshot,\n }),\n snapshot,\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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"}
1
+ {"version":3,"file":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","parseSandboxOperation","createSandboxForOperation","sandboxProtocolVersion","sandboxForOperation","runSandboxCommandForOperation","SandboxError","sandboxProcessForOperation","createSandboxSnapshotForOperation","listSandboxSnapshotsForOperation","getSandboxSnapshotForOperation","waitUntilSandboxSnapshotReadyForOperation","deleteSandboxSnapshotForOperation","validateSandboxResult","SandboxValidationError","findSandboxErrorOptions","StepError","findSandboxValidationError","version","parseWithSchema","sandboxSnapshotRefSchema","facade: DurableSandboxSnapshot","parseSandboxOperationForAction","normalizeSandboxSnapshotWaitOptions","normalizeSandboxCreateOptions","sandboxProcessRefSchema","facade: DurableSandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","createSnapshot: DurableSandbox[\"snapshot\"]","normalizeSandboxSnapshotCreateOptions","getStepOptions","snapshot: DurableSandbox[\"snapshot\"]","withSpan","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 { version } from \"../../version.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.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 // A destroy that already happened, such as one retried after a lost\n // response, has the outcome the caller wanted.\n const result = await sandboxForOperation(client, operation.target.sandbox)\n .destroy()\n .catch((error: unknown): SandboxDestroyResult => {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_not_found\"\n ) {\n return { status: \"TERMINATED\", sandbox: null };\n }\n\n throw error;\n });\n\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 operation.input[0],\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 // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\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\n/**\n * Marks the steps the SDK runs on the user's behalf, such as the create and\n * wait inside `snapshot()`. See `StepOptions[\"~origin\"]`.\n */\nconst sdkOrigin = `inngest@${version}`;\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 // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\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 {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one statement, so they share one span\n // of kind `snapshot`. A caller that already groups the statement (such as\n // `@inngest/ci`) passes its own `\"~span\"`, which both steps carry, so the\n // statement is never grouped twice.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name, \"~span\": callerSpan } = getStepOptions(idOrOptions);\n\n if (callerSpan) {\n return createSnapshot(idOrOptions, ...args);\n }\n\n return withSpan({ id, name, kind: \"snapshot\" }, () => {\n return createSnapshot(idOrOptions, ...args);\n });\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: snapshot,\n }),\n snapshot,\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\n// Node before 20.5 lacks the symbol that `await using` looks up.\n(Symbol as { asyncDispose?: symbol }).asyncDispose ??= Symbol.for(\n \"Symbol.asyncDispose\",\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 const sandbox = createDurableSandboxFacade(result.sandbox, rawToolResolver);\n const { id } = getStepOptions(idOrOptions);\n\n return Object.freeze({\n ...sandbox,\n [Symbol.asyncDispose]: async () => {\n try {\n await sandbox.destroy(`${id}:destroy`);\n } catch (error) {\n // A destroy that failed for good is on the trace as a warning. It\n // must not change the outcome of the run.\n if (!(error instanceof StepError)) {\n throw error;\n }\n }\n },\n });\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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"}
@@ -142,7 +142,13 @@ const executeSandboxOperation = async (client, rawOperation) => {
142
142
  };
143
143
  }
144
144
  case "destroy": {
145
- const result = await sandboxForOperation(client, operation.target.sandbox).destroy();
145
+ const result = await sandboxForOperation(client, operation.target.sandbox).destroy().catch((error) => {
146
+ if (error instanceof SandboxError && error.code === "sandbox_not_found") return {
147
+ status: "TERMINATED",
148
+ sandbox: null
149
+ };
150
+ throw error;
151
+ });
146
152
  return {
147
153
  protocolVersion: sandboxProtocolVersion,
148
154
  action: operation.action,
@@ -391,11 +397,15 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
391
397
  }, waitOperation)).snapshot, rawToolResolver);
392
398
  };
393
399
  const snapshot = (idOrOptions, ...args) => {
394
- const { id, name } = getStepOptions(idOrOptions);
400
+ const { id, name, "~span": callerSpan } = getStepOptions(idOrOptions);
401
+ if (callerSpan) return createSnapshot(idOrOptions, ...args);
395
402
  return withSpan({
396
403
  id,
397
- name
398
- }, () => createSnapshot(idOrOptions, ...args));
404
+ name,
405
+ kind: "snapshot"
406
+ }, () => {
407
+ return createSnapshot(idOrOptions, ...args);
408
+ });
399
409
  };
400
410
  const facade = {
401
411
  ...ref,
@@ -489,13 +499,25 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
489
499
  };
490
500
  return Object.freeze(facade);
491
501
  };
502
+ Symbol.asyncDispose ??= Symbol.for("Symbol.asyncDispose");
492
503
  const createSandboxTools = (rawToolResolver) => ({
493
504
  create: async (idOrOptions, options) => {
494
- return createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("create", {
505
+ const sandbox = createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("create", {
495
506
  protocolVersion: sandboxProtocolVersion,
496
507
  action: "create",
497
508
  input: [normalizeSandboxCreateOptions(options)]
498
509
  }))).sandbox, rawToolResolver);
510
+ const { id } = getStepOptions(idOrOptions);
511
+ return Object.freeze({
512
+ ...sandbox,
513
+ [Symbol.asyncDispose]: async () => {
514
+ try {
515
+ await sandbox.destroy(`${id}:destroy`);
516
+ } catch (error) {
517
+ if (!(error instanceof StepError)) throw error;
518
+ }
519
+ }
520
+ });
499
521
  },
500
522
  list: async (idOrOptions, options) => {
501
523
  const result = await callRawTool(rawToolResolver, idOrOptions, parseSandboxOperationForAction("list", {
@@ -1 +1 @@
1
- {"version":3,"file":"durable.js","names":["facade: DurableSandboxSnapshot","facade: DurableSandboxProcess","createSnapshot: DurableSandbox[\"snapshot\"]","snapshot: DurableSandbox[\"snapshot\"]","facade: DurableSandbox"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport { version } from \"../../version.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.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 operation.input[0],\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 // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\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\n/**\n * Marks the steps the SDK runs on the user's behalf, such as the create and\n * wait inside `snapshot()`. See `StepOptions[\"~origin\"]`.\n */\nconst sdkOrigin = `inngest@${version}`;\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 // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\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 {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one call, so they share one span.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name } = getStepOptions(idOrOptions);\n return withSpan({ id, name }, () => createSnapshot(idOrOptions, ...args));\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: snapshot,\n }),\n snapshot,\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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"}
1
+ {"version":3,"file":"durable.js","names":["facade: DurableSandboxSnapshot","facade: DurableSandboxProcess","createSnapshot: DurableSandbox[\"snapshot\"]","snapshot: DurableSandbox[\"snapshot\"]","facade: DurableSandbox"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport { version } from \"../../version.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.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 // A destroy that already happened, such as one retried after a lost\n // response, has the outcome the caller wanted.\n const result = await sandboxForOperation(client, operation.target.sandbox)\n .destroy()\n .catch((error: unknown): SandboxDestroyResult => {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_not_found\"\n ) {\n return { status: \"TERMINATED\", sandbox: null };\n }\n\n throw error;\n });\n\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 operation.input[0],\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 // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\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\n/**\n * Marks the steps the SDK runs on the user's behalf, such as the create and\n * wait inside `snapshot()`. See `StepOptions[\"~origin\"]`.\n */\nconst sdkOrigin = `inngest@${version}`;\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 // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\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 {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one statement, so they share one span\n // of kind `snapshot`. A caller that already groups the statement (such as\n // `@inngest/ci`) passes its own `\"~span\"`, which both steps carry, so the\n // statement is never grouped twice.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name, \"~span\": callerSpan } = getStepOptions(idOrOptions);\n\n if (callerSpan) {\n return createSnapshot(idOrOptions, ...args);\n }\n\n return withSpan({ id, name, kind: \"snapshot\" }, () => {\n return createSnapshot(idOrOptions, ...args);\n });\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: snapshot,\n }),\n snapshot,\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\n// Node before 20.5 lacks the symbol that `await using` looks up.\n(Symbol as { asyncDispose?: symbol }).asyncDispose ??= Symbol.for(\n \"Symbol.asyncDispose\",\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 const sandbox = createDurableSandboxFacade(result.sandbox, rawToolResolver);\n const { id } = getStepOptions(idOrOptions);\n\n return Object.freeze({\n ...sandbox,\n [Symbol.asyncDispose]: async () => {\n try {\n await sandbox.destroy(`${id}:destroy`);\n } catch (error) {\n // A destroy that failed for good is on the trace as a warning. It\n // must not change the outcome of the run.\n if (!(error instanceof StepError)) {\n throw error;\n }\n }\n },\n });\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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"}
@@ -0,0 +1,56 @@
1
+ const require_NonRetriableError = require('../NonRetriableError.cjs');
2
+ const require_als = require('../execution/als.cjs');
3
+ const require_InngestStepTools = require('../InngestStepTools.cjs');
4
+ const require_StepError = require('../StepError.cjs');
5
+
6
+ //#region src/components/sandbox/group.ts
7
+ /**
8
+ * @module
9
+ * `group.sandbox()`: a sandbox that lives for the length of a callback, shown
10
+ * as one `sandbox` group in the trace.
11
+ */
12
+ const retriesRemain = () => {
13
+ const ctx = require_als.getAsyncCtxSync()?.execution?.ctx;
14
+ return !ctx?.maxAttempts || ctx.attempt < ctx.maxAttempts - 1;
15
+ };
16
+ /**
17
+ * Whether an error ends the sandbox. A final error, or any error on the last
18
+ * attempt, does. Any other error is about to be retried, and the retry replays
19
+ * the memoized creation, so the sandbox must stay alive for it.
20
+ */
21
+ const isFinal = (error) => {
22
+ return error instanceof require_StepError.StepError || error instanceof require_NonRetriableError.NonRetriableError || !retriesRemain();
23
+ };
24
+ /**
25
+ * Build `group.sandbox()` on top of `step.sandbox.create()`.
26
+ */
27
+ const createGroupSandbox = (tools) => {
28
+ return (idOrOptions, callback) => {
29
+ const { id, ...options } = typeof idOrOptions === "string" ? {
30
+ id: idOrOptions,
31
+ name: `${require_als.getAsyncCtxSync()?.execution?.ctx.runId}-${idOrOptions}`,
32
+ vcpu: 2,
33
+ memoryMb: 2048
34
+ } : idOrOptions;
35
+ return require_InngestStepTools.withSpan({
36
+ id,
37
+ name: `Sandbox ${id}`,
38
+ kind: "sandbox"
39
+ }, async () => {
40
+ const sandbox = await tools.create(id, options);
41
+ let failure;
42
+ try {
43
+ return await callback(sandbox);
44
+ } catch (error) {
45
+ failure = { error };
46
+ throw error;
47
+ } finally {
48
+ if (!failure || isFinal(failure.error)) await sandbox[Symbol.asyncDispose]();
49
+ }
50
+ });
51
+ };
52
+ };
53
+
54
+ //#endregion
55
+ exports.createGroupSandbox = createGroupSandbox;
56
+ //# sourceMappingURL=group.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.cjs","names":["getAsyncCtxSync","StepError","NonRetriableError","withSpan","failure: { error: unknown } | undefined"],"sources":["../../../src/components/sandbox/group.ts"],"sourcesContent":["/**\n * @module\n * `group.sandbox()`: a sandbox that lives for the length of a callback, shown\n * as one `sandbox` group in the trace.\n */\n\nimport { getAsyncCtxSync } from \"../execution/als.ts\";\nimport { withSpan } from \"../InngestStepTools.ts\";\nimport { NonRetriableError } from \"../NonRetriableError.ts\";\nimport { StepError } from \"../StepError.ts\";\nimport type {\n DurableSandbox,\n DurableSandboxTools,\n SandboxCreateOptions,\n} from \"./types.ts\";\n\n/**\n * The options of `step.sandbox.create()`, plus the ID of the group and of its\n * create step.\n */\nexport type GroupSandboxOptions = SandboxCreateOptions & { id: string };\n\nexport type GroupSandboxOptionsOrId = string | GroupSandboxOptions;\n\nexport type GroupSandbox = <T>(\n idOrOptions: GroupSandboxOptionsOrId,\n callback: (sandbox: DurableSandbox) => Promise<T>,\n) => Promise<T>;\n\nconst retriesRemain = (): boolean => {\n const ctx = getAsyncCtxSync()?.execution?.ctx;\n\n return !ctx?.maxAttempts || ctx.attempt < ctx.maxAttempts - 1;\n};\n\n/**\n * Whether an error ends the sandbox. A final error, or any error on the last\n * attempt, does. Any other error is about to be retried, and the retry replays\n * the memoized creation, so the sandbox must stay alive for it.\n */\nconst isFinal = (error: unknown): boolean => {\n return (\n error instanceof StepError ||\n error instanceof NonRetriableError ||\n !retriesRemain()\n );\n};\n\n/**\n * Build `group.sandbox()` on top of `step.sandbox.create()`.\n */\nexport const createGroupSandbox = (\n tools: DurableSandboxTools,\n): GroupSandbox => {\n return (idOrOptions, callback) => {\n const { id, ...options } =\n typeof idOrOptions === \"string\"\n ? {\n id: idOrOptions,\n // A run's sandboxes need names that no other run shares\n name: `${getAsyncCtxSync()?.execution?.ctx.runId}-${idOrOptions}`,\n vcpu: 2,\n memoryMb: 2048,\n }\n : idOrOptions;\n\n return withSpan(\n { id, name: `Sandbox ${id}`, kind: \"sandbox\" },\n async () => {\n const sandbox = await tools.create(id, options);\n let failure: { error: unknown } | undefined;\n\n try {\n return await callback(sandbox);\n } catch (error) {\n failure = { error };\n\n throw error;\n } finally {\n if (!failure || isFinal(failure.error)) {\n await sandbox[Symbol.asyncDispose]();\n }\n }\n },\n );\n };\n};\n"],"mappings":";;;;;;;;;;;AA6BA,MAAM,sBAA+B;CACnC,MAAM,MAAMA,6BAAiB,EAAE,WAAW;AAE1C,QAAO,CAAC,KAAK,eAAe,IAAI,UAAU,IAAI,cAAc;;;;;;;AAQ9D,MAAM,WAAW,UAA4B;AAC3C,QACE,iBAAiBC,+BACjB,iBAAiBC,+CACjB,CAAC,eAAe;;;;;AAOpB,MAAa,sBACX,UACiB;AACjB,SAAQ,aAAa,aAAa;EAChC,MAAM,EAAE,IAAI,GAAG,YACb,OAAO,gBAAgB,WACnB;GACE,IAAI;GAEJ,MAAM,GAAGF,6BAAiB,EAAE,WAAW,IAAI,MAAM,GAAG;GACpD,MAAM;GACN,UAAU;GACX,GACD;AAEN,SAAOG,kCACL;GAAE;GAAI,MAAM,WAAW;GAAM,MAAM;GAAW,EAC9C,YAAY;GACV,MAAM,UAAU,MAAM,MAAM,OAAO,IAAI,QAAQ;GAC/C,IAAIC;AAEJ,OAAI;AACF,WAAO,MAAM,SAAS,QAAQ;YACvB,OAAO;AACd,cAAU,EAAE,OAAO;AAEnB,UAAM;aACE;AACR,QAAI,CAAC,WAAW,QAAQ,QAAQ,MAAM,CACpC,OAAM,QAAQ,OAAO,eAAe;;IAI3C"}
@@ -0,0 +1,16 @@
1
+ import { DurableSandbox, SandboxCreateOptions } from "./types.cjs";
2
+
3
+ //#region src/components/sandbox/group.d.ts
4
+
5
+ /**
6
+ * The options of `step.sandbox.create()`, plus the ID of the group and of its
7
+ * create step.
8
+ */
9
+ type GroupSandboxOptions = SandboxCreateOptions & {
10
+ id: string;
11
+ };
12
+ type GroupSandboxOptionsOrId = string | GroupSandboxOptions;
13
+ type GroupSandbox = <T>(idOrOptions: GroupSandboxOptionsOrId, callback: (sandbox: DurableSandbox) => Promise<T>) => Promise<T>;
14
+ //#endregion
15
+ export { GroupSandbox, GroupSandboxOptions, GroupSandboxOptionsOrId };
16
+ //# sourceMappingURL=group.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.cts","names":[],"sources":["../../../src/components/sandbox/group.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA0ByC,KAN7B,mBAAA,GAAsB,oBAMO,GAAA;MAC5B,MAAA;;AAAD,KALA,uBAAA,GAKA,MAAA,GALmC,mBAKnC;KAHA,YAAA,oBACG,6CACO,mBAAmB,QAAQ,OAC5C,QAAQ"}
@@ -0,0 +1,16 @@
1
+ import { DurableSandbox, SandboxCreateOptions } from "./types.js";
2
+
3
+ //#region src/components/sandbox/group.d.ts
4
+
5
+ /**
6
+ * The options of `step.sandbox.create()`, plus the ID of the group and of its
7
+ * create step.
8
+ */
9
+ type GroupSandboxOptions = SandboxCreateOptions & {
10
+ id: string;
11
+ };
12
+ type GroupSandboxOptionsOrId = string | GroupSandboxOptions;
13
+ type GroupSandbox = <T>(idOrOptions: GroupSandboxOptionsOrId, callback: (sandbox: DurableSandbox) => Promise<T>) => Promise<T>;
14
+ //#endregion
15
+ export { GroupSandbox, GroupSandboxOptions, GroupSandboxOptionsOrId };
16
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","names":[],"sources":["../../../src/components/sandbox/group.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA0ByC,KAN7B,mBAAA,GAAsB,oBAMO,GAAA;MAC5B,MAAA;;AAAD,KALA,uBAAA,GAKA,MAAA,GALmC,mBAKnC;KAHA,YAAA,oBACG,6CACO,mBAAmB,QAAQ,OAC5C,QAAQ"}