inngest 4.22.0 → 4.23.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.
- package/CHANGELOG.md +16 -0
- package/components/Inngest.cjs +5 -5
- package/components/Inngest.cjs.map +1 -1
- package/components/Inngest.d.cts +4 -4
- package/components/Inngest.d.ts +4 -4
- package/components/Inngest.js +5 -5
- package/components/Inngest.js.map +1 -1
- package/components/InngestGroupTools.cjs +4 -3
- package/components/InngestGroupTools.cjs.map +1 -1
- package/components/InngestGroupTools.d.cts +27 -1
- package/components/InngestGroupTools.d.cts.map +1 -1
- package/components/InngestGroupTools.d.ts +27 -1
- package/components/InngestGroupTools.d.ts.map +1 -1
- package/components/InngestGroupTools.js +5 -4
- package/components/InngestGroupTools.js.map +1 -1
- package/components/InngestMetadata.cjs +10 -4
- package/components/InngestMetadata.cjs.map +1 -1
- package/components/InngestMetadata.d.cts +39 -8
- package/components/InngestMetadata.d.cts.map +1 -1
- package/components/InngestMetadata.d.ts +39 -8
- package/components/InngestMetadata.d.ts.map +1 -1
- package/components/InngestMetadata.js +10 -4
- package/components/InngestMetadata.js.map +1 -1
- package/components/InngestStepTools.cjs +57 -2
- package/components/InngestStepTools.cjs.map +1 -1
- package/components/InngestStepTools.d.cts.map +1 -1
- package/components/InngestStepTools.d.ts.map +1 -1
- package/components/InngestStepTools.js +58 -4
- package/components/InngestStepTools.js.map +1 -1
- package/components/execution/InngestExecution.cjs.map +1 -1
- package/components/execution/InngestExecution.d.cts +2 -2
- package/components/execution/InngestExecution.d.cts.map +1 -1
- package/components/execution/InngestExecution.d.ts +2 -2
- package/components/execution/InngestExecution.d.ts.map +1 -1
- package/components/execution/InngestExecution.js.map +1 -1
- package/components/execution/als.cjs.map +1 -1
- package/components/execution/als.d.cts +8 -1
- package/components/execution/als.d.cts.map +1 -1
- package/components/execution/als.d.ts +8 -1
- package/components/execution/als.d.ts.map +1 -1
- package/components/execution/als.js.map +1 -1
- package/components/execution/engine.cjs +11 -4
- package/components/execution/engine.cjs.map +1 -1
- package/components/execution/engine.d.cts.map +1 -1
- package/components/execution/engine.d.ts.map +1 -1
- package/components/execution/engine.js +11 -4
- package/components/execution/engine.js.map +1 -1
- package/components/execution/otel/middleware.d.cts +6 -6
- package/components/execution/otel/middleware.d.ts +6 -6
- package/components/execution/otel/processor.cjs +5 -0
- package/components/execution/otel/processor.cjs.map +1 -1
- package/components/execution/otel/processor.d.cts.map +1 -1
- package/components/execution/otel/processor.d.ts.map +1 -1
- package/components/execution/otel/processor.js +5 -0
- package/components/execution/otel/processor.js.map +1 -1
- package/components/sandbox/client.cjs +6 -4
- package/components/sandbox/client.cjs.map +1 -1
- package/components/sandbox/client.js +6 -4
- package/components/sandbox/client.js.map +1 -1
- package/components/sandbox/durable.cjs +35 -18
- package/components/sandbox/durable.cjs.map +1 -1
- package/components/sandbox/durable.js +35 -18
- package/components/sandbox/durable.js.map +1 -1
- package/components/sandbox/middleware.cjs +19 -1
- package/components/sandbox/middleware.cjs.map +1 -1
- package/components/sandbox/middleware.d.cts.map +1 -1
- package/components/sandbox/middleware.d.ts.map +1 -1
- package/components/sandbox/middleware.js +19 -1
- package/components/sandbox/middleware.js.map +1 -1
- package/components/sandbox/protocol.cjs +6 -2
- package/components/sandbox/protocol.cjs.map +1 -1
- package/components/sandbox/protocol.d.cts.map +1 -1
- package/components/sandbox/protocol.d.ts.map +1 -1
- package/components/sandbox/protocol.js +5 -4
- package/components/sandbox/protocol.js.map +1 -1
- package/components/sandbox/trace.cjs +113 -0
- package/components/sandbox/trace.cjs.map +1 -0
- package/components/sandbox/trace.js +112 -0
- package/components/sandbox/trace.js.map +1 -0
- package/components/sandbox/types.cjs.map +1 -1
- package/components/sandbox/types.d.cts +22 -3
- package/components/sandbox/types.d.cts.map +1 -1
- package/components/sandbox/types.d.ts +22 -3
- package/components/sandbox/types.d.ts.map +1 -1
- package/components/sandbox/types.js.map +1 -1
- package/components/sandbox/validation.cjs +20 -7
- package/components/sandbox/validation.cjs.map +1 -1
- package/components/sandbox/validation.js +20 -8
- package/components/sandbox/validation.js.map +1 -1
- package/experimental.cjs +1 -1
- package/experimental.js +1 -1
- package/index.cjs +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/react.d.cts +1 -1
- package/react.d.ts +1 -1
- package/types.cjs.map +1 -1
- package/types.d.cts +52 -2
- package/types.d.cts.map +1 -1
- package/types.d.ts +52 -2
- package/types.d.ts.map +1 -1
- package/types.js.map +1 -1
- package/version.cjs +1 -1
- package/version.cjs.map +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.cjs","names":["z","SandboxValidationError","milliseconds: number | undefined","isTemporalDuration"],"sources":["../../../src/components/sandbox/validation.ts"],"sourcesContent":["import ms, { type StringValue } from \"ms\";\nimport { z } from \"zod/v3\";\n\nimport { isTemporalDuration } from \"../../helpers/temporal.ts\";\nimport {\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCreateOptions,\n type SandboxDuration,\n type SandboxFileDownloadOptions,\n type SandboxFileUploadOptions,\n type SandboxListOptions,\n type SandboxOutputChunk,\n type SandboxProcessOutputOptions,\n type SandboxProcessRef,\n type SandboxProcessSignalOptions,\n type SandboxProcessStartOptions,\n type SandboxProcessWaitOptions,\n type SandboxRef,\n type SandboxSnapshotCreateOptions,\n type SandboxSnapshotListOptions,\n type SandboxSnapshotRef,\n type SandboxSnapshotWaitOptions,\n SandboxValidationError,\n type SandboxWaitUntilRunningOptions,\n} from \"./types.ts\";\n\nexport const maxSandboxProcessTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxProcessTimeoutMs = 30 * 1_000;\nexport const maxSandboxRunningTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxRunningTimeoutMs = 120 * 1_000;\nexport const maxSandboxSnapshotWaitTimeoutMs = 5 * 60 * 1_000;\nexport const maxSandboxProcessTailBytes = 512 * 1_024;\n\nconst maxProcessArgvCount = 128;\nconst maxProcessArgvBytes = 32 * 1_024;\nconst maxProcessEnvCount = 256;\nconst maxProcessEnvBytes = 64 * 1_024;\nconst maxProcessCwdBytes = 4_096;\nconst maxProcessWireBytes = 96 * 1_024;\nconst maxSandboxNameCharacters = 255;\nconst sandboxNameControlCharacterPattern = /\\p{Cc}/u;\nconst sandboxNameEdgeWhitespacePattern = /^\\p{White_Space}|\\p{White_Space}$/u;\nconst textEncoder = new TextEncoder();\n\nexport const sandboxSecretNameSchema = z.string().superRefine((name, ctx) => {\n if (\n name.length === 0 ||\n textEncoder.encode(name).byteLength > 256 ||\n sandboxNameEdgeWhitespacePattern.test(name) ||\n /[\\r\\n\\0]/u.test(name)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"must be a nonempty workspace secret name of at most 256 bytes without leading/trailing whitespace, CR, LF, or NUL\",\n });\n }\n});\n\nexport const sandboxNameSchema = z.string().superRefine((name, ctx) => {\n if (name.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not be empty\",\n });\n } else if ([...name].length > maxSandboxNameCharacters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `must not exceed ${maxSandboxNameCharacters} characters`,\n });\n }\n if (sandboxNameEdgeWhitespacePattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain leading or trailing whitespace\",\n });\n }\n if (sandboxNameControlCharacterPattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain control characters\",\n });\n }\n});\n\nconst goJSONBytes = (value: unknown): number => {\n // encoding/json escapes these runes by default. Simcity measures the\n // marshalled ProcessSpec, so mirror Go rather than JSON.stringify exactly.\n const encoded = JSON.stringify(value).replace(\n /[<>&\\u2028\\u2029]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`,\n );\n return textEncoder.encode(encoded).byteLength;\n};\n\nconst assertNoNul = (value: string, context: string): void => {\n if (value.includes(\"\\0\")) {\n throw new SandboxValidationError(`${context} must not contain NUL`);\n }\n};\n\nconst assertValidUnicode = (value: string, context: string): void => {\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next < 0xdc00 || next > 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n index++;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n }\n};\n\nconst validateSandboxEnvironment = (\n environment: Record<string, string> | undefined,\n): Array<[string, string]> => {\n const entries = Object.entries(environment ?? {});\n if (entries.length > maxProcessEnvCount) {\n throw new SandboxValidationError(\n `environment must not contain more than ${maxProcessEnvCount} entries`,\n );\n }\n let environmentBytes = 0;\n for (const [key, value] of entries) {\n if (!key || key.includes(\"=\")) {\n throw new SandboxValidationError(\n \"environment keys must be nonempty and must not contain '='\",\n );\n }\n assertNoNul(key, `environment key ${key}`);\n assertNoNul(value, `environment.${key}`);\n assertValidUnicode(key, `environment key ${key}`);\n assertValidUnicode(value, `environment.${key}`);\n environmentBytes +=\n textEncoder.encode(key).byteLength +\n 1 +\n textEncoder.encode(value).byteLength;\n }\n if (environmentBytes > maxProcessEnvBytes) {\n throw new SandboxValidationError(\n `environment must not exceed ${maxProcessEnvBytes} bytes`,\n );\n }\n return entries;\n};\n\nexport const canonicalUuidSchema = z\n .string()\n .regex(\n /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/,\n \"must be a canonical lowercase UUID\",\n )\n .refine((value) => value !== \"00000000-0000-0000-0000-000000000000\", {\n message: \"must not be the nil UUID\",\n });\n\nconst timestampSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n \"must be an RFC3339 timestamp\",\n )\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: \"must be an RFC3339 timestamp\",\n });\n\n// Sandbox REST responses may use proto3 JSON, which omits zero values and\n// encodes 64-bit integers as decimal strings.\nconst wireUint32Schema = z\n .number()\n .int()\n .nonnegative()\n .max(0xffffffff)\n .default(0);\nconst wireUint64Schema = z\n .union([z.number(), z.string().regex(/^\\d+$/).transform(Number)])\n .pipe(z.number().int().nonnegative().safe())\n .default(0);\n\nexport const sandboxStatusSchema = z.enum([\n \"PENDING\",\n \"STARTING\",\n \"PAUSING\",\n \"RUNNING\",\n \"PAUSED\",\n \"RESUMING\",\n \"TERMINATING\",\n \"TERMINATED\",\n \"FAILED\",\n]);\n\nconst sandboxResourcesSchema = z\n .object({\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n })\n .strict();\n\nexport const sandboxResourceSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema,\n status: sandboxStatusSchema,\n vpcId: canonicalUuidSchema,\n imageRef: z.string().min(1),\n resources: sandboxResourcesSchema,\n createdAt: timestampSchema,\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst wireSandboxResourceSchema = sandboxResourceSchema\n .omit({ resources: true, startedAt: true, endedAt: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n startedAt: timestampSchema.nullish(),\n endedAt: timestampSchema.nullish(),\n error: z.string().min(1).nullish(),\n })\n .strip();\n\nexport const sandboxRefSchema = sandboxResourceSchema\n .extend({\n kind: z.literal(\"inngest/sandbox\"),\n version: z.literal(1),\n })\n .strict();\n\nexport const sandboxSnapshotStatusSchema = z.enum([\n \"CREATING\",\n \"READY\",\n \"DELETING\",\n \"DELETED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxSnapshotResourceBaseSchema = z\n .object({\n id: canonicalUuidSchema,\n sourceImageId: z.string().min(1),\n status: sandboxSnapshotStatusSchema,\n compatibilityId: z.string().min(1).optional(),\n resources: sandboxResourcesSchema,\n memoryPackCount: z.number().int().nonnegative().max(0xffffffff),\n diskPackCount: z.number().int().nonnegative().max(0xffffffff),\n storedBytes: z.number().int().nonnegative().safe(),\n createdAt: timestampSchema,\n updatedAt: timestampSchema,\n expiresAt: timestampSchema,\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst validateSandboxSnapshotResource = (\n snapshot: {\n status: z.infer<typeof sandboxSnapshotStatusSchema>;\n compatibilityId?: string;\n sourceImageId: string;\n },\n ctx: z.RefinementCtx,\n): void => {\n if (snapshot.status === \"READY\" && snapshot.compatibilityId === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"compatibilityId is required for READY snapshots\",\n path: [\"compatibilityId\"],\n });\n }\n if (\n snapshot.status === \"READY\" &&\n !/^[a-f0-9]{64}$/.test(snapshot.sourceImageId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Source image ID must be a lowercase SHA-256 for READY snapshots\",\n path: [\"sourceImageId\"],\n });\n }\n};\n\nexport const sandboxSnapshotResourceSchema =\n sandboxSnapshotResourceBaseSchema.superRefine(\n validateSandboxSnapshotResource,\n );\n\nconst wireSandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema\n .omit({ resources: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n memoryPackCount: wireUint32Schema,\n diskPackCount: wireUint32Schema,\n storedBytes: wireUint64Schema,\n error: z.string().min(1).nullish(),\n })\n .strip()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxSnapshotRefSchema = sandboxSnapshotResourceBaseSchema\n .extend({\n kind: z.literal(\"inngest/sandbox.snapshot\"),\n version: z.literal(1),\n })\n .strict()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxProcessStateSchema = z.enum([\n \"STARTING\",\n \"RUNNING\",\n \"EXITED\",\n \"KILLED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxProcessResourceShape = {\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n};\n\nconst validateSandboxProcessResource = (\n process: z.infer<z.ZodObject<typeof sandboxProcessResourceShape>>,\n ctx: z.RefinementCtx,\n): void => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n};\n\nexport const sandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strict()\n .superRefine(validateSandboxProcessResource);\n\nconst wireSandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strip()\n .superRefine(validateSandboxProcessResource);\n\nexport const sandboxProcessRefSchema = z\n .object({\n kind: z.literal(\"inngest/sandbox.process\"),\n version: z.literal(1),\n sandboxId: canonicalUuidSchema,\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n })\n .strict()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n });\n\nconst outputChunkShape = {\n stream: z.enum([\"STDOUT\", \"STDERR\"]),\n data: z.string(),\n encoding: z.literal(\"base64\"),\n at: timestampSchema.optional(),\n};\n\nexport const wireOutputChunkSchema = z.object(outputChunkShape).strict();\nexport const restOutputChunkSchema = z\n .object({ ...outputChunkShape, data: z.string().default(\"\") })\n .strip();\n\nconst formatValidationError = (context: string, error: z.ZodError): string => {\n const issue = error.issues[0];\n const path = issue?.path.length ? ` at ${issue.path.join(\".\")}` : \"\";\n return `Invalid ${context}${path}: ${issue?.message ?? \"validation failed\"}`;\n};\n\nexport const parseWithSchema = <T, Input = T>(\n schema: z.ZodType<T, z.ZodTypeDef, Input>,\n value: unknown,\n context: string,\n): T => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) {\n throw new SandboxValidationError(\n formatValidationError(context, parsed.error),\n { cause: parsed.error },\n );\n }\n return parsed.data;\n};\n\nexport const sandboxRefFromResource = (value: unknown): SandboxRef => {\n const resource = parseWithSchema(\n wireSandboxResourceSchema,\n value,\n \"sandbox resource\",\n );\n return {\n kind: \"inngest/sandbox\",\n version: 1,\n id: resource.id,\n name: resource.name,\n status: resource.status,\n vpcId: resource.vpcId,\n imageRef: resource.imageRef,\n resources: resource.resources,\n createdAt: resource.createdAt,\n ...(resource.startedAt != null && { startedAt: resource.startedAt }),\n ...(resource.endedAt != null && { endedAt: resource.endedAt }),\n ...(resource.error != null && { error: resource.error }),\n };\n};\n\nexport const sandboxProcessRefFromResource = (\n sandboxId: string,\n value: unknown,\n): SandboxProcessRef =>\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n kind: \"inngest/sandbox.process\",\n version: 1,\n sandboxId,\n ...parseWithSchema(\n wireSandboxProcessResourceSchema,\n value,\n \"sandbox process resource\",\n ),\n },\n \"sandbox process reference\",\n );\n\nexport const sandboxSnapshotRefFromResource = (\n value: unknown,\n): SandboxSnapshotRef => {\n const resource = parseWithSchema(\n wireSandboxSnapshotResourceSchema,\n value,\n \"sandbox snapshot resource\",\n );\n const { error, ...base } = resource;\n return {\n kind: \"inngest/sandbox.snapshot\",\n version: 1,\n ...base,\n ...(error != null && { error }),\n };\n};\n\nexport const normalizeSandboxCreateOptions = (\n options: SandboxCreateOptions,\n): Omit<SandboxCreateOptions, \"runningTimeout\"> & {\n runningTimeoutMs: number | false;\n} => {\n const parsed = parseWithSchema(\n z.union([\n z\n .object({\n name: sandboxNameSchema,\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n environment: z.record(z.string()).optional(),\n secrets: z.array(sandboxSecretNameSchema).optional(),\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n z\n .object({\n name: sandboxNameSchema,\n snapshotId: canonicalUuidSchema,\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n ]),\n options,\n \"sandbox create options\",\n );\n if (\"vcpu\" in parsed) {\n const environment = { ...parsed.environment };\n const selected = new Set<string>();\n for (const name of parsed.secrets ?? []) {\n if (Object.hasOwn(parsed.environment ?? {}, name)) {\n throw new SandboxValidationError(\n \"secrets must not overlap with environment\",\n );\n }\n if (selected.has(name)) {\n throw new SandboxValidationError(\n \"secrets must not contain duplicate names\",\n );\n }\n selected.add(name);\n Object.defineProperty(environment, name, { value: \"\", enumerable: true });\n }\n validateSandboxEnvironment(environment);\n }\n const { runningTimeout, ...create } = parsed;\n return {\n ...create,\n runningTimeoutMs:\n runningTimeout === false\n ? false\n : normalizeDurationMs(\n runningTimeout ?? defaultSandboxRunningTimeoutMs,\n maxSandboxRunningTimeoutMs,\n \"runningTimeout\",\n ),\n };\n};\n\nexport const normalizeSandboxWaitUntilRunningOptions = (\n options: SandboxWaitUntilRunningOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox waitUntilRunning options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout,\n maxSandboxRunningTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxListOptions = (\n options: SandboxListOptions = {},\n): Required<Pick<SandboxListOptions, \"limit\">> &\n Pick<SandboxListOptions, \"cursor\"> => {\n const parsed = parseWithSchema(\n z\n .object({\n cursor: z.string().min(1).optional(),\n limit: z.number().int().min(1).max(250).optional(),\n })\n .strict(),\n options,\n \"sandbox list options\",\n );\n return { ...parsed, limit: parsed.limit ?? 50 };\n};\n\nexport const normalizeSandboxProcessListOptions = normalizeSandboxListOptions;\n\ntype SandboxProcessSpecOptions = SandboxCommandOptions & {\n command: SandboxCommand;\n};\n\nexport const normalizeSandboxSnapshotListOptions = (\n options: SandboxSnapshotListOptions = {},\n) => normalizeSandboxListOptions(options);\n\nexport const normalizeSandboxSnapshotCreateOptions = (\n options: SandboxSnapshotCreateOptions = {},\n): SandboxSnapshotCreateOptions =>\n parseWithSchema(\n z.object({}).strict(),\n options,\n \"sandbox snapshot create options\",\n );\n\nexport const normalizeSandboxSnapshotWaitOptions = (\n options: SandboxSnapshotWaitOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox snapshot waitUntilReady options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout as SandboxDuration,\n maxSandboxSnapshotWaitTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst normalizeProcessSpec = <\n T extends SandboxProcessSpecOptions | SandboxProcessStartOptions,\n>(\n options: T,\n includeTimeout: boolean,\n): Omit<T, \"command\"> & { command: string[] } => {\n const parsed = parseWithSchema(\n z\n .object({\n command: z.union([\n z.string().min(1, \"command must not be empty\"),\n z.array(z.string()).min(1).max(maxProcessArgvCount),\n ]),\n environment: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n ...(includeTimeout && { timeout: z.unknown().optional() }),\n })\n .strict(),\n options,\n \"sandbox command options\",\n ) as unknown as T;\n\n if (Array.isArray(parsed.command) && !parsed.command[0]) {\n throw new SandboxValidationError(\"command[0] must not be empty\");\n }\n const argv =\n typeof parsed.command === \"string\"\n ? [\"/bin/sh\", \"-c\", parsed.command]\n : parsed.command;\n let argvBytes = 0;\n argv.forEach((argument, index) => {\n const context =\n typeof parsed.command === \"string\" ? \"command\" : `command[${index}]`;\n assertNoNul(argument, context);\n assertValidUnicode(argument, context);\n argvBytes += textEncoder.encode(argument).byteLength;\n });\n if (argvBytes > maxProcessArgvBytes) {\n throw new SandboxValidationError(\n `command must not exceed ${maxProcessArgvBytes} bytes`,\n );\n }\n\n const entries = validateSandboxEnvironment(parsed.environment);\n\n if (parsed.cwd !== undefined) {\n assertNoNul(parsed.cwd, \"cwd\");\n assertValidUnicode(parsed.cwd, \"cwd\");\n if (textEncoder.encode(parsed.cwd).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `cwd must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n }\n\n const wireBytes = goJSONBytes({\n argv,\n ...(entries.length > 0 && { env: parsed.environment }),\n ...(parsed.cwd !== undefined && parsed.cwd !== \"\" && { cwd: parsed.cwd }),\n });\n if (wireBytes > maxProcessWireBytes) {\n throw new SandboxValidationError(\n `command, environment, and cwd must not exceed ${maxProcessWireBytes} encoded bytes`,\n );\n }\n return {\n ...parsed,\n command: [...argv],\n } as Omit<T, \"command\"> & { command: string[] };\n};\n\nexport const normalizeSandboxCommandOptions = (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n): SandboxCommandOptions & { command: string[]; timeoutMs: number } => {\n const parsed = normalizeProcessSpec({ ...options, command }, true);\n return {\n ...parsed,\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessStartOptions = (\n options: SandboxProcessStartOptions,\n): Omit<SandboxProcessStartOptions, \"command\"> & { command: string[] } =>\n normalizeProcessSpec(options, false);\n\nexport const normalizeSandboxProcessSignalOptions = (\n options: SandboxProcessSignalOptions,\n): Required<SandboxProcessSignalOptions> => {\n const parsed = parseWithSchema(\n z\n .object({\n signal: z.number().int().min(1).max(64),\n includeChildren: z.boolean().optional(),\n })\n .strict(),\n options,\n \"sandbox process signal options\",\n );\n return {\n signal: parsed.signal,\n includeChildren: parsed.includeChildren ?? true,\n };\n};\n\nexport const normalizeSandboxProcessWaitOptions = (\n options: SandboxProcessWaitOptions = {},\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown().optional() }).strict(),\n options,\n \"sandbox process wait options\",\n );\n return {\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessOutputOptions = (\n options: SandboxProcessOutputOptions = {},\n): { tailBytes: number } => {\n const parsed = parseWithSchema(\n z\n .object({\n tailBytes: z\n .number()\n .int()\n .min(0)\n .max(maxSandboxProcessTailBytes)\n .optional(),\n })\n .strict(),\n options,\n \"sandbox process output options\",\n );\n return { tailBytes: parsed.tailBytes ?? 0 };\n};\n\nexport const normalizeDurationMs = (\n duration: unknown,\n maximumMs: number,\n context: string,\n): number => {\n let milliseconds: number | undefined;\n if (typeof duration === \"number\") {\n milliseconds = duration;\n } else if (typeof duration === \"string\") {\n milliseconds = ms(duration as StringValue);\n } else if (isTemporalDuration(duration)) {\n if (duration.years || duration.months || duration.weeks) {\n throw new SandboxValidationError(\n `${context} cannot contain calendar years, months, or weeks`,\n );\n }\n milliseconds = duration.total({ unit: \"milliseconds\" });\n }\n if (\n typeof milliseconds !== \"number\" ||\n !Number.isFinite(milliseconds) ||\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0\n ) {\n throw new SandboxValidationError(\n `${context} must be a positive, whole number of milliseconds`,\n );\n }\n if (milliseconds > maximumMs) {\n throw new SandboxValidationError(\n `${context} must not exceed ${maximumMs} milliseconds`,\n );\n }\n return milliseconds;\n};\n\nexport const normalizeFileUploadOptions = (\n options: SandboxFileUploadOptions,\n): SandboxFileUploadOptions => {\n const parsed = parseWithSchema(\n z\n .object({\n path: z.string().min(1),\n data: z.unknown(),\n mode: z.number().int().min(1).max(0o777).optional(),\n })\n .strict(),\n options,\n \"sandbox file upload options\",\n );\n validateFilePath(parsed.path);\n return parsed as SandboxFileUploadOptions;\n};\n\nexport const normalizeFileDownloadOptions = (\n options: SandboxFileDownloadOptions,\n): SandboxFileDownloadOptions => {\n const parsed = parseWithSchema(\n z.object({ path: z.string().min(1) }).strict(),\n options,\n \"sandbox file download options\",\n );\n validateFilePath(parsed.path);\n return parsed;\n};\n\nconst validateFilePath = (path: string): void => {\n assertNoNul(path, \"path\");\n if (!path.startsWith(\"/\")) {\n throw new SandboxValidationError(\"path must be absolute\");\n }\n if (textEncoder.encode(path).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `path must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n};\n\nexport const decodeBase64 = (value: string, context: string): Uint8Array => {\n if (\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n value,\n )\n ) {\n throw new SandboxValidationError(`${context} is not valid base64`);\n }\n try {\n const binary = globalThis.atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n } catch (error) {\n throw new SandboxValidationError(`${context} is not valid base64`, {\n cause: error,\n });\n }\n};\n\nexport const decodeUtf8 = (value: Uint8Array): string =>\n new TextDecoder(\"utf-8\", { fatal: false }).decode(value);\n\nexport const encodeBase64 = (value: Uint8Array): string => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < value.length; offset += chunkSize) {\n binary += String.fromCharCode(\n ...value.subarray(offset, offset + chunkSize),\n );\n }\n return globalThis.btoa(binary);\n};\n\nexport const decodeOutputChunk = (value: unknown): SandboxOutputChunk => {\n const chunk = parseWithSchema(\n restOutputChunkSchema,\n value,\n \"sandbox output chunk\",\n );\n return {\n stream: chunk.stream,\n data: decodeBase64(chunk.data, \"sandbox output data\"),\n ...(chunk.at !== undefined && { at: chunk.at }),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.cjs","names":["z","SandboxValidationError","milliseconds: number | undefined","isTemporalDuration"],"sources":["../../../src/components/sandbox/validation.ts"],"sourcesContent":["import ms, { type StringValue } from \"ms\";\nimport { z } from \"zod/v3\";\n\nimport { isTemporalDuration } from \"../../helpers/temporal.ts\";\nimport {\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCreateOptions,\n type SandboxDuration,\n type SandboxFileDownloadOptions,\n type SandboxFileUploadOptions,\n type SandboxListOptions,\n type SandboxOutputChunk,\n type SandboxProcessOutputOptions,\n type SandboxProcessRef,\n type SandboxProcessSignalOptions,\n type SandboxProcessStartOptions,\n type SandboxProcessWaitOptions,\n type SandboxRef,\n type SandboxSnapshotCreateOptions,\n type SandboxSnapshotListOptions,\n type SandboxSnapshotRef,\n type SandboxSnapshotWaitOptions,\n SandboxValidationError,\n type SandboxWaitUntilRunningOptions,\n} from \"./types.ts\";\n\nexport const maxSandboxProcessTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxProcessTimeoutMs = 30 * 1_000;\nexport const maxSandboxRunningTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxRunningTimeoutMs = 120 * 1_000;\nexport const maxSandboxSnapshotWaitTimeoutMs = 5 * 60 * 1_000;\nexport const maxSandboxProcessTailBytes = 512 * 1_024;\n\nconst maxProcessArgvCount = 128;\nconst maxProcessArgvBytes = 32 * 1_024;\nconst maxProcessEnvCount = 256;\nconst maxProcessEnvBytes = 64 * 1_024;\nconst maxProcessCwdBytes = 4_096;\nconst maxProcessWireBytes = 96 * 1_024;\nconst maxSandboxNameCharacters = 255;\nconst sandboxNameControlCharacterPattern = /\\p{Cc}/u;\nconst sandboxNameEdgeWhitespacePattern = /^\\p{White_Space}|\\p{White_Space}$/u;\nconst textEncoder = new TextEncoder();\n\nexport const sandboxSecretNameSchema = z.string().superRefine((name, ctx) => {\n if (\n name.length === 0 ||\n textEncoder.encode(name).byteLength > 256 ||\n sandboxNameEdgeWhitespacePattern.test(name) ||\n /[\\r\\n\\0]/u.test(name)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"must be a nonempty workspace secret name of at most 256 bytes without leading/trailing whitespace, CR, LF, or NUL\",\n });\n }\n});\n\nexport const sandboxNameSchema = z.string().superRefine((name, ctx) => {\n if (name.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not be empty\",\n });\n } else if ([...name].length > maxSandboxNameCharacters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `must not exceed ${maxSandboxNameCharacters} characters`,\n });\n }\n if (sandboxNameEdgeWhitespacePattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain leading or trailing whitespace\",\n });\n }\n if (sandboxNameControlCharacterPattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain control characters\",\n });\n }\n});\n\nconst goJSONBytes = (value: unknown): number => {\n // encoding/json escapes these runes by default. Simcity measures the\n // marshalled ProcessSpec, so mirror Go rather than JSON.stringify exactly.\n const encoded = JSON.stringify(value).replace(\n /[<>&\\u2028\\u2029]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`,\n );\n return textEncoder.encode(encoded).byteLength;\n};\n\nconst assertNoNul = (value: string, context: string): void => {\n if (value.includes(\"\\0\")) {\n throw new SandboxValidationError(`${context} must not contain NUL`);\n }\n};\n\nconst assertValidUnicode = (value: string, context: string): void => {\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next < 0xdc00 || next > 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n index++;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n }\n};\n\nconst validateSandboxEnvironment = (\n environment: Record<string, string> | undefined,\n): Array<[string, string]> => {\n const entries = Object.entries(environment ?? {});\n if (entries.length > maxProcessEnvCount) {\n throw new SandboxValidationError(\n `environment must not contain more than ${maxProcessEnvCount} entries`,\n );\n }\n let environmentBytes = 0;\n for (const [key, value] of entries) {\n if (!key || key.includes(\"=\")) {\n throw new SandboxValidationError(\n \"environment keys must be nonempty and must not contain '='\",\n );\n }\n assertNoNul(key, `environment key ${key}`);\n assertNoNul(value, `environment.${key}`);\n assertValidUnicode(key, `environment key ${key}`);\n assertValidUnicode(value, `environment.${key}`);\n environmentBytes +=\n textEncoder.encode(key).byteLength +\n 1 +\n textEncoder.encode(value).byteLength;\n }\n if (environmentBytes > maxProcessEnvBytes) {\n throw new SandboxValidationError(\n `environment must not exceed ${maxProcessEnvBytes} bytes`,\n );\n }\n return entries;\n};\n\nexport const canonicalUuidSchema = z\n .string()\n .regex(\n /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/,\n \"must be a canonical lowercase UUID\",\n )\n .refine((value) => value !== \"00000000-0000-0000-0000-000000000000\", {\n message: \"must not be the nil UUID\",\n });\n\nconst timestampSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n \"must be an RFC3339 timestamp\",\n )\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: \"must be an RFC3339 timestamp\",\n });\n\n// Sandbox REST responses may use proto3 JSON, which omits zero values and\n// encodes 64-bit integers as decimal strings.\nconst wireUint32Schema = z\n .number()\n .int()\n .nonnegative()\n .max(0xffffffff)\n .default(0);\nconst wireUint64Schema = z\n .union([z.number(), z.string().regex(/^\\d+$/).transform(Number)])\n .pipe(z.number().int().nonnegative().safe())\n .default(0);\n\nexport const sandboxStatusSchema = z.enum([\n \"PENDING\",\n \"STARTING\",\n \"PAUSING\",\n \"RUNNING\",\n \"PAUSED\",\n \"RESUMING\",\n \"TERMINATING\",\n \"TERMINATED\",\n \"FAILED\",\n]);\n\nconst sandboxResourcesSchema = z\n .object({\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n })\n .strict();\n\nexport const sandboxResourceSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema,\n status: sandboxStatusSchema,\n vpcId: canonicalUuidSchema,\n imageRef: z.string().min(1),\n resources: sandboxResourcesSchema,\n createdAt: timestampSchema,\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst wireSandboxResourceSchema = sandboxResourceSchema\n .omit({ resources: true, startedAt: true, endedAt: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n startedAt: timestampSchema.nullish(),\n endedAt: timestampSchema.nullish(),\n error: z.string().min(1).nullish(),\n })\n .strip();\n\nexport const sandboxRefSchema = sandboxResourceSchema\n .extend({\n kind: z.literal(\"inngest/sandbox\"),\n version: z.literal(1),\n })\n .strict();\n\nexport const sandboxSnapshotStatusSchema = z.enum([\n \"CREATING\",\n \"READY\",\n \"DELETING\",\n \"DELETED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxSnapshotResourceBaseSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema.optional(),\n sourceImageId: z.string().min(1),\n status: sandboxSnapshotStatusSchema,\n compatibilityId: z.string().min(1).optional(),\n resources: sandboxResourcesSchema,\n memoryPackCount: z.number().int().nonnegative().max(0xffffffff),\n diskPackCount: z.number().int().nonnegative().max(0xffffffff),\n storedBytes: z.number().int().nonnegative().safe(),\n createdAt: timestampSchema,\n updatedAt: timestampSchema,\n expiresAt: timestampSchema,\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst validateSandboxSnapshotResource = (\n snapshot: {\n status: z.infer<typeof sandboxSnapshotStatusSchema>;\n compatibilityId?: string;\n sourceImageId: string;\n },\n ctx: z.RefinementCtx,\n): void => {\n if (snapshot.status === \"READY\" && snapshot.compatibilityId === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"compatibilityId is required for READY snapshots\",\n path: [\"compatibilityId\"],\n });\n }\n if (\n snapshot.status === \"READY\" &&\n !/^[a-f0-9]{64}$/.test(snapshot.sourceImageId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Source image ID must be a lowercase SHA-256 for READY snapshots\",\n path: [\"sourceImageId\"],\n });\n }\n};\n\nexport const sandboxSnapshotResourceSchema =\n sandboxSnapshotResourceBaseSchema.superRefine(\n validateSandboxSnapshotResource,\n );\n\nconst wireSandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema\n .omit({ name: true, resources: true, error: true })\n .extend({\n // Unnamed snapshots may omit the name, send null, or send \"\".\n name: z.union([z.literal(\"\"), sandboxNameSchema]).nullish(),\n resources: sandboxResourcesSchema.strip(),\n memoryPackCount: wireUint32Schema,\n diskPackCount: wireUint32Schema,\n storedBytes: wireUint64Schema,\n error: z.string().min(1).nullish(),\n })\n .strip()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxSnapshotRefSchema = sandboxSnapshotResourceBaseSchema\n .extend({\n kind: z.literal(\"inngest/sandbox.snapshot\"),\n version: z.literal(1),\n })\n .strict()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxProcessStateSchema = z.enum([\n \"STARTING\",\n \"RUNNING\",\n \"EXITED\",\n \"KILLED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxProcessResourceShape = {\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n};\n\nconst validateSandboxProcessResource = (\n process: z.infer<z.ZodObject<typeof sandboxProcessResourceShape>>,\n ctx: z.RefinementCtx,\n): void => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n};\n\nexport const sandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strict()\n .superRefine(validateSandboxProcessResource);\n\nconst wireSandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strip()\n .superRefine(validateSandboxProcessResource);\n\nexport const sandboxProcessRefSchema = z\n .object({\n kind: z.literal(\"inngest/sandbox.process\"),\n version: z.literal(1),\n sandboxId: canonicalUuidSchema,\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n })\n .strict()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n });\n\nconst outputChunkShape = {\n stream: z.enum([\"STDOUT\", \"STDERR\"]),\n data: z.string(),\n encoding: z.literal(\"base64\"),\n at: timestampSchema.optional(),\n};\n\nexport const wireOutputChunkSchema = z.object(outputChunkShape).strict();\nexport const restOutputChunkSchema = z\n .object({ ...outputChunkShape, data: z.string().default(\"\") })\n .strip();\n\nconst formatValidationError = (context: string, error: z.ZodError): string => {\n const issue = error.issues[0];\n const path = issue?.path.length ? ` at ${issue.path.join(\".\")}` : \"\";\n return `Invalid ${context}${path}: ${issue?.message ?? \"validation failed\"}`;\n};\n\nexport const parseWithSchema = <T, Input = T>(\n schema: z.ZodType<T, z.ZodTypeDef, Input>,\n value: unknown,\n context: string,\n): T => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) {\n throw new SandboxValidationError(\n formatValidationError(context, parsed.error),\n { cause: parsed.error },\n );\n }\n return parsed.data;\n};\n\nexport const sandboxRefFromResource = (value: unknown): SandboxRef => {\n const resource = parseWithSchema(\n wireSandboxResourceSchema,\n value,\n \"sandbox resource\",\n );\n return {\n kind: \"inngest/sandbox\",\n version: 1,\n id: resource.id,\n name: resource.name,\n status: resource.status,\n vpcId: resource.vpcId,\n imageRef: resource.imageRef,\n resources: resource.resources,\n createdAt: resource.createdAt,\n ...(resource.startedAt != null && { startedAt: resource.startedAt }),\n ...(resource.endedAt != null && { endedAt: resource.endedAt }),\n ...(resource.error != null && { error: resource.error }),\n };\n};\n\nexport const sandboxProcessRefFromResource = (\n sandboxId: string,\n value: unknown,\n): SandboxProcessRef =>\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n kind: \"inngest/sandbox.process\",\n version: 1,\n sandboxId,\n ...parseWithSchema(\n wireSandboxProcessResourceSchema,\n value,\n \"sandbox process resource\",\n ),\n },\n \"sandbox process reference\",\n );\n\nexport const sandboxSnapshotRefFromResource = (\n value: unknown,\n): SandboxSnapshotRef => {\n const resource = parseWithSchema(\n wireSandboxSnapshotResourceSchema,\n value,\n \"sandbox snapshot resource\",\n );\n const { name, error, ...base } = resource;\n return {\n kind: \"inngest/sandbox.snapshot\",\n version: 1,\n ...base,\n ...(name && { name }),\n ...(error != null && { error }),\n };\n};\n\nexport const normalizeSandboxCreateOptions = (\n options: SandboxCreateOptions,\n): Omit<SandboxCreateOptions, \"runningTimeout\"> & {\n runningTimeoutMs: number | false;\n} => {\n const parsed = parseWithSchema(\n z.union([\n z\n .object({\n name: sandboxNameSchema,\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n environment: z.record(z.string()).optional(),\n secrets: z.array(sandboxSecretNameSchema).optional(),\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n z\n .object({\n name: sandboxNameSchema,\n snapshotId: canonicalUuidSchema,\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n ]),\n options,\n \"sandbox create options\",\n );\n if (\"vcpu\" in parsed) {\n const environment = { ...parsed.environment };\n const selected = new Set<string>();\n for (const name of parsed.secrets ?? []) {\n if (Object.hasOwn(parsed.environment ?? {}, name)) {\n throw new SandboxValidationError(\n \"secrets must not overlap with environment\",\n );\n }\n if (selected.has(name)) {\n throw new SandboxValidationError(\n \"secrets must not contain duplicate names\",\n );\n }\n selected.add(name);\n Object.defineProperty(environment, name, { value: \"\", enumerable: true });\n }\n validateSandboxEnvironment(environment);\n }\n const { runningTimeout, ...create } = parsed;\n return {\n ...create,\n runningTimeoutMs:\n runningTimeout === false\n ? false\n : normalizeDurationMs(\n runningTimeout ?? defaultSandboxRunningTimeoutMs,\n maxSandboxRunningTimeoutMs,\n \"runningTimeout\",\n ),\n };\n};\n\nexport const normalizeSandboxWaitUntilRunningOptions = (\n options: SandboxWaitUntilRunningOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox waitUntilRunning options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout,\n maxSandboxRunningTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst sandboxListOptionsSchema = z\n .object({\n cursor: z.string().min(1).optional(),\n limit: z.number().int().min(1).max(250).optional(),\n })\n .strict();\n\nexport const normalizeSandboxListOptions = (\n options: SandboxListOptions = {},\n): Required<Pick<SandboxListOptions, \"limit\">> &\n Pick<SandboxListOptions, \"cursor\"> => {\n const parsed = parseWithSchema(\n sandboxListOptionsSchema,\n options,\n \"sandbox list options\",\n );\n return { ...parsed, limit: parsed.limit ?? 50 };\n};\n\nexport const normalizeSandboxProcessListOptions = normalizeSandboxListOptions;\n\ntype SandboxProcessSpecOptions = SandboxCommandOptions & {\n command: SandboxCommand;\n};\n\nexport const sandboxSnapshotCreateOptionsSchema = z\n .object({ name: sandboxNameSchema.optional() })\n .strict();\n\nexport const normalizeSandboxSnapshotListOptions = (\n options: SandboxSnapshotListOptions = {},\n): Required<Pick<SandboxSnapshotListOptions, \"limit\">> &\n Pick<SandboxSnapshotListOptions, \"cursor\" | \"name\"> => {\n const { name, ...list } = parseWithSchema(\n sandboxListOptionsSchema\n .extend({ name: sandboxNameSchema.optional() })\n .strict(),\n options,\n \"sandbox snapshot list options\",\n );\n\n return {\n ...normalizeSandboxListOptions(list),\n ...(name !== undefined && { name }),\n };\n};\n\nexport const normalizeSandboxSnapshotCreateOptions = (\n options: SandboxSnapshotCreateOptions = {},\n): SandboxSnapshotCreateOptions =>\n parseWithSchema(\n sandboxSnapshotCreateOptionsSchema,\n options,\n \"sandbox snapshot create options\",\n );\n\nexport const normalizeSandboxSnapshotWaitOptions = (\n options: SandboxSnapshotWaitOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox snapshot waitUntilReady options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout as SandboxDuration,\n maxSandboxSnapshotWaitTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst normalizeProcessSpec = <\n T extends SandboxProcessSpecOptions | SandboxProcessStartOptions,\n>(\n options: T,\n includeTimeout: boolean,\n): Omit<T, \"command\"> & { command: string[] } => {\n const parsed = parseWithSchema(\n z\n .object({\n command: z.union([\n z.string().min(1, \"command must not be empty\"),\n z.array(z.string()).min(1).max(maxProcessArgvCount),\n ]),\n environment: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n ...(includeTimeout && { timeout: z.unknown().optional() }),\n })\n .strict(),\n options,\n \"sandbox command options\",\n ) as unknown as T;\n\n if (Array.isArray(parsed.command) && !parsed.command[0]) {\n throw new SandboxValidationError(\"command[0] must not be empty\");\n }\n const argv =\n typeof parsed.command === \"string\"\n ? [\"/bin/sh\", \"-c\", parsed.command]\n : parsed.command;\n let argvBytes = 0;\n argv.forEach((argument, index) => {\n const context =\n typeof parsed.command === \"string\" ? \"command\" : `command[${index}]`;\n assertNoNul(argument, context);\n assertValidUnicode(argument, context);\n argvBytes += textEncoder.encode(argument).byteLength;\n });\n if (argvBytes > maxProcessArgvBytes) {\n throw new SandboxValidationError(\n `command must not exceed ${maxProcessArgvBytes} bytes`,\n );\n }\n\n const entries = validateSandboxEnvironment(parsed.environment);\n\n if (parsed.cwd !== undefined) {\n assertNoNul(parsed.cwd, \"cwd\");\n assertValidUnicode(parsed.cwd, \"cwd\");\n if (textEncoder.encode(parsed.cwd).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `cwd must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n }\n\n const wireBytes = goJSONBytes({\n argv,\n ...(entries.length > 0 && { env: parsed.environment }),\n ...(parsed.cwd !== undefined && parsed.cwd !== \"\" && { cwd: parsed.cwd }),\n });\n if (wireBytes > maxProcessWireBytes) {\n throw new SandboxValidationError(\n `command, environment, and cwd must not exceed ${maxProcessWireBytes} encoded bytes`,\n );\n }\n return {\n ...parsed,\n command: [...argv],\n } as Omit<T, \"command\"> & { command: string[] };\n};\n\nexport const normalizeSandboxCommandOptions = (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n): SandboxCommandOptions & { command: string[]; timeoutMs: number } => {\n const parsed = normalizeProcessSpec({ ...options, command }, true);\n return {\n ...parsed,\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessStartOptions = (\n options: SandboxProcessStartOptions,\n): Omit<SandboxProcessStartOptions, \"command\"> & { command: string[] } =>\n normalizeProcessSpec(options, false);\n\nexport const normalizeSandboxProcessSignalOptions = (\n options: SandboxProcessSignalOptions,\n): Required<SandboxProcessSignalOptions> => {\n const parsed = parseWithSchema(\n z\n .object({\n signal: z.number().int().min(1).max(64),\n includeChildren: z.boolean().optional(),\n })\n .strict(),\n options,\n \"sandbox process signal options\",\n );\n return {\n signal: parsed.signal,\n includeChildren: parsed.includeChildren ?? true,\n };\n};\n\nexport const normalizeSandboxProcessWaitOptions = (\n options: SandboxProcessWaitOptions = {},\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown().optional() }).strict(),\n options,\n \"sandbox process wait options\",\n );\n return {\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessOutputOptions = (\n options: SandboxProcessOutputOptions = {},\n): { tailBytes: number } => {\n const parsed = parseWithSchema(\n z\n .object({\n tailBytes: z\n .number()\n .int()\n .min(0)\n .max(maxSandboxProcessTailBytes)\n .optional(),\n })\n .strict(),\n options,\n \"sandbox process output options\",\n );\n return { tailBytes: parsed.tailBytes ?? 0 };\n};\n\nexport const normalizeDurationMs = (\n duration: unknown,\n maximumMs: number,\n context: string,\n): number => {\n let milliseconds: number | undefined;\n if (typeof duration === \"number\") {\n milliseconds = duration;\n } else if (typeof duration === \"string\") {\n milliseconds = ms(duration as StringValue);\n } else if (isTemporalDuration(duration)) {\n if (duration.years || duration.months || duration.weeks) {\n throw new SandboxValidationError(\n `${context} cannot contain calendar years, months, or weeks`,\n );\n }\n milliseconds = duration.total({ unit: \"milliseconds\" });\n }\n if (\n typeof milliseconds !== \"number\" ||\n !Number.isFinite(milliseconds) ||\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0\n ) {\n throw new SandboxValidationError(\n `${context} must be a positive, whole number of milliseconds`,\n );\n }\n if (milliseconds > maximumMs) {\n throw new SandboxValidationError(\n `${context} must not exceed ${maximumMs} milliseconds`,\n );\n }\n return milliseconds;\n};\n\nexport const normalizeFileUploadOptions = (\n options: SandboxFileUploadOptions,\n): SandboxFileUploadOptions => {\n const parsed = parseWithSchema(\n z\n .object({\n path: z.string().min(1),\n data: z.unknown(),\n mode: z.number().int().min(1).max(0o777).optional(),\n })\n .strict(),\n options,\n \"sandbox file upload options\",\n );\n validateFilePath(parsed.path);\n return parsed as SandboxFileUploadOptions;\n};\n\nexport const normalizeFileDownloadOptions = (\n options: SandboxFileDownloadOptions,\n): SandboxFileDownloadOptions => {\n const parsed = parseWithSchema(\n z.object({ path: z.string().min(1) }).strict(),\n options,\n \"sandbox file download options\",\n );\n validateFilePath(parsed.path);\n return parsed;\n};\n\nconst validateFilePath = (path: string): void => {\n assertNoNul(path, \"path\");\n if (!path.startsWith(\"/\")) {\n throw new SandboxValidationError(\"path must be absolute\");\n }\n if (textEncoder.encode(path).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `path must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n};\n\nexport const decodeBase64 = (value: string, context: string): Uint8Array => {\n if (\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n value,\n )\n ) {\n throw new SandboxValidationError(`${context} is not valid base64`);\n }\n try {\n const binary = globalThis.atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n } catch (error) {\n throw new SandboxValidationError(`${context} is not valid base64`, {\n cause: error,\n });\n }\n};\n\nexport const decodeUtf8 = (value: Uint8Array): string =>\n new TextDecoder(\"utf-8\", { fatal: false }).decode(value);\n\nexport const encodeBase64 = (value: Uint8Array): string => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < value.length; offset += chunkSize) {\n binary += String.fromCharCode(\n ...value.subarray(offset, offset + chunkSize),\n );\n }\n return globalThis.btoa(binary);\n};\n\nexport const decodeOutputChunk = (value: unknown): SandboxOutputChunk => {\n const chunk = parseWithSchema(\n restOutputChunkSchema,\n value,\n \"sandbox output chunk\",\n );\n return {\n stream: chunk.stream,\n data: decodeBase64(chunk.data, \"sandbox output data\"),\n ...(chunk.at !== undefined && { at: chunk.at }),\n };\n};\n"],"mappings":"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"}
|
|
@@ -132,6 +132,7 @@ const sandboxSnapshotStatusSchema = z.enum([
|
|
|
132
132
|
]);
|
|
133
133
|
const sandboxSnapshotResourceBaseSchema = z.object({
|
|
134
134
|
id: canonicalUuidSchema,
|
|
135
|
+
name: sandboxNameSchema.optional(),
|
|
135
136
|
sourceImageId: z.string().min(1),
|
|
136
137
|
status: sandboxSnapshotStatusSchema,
|
|
137
138
|
compatibilityId: z.string().min(1).optional(),
|
|
@@ -158,9 +159,11 @@ const validateSandboxSnapshotResource = (snapshot, ctx) => {
|
|
|
158
159
|
};
|
|
159
160
|
const sandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema.superRefine(validateSandboxSnapshotResource);
|
|
160
161
|
const wireSandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema.omit({
|
|
162
|
+
name: true,
|
|
161
163
|
resources: true,
|
|
162
164
|
error: true
|
|
163
165
|
}).extend({
|
|
166
|
+
name: z.union([z.literal(""), sandboxNameSchema]).nullish(),
|
|
164
167
|
resources: sandboxResourcesSchema.strip(),
|
|
165
168
|
memoryPackCount: wireUint32Schema,
|
|
166
169
|
diskPackCount: wireUint32Schema,
|
|
@@ -271,11 +274,12 @@ const sandboxProcessRefFromResource = (sandboxId, value) => parseWithSchema(sand
|
|
|
271
274
|
...parseWithSchema(wireSandboxProcessResourceSchema, value, "sandbox process resource")
|
|
272
275
|
}, "sandbox process reference");
|
|
273
276
|
const sandboxSnapshotRefFromResource = (value) => {
|
|
274
|
-
const { error, ...base } = parseWithSchema(wireSandboxSnapshotResourceSchema, value, "sandbox snapshot resource");
|
|
277
|
+
const { name, error, ...base } = parseWithSchema(wireSandboxSnapshotResourceSchema, value, "sandbox snapshot resource");
|
|
275
278
|
return {
|
|
276
279
|
kind: "inngest/sandbox.snapshot",
|
|
277
280
|
version: 1,
|
|
278
281
|
...base,
|
|
282
|
+
...name && { name },
|
|
279
283
|
...error != null && { error }
|
|
280
284
|
};
|
|
281
285
|
};
|
|
@@ -315,19 +319,27 @@ const normalizeSandboxCreateOptions = (options) => {
|
|
|
315
319
|
const normalizeSandboxWaitUntilRunningOptions = (options) => {
|
|
316
320
|
return { timeoutMs: normalizeDurationMs(parseWithSchema(z.object({ timeout: z.unknown() }).strict(), options, "sandbox waitUntilRunning options").timeout, maxSandboxRunningTimeoutMs, "timeout") };
|
|
317
321
|
};
|
|
322
|
+
const sandboxListOptionsSchema = z.object({
|
|
323
|
+
cursor: z.string().min(1).optional(),
|
|
324
|
+
limit: z.number().int().min(1).max(250).optional()
|
|
325
|
+
}).strict();
|
|
318
326
|
const normalizeSandboxListOptions = (options = {}) => {
|
|
319
|
-
const parsed = parseWithSchema(
|
|
320
|
-
cursor: z.string().min(1).optional(),
|
|
321
|
-
limit: z.number().int().min(1).max(250).optional()
|
|
322
|
-
}).strict(), options, "sandbox list options");
|
|
327
|
+
const parsed = parseWithSchema(sandboxListOptionsSchema, options, "sandbox list options");
|
|
323
328
|
return {
|
|
324
329
|
...parsed,
|
|
325
330
|
limit: parsed.limit ?? 50
|
|
326
331
|
};
|
|
327
332
|
};
|
|
328
333
|
const normalizeSandboxProcessListOptions = normalizeSandboxListOptions;
|
|
329
|
-
const
|
|
330
|
-
const
|
|
334
|
+
const sandboxSnapshotCreateOptionsSchema = z.object({ name: sandboxNameSchema.optional() }).strict();
|
|
335
|
+
const normalizeSandboxSnapshotListOptions = (options = {}) => {
|
|
336
|
+
const { name, ...list } = parseWithSchema(sandboxListOptionsSchema.extend({ name: sandboxNameSchema.optional() }).strict(), options, "sandbox snapshot list options");
|
|
337
|
+
return {
|
|
338
|
+
...normalizeSandboxListOptions(list),
|
|
339
|
+
...name !== void 0 && { name }
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
const normalizeSandboxSnapshotCreateOptions = (options = {}) => parseWithSchema(sandboxSnapshotCreateOptionsSchema, options, "sandbox snapshot create options");
|
|
331
343
|
const normalizeSandboxSnapshotWaitOptions = (options) => {
|
|
332
344
|
return { timeoutMs: normalizeDurationMs(parseWithSchema(z.object({ timeout: z.unknown() }).strict(), options, "sandbox snapshot waitUntilReady options").timeout, maxSandboxSnapshotWaitTimeoutMs, "timeout") };
|
|
333
345
|
};
|
|
@@ -455,5 +467,5 @@ const decodeOutputChunk = (value) => {
|
|
|
455
467
|
};
|
|
456
468
|
|
|
457
469
|
//#endregion
|
|
458
|
-
export { canonicalUuidSchema, decodeBase64, decodeOutputChunk, decodeUtf8, encodeBase64, normalizeFileDownloadOptions, normalizeFileUploadOptions, normalizeSandboxCommandOptions, normalizeSandboxCreateOptions, normalizeSandboxListOptions, normalizeSandboxProcessListOptions, normalizeSandboxProcessOutputOptions, normalizeSandboxProcessSignalOptions, normalizeSandboxProcessStartOptions, normalizeSandboxProcessWaitOptions, normalizeSandboxSnapshotCreateOptions, normalizeSandboxSnapshotListOptions, normalizeSandboxSnapshotWaitOptions, normalizeSandboxWaitUntilRunningOptions, parseWithSchema, restOutputChunkSchema, sandboxNameSchema, sandboxProcessRefFromResource, sandboxProcessRefSchema, sandboxRefFromResource, sandboxRefSchema, sandboxSecretNameSchema, sandboxSnapshotRefFromResource, sandboxSnapshotRefSchema, wireOutputChunkSchema };
|
|
470
|
+
export { canonicalUuidSchema, decodeBase64, decodeOutputChunk, decodeUtf8, encodeBase64, normalizeFileDownloadOptions, normalizeFileUploadOptions, normalizeSandboxCommandOptions, normalizeSandboxCreateOptions, normalizeSandboxListOptions, normalizeSandboxProcessListOptions, normalizeSandboxProcessOutputOptions, normalizeSandboxProcessSignalOptions, normalizeSandboxProcessStartOptions, normalizeSandboxProcessWaitOptions, normalizeSandboxSnapshotCreateOptions, normalizeSandboxSnapshotListOptions, normalizeSandboxSnapshotWaitOptions, normalizeSandboxWaitUntilRunningOptions, parseWithSchema, restOutputChunkSchema, sandboxNameSchema, sandboxProcessRefFromResource, sandboxProcessRefSchema, sandboxRefFromResource, sandboxRefSchema, sandboxSecretNameSchema, sandboxSnapshotCreateOptionsSchema, sandboxSnapshotRefFromResource, sandboxSnapshotRefSchema, wireOutputChunkSchema };
|
|
459
471
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":["milliseconds: number | undefined"],"sources":["../../../src/components/sandbox/validation.ts"],"sourcesContent":["import ms, { type StringValue } from \"ms\";\nimport { z } from \"zod/v3\";\n\nimport { isTemporalDuration } from \"../../helpers/temporal.ts\";\nimport {\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCreateOptions,\n type SandboxDuration,\n type SandboxFileDownloadOptions,\n type SandboxFileUploadOptions,\n type SandboxListOptions,\n type SandboxOutputChunk,\n type SandboxProcessOutputOptions,\n type SandboxProcessRef,\n type SandboxProcessSignalOptions,\n type SandboxProcessStartOptions,\n type SandboxProcessWaitOptions,\n type SandboxRef,\n type SandboxSnapshotCreateOptions,\n type SandboxSnapshotListOptions,\n type SandboxSnapshotRef,\n type SandboxSnapshotWaitOptions,\n SandboxValidationError,\n type SandboxWaitUntilRunningOptions,\n} from \"./types.ts\";\n\nexport const maxSandboxProcessTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxProcessTimeoutMs = 30 * 1_000;\nexport const maxSandboxRunningTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxRunningTimeoutMs = 120 * 1_000;\nexport const maxSandboxSnapshotWaitTimeoutMs = 5 * 60 * 1_000;\nexport const maxSandboxProcessTailBytes = 512 * 1_024;\n\nconst maxProcessArgvCount = 128;\nconst maxProcessArgvBytes = 32 * 1_024;\nconst maxProcessEnvCount = 256;\nconst maxProcessEnvBytes = 64 * 1_024;\nconst maxProcessCwdBytes = 4_096;\nconst maxProcessWireBytes = 96 * 1_024;\nconst maxSandboxNameCharacters = 255;\nconst sandboxNameControlCharacterPattern = /\\p{Cc}/u;\nconst sandboxNameEdgeWhitespacePattern = /^\\p{White_Space}|\\p{White_Space}$/u;\nconst textEncoder = new TextEncoder();\n\nexport const sandboxSecretNameSchema = z.string().superRefine((name, ctx) => {\n if (\n name.length === 0 ||\n textEncoder.encode(name).byteLength > 256 ||\n sandboxNameEdgeWhitespacePattern.test(name) ||\n /[\\r\\n\\0]/u.test(name)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"must be a nonempty workspace secret name of at most 256 bytes without leading/trailing whitespace, CR, LF, or NUL\",\n });\n }\n});\n\nexport const sandboxNameSchema = z.string().superRefine((name, ctx) => {\n if (name.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not be empty\",\n });\n } else if ([...name].length > maxSandboxNameCharacters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `must not exceed ${maxSandboxNameCharacters} characters`,\n });\n }\n if (sandboxNameEdgeWhitespacePattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain leading or trailing whitespace\",\n });\n }\n if (sandboxNameControlCharacterPattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain control characters\",\n });\n }\n});\n\nconst goJSONBytes = (value: unknown): number => {\n // encoding/json escapes these runes by default. Simcity measures the\n // marshalled ProcessSpec, so mirror Go rather than JSON.stringify exactly.\n const encoded = JSON.stringify(value).replace(\n /[<>&\\u2028\\u2029]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`,\n );\n return textEncoder.encode(encoded).byteLength;\n};\n\nconst assertNoNul = (value: string, context: string): void => {\n if (value.includes(\"\\0\")) {\n throw new SandboxValidationError(`${context} must not contain NUL`);\n }\n};\n\nconst assertValidUnicode = (value: string, context: string): void => {\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next < 0xdc00 || next > 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n index++;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n }\n};\n\nconst validateSandboxEnvironment = (\n environment: Record<string, string> | undefined,\n): Array<[string, string]> => {\n const entries = Object.entries(environment ?? {});\n if (entries.length > maxProcessEnvCount) {\n throw new SandboxValidationError(\n `environment must not contain more than ${maxProcessEnvCount} entries`,\n );\n }\n let environmentBytes = 0;\n for (const [key, value] of entries) {\n if (!key || key.includes(\"=\")) {\n throw new SandboxValidationError(\n \"environment keys must be nonempty and must not contain '='\",\n );\n }\n assertNoNul(key, `environment key ${key}`);\n assertNoNul(value, `environment.${key}`);\n assertValidUnicode(key, `environment key ${key}`);\n assertValidUnicode(value, `environment.${key}`);\n environmentBytes +=\n textEncoder.encode(key).byteLength +\n 1 +\n textEncoder.encode(value).byteLength;\n }\n if (environmentBytes > maxProcessEnvBytes) {\n throw new SandboxValidationError(\n `environment must not exceed ${maxProcessEnvBytes} bytes`,\n );\n }\n return entries;\n};\n\nexport const canonicalUuidSchema = z\n .string()\n .regex(\n /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/,\n \"must be a canonical lowercase UUID\",\n )\n .refine((value) => value !== \"00000000-0000-0000-0000-000000000000\", {\n message: \"must not be the nil UUID\",\n });\n\nconst timestampSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n \"must be an RFC3339 timestamp\",\n )\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: \"must be an RFC3339 timestamp\",\n });\n\n// Sandbox REST responses may use proto3 JSON, which omits zero values and\n// encodes 64-bit integers as decimal strings.\nconst wireUint32Schema = z\n .number()\n .int()\n .nonnegative()\n .max(0xffffffff)\n .default(0);\nconst wireUint64Schema = z\n .union([z.number(), z.string().regex(/^\\d+$/).transform(Number)])\n .pipe(z.number().int().nonnegative().safe())\n .default(0);\n\nexport const sandboxStatusSchema = z.enum([\n \"PENDING\",\n \"STARTING\",\n \"PAUSING\",\n \"RUNNING\",\n \"PAUSED\",\n \"RESUMING\",\n \"TERMINATING\",\n \"TERMINATED\",\n \"FAILED\",\n]);\n\nconst sandboxResourcesSchema = z\n .object({\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n })\n .strict();\n\nexport const sandboxResourceSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema,\n status: sandboxStatusSchema,\n vpcId: canonicalUuidSchema,\n imageRef: z.string().min(1),\n resources: sandboxResourcesSchema,\n createdAt: timestampSchema,\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst wireSandboxResourceSchema = sandboxResourceSchema\n .omit({ resources: true, startedAt: true, endedAt: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n startedAt: timestampSchema.nullish(),\n endedAt: timestampSchema.nullish(),\n error: z.string().min(1).nullish(),\n })\n .strip();\n\nexport const sandboxRefSchema = sandboxResourceSchema\n .extend({\n kind: z.literal(\"inngest/sandbox\"),\n version: z.literal(1),\n })\n .strict();\n\nexport const sandboxSnapshotStatusSchema = z.enum([\n \"CREATING\",\n \"READY\",\n \"DELETING\",\n \"DELETED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxSnapshotResourceBaseSchema = z\n .object({\n id: canonicalUuidSchema,\n sourceImageId: z.string().min(1),\n status: sandboxSnapshotStatusSchema,\n compatibilityId: z.string().min(1).optional(),\n resources: sandboxResourcesSchema,\n memoryPackCount: z.number().int().nonnegative().max(0xffffffff),\n diskPackCount: z.number().int().nonnegative().max(0xffffffff),\n storedBytes: z.number().int().nonnegative().safe(),\n createdAt: timestampSchema,\n updatedAt: timestampSchema,\n expiresAt: timestampSchema,\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst validateSandboxSnapshotResource = (\n snapshot: {\n status: z.infer<typeof sandboxSnapshotStatusSchema>;\n compatibilityId?: string;\n sourceImageId: string;\n },\n ctx: z.RefinementCtx,\n): void => {\n if (snapshot.status === \"READY\" && snapshot.compatibilityId === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"compatibilityId is required for READY snapshots\",\n path: [\"compatibilityId\"],\n });\n }\n if (\n snapshot.status === \"READY\" &&\n !/^[a-f0-9]{64}$/.test(snapshot.sourceImageId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Source image ID must be a lowercase SHA-256 for READY snapshots\",\n path: [\"sourceImageId\"],\n });\n }\n};\n\nexport const sandboxSnapshotResourceSchema =\n sandboxSnapshotResourceBaseSchema.superRefine(\n validateSandboxSnapshotResource,\n );\n\nconst wireSandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema\n .omit({ resources: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n memoryPackCount: wireUint32Schema,\n diskPackCount: wireUint32Schema,\n storedBytes: wireUint64Schema,\n error: z.string().min(1).nullish(),\n })\n .strip()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxSnapshotRefSchema = sandboxSnapshotResourceBaseSchema\n .extend({\n kind: z.literal(\"inngest/sandbox.snapshot\"),\n version: z.literal(1),\n })\n .strict()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxProcessStateSchema = z.enum([\n \"STARTING\",\n \"RUNNING\",\n \"EXITED\",\n \"KILLED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxProcessResourceShape = {\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n};\n\nconst validateSandboxProcessResource = (\n process: z.infer<z.ZodObject<typeof sandboxProcessResourceShape>>,\n ctx: z.RefinementCtx,\n): void => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n};\n\nexport const sandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strict()\n .superRefine(validateSandboxProcessResource);\n\nconst wireSandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strip()\n .superRefine(validateSandboxProcessResource);\n\nexport const sandboxProcessRefSchema = z\n .object({\n kind: z.literal(\"inngest/sandbox.process\"),\n version: z.literal(1),\n sandboxId: canonicalUuidSchema,\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n })\n .strict()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n });\n\nconst outputChunkShape = {\n stream: z.enum([\"STDOUT\", \"STDERR\"]),\n data: z.string(),\n encoding: z.literal(\"base64\"),\n at: timestampSchema.optional(),\n};\n\nexport const wireOutputChunkSchema = z.object(outputChunkShape).strict();\nexport const restOutputChunkSchema = z\n .object({ ...outputChunkShape, data: z.string().default(\"\") })\n .strip();\n\nconst formatValidationError = (context: string, error: z.ZodError): string => {\n const issue = error.issues[0];\n const path = issue?.path.length ? ` at ${issue.path.join(\".\")}` : \"\";\n return `Invalid ${context}${path}: ${issue?.message ?? \"validation failed\"}`;\n};\n\nexport const parseWithSchema = <T, Input = T>(\n schema: z.ZodType<T, z.ZodTypeDef, Input>,\n value: unknown,\n context: string,\n): T => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) {\n throw new SandboxValidationError(\n formatValidationError(context, parsed.error),\n { cause: parsed.error },\n );\n }\n return parsed.data;\n};\n\nexport const sandboxRefFromResource = (value: unknown): SandboxRef => {\n const resource = parseWithSchema(\n wireSandboxResourceSchema,\n value,\n \"sandbox resource\",\n );\n return {\n kind: \"inngest/sandbox\",\n version: 1,\n id: resource.id,\n name: resource.name,\n status: resource.status,\n vpcId: resource.vpcId,\n imageRef: resource.imageRef,\n resources: resource.resources,\n createdAt: resource.createdAt,\n ...(resource.startedAt != null && { startedAt: resource.startedAt }),\n ...(resource.endedAt != null && { endedAt: resource.endedAt }),\n ...(resource.error != null && { error: resource.error }),\n };\n};\n\nexport const sandboxProcessRefFromResource = (\n sandboxId: string,\n value: unknown,\n): SandboxProcessRef =>\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n kind: \"inngest/sandbox.process\",\n version: 1,\n sandboxId,\n ...parseWithSchema(\n wireSandboxProcessResourceSchema,\n value,\n \"sandbox process resource\",\n ),\n },\n \"sandbox process reference\",\n );\n\nexport const sandboxSnapshotRefFromResource = (\n value: unknown,\n): SandboxSnapshotRef => {\n const resource = parseWithSchema(\n wireSandboxSnapshotResourceSchema,\n value,\n \"sandbox snapshot resource\",\n );\n const { error, ...base } = resource;\n return {\n kind: \"inngest/sandbox.snapshot\",\n version: 1,\n ...base,\n ...(error != null && { error }),\n };\n};\n\nexport const normalizeSandboxCreateOptions = (\n options: SandboxCreateOptions,\n): Omit<SandboxCreateOptions, \"runningTimeout\"> & {\n runningTimeoutMs: number | false;\n} => {\n const parsed = parseWithSchema(\n z.union([\n z\n .object({\n name: sandboxNameSchema,\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n environment: z.record(z.string()).optional(),\n secrets: z.array(sandboxSecretNameSchema).optional(),\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n z\n .object({\n name: sandboxNameSchema,\n snapshotId: canonicalUuidSchema,\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n ]),\n options,\n \"sandbox create options\",\n );\n if (\"vcpu\" in parsed) {\n const environment = { ...parsed.environment };\n const selected = new Set<string>();\n for (const name of parsed.secrets ?? []) {\n if (Object.hasOwn(parsed.environment ?? {}, name)) {\n throw new SandboxValidationError(\n \"secrets must not overlap with environment\",\n );\n }\n if (selected.has(name)) {\n throw new SandboxValidationError(\n \"secrets must not contain duplicate names\",\n );\n }\n selected.add(name);\n Object.defineProperty(environment, name, { value: \"\", enumerable: true });\n }\n validateSandboxEnvironment(environment);\n }\n const { runningTimeout, ...create } = parsed;\n return {\n ...create,\n runningTimeoutMs:\n runningTimeout === false\n ? false\n : normalizeDurationMs(\n runningTimeout ?? defaultSandboxRunningTimeoutMs,\n maxSandboxRunningTimeoutMs,\n \"runningTimeout\",\n ),\n };\n};\n\nexport const normalizeSandboxWaitUntilRunningOptions = (\n options: SandboxWaitUntilRunningOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox waitUntilRunning options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout,\n maxSandboxRunningTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxListOptions = (\n options: SandboxListOptions = {},\n): Required<Pick<SandboxListOptions, \"limit\">> &\n Pick<SandboxListOptions, \"cursor\"> => {\n const parsed = parseWithSchema(\n z\n .object({\n cursor: z.string().min(1).optional(),\n limit: z.number().int().min(1).max(250).optional(),\n })\n .strict(),\n options,\n \"sandbox list options\",\n );\n return { ...parsed, limit: parsed.limit ?? 50 };\n};\n\nexport const normalizeSandboxProcessListOptions = normalizeSandboxListOptions;\n\ntype SandboxProcessSpecOptions = SandboxCommandOptions & {\n command: SandboxCommand;\n};\n\nexport const normalizeSandboxSnapshotListOptions = (\n options: SandboxSnapshotListOptions = {},\n) => normalizeSandboxListOptions(options);\n\nexport const normalizeSandboxSnapshotCreateOptions = (\n options: SandboxSnapshotCreateOptions = {},\n): SandboxSnapshotCreateOptions =>\n parseWithSchema(\n z.object({}).strict(),\n options,\n \"sandbox snapshot create options\",\n );\n\nexport const normalizeSandboxSnapshotWaitOptions = (\n options: SandboxSnapshotWaitOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox snapshot waitUntilReady options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout as SandboxDuration,\n maxSandboxSnapshotWaitTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst normalizeProcessSpec = <\n T extends SandboxProcessSpecOptions | SandboxProcessStartOptions,\n>(\n options: T,\n includeTimeout: boolean,\n): Omit<T, \"command\"> & { command: string[] } => {\n const parsed = parseWithSchema(\n z\n .object({\n command: z.union([\n z.string().min(1, \"command must not be empty\"),\n z.array(z.string()).min(1).max(maxProcessArgvCount),\n ]),\n environment: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n ...(includeTimeout && { timeout: z.unknown().optional() }),\n })\n .strict(),\n options,\n \"sandbox command options\",\n ) as unknown as T;\n\n if (Array.isArray(parsed.command) && !parsed.command[0]) {\n throw new SandboxValidationError(\"command[0] must not be empty\");\n }\n const argv =\n typeof parsed.command === \"string\"\n ? [\"/bin/sh\", \"-c\", parsed.command]\n : parsed.command;\n let argvBytes = 0;\n argv.forEach((argument, index) => {\n const context =\n typeof parsed.command === \"string\" ? \"command\" : `command[${index}]`;\n assertNoNul(argument, context);\n assertValidUnicode(argument, context);\n argvBytes += textEncoder.encode(argument).byteLength;\n });\n if (argvBytes > maxProcessArgvBytes) {\n throw new SandboxValidationError(\n `command must not exceed ${maxProcessArgvBytes} bytes`,\n );\n }\n\n const entries = validateSandboxEnvironment(parsed.environment);\n\n if (parsed.cwd !== undefined) {\n assertNoNul(parsed.cwd, \"cwd\");\n assertValidUnicode(parsed.cwd, \"cwd\");\n if (textEncoder.encode(parsed.cwd).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `cwd must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n }\n\n const wireBytes = goJSONBytes({\n argv,\n ...(entries.length > 0 && { env: parsed.environment }),\n ...(parsed.cwd !== undefined && parsed.cwd !== \"\" && { cwd: parsed.cwd }),\n });\n if (wireBytes > maxProcessWireBytes) {\n throw new SandboxValidationError(\n `command, environment, and cwd must not exceed ${maxProcessWireBytes} encoded bytes`,\n );\n }\n return {\n ...parsed,\n command: [...argv],\n } as Omit<T, \"command\"> & { command: string[] };\n};\n\nexport const normalizeSandboxCommandOptions = (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n): SandboxCommandOptions & { command: string[]; timeoutMs: number } => {\n const parsed = normalizeProcessSpec({ ...options, command }, true);\n return {\n ...parsed,\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessStartOptions = (\n options: SandboxProcessStartOptions,\n): Omit<SandboxProcessStartOptions, \"command\"> & { command: string[] } =>\n normalizeProcessSpec(options, false);\n\nexport const normalizeSandboxProcessSignalOptions = (\n options: SandboxProcessSignalOptions,\n): Required<SandboxProcessSignalOptions> => {\n const parsed = parseWithSchema(\n z\n .object({\n signal: z.number().int().min(1).max(64),\n includeChildren: z.boolean().optional(),\n })\n .strict(),\n options,\n \"sandbox process signal options\",\n );\n return {\n signal: parsed.signal,\n includeChildren: parsed.includeChildren ?? true,\n };\n};\n\nexport const normalizeSandboxProcessWaitOptions = (\n options: SandboxProcessWaitOptions = {},\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown().optional() }).strict(),\n options,\n \"sandbox process wait options\",\n );\n return {\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessOutputOptions = (\n options: SandboxProcessOutputOptions = {},\n): { tailBytes: number } => {\n const parsed = parseWithSchema(\n z\n .object({\n tailBytes: z\n .number()\n .int()\n .min(0)\n .max(maxSandboxProcessTailBytes)\n .optional(),\n })\n .strict(),\n options,\n \"sandbox process output options\",\n );\n return { tailBytes: parsed.tailBytes ?? 0 };\n};\n\nexport const normalizeDurationMs = (\n duration: unknown,\n maximumMs: number,\n context: string,\n): number => {\n let milliseconds: number | undefined;\n if (typeof duration === \"number\") {\n milliseconds = duration;\n } else if (typeof duration === \"string\") {\n milliseconds = ms(duration as StringValue);\n } else if (isTemporalDuration(duration)) {\n if (duration.years || duration.months || duration.weeks) {\n throw new SandboxValidationError(\n `${context} cannot contain calendar years, months, or weeks`,\n );\n }\n milliseconds = duration.total({ unit: \"milliseconds\" });\n }\n if (\n typeof milliseconds !== \"number\" ||\n !Number.isFinite(milliseconds) ||\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0\n ) {\n throw new SandboxValidationError(\n `${context} must be a positive, whole number of milliseconds`,\n );\n }\n if (milliseconds > maximumMs) {\n throw new SandboxValidationError(\n `${context} must not exceed ${maximumMs} milliseconds`,\n );\n }\n return milliseconds;\n};\n\nexport const normalizeFileUploadOptions = (\n options: SandboxFileUploadOptions,\n): SandboxFileUploadOptions => {\n const parsed = parseWithSchema(\n z\n .object({\n path: z.string().min(1),\n data: z.unknown(),\n mode: z.number().int().min(1).max(0o777).optional(),\n })\n .strict(),\n options,\n \"sandbox file upload options\",\n );\n validateFilePath(parsed.path);\n return parsed as SandboxFileUploadOptions;\n};\n\nexport const normalizeFileDownloadOptions = (\n options: SandboxFileDownloadOptions,\n): SandboxFileDownloadOptions => {\n const parsed = parseWithSchema(\n z.object({ path: z.string().min(1) }).strict(),\n options,\n \"sandbox file download options\",\n );\n validateFilePath(parsed.path);\n return parsed;\n};\n\nconst validateFilePath = (path: string): void => {\n assertNoNul(path, \"path\");\n if (!path.startsWith(\"/\")) {\n throw new SandboxValidationError(\"path must be absolute\");\n }\n if (textEncoder.encode(path).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `path must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n};\n\nexport const decodeBase64 = (value: string, context: string): Uint8Array => {\n if (\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n value,\n )\n ) {\n throw new SandboxValidationError(`${context} is not valid base64`);\n }\n try {\n const binary = globalThis.atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n } catch (error) {\n throw new SandboxValidationError(`${context} is not valid base64`, {\n cause: error,\n });\n }\n};\n\nexport const decodeUtf8 = (value: Uint8Array): string =>\n new TextDecoder(\"utf-8\", { fatal: false }).decode(value);\n\nexport const encodeBase64 = (value: Uint8Array): string => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < value.length; offset += chunkSize) {\n binary += String.fromCharCode(\n ...value.subarray(offset, offset + chunkSize),\n );\n }\n return globalThis.btoa(binary);\n};\n\nexport const decodeOutputChunk = (value: unknown): SandboxOutputChunk => {\n const chunk = parseWithSchema(\n restOutputChunkSchema,\n value,\n \"sandbox output chunk\",\n );\n return {\n stream: chunk.stream,\n data: decodeBase64(chunk.data, \"sandbox output data\"),\n ...(chunk.at !== undefined && { at: chunk.at }),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","names":["milliseconds: number | undefined"],"sources":["../../../src/components/sandbox/validation.ts"],"sourcesContent":["import ms, { type StringValue } from \"ms\";\nimport { z } from \"zod/v3\";\n\nimport { isTemporalDuration } from \"../../helpers/temporal.ts\";\nimport {\n type SandboxCommand,\n type SandboxCommandOptions,\n type SandboxCreateOptions,\n type SandboxDuration,\n type SandboxFileDownloadOptions,\n type SandboxFileUploadOptions,\n type SandboxListOptions,\n type SandboxOutputChunk,\n type SandboxProcessOutputOptions,\n type SandboxProcessRef,\n type SandboxProcessSignalOptions,\n type SandboxProcessStartOptions,\n type SandboxProcessWaitOptions,\n type SandboxRef,\n type SandboxSnapshotCreateOptions,\n type SandboxSnapshotListOptions,\n type SandboxSnapshotRef,\n type SandboxSnapshotWaitOptions,\n SandboxValidationError,\n type SandboxWaitUntilRunningOptions,\n} from \"./types.ts\";\n\nexport const maxSandboxProcessTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxProcessTimeoutMs = 30 * 1_000;\nexport const maxSandboxRunningTimeoutMs = 5 * 60 * 1_000;\nexport const defaultSandboxRunningTimeoutMs = 120 * 1_000;\nexport const maxSandboxSnapshotWaitTimeoutMs = 5 * 60 * 1_000;\nexport const maxSandboxProcessTailBytes = 512 * 1_024;\n\nconst maxProcessArgvCount = 128;\nconst maxProcessArgvBytes = 32 * 1_024;\nconst maxProcessEnvCount = 256;\nconst maxProcessEnvBytes = 64 * 1_024;\nconst maxProcessCwdBytes = 4_096;\nconst maxProcessWireBytes = 96 * 1_024;\nconst maxSandboxNameCharacters = 255;\nconst sandboxNameControlCharacterPattern = /\\p{Cc}/u;\nconst sandboxNameEdgeWhitespacePattern = /^\\p{White_Space}|\\p{White_Space}$/u;\nconst textEncoder = new TextEncoder();\n\nexport const sandboxSecretNameSchema = z.string().superRefine((name, ctx) => {\n if (\n name.length === 0 ||\n textEncoder.encode(name).byteLength > 256 ||\n sandboxNameEdgeWhitespacePattern.test(name) ||\n /[\\r\\n\\0]/u.test(name)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"must be a nonempty workspace secret name of at most 256 bytes without leading/trailing whitespace, CR, LF, or NUL\",\n });\n }\n});\n\nexport const sandboxNameSchema = z.string().superRefine((name, ctx) => {\n if (name.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not be empty\",\n });\n } else if ([...name].length > maxSandboxNameCharacters) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `must not exceed ${maxSandboxNameCharacters} characters`,\n });\n }\n if (sandboxNameEdgeWhitespacePattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain leading or trailing whitespace\",\n });\n }\n if (sandboxNameControlCharacterPattern.test(name)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"must not contain control characters\",\n });\n }\n});\n\nconst goJSONBytes = (value: unknown): number => {\n // encoding/json escapes these runes by default. Simcity measures the\n // marshalled ProcessSpec, so mirror Go rather than JSON.stringify exactly.\n const encoded = JSON.stringify(value).replace(\n /[<>&\\u2028\\u2029]/g,\n (character) =>\n `\\\\u${character.charCodeAt(0).toString(16).padStart(4, \"0\")}`,\n );\n return textEncoder.encode(encoded).byteLength;\n};\n\nconst assertNoNul = (value: string, context: string): void => {\n if (value.includes(\"\\0\")) {\n throw new SandboxValidationError(`${context} must not contain NUL`);\n }\n};\n\nconst assertValidUnicode = (value: string, context: string): void => {\n for (let index = 0; index < value.length; index++) {\n const codeUnit = value.charCodeAt(index);\n if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (next < 0xdc00 || next > 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n index++;\n } else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {\n throw new SandboxValidationError(\n `${context} must not contain an unpaired surrogate`,\n );\n }\n }\n};\n\nconst validateSandboxEnvironment = (\n environment: Record<string, string> | undefined,\n): Array<[string, string]> => {\n const entries = Object.entries(environment ?? {});\n if (entries.length > maxProcessEnvCount) {\n throw new SandboxValidationError(\n `environment must not contain more than ${maxProcessEnvCount} entries`,\n );\n }\n let environmentBytes = 0;\n for (const [key, value] of entries) {\n if (!key || key.includes(\"=\")) {\n throw new SandboxValidationError(\n \"environment keys must be nonempty and must not contain '='\",\n );\n }\n assertNoNul(key, `environment key ${key}`);\n assertNoNul(value, `environment.${key}`);\n assertValidUnicode(key, `environment key ${key}`);\n assertValidUnicode(value, `environment.${key}`);\n environmentBytes +=\n textEncoder.encode(key).byteLength +\n 1 +\n textEncoder.encode(value).byteLength;\n }\n if (environmentBytes > maxProcessEnvBytes) {\n throw new SandboxValidationError(\n `environment must not exceed ${maxProcessEnvBytes} bytes`,\n );\n }\n return entries;\n};\n\nexport const canonicalUuidSchema = z\n .string()\n .regex(\n /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/,\n \"must be a canonical lowercase UUID\",\n )\n .refine((value) => value !== \"00000000-0000-0000-0000-000000000000\", {\n message: \"must not be the nil UUID\",\n });\n\nconst timestampSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n \"must be an RFC3339 timestamp\",\n )\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: \"must be an RFC3339 timestamp\",\n });\n\n// Sandbox REST responses may use proto3 JSON, which omits zero values and\n// encodes 64-bit integers as decimal strings.\nconst wireUint32Schema = z\n .number()\n .int()\n .nonnegative()\n .max(0xffffffff)\n .default(0);\nconst wireUint64Schema = z\n .union([z.number(), z.string().regex(/^\\d+$/).transform(Number)])\n .pipe(z.number().int().nonnegative().safe())\n .default(0);\n\nexport const sandboxStatusSchema = z.enum([\n \"PENDING\",\n \"STARTING\",\n \"PAUSING\",\n \"RUNNING\",\n \"PAUSED\",\n \"RESUMING\",\n \"TERMINATING\",\n \"TERMINATED\",\n \"FAILED\",\n]);\n\nconst sandboxResourcesSchema = z\n .object({\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n })\n .strict();\n\nexport const sandboxResourceSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema,\n status: sandboxStatusSchema,\n vpcId: canonicalUuidSchema,\n imageRef: z.string().min(1),\n resources: sandboxResourcesSchema,\n createdAt: timestampSchema,\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst wireSandboxResourceSchema = sandboxResourceSchema\n .omit({ resources: true, startedAt: true, endedAt: true, error: true })\n .extend({\n resources: sandboxResourcesSchema.strip(),\n startedAt: timestampSchema.nullish(),\n endedAt: timestampSchema.nullish(),\n error: z.string().min(1).nullish(),\n })\n .strip();\n\nexport const sandboxRefSchema = sandboxResourceSchema\n .extend({\n kind: z.literal(\"inngest/sandbox\"),\n version: z.literal(1),\n })\n .strict();\n\nexport const sandboxSnapshotStatusSchema = z.enum([\n \"CREATING\",\n \"READY\",\n \"DELETING\",\n \"DELETED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxSnapshotResourceBaseSchema = z\n .object({\n id: canonicalUuidSchema,\n name: sandboxNameSchema.optional(),\n sourceImageId: z.string().min(1),\n status: sandboxSnapshotStatusSchema,\n compatibilityId: z.string().min(1).optional(),\n resources: sandboxResourcesSchema,\n memoryPackCount: z.number().int().nonnegative().max(0xffffffff),\n diskPackCount: z.number().int().nonnegative().max(0xffffffff),\n storedBytes: z.number().int().nonnegative().safe(),\n createdAt: timestampSchema,\n updatedAt: timestampSchema,\n expiresAt: timestampSchema,\n error: z.string().min(1).optional(),\n })\n .strict();\n\nconst validateSandboxSnapshotResource = (\n snapshot: {\n status: z.infer<typeof sandboxSnapshotStatusSchema>;\n compatibilityId?: string;\n sourceImageId: string;\n },\n ctx: z.RefinementCtx,\n): void => {\n if (snapshot.status === \"READY\" && snapshot.compatibilityId === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"compatibilityId is required for READY snapshots\",\n path: [\"compatibilityId\"],\n });\n }\n if (\n snapshot.status === \"READY\" &&\n !/^[a-f0-9]{64}$/.test(snapshot.sourceImageId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"Source image ID must be a lowercase SHA-256 for READY snapshots\",\n path: [\"sourceImageId\"],\n });\n }\n};\n\nexport const sandboxSnapshotResourceSchema =\n sandboxSnapshotResourceBaseSchema.superRefine(\n validateSandboxSnapshotResource,\n );\n\nconst wireSandboxSnapshotResourceSchema = sandboxSnapshotResourceBaseSchema\n .omit({ name: true, resources: true, error: true })\n .extend({\n // Unnamed snapshots may omit the name, send null, or send \"\".\n name: z.union([z.literal(\"\"), sandboxNameSchema]).nullish(),\n resources: sandboxResourcesSchema.strip(),\n memoryPackCount: wireUint32Schema,\n diskPackCount: wireUint32Schema,\n storedBytes: wireUint64Schema,\n error: z.string().min(1).nullish(),\n })\n .strip()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxSnapshotRefSchema = sandboxSnapshotResourceBaseSchema\n .extend({\n kind: z.literal(\"inngest/sandbox.snapshot\"),\n version: z.literal(1),\n })\n .strict()\n .superRefine(validateSandboxSnapshotResource);\n\nexport const sandboxProcessStateSchema = z.enum([\n \"STARTING\",\n \"RUNNING\",\n \"EXITED\",\n \"KILLED\",\n \"FAILED\",\n \"LOST\",\n]);\n\nconst sandboxProcessResourceShape = {\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n};\n\nconst validateSandboxProcessResource = (\n process: z.infer<z.ZodObject<typeof sandboxProcessResourceShape>>,\n ctx: z.RefinementCtx,\n): void => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n};\n\nexport const sandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strict()\n .superRefine(validateSandboxProcessResource);\n\nconst wireSandboxProcessResourceSchema = z\n .object(sandboxProcessResourceShape)\n .strip()\n .superRefine(validateSandboxProcessResource);\n\nexport const sandboxProcessRefSchema = z\n .object({\n kind: z.literal(\"inngest/sandbox.process\"),\n version: z.literal(1),\n sandboxId: canonicalUuidSchema,\n id: canonicalUuidSchema,\n command: z.array(z.string()).min(1).max(maxProcessArgvCount),\n pid: z.number().int().positive().max(0x7fffffff).optional(),\n state: sandboxProcessStateSchema,\n exitCode: z.number().int().min(-0x80000000).max(0x7fffffff).optional(),\n terminationSignal: z.number().int().min(1).max(64).optional(),\n startedAt: timestampSchema.optional(),\n endedAt: timestampSchema.optional(),\n })\n .strict()\n .superRefine((process, ctx) => {\n if ((process.state === \"EXITED\") !== (process.exitCode !== undefined)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"exitCode must be present only for EXITED processes\",\n path: [\"exitCode\"],\n });\n }\n if (\n (process.state === \"KILLED\") !==\n (process.terminationSignal !== undefined)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"terminationSignal must be present only for KILLED processes\",\n path: [\"terminationSignal\"],\n });\n }\n });\n\nconst outputChunkShape = {\n stream: z.enum([\"STDOUT\", \"STDERR\"]),\n data: z.string(),\n encoding: z.literal(\"base64\"),\n at: timestampSchema.optional(),\n};\n\nexport const wireOutputChunkSchema = z.object(outputChunkShape).strict();\nexport const restOutputChunkSchema = z\n .object({ ...outputChunkShape, data: z.string().default(\"\") })\n .strip();\n\nconst formatValidationError = (context: string, error: z.ZodError): string => {\n const issue = error.issues[0];\n const path = issue?.path.length ? ` at ${issue.path.join(\".\")}` : \"\";\n return `Invalid ${context}${path}: ${issue?.message ?? \"validation failed\"}`;\n};\n\nexport const parseWithSchema = <T, Input = T>(\n schema: z.ZodType<T, z.ZodTypeDef, Input>,\n value: unknown,\n context: string,\n): T => {\n const parsed = schema.safeParse(value);\n if (!parsed.success) {\n throw new SandboxValidationError(\n formatValidationError(context, parsed.error),\n { cause: parsed.error },\n );\n }\n return parsed.data;\n};\n\nexport const sandboxRefFromResource = (value: unknown): SandboxRef => {\n const resource = parseWithSchema(\n wireSandboxResourceSchema,\n value,\n \"sandbox resource\",\n );\n return {\n kind: \"inngest/sandbox\",\n version: 1,\n id: resource.id,\n name: resource.name,\n status: resource.status,\n vpcId: resource.vpcId,\n imageRef: resource.imageRef,\n resources: resource.resources,\n createdAt: resource.createdAt,\n ...(resource.startedAt != null && { startedAt: resource.startedAt }),\n ...(resource.endedAt != null && { endedAt: resource.endedAt }),\n ...(resource.error != null && { error: resource.error }),\n };\n};\n\nexport const sandboxProcessRefFromResource = (\n sandboxId: string,\n value: unknown,\n): SandboxProcessRef =>\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n kind: \"inngest/sandbox.process\",\n version: 1,\n sandboxId,\n ...parseWithSchema(\n wireSandboxProcessResourceSchema,\n value,\n \"sandbox process resource\",\n ),\n },\n \"sandbox process reference\",\n );\n\nexport const sandboxSnapshotRefFromResource = (\n value: unknown,\n): SandboxSnapshotRef => {\n const resource = parseWithSchema(\n wireSandboxSnapshotResourceSchema,\n value,\n \"sandbox snapshot resource\",\n );\n const { name, error, ...base } = resource;\n return {\n kind: \"inngest/sandbox.snapshot\",\n version: 1,\n ...base,\n ...(name && { name }),\n ...(error != null && { error }),\n };\n};\n\nexport const normalizeSandboxCreateOptions = (\n options: SandboxCreateOptions,\n): Omit<SandboxCreateOptions, \"runningTimeout\"> & {\n runningTimeoutMs: number | false;\n} => {\n const parsed = parseWithSchema(\n z.union([\n z\n .object({\n name: sandboxNameSchema,\n vcpu: z.number().int().positive().max(0xffffffff),\n memoryMb: z.number().int().positive().max(0xffffffff),\n environment: z.record(z.string()).optional(),\n secrets: z.array(sandboxSecretNameSchema).optional(),\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n z\n .object({\n name: sandboxNameSchema,\n snapshotId: canonicalUuidSchema,\n runningTimeout: z.unknown().optional(),\n })\n .strict(),\n ]),\n options,\n \"sandbox create options\",\n );\n if (\"vcpu\" in parsed) {\n const environment = { ...parsed.environment };\n const selected = new Set<string>();\n for (const name of parsed.secrets ?? []) {\n if (Object.hasOwn(parsed.environment ?? {}, name)) {\n throw new SandboxValidationError(\n \"secrets must not overlap with environment\",\n );\n }\n if (selected.has(name)) {\n throw new SandboxValidationError(\n \"secrets must not contain duplicate names\",\n );\n }\n selected.add(name);\n Object.defineProperty(environment, name, { value: \"\", enumerable: true });\n }\n validateSandboxEnvironment(environment);\n }\n const { runningTimeout, ...create } = parsed;\n return {\n ...create,\n runningTimeoutMs:\n runningTimeout === false\n ? false\n : normalizeDurationMs(\n runningTimeout ?? defaultSandboxRunningTimeoutMs,\n maxSandboxRunningTimeoutMs,\n \"runningTimeout\",\n ),\n };\n};\n\nexport const normalizeSandboxWaitUntilRunningOptions = (\n options: SandboxWaitUntilRunningOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox waitUntilRunning options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout,\n maxSandboxRunningTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst sandboxListOptionsSchema = z\n .object({\n cursor: z.string().min(1).optional(),\n limit: z.number().int().min(1).max(250).optional(),\n })\n .strict();\n\nexport const normalizeSandboxListOptions = (\n options: SandboxListOptions = {},\n): Required<Pick<SandboxListOptions, \"limit\">> &\n Pick<SandboxListOptions, \"cursor\"> => {\n const parsed = parseWithSchema(\n sandboxListOptionsSchema,\n options,\n \"sandbox list options\",\n );\n return { ...parsed, limit: parsed.limit ?? 50 };\n};\n\nexport const normalizeSandboxProcessListOptions = normalizeSandboxListOptions;\n\ntype SandboxProcessSpecOptions = SandboxCommandOptions & {\n command: SandboxCommand;\n};\n\nexport const sandboxSnapshotCreateOptionsSchema = z\n .object({ name: sandboxNameSchema.optional() })\n .strict();\n\nexport const normalizeSandboxSnapshotListOptions = (\n options: SandboxSnapshotListOptions = {},\n): Required<Pick<SandboxSnapshotListOptions, \"limit\">> &\n Pick<SandboxSnapshotListOptions, \"cursor\" | \"name\"> => {\n const { name, ...list } = parseWithSchema(\n sandboxListOptionsSchema\n .extend({ name: sandboxNameSchema.optional() })\n .strict(),\n options,\n \"sandbox snapshot list options\",\n );\n\n return {\n ...normalizeSandboxListOptions(list),\n ...(name !== undefined && { name }),\n };\n};\n\nexport const normalizeSandboxSnapshotCreateOptions = (\n options: SandboxSnapshotCreateOptions = {},\n): SandboxSnapshotCreateOptions =>\n parseWithSchema(\n sandboxSnapshotCreateOptionsSchema,\n options,\n \"sandbox snapshot create options\",\n );\n\nexport const normalizeSandboxSnapshotWaitOptions = (\n options: SandboxSnapshotWaitOptions,\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown() }).strict(),\n options,\n \"sandbox snapshot waitUntilReady options\",\n );\n return {\n timeoutMs: normalizeDurationMs(\n parsed.timeout as SandboxDuration,\n maxSandboxSnapshotWaitTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nconst normalizeProcessSpec = <\n T extends SandboxProcessSpecOptions | SandboxProcessStartOptions,\n>(\n options: T,\n includeTimeout: boolean,\n): Omit<T, \"command\"> & { command: string[] } => {\n const parsed = parseWithSchema(\n z\n .object({\n command: z.union([\n z.string().min(1, \"command must not be empty\"),\n z.array(z.string()).min(1).max(maxProcessArgvCount),\n ]),\n environment: z.record(z.string()).optional(),\n cwd: z.string().optional(),\n ...(includeTimeout && { timeout: z.unknown().optional() }),\n })\n .strict(),\n options,\n \"sandbox command options\",\n ) as unknown as T;\n\n if (Array.isArray(parsed.command) && !parsed.command[0]) {\n throw new SandboxValidationError(\"command[0] must not be empty\");\n }\n const argv =\n typeof parsed.command === \"string\"\n ? [\"/bin/sh\", \"-c\", parsed.command]\n : parsed.command;\n let argvBytes = 0;\n argv.forEach((argument, index) => {\n const context =\n typeof parsed.command === \"string\" ? \"command\" : `command[${index}]`;\n assertNoNul(argument, context);\n assertValidUnicode(argument, context);\n argvBytes += textEncoder.encode(argument).byteLength;\n });\n if (argvBytes > maxProcessArgvBytes) {\n throw new SandboxValidationError(\n `command must not exceed ${maxProcessArgvBytes} bytes`,\n );\n }\n\n const entries = validateSandboxEnvironment(parsed.environment);\n\n if (parsed.cwd !== undefined) {\n assertNoNul(parsed.cwd, \"cwd\");\n assertValidUnicode(parsed.cwd, \"cwd\");\n if (textEncoder.encode(parsed.cwd).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `cwd must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n }\n\n const wireBytes = goJSONBytes({\n argv,\n ...(entries.length > 0 && { env: parsed.environment }),\n ...(parsed.cwd !== undefined && parsed.cwd !== \"\" && { cwd: parsed.cwd }),\n });\n if (wireBytes > maxProcessWireBytes) {\n throw new SandboxValidationError(\n `command, environment, and cwd must not exceed ${maxProcessWireBytes} encoded bytes`,\n );\n }\n return {\n ...parsed,\n command: [...argv],\n } as Omit<T, \"command\"> & { command: string[] };\n};\n\nexport const normalizeSandboxCommandOptions = (\n command: SandboxCommand,\n options: SandboxCommandOptions = {},\n): SandboxCommandOptions & { command: string[]; timeoutMs: number } => {\n const parsed = normalizeProcessSpec({ ...options, command }, true);\n return {\n ...parsed,\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessStartOptions = (\n options: SandboxProcessStartOptions,\n): Omit<SandboxProcessStartOptions, \"command\"> & { command: string[] } =>\n normalizeProcessSpec(options, false);\n\nexport const normalizeSandboxProcessSignalOptions = (\n options: SandboxProcessSignalOptions,\n): Required<SandboxProcessSignalOptions> => {\n const parsed = parseWithSchema(\n z\n .object({\n signal: z.number().int().min(1).max(64),\n includeChildren: z.boolean().optional(),\n })\n .strict(),\n options,\n \"sandbox process signal options\",\n );\n return {\n signal: parsed.signal,\n includeChildren: parsed.includeChildren ?? true,\n };\n};\n\nexport const normalizeSandboxProcessWaitOptions = (\n options: SandboxProcessWaitOptions = {},\n): { timeoutMs: number } => {\n const parsed = parseWithSchema(\n z.object({ timeout: z.unknown().optional() }).strict(),\n options,\n \"sandbox process wait options\",\n );\n return {\n timeoutMs:\n parsed.timeout === undefined\n ? defaultSandboxProcessTimeoutMs\n : normalizeDurationMs(\n parsed.timeout,\n maxSandboxProcessTimeoutMs,\n \"timeout\",\n ),\n };\n};\n\nexport const normalizeSandboxProcessOutputOptions = (\n options: SandboxProcessOutputOptions = {},\n): { tailBytes: number } => {\n const parsed = parseWithSchema(\n z\n .object({\n tailBytes: z\n .number()\n .int()\n .min(0)\n .max(maxSandboxProcessTailBytes)\n .optional(),\n })\n .strict(),\n options,\n \"sandbox process output options\",\n );\n return { tailBytes: parsed.tailBytes ?? 0 };\n};\n\nexport const normalizeDurationMs = (\n duration: unknown,\n maximumMs: number,\n context: string,\n): number => {\n let milliseconds: number | undefined;\n if (typeof duration === \"number\") {\n milliseconds = duration;\n } else if (typeof duration === \"string\") {\n milliseconds = ms(duration as StringValue);\n } else if (isTemporalDuration(duration)) {\n if (duration.years || duration.months || duration.weeks) {\n throw new SandboxValidationError(\n `${context} cannot contain calendar years, months, or weeks`,\n );\n }\n milliseconds = duration.total({ unit: \"milliseconds\" });\n }\n if (\n typeof milliseconds !== \"number\" ||\n !Number.isFinite(milliseconds) ||\n !Number.isSafeInteger(milliseconds) ||\n milliseconds <= 0\n ) {\n throw new SandboxValidationError(\n `${context} must be a positive, whole number of milliseconds`,\n );\n }\n if (milliseconds > maximumMs) {\n throw new SandboxValidationError(\n `${context} must not exceed ${maximumMs} milliseconds`,\n );\n }\n return milliseconds;\n};\n\nexport const normalizeFileUploadOptions = (\n options: SandboxFileUploadOptions,\n): SandboxFileUploadOptions => {\n const parsed = parseWithSchema(\n z\n .object({\n path: z.string().min(1),\n data: z.unknown(),\n mode: z.number().int().min(1).max(0o777).optional(),\n })\n .strict(),\n options,\n \"sandbox file upload options\",\n );\n validateFilePath(parsed.path);\n return parsed as SandboxFileUploadOptions;\n};\n\nexport const normalizeFileDownloadOptions = (\n options: SandboxFileDownloadOptions,\n): SandboxFileDownloadOptions => {\n const parsed = parseWithSchema(\n z.object({ path: z.string().min(1) }).strict(),\n options,\n \"sandbox file download options\",\n );\n validateFilePath(parsed.path);\n return parsed;\n};\n\nconst validateFilePath = (path: string): void => {\n assertNoNul(path, \"path\");\n if (!path.startsWith(\"/\")) {\n throw new SandboxValidationError(\"path must be absolute\");\n }\n if (textEncoder.encode(path).byteLength > maxProcessCwdBytes) {\n throw new SandboxValidationError(\n `path must not exceed ${maxProcessCwdBytes} bytes`,\n );\n }\n};\n\nexport const decodeBase64 = (value: string, context: string): Uint8Array => {\n if (\n !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(\n value,\n )\n ) {\n throw new SandboxValidationError(`${context} is not valid base64`);\n }\n try {\n const binary = globalThis.atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index++) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n } catch (error) {\n throw new SandboxValidationError(`${context} is not valid base64`, {\n cause: error,\n });\n }\n};\n\nexport const decodeUtf8 = (value: Uint8Array): string =>\n new TextDecoder(\"utf-8\", { fatal: false }).decode(value);\n\nexport const encodeBase64 = (value: Uint8Array): string => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < value.length; offset += chunkSize) {\n binary += String.fromCharCode(\n ...value.subarray(offset, offset + chunkSize),\n );\n }\n return globalThis.btoa(binary);\n};\n\nexport const decodeOutputChunk = (value: unknown): SandboxOutputChunk => {\n const chunk = parseWithSchema(\n restOutputChunkSchema,\n value,\n \"sandbox output chunk\",\n );\n return {\n stream: chunk.stream,\n data: decodeBase64(chunk.data, \"sandbox output data\"),\n ...(chunk.at !== undefined && { at: chunk.at }),\n };\n};\n"],"mappings":"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"}
|
package/experimental.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const require_als = require('./components/execution/als.cjs');
|
|
2
2
|
const require_InngestMetadata = require('./components/InngestMetadata.cjs');
|
|
3
3
|
const require_types = require('./components/sandbox/types.cjs');
|
|
4
|
+
const require_InngestScore = require('./components/InngestScore.cjs');
|
|
4
5
|
const require_protocol = require('./components/sandbox/protocol.cjs');
|
|
5
6
|
const require_middleware = require('./components/sandbox/middleware.cjs');
|
|
6
|
-
const require_InngestScore = require('./components/InngestScore.cjs');
|
|
7
7
|
const require_DeferredFunction = require('./components/DeferredFunction.cjs');
|
|
8
8
|
const require_processor = require('./components/execution/otel/processor.cjs');
|
|
9
9
|
const require_middleware$1 = require('./components/execution/otel/middleware.cjs');
|
package/experimental.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getAsyncCtx, runWithAsyncCtx } from "./components/execution/als.js";
|
|
2
2
|
import { metadataMiddleware } from "./components/InngestMetadata.js";
|
|
3
3
|
import { SandboxError, SandboxValidationError } from "./components/sandbox/types.js";
|
|
4
|
+
import { scoreMiddleware } from "./components/InngestScore.js";
|
|
4
5
|
import { getSandboxError } from "./components/sandbox/protocol.js";
|
|
5
6
|
import { sandboxMiddleware } from "./components/sandbox/middleware.js";
|
|
6
|
-
import { scoreMiddleware } from "./components/InngestScore.js";
|
|
7
7
|
import { DeferredFunction, createDefer } from "./components/DeferredFunction.js";
|
|
8
8
|
import { PublicInngestSpanProcessor } from "./components/execution/otel/processor.js";
|
|
9
9
|
import { extendedTracesMiddleware } from "./components/execution/otel/middleware.js";
|
package/index.cjs
CHANGED
|
@@ -7,10 +7,10 @@ const require_strings = require('./helpers/strings.cjs');
|
|
|
7
7
|
const require_logger = require('./middleware/logger.cjs');
|
|
8
8
|
const require_triggers = require('./components/triggers/triggers.cjs');
|
|
9
9
|
const require_middleware = require('./components/middleware/middleware.cjs');
|
|
10
|
-
const require_StepError = require('./components/StepError.cjs');
|
|
11
10
|
const require_Fetch = require('./components/Fetch.cjs');
|
|
12
11
|
const require_InngestFunctionReference = require('./components/InngestFunctionReference.cjs');
|
|
13
12
|
const require_InngestStepTools = require('./components/InngestStepTools.cjs');
|
|
13
|
+
const require_StepError = require('./components/StepError.cjs');
|
|
14
14
|
const require_Inngest = require('./components/Inngest.cjs');
|
|
15
15
|
const require_RetryAfterError = require('./components/RetryAfterError.cjs');
|
|
16
16
|
const require_InngestCommHandler = require('./components/InngestCommHandler.cjs');
|
package/index.js
CHANGED
|
@@ -7,10 +7,10 @@ import { slugify } from "./helpers/strings.js";
|
|
|
7
7
|
import { ConsoleLogger, ProxyLogger } from "./middleware/logger.js";
|
|
8
8
|
import { EventType, cron, eventType, invoke, staticSchema } from "./components/triggers/triggers.js";
|
|
9
9
|
import { Middleware } from "./components/middleware/middleware.js";
|
|
10
|
-
import { StepError } from "./components/StepError.js";
|
|
11
10
|
import { fetch } from "./components/Fetch.js";
|
|
12
11
|
import { referenceFunction } from "./components/InngestFunctionReference.js";
|
|
13
12
|
import { group, step } from "./components/InngestStepTools.js";
|
|
13
|
+
import { StepError } from "./components/StepError.js";
|
|
14
14
|
import { Inngest } from "./components/Inngest.js";
|
|
15
15
|
import { RetryAfterError } from "./components/RetryAfterError.js";
|
|
16
16
|
import { InngestCommHandler } from "./components/InngestCommHandler.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "inngest",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.23.0",
|
|
4
4
|
"description": "Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|
package/react.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Realtime } from "./components/realtime/types.cjs";
|
|
2
|
-
import { Inngest } from "./components/Inngest.cjs";
|
|
3
2
|
import { getClientSubscriptionToken } from "./components/realtime/subscribe/index.cjs";
|
|
3
|
+
import { Inngest } from "./components/Inngest.cjs";
|
|
4
4
|
|
|
5
5
|
//#region src/react.d.ts
|
|
6
6
|
type UseRealtimeConnectionStatus = "idle" | "connecting" | "open" | "paused" | "closed" | "error";
|
package/react.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Realtime } from "./components/realtime/types.js";
|
|
2
|
-
import { Inngest } from "./components/Inngest.js";
|
|
3
2
|
import { getClientSubscriptionToken } from "./components/realtime/subscribe/index.js";
|
|
3
|
+
import { Inngest } from "./components/Inngest.js";
|
|
4
4
|
|
|
5
5
|
//#region src/react.d.ts
|
|
6
6
|
type UseRealtimeConnectionStatus = "idle" | "connecting" | "open" | "paused" | "closed" | "error";
|