@opengeni/contracts 5.1.0 → 5.1.1

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/src/index.ts CHANGED
@@ -168,6 +168,7 @@ export {
168
168
  retainedGeneratedImageReferenceFromFile,
169
169
  retainedGeneratedVideoReferenceFromFile,
170
170
  retainedScreenshotReferenceFromFile,
171
+ retainedSessionScreenshotKindFromObjectKey,
171
172
  retainedOutputUnavailable,
172
173
  resolveRetainedOutputRange,
173
174
  validateRetainedOutputEvidence,
@@ -177,6 +178,7 @@ export {
177
178
  type RetainedGeneratedImageArtifactInput,
178
179
  type RetainedGeneratedVideoArtifactInput,
179
180
  type RetainedScreenshotArtifactInput,
181
+ type RetainedSessionScreenshotKind,
180
182
  type RetainedArtifactUnavailable,
181
183
  type RetainedOutputAvailableEvidence,
182
184
  type RetainedOutputEvidence,
@@ -887,6 +889,8 @@ export const FIRST_PARTY_MCP_TOOL_NAMES = [
887
889
  "browser_open",
888
890
  "browser_tabs",
889
891
  "browser_observe",
892
+ "browser_read",
893
+ "browser_screenshot",
890
894
  "browser_act",
891
895
  "browser_clipboard",
892
896
  "browser_debug",
@@ -993,6 +997,8 @@ export const FIRST_PARTY_IN_PROCESS_TOOL_NAMES = [
993
997
  "browser_open",
994
998
  "browser_tabs",
995
999
  "browser_observe",
1000
+ "browser_read",
1001
+ "browser_screenshot",
996
1002
  "browser_act",
997
1003
  "browser_clipboard",
998
1004
  "browser_debug",
@@ -1816,6 +1816,18 @@ export const BrowserObservation = z
1816
1816
  frameId: opaqueGeneration.nullable(),
1817
1817
  semantic: z.union([InteractionSemanticSnapshot, InteractionSemanticDiff]).nullable(),
1818
1818
  screenshot: RetainedArtifactReferenceSchema.nullable(),
1819
+ viewport: z
1820
+ .object({
1821
+ width: z.number().int().positive(),
1822
+ height: z.number().int().positive(),
1823
+ visualWidth: z.number().positive(),
1824
+ visualHeight: z.number().positive(),
1825
+ deviceScaleFactor: z.number().positive(),
1826
+ maxTouchPoints: z.number().int().nonnegative(),
1827
+ })
1828
+ .strict()
1829
+ .nullable()
1830
+ .optional(),
1819
1831
  focusedRef: boundedOpaqueId.nullable(),
1820
1832
  changedRegions: z.array(InteractionRect).max(INTERACTION_MAX_CHANGED_NODES),
1821
1833
  diagnostics: InteractionDiagnosticSummary,
@@ -1884,6 +1896,90 @@ export const BrowserLocator = z.discriminatedUnion("kind", [
1884
1896
  ]);
1885
1897
  export type BrowserLocator = z.infer<typeof BrowserLocator>;
1886
1898
 
1899
+ /** Cheap causal state for a target. This is intentionally independent of an
1900
+ * accessibility observation, which can require a full tree for every frame. */
1901
+ export const BrowserTargetState = z
1902
+ .object({
1903
+ browserSessionId: z.string().uuid(),
1904
+ controllerGeneration: opaqueGeneration,
1905
+ targetId: boundedOpaqueId,
1906
+ targetGeneration: opaqueGeneration,
1907
+ documentGeneration: opaqueGeneration.nullable(),
1908
+ frameId: opaqueGeneration.nullable(),
1909
+ })
1910
+ .strict();
1911
+ export type BrowserTargetState = z.infer<typeof BrowserTargetState>;
1912
+
1913
+ export const BrowserDomSafeAttribute = z.enum([
1914
+ "href",
1915
+ "src",
1916
+ "alt",
1917
+ "title",
1918
+ "role",
1919
+ "aria-label",
1920
+ "aria-expanded",
1921
+ "aria-checked",
1922
+ "aria-selected",
1923
+ "placeholder",
1924
+ "type",
1925
+ "name",
1926
+ "data-testid",
1927
+ ]);
1928
+ export type BrowserDomSafeAttribute = z.infer<typeof BrowserDomSafeAttribute>;
1929
+
1930
+ export const BrowserDomReadSelector = z
1931
+ .string()
1932
+ .min(1)
1933
+ .max(8_192)
1934
+ .regex(/^[A-Za-z0-9_#.,\s>*-]+$/u);
1935
+
1936
+ /** DOM extraction avoids content-matching locators, which can probe redacted text. */
1937
+ export const BrowserDomReadLocator = z.discriminatedUnion("kind", [
1938
+ z.object({ kind: z.literal("ref"), ref: boundedOpaqueId }).strict(),
1939
+ z.object({ kind: z.literal("placeholder"), text: z.string().min(1).max(8_192) }).strict(),
1940
+ z.object({ kind: z.literal("test_id"), value: z.string().min(1).max(2_048) }).strict(),
1941
+ z.object({ kind: z.literal("css"), selector: BrowserDomReadSelector }).strict(),
1942
+ ]);
1943
+ export type BrowserDomReadLocator = z.infer<typeof BrowserDomReadLocator>;
1944
+
1945
+ const BrowserDomReadFence = z.object({
1946
+ expectedTargetGeneration: opaqueGeneration,
1947
+ expectedDocumentGeneration: opaqueGeneration,
1948
+ expectedFrameId: opaqueGeneration,
1949
+ });
1950
+
1951
+ /** A fixed, read-only query. The caller never supplies executable JavaScript.
1952
+ * CSS reads accept only simple tag, class, id, descendant, and child selectors
1953
+ * so predicate queries cannot probe protected attribute values. CSS count is
1954
+ * scoped to the target's main document; child frames and shadow roots are not
1955
+ * part of its count. */
1956
+ export const BrowserDomReadRequest = z.discriminatedUnion("kind", [
1957
+ BrowserDomReadFence.extend({
1958
+ kind: z.literal("element"),
1959
+ locator: BrowserDomReadLocator,
1960
+ attributes: z.array(BrowserDomSafeAttribute).max(13).optional(),
1961
+ maxChars: z.number().int().min(1).max(32_768).optional(),
1962
+ }).strict(),
1963
+ BrowserDomReadFence.extend({
1964
+ kind: z.literal("count"),
1965
+ selector: BrowserDomReadSelector,
1966
+ }).strict(),
1967
+ ]);
1968
+ export type BrowserDomReadRequest = z.infer<typeof BrowserDomReadRequest>;
1969
+
1970
+ export const BrowserDomReadResponse = BrowserTargetState.extend({
1971
+ kind: z.enum(["element", "count"]),
1972
+ count: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
1973
+ text: z.string().max(32_768).nullable().optional(),
1974
+ value: z.string().max(32_768).nullable().optional(),
1975
+ attributes: z
1976
+ .partialRecord(BrowserDomSafeAttribute, z.string().max(32_768).nullable())
1977
+ .optional(),
1978
+ redacted: z.enum(["password", "payment", "private", "policy"]).nullable().optional(),
1979
+ truncated: z.boolean(),
1980
+ }).strict();
1981
+ export type BrowserDomReadResponse = z.infer<typeof BrowserDomReadResponse>;
1982
+
1887
1983
  /** Provider-neutral locator for native accessibility trees. Native automation
1888
1984
  * identifiers are intentionally distinct from DOM selectors/test ids: AX,
1889
1985
  * AT-SPI, and UIA adapters resolve them inside the exact observed target. */
@@ -1942,6 +2038,17 @@ export type BrowserPermissionSetting = z.infer<typeof BrowserPermissionSetting>;
1942
2038
 
1943
2039
  const browserActionVariants = [
1944
2040
  z.object({ type: z.literal("navigate"), url: boundedUrl }).strict(),
2041
+ z.object({ type: z.literal("history"), direction: z.enum(["back", "forward"]) }).strict(),
2042
+ z.object({ type: z.literal("activate") }).strict(),
2043
+ z
2044
+ .object({
2045
+ type: z.literal("viewport"),
2046
+ width: z.number().int().min(240).max(4_096),
2047
+ height: z.number().int().min(240).max(4_096),
2048
+ mobile: z.boolean(),
2049
+ deviceScaleFactor: z.number().min(0.5).max(4).optional(),
2050
+ })
2051
+ .strict(),
1945
2052
  z
1946
2053
  .object({
1947
2054
  type: z.literal("click"),
@@ -229,6 +229,18 @@ export const KnowledgeEntryRevision = z
229
229
  .strict();
230
230
  export type KnowledgeEntryRevision = z.infer<typeof KnowledgeEntryRevision>;
231
231
 
232
+ /** Search/index progress is independent of saved source and keyword access. */
233
+ export const KnowledgeIndexStatus = z.enum([
234
+ "saved",
235
+ "queued",
236
+ "indexing",
237
+ "awaiting_funding",
238
+ "indexed",
239
+ "source_unavailable",
240
+ "provider_failed",
241
+ ]);
242
+ export type KnowledgeIndexStatus = z.infer<typeof KnowledgeIndexStatus>;
243
+
232
244
  /** Private owner IDs are not part of a content-discovery projection. */
233
245
  export const KnowledgeEntryRecord = z
234
246
  .object({
@@ -241,6 +253,7 @@ export const KnowledgeEntryRecord = z
241
253
  archived: z.boolean(),
242
254
  createdAt: z.string().datetime({ offset: true }),
243
255
  updatedAt: z.string().datetime({ offset: true }),
256
+ indexStatus: KnowledgeIndexStatus.optional(),
244
257
  })
245
258
  .strict();
246
259
  export type KnowledgeEntryRecord = z.infer<typeof KnowledgeEntryRecord>;
@@ -293,6 +306,9 @@ export const KnowledgeEntryListResponse = z.object({
293
306
  entries: z.array(KnowledgeEntrySummary),
294
307
  nextCursor: z.string().nullable(),
295
308
  searchMode: z.enum(["keyword", "hybrid", "vector"]).optional(),
309
+ fallbackReason: z
310
+ .enum(["awaiting_funding", "quota", "provider_unavailable", "query_limit"])
311
+ .optional(),
296
312
  });
297
313
  export type KnowledgeEntryListResponse = z.infer<typeof KnowledgeEntryListResponse>;
298
314
 
@@ -35,6 +35,7 @@ export const RetainedOutputKind = z.enum([
35
35
  "internal_update",
36
36
  "event_media",
37
37
  "computer_screenshot",
38
+ "browser_screenshot",
38
39
  "generated_image",
39
40
  "generated_video",
40
41
  "file",
@@ -124,6 +125,7 @@ export const RetainedArtifactReferenceSchema = z
124
125
 
125
126
  if (
126
127
  value.kind === "computer_screenshot" ||
128
+ value.kind === "browser_screenshot" ||
127
129
  value.kind === "generated_image" ||
128
130
  value.kind === "generated_video"
129
131
  ) {
@@ -187,12 +189,12 @@ export const RetainedArtifactReferenceSchema = z
187
189
  }
188
190
  }
189
191
 
190
- if (value.kind === "computer_screenshot") {
192
+ if (value.kind === "computer_screenshot" || value.kind === "browser_screenshot") {
191
193
  if (value.retention.policy !== "session_screenshot" || !sessionMatch) {
192
194
  ctx.addIssue({
193
195
  code: "custom",
194
196
  path: ["retention"],
195
- message: "computer screenshots require session-scoped expiring retrieval",
197
+ message: "session screenshots require session-scoped expiring retrieval",
196
198
  });
197
199
  }
198
200
  }
@@ -252,8 +254,23 @@ export type RetainedScreenshotArtifactInput = RetainedArtifactFileInput & {
252
254
  width: number;
253
255
  height: number;
254
256
  expiresAt: string;
257
+ kind?: "computer_screenshot" | "browser_screenshot";
255
258
  };
256
259
 
260
+ export type RetainedSessionScreenshotKind = "computer_screenshot" | "browser_screenshot";
261
+
262
+ /** The persisted, server-authored storage key distinguishes browser captures from legacy computer captures. */
263
+ export function retainedSessionScreenshotKindFromObjectKey(
264
+ objectKey: string,
265
+ ): RetainedSessionScreenshotKind | null {
266
+ const match =
267
+ /^workspaces\/[0-9a-f-]+\/files\/[0-9a-f-]+\/retained\/(session-image|computer-screenshot|screenshot|browser-screenshot)\.(png|jpg|webp)$/.exec(
268
+ objectKey,
269
+ );
270
+ if (!match) return null;
271
+ return match[1] === "browser-screenshot" ? "browser_screenshot" : "computer_screenshot";
272
+ }
273
+
257
274
  export type RetainedGeneratedImageArtifactInput = RetainedArtifactFileInput & {
258
275
  width: number;
259
276
  height: number;
@@ -305,7 +322,7 @@ export function retainedScreenshotReferenceFromFile(
305
322
  const value = {
306
323
  available: true as const,
307
324
  artifactId: file.id,
308
- kind: "computer_screenshot" as const,
325
+ kind: file.kind ?? "computer_screenshot",
309
326
  contentType: canonicalRetainedContentType(file.contentType),
310
327
  originalBytes: file.sizeBytes,
311
328
  sha256: file.sha256,
@@ -30,18 +30,26 @@ export const SandboxFileArtifactReceipt = z
30
30
  .strict()
31
31
  .superRefine((value, context) => {
32
32
  const pathSegments = value.sandboxPath.split("/");
33
+ // This is a receipt, not read authority. The publisher confines the path
34
+ // against its resolved provider root; receipts preserve that native path.
35
+ const unc = value.sandboxPath.startsWith("//");
36
+ const absolute = unc
37
+ ? /^\/\/[^/]+\/[^/]+\/.+/u.test(value.sandboxPath) && !value.sandboxPath.startsWith("//?/")
38
+ : value.sandboxPath.startsWith("/") || /^[A-Z]:\//u.test(value.sandboxPath);
33
39
  if (
34
- !value.sandboxPath.startsWith("/workspace/") ||
35
- value.sandboxPath.includes("\0") ||
40
+ !absolute ||
41
+ /[\\\u0000-\u001f\u007f]/u.test(value.sandboxPath) ||
36
42
  pathSegments.some(
37
- (segment, index) => index > 1 && (!segment || segment === "." || segment === ".."),
43
+ (segment, index) =>
44
+ index >= (unc ? 2 : 1) && (!segment || segment === "." || segment === ".."),
38
45
  ) ||
39
46
  pathSegments.at(-1) !== value.filename
40
47
  ) {
41
48
  context.addIssue({
42
49
  code: "custom",
43
50
  path: ["sandboxPath"],
44
- message: "sandbox path must canonically identify the published filename in /workspace",
51
+ message:
52
+ "sandbox path must canonically identify the published filename at an absolute host path",
45
53
  });
46
54
  }
47
55
  if (value.artifact.kind !== "file" || value.artifact.retention.policy !== "workspace_file") {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/video-generation.ts","../src/retained-output.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n GENERATED_VIDEO_MAX_BYTES,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n RetainedArtifactReferenceSchema,\n} from \"./retained-output\";\n\nexport const VIDEO_GENERATION_SCHEMA_VERSION = 1 as const;\nexport const SEEDANCE_2_5_MODEL_ID = \"bytedance/seedance-2.5\" as const;\nexport const GROK_IMAGINE_VIDEO_1_5_MODEL_ID = \"xai/grok-imagine-video-1.5\" as const;\n\nexport const VideoGenerationSourceMode = z.enum([\n \"text\",\n \"first_frame\",\n \"first_and_last_frames\",\n \"image_reference\",\n \"video_reference\",\n]);\nexport type VideoGenerationSourceMode = z.infer<typeof VideoGenerationSourceMode>;\n\nexport const VideoGenerationResolution = z.enum([\"480p\", \"720p\"]);\nexport type VideoGenerationResolution = z.infer<typeof VideoGenerationResolution>;\n\nexport const VideoGenerationFundingSource = z.enum([\n \"opengeni_credits\",\n \"workspace_gateway\",\n \"supergrok_subscription\",\n]);\nexport type VideoGenerationFundingSource = z.infer<typeof VideoGenerationFundingSource>;\n\nexport const VideoGenerationAspectRatio = z.enum([\n \"16:9\",\n \"4:3\",\n \"1:1\",\n \"3:4\",\n \"9:16\",\n \"21:9\",\n \"adaptive\",\n]);\nexport type VideoGenerationAspectRatio = z.infer<typeof VideoGenerationAspectRatio>;\n\nconst SandboxVideoReferencePath = z\n .string()\n .min(1)\n .max(1_024)\n .refine((value) => value.startsWith(\"/workspace/\"), {\n message: \"video references must use an absolute /workspace path\",\n });\n\nexport const VideoGenerationSource = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"text\") }).strict(),\n z\n .object({\n mode: z.literal(\"first_frame\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"first_and_last_frames\"),\n firstFramePath: SandboxVideoReferencePath,\n lastFramePath: SandboxVideoReferencePath,\n })\n .strict()\n .refine((value) => value.firstFramePath !== value.lastFramePath, {\n path: [\"lastFramePath\"],\n message: \"first and last frame paths must differ\",\n }),\n z\n .object({\n mode: z.literal(\"image_reference\"),\n imagePath: SandboxVideoReferencePath,\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"video_reference\"),\n videoPath: SandboxVideoReferencePath,\n })\n .strict(),\n]);\nexport type VideoGenerationSource = z.infer<typeof VideoGenerationSource>;\n\n/** Stable provider-neutral function-tool input. Dynamic capability facts never enter this schema. */\nexport const GenerateVideoToolInput = z\n .object({\n prompt: z\n .string()\n .min(1)\n .max(32_000)\n .refine((value) => value.trim().length > 0),\n modelId: z.string().min(1).max(256).optional(),\n source: VideoGenerationSource.optional(),\n durationSeconds: z.number().int().min(4).max(30).optional(),\n aspectRatio: VideoGenerationAspectRatio.optional(),\n resolution: VideoGenerationResolution.optional(),\n generateAudio: z.boolean().optional(),\n })\n .strict();\nexport type GenerateVideoToolInput = z.infer<typeof GenerateVideoToolInput>;\n\nexport const GetVideoGenerationCapabilitiesToolInput = z.object({}).strict();\nexport type GetVideoGenerationCapabilitiesToolInput = z.infer<\n typeof GetVideoGenerationCapabilitiesToolInput\n>;\n\nexport const VideoGenerationModelCapability = z\n .object({\n modelId: z.string().min(1).max(256),\n label: z.string().min(1).max(128),\n providerLabel: z.string().min(1).max(128),\n sourceModes: z.array(VideoGenerationSourceMode).min(1).max(5),\n resolutions: z.array(VideoGenerationResolution).min(1).max(2),\n aspectRatios: z.array(VideoGenerationAspectRatio).min(1).max(7),\n duration: z\n .object({\n minSeconds: z.number().int().positive(),\n maxSeconds: z.number().int().positive(),\n stepSeconds: z.number().int().positive(),\n })\n .strict()\n .refine((value) => value.maxSeconds >= value.minSeconds),\n supportsAudio: z.boolean(),\n })\n .strict();\nexport type VideoGenerationModelCapability = z.infer<typeof VideoGenerationModelCapability>;\n\nexport const VideoGenerationCapabilities = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n capabilityRevision: z.string().min(1).max(128),\n defaultModelId: z.string().min(1).max(256),\n models: z.array(VideoGenerationModelCapability).min(1).max(16),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.models.map((model) => model.modelId));\n if (ids.size !== value.models.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"models\"],\n message: \"model ids must be unique\",\n });\n }\n if (!ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be present in the enabled model list\",\n });\n }\n });\nexport type VideoGenerationCapabilities = z.infer<typeof VideoGenerationCapabilities>;\n\nexport const VideoGenerationPolicy = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n revision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const ids = new Set(value.enabledModelIds);\n if (ids.size !== value.enabledModelIds.length) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"enabledModelIds\"],\n message: \"enabled model ids must be unique\",\n });\n }\n if (value.defaultModelId !== null && !ids.has(value.defaultModelId)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"defaultModelId\"],\n message: \"default model must be enabled\",\n });\n }\n });\nexport type VideoGenerationPolicy = z.infer<typeof VideoGenerationPolicy>;\n\nexport const UpdateVideoGenerationPolicyRequest = z\n .object({\n expectedRevision: z.number().int().nonnegative().safe(),\n fundingSource: VideoGenerationFundingSource,\n enabledModelIds: z.array(z.string().min(1).max(256)).max(16),\n defaultModelId: z.string().min(1).max(256).nullable(),\n })\n .strict();\nexport type UpdateVideoGenerationPolicyRequest = z.infer<typeof UpdateVideoGenerationPolicyRequest>;\n\nexport const VideoGenerationFundingOption = z\n .object({\n source: VideoGenerationFundingSource,\n label: z.string().min(1).max(128),\n description: z.string().min(1).max(256),\n available: z.boolean(),\n unavailableReason: z.string().min(1).max(256).nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.available !== (value.unavailableReason === null)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"unavailableReason\"],\n message: \"available funding options cannot have an unavailable reason\",\n });\n }\n });\nexport type VideoGenerationFundingOption = z.infer<typeof VideoGenerationFundingOption>;\n\nexport const WorkspaceVideoGenerationSettings = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n policy: VideoGenerationPolicy,\n fundingOptions: z.array(VideoGenerationFundingOption).length(3),\n availableModels: z.array(VideoGenerationModelCapability).max(16),\n capabilities: VideoGenerationCapabilities.nullable(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n new Set(value.fundingOptions.map((option) => option.source)).size !== 3 ||\n !value.fundingOptions.some((option) => option.source === \"opengeni_credits\") ||\n !value.fundingOptions.some((option) => option.source === \"workspace_gateway\") ||\n !value.fundingOptions.some((option) => option.source === \"supergrok_subscription\")\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"all funding sources must be described exactly once\",\n });\n }\n const selected = value.fundingOptions.find(\n (option) => option.source === value.policy.fundingSource,\n );\n if (!selected) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"fundingOptions\"],\n message: \"the selected funding source must be described\",\n });\n } else if (!selected.available && value.capabilities !== null) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"capabilities\"],\n message: \"unavailable funding cannot expose executable capabilities\",\n });\n }\n });\nexport type WorkspaceVideoGenerationSettings = z.infer<typeof WorkspaceVideoGenerationSettings>;\n\nexport const VideoGenerationAcceptedReceipt = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"accepted\"),\n operationId: z.string().uuid(),\n })\n .strict();\nexport type VideoGenerationAcceptedReceipt = z.infer<typeof VideoGenerationAcceptedReceipt>;\n\nexport const VideoGenerationRejectedCode = z.enum([\n \"invalid_reference_path\",\n \"reference_not_stable\",\n \"reference_too_large\",\n \"reference_media_type_mismatch\",\n \"unsupported_reference_media\",\n]);\nexport type VideoGenerationRejectedCode = z.infer<typeof VideoGenerationRejectedCode>;\n\n/** Deterministic pre-admission rejection: no provider request or durable operation was created. */\nexport const VideoGenerationRejectedResult = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"rejected\"),\n code: VideoGenerationRejectedCode,\n message: z.string().min(1).max(512),\n operationCreated: z.literal(false),\n })\n .strict();\nexport type VideoGenerationRejectedResult = z.infer<typeof VideoGenerationRejectedResult>;\n\nexport const VideoGenerationToolResult = z.discriminatedUnion(\"status\", [\n VideoGenerationAcceptedReceipt,\n VideoGenerationRejectedResult,\n]);\nexport type VideoGenerationToolResult = z.infer<typeof VideoGenerationToolResult>;\n\nexport const GeneratedVideoFacts = z\n .object({\n durationSeconds: z.number().positive().max(120),\n width: z.number().int().positive().max(8_192),\n height: z.number().int().positive().max(8_192),\n fps: z.number().positive().max(120),\n hasAudio: z.boolean(),\n videoCodec: z.literal(\"h264\"),\n audioCodec: z.literal(\"aac\").nullable(),\n })\n .strict();\nexport type GeneratedVideoFacts = z.infer<typeof GeneratedVideoFacts>;\n\nexport const GeneratedVideoReceipt = z\n .object({\n type: z.literal(\"generated_video\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n artifact: RetainedArtifactReferenceSchema,\n video: GeneratedVideoFacts,\n sandboxPath: z\n .string()\n .max(256)\n .regex(\n /^\\/workspace\\/generated-videos\\/generated-video-[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\\.mp4$/,\n ),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (\n value.artifact.kind !== \"generated_video\" ||\n value.artifact.contentType !== \"video/mp4\" ||\n value.artifact.originalBytes <= 0 ||\n value.artifact.originalBytes > GENERATED_VIDEO_MAX_BYTES ||\n value.artifact.retention.policy !== \"workspace_file\" ||\n value.artifact.retrieval.maxRangeBytes !== RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"artifact\"],\n message: \"generated-video artifact metadata is invalid\",\n });\n }\n if (\n value.artifact.dimensions?.width !== value.video.width ||\n value.artifact.dimensions?.height !== value.video.height\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"video\"],\n message: \"video dimensions must match the retained artifact\",\n });\n }\n if (\n value.sandboxPath !==\n `/workspace/generated-videos/generated-video-${value.artifact.artifactId}.mp4`\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"sandboxPath\"],\n message: \"generated-video sandbox path does not match its artifact\",\n });\n }\n });\nexport type GeneratedVideoReceipt = z.infer<typeof GeneratedVideoReceipt>;\n\nexport const VideoGenerationTerminalFailureStatus = z.enum([\n \"provider_failed\",\n \"retention_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n]);\nexport type VideoGenerationTerminalFailureStatus = z.infer<\n typeof VideoGenerationTerminalFailureStatus\n>;\n\nexport const MediaGenerationResult = z.discriminatedUnion(\"status\", [\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: z.literal(\"ready\"),\n operationId: z.string().uuid(),\n receipt: GeneratedVideoReceipt,\n })\n .strict()\n .refine((value) => value.receipt.operationId === value.operationId, {\n path: [\"receipt\", \"operationId\"],\n message: \"terminal receipt must match its operation\",\n }),\n z\n .object({\n type: z.literal(\"media_generation_result\"),\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n status: VideoGenerationTerminalFailureStatus,\n operationId: z.string().uuid(),\n boundedPublicReason: z.string().min(1).max(1_000),\n })\n .strict(),\n]);\nexport type MediaGenerationResult = z.infer<typeof MediaGenerationResult>;\n\nexport const VideoGenerationPublicStatus = z.enum([\n \"preparing\",\n \"prepared\",\n \"accepted\",\n \"provider_started\",\n \"retaining\",\n \"completed\",\n \"provider_failed\",\n \"cancelled_before_submit\",\n \"outcome_unknown\",\n \"retention_failed\",\n]);\nexport type VideoGenerationPublicStatus = z.infer<typeof VideoGenerationPublicStatus>;\n\nexport const VideoGenerationOperationSummary = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n operationId: z.string().uuid(),\n modelId: z.string().min(1).max(256),\n status: VideoGenerationPublicStatus,\n createdAt: z.string().datetime({ offset: true }),\n updatedAt: z.string().datetime({ offset: true }),\n terminal: MediaGenerationResult.nullable(),\n })\n .strict();\nexport type VideoGenerationOperationSummary = z.infer<typeof VideoGenerationOperationSummary>;\n\nexport const VideoArtifactPlaybackSource = z\n .object({\n schemaVersion: z.literal(VIDEO_GENERATION_SCHEMA_VERSION),\n artifactId: z.string().uuid(),\n url: z.string().url().max(8_192),\n expiresAt: z.string().datetime({ offset: true }),\n contentType: z.literal(\"video/mp4\"),\n sizeBytes: z.number().int().positive().max(GENERATED_VIDEO_MAX_BYTES),\n sha256: z.string().regex(/^[0-9a-f]{64}$/),\n acceptRanges: z.literal(\"bytes\"),\n })\n .strict();\nexport type VideoArtifactPlaybackSource = z.infer<typeof VideoArtifactPlaybackSource>;\n","import { z } from \"zod\";\n\n/** Hard server-side ceiling for one retained-output response body. */\nexport const RETAINED_OUTPUT_MAX_PAGE_BYTES = 1024 * 1024;\n/** Default first page when the client does not send a Range header. */\nexport const RETAINED_OUTPUT_DEFAULT_PAGE_BYTES = 256 * 1024;\n/** Receipts are timeline references, never an extensible metadata bag. */\nexport const RETAINED_OUTPUT_RECEIPT_MAX_BYTES = 2 * 1024;\n\n/** Screenshot bytes are accounted separately from the 10k-token text policy. */\nexport const COMPUTER_SCREENSHOT_MAX_BYTES = 32 * 1024 * 1024;\nexport const COMPUTER_SCREENSHOT_MAX_DIMENSION = 16_384;\nexport const COMPUTER_SCREENSHOT_MAX_PIXELS = 67_108_864;\n/** Canonical ready-object retention window: 30 days from successful settlement. */\nexport const COMPUTER_SCREENSHOT_RETENTION_MS = 30 * 24 * 60 * 60 * 1_000;\n/** Hard workspace reservation across pending + ready screenshot artifacts. */\nexport const COMPUTER_SCREENSHOT_WORKSPACE_QUOTA_BYTES = 5 * 1024 * 1024 * 1024;\n/** Generated images are permanent workspace files, never inline history blobs. */\nexport const GENERATED_IMAGE_MAX_BYTES = 64 * 1024 * 1024;\n/** Generated videos are permanent workspace files and are always streamed. */\nexport const GENERATED_VIDEO_MAX_BYTES = 512 * 1024 * 1024;\n\nconst encoder = new TextEncoder();\nconst LOWERCASE_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst LOWERCASE_SHA256 = /^[0-9a-f]{64}$/;\nconst CANONICAL_MEDIA_TYPE = /^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/;\nconst WORKSPACE_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\nconst SESSION_RETRIEVAL_PATH =\n /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/sessions\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\n\nexport const RetainedOutputKind = z.enum([\n \"tool_result\",\n \"assistant_completion\",\n \"internal_update\",\n \"event_media\",\n \"computer_screenshot\",\n \"generated_image\",\n \"generated_video\",\n \"file\",\n]);\nexport type RetainedOutputKind = z.infer<typeof RetainedOutputKind>;\n\nexport const RetainedOutputUnavailableReason = z.enum([\n \"not_retained\",\n \"pending\",\n \"failed\",\n \"expired\",\n \"deleted\",\n \"missing_storage\",\n \"storage_write_failed\",\n \"quota_exceeded\",\n \"invalid_content\",\n \"oversized\",\n \"unsupported\",\n]);\nexport type RetainedOutputUnavailableReason = z.infer<typeof RetainedOutputUnavailableReason>;\n\nconst RetainedOutputUnavailableEvidenceSchema = z\n .object({\n available: z.literal(false),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\n\nexport const RetainedArtifactReferenceSchema = z\n .object({\n available: z.literal(true),\n artifactId: z.string().regex(LOWERCASE_UUID),\n kind: RetainedOutputKind,\n contentType: z.string().max(127).regex(CANONICAL_MEDIA_TYPE),\n originalBytes: z.number().int().nonnegative().safe(),\n sha256: z.string().regex(LOWERCASE_SHA256),\n retainedAt: z.string().datetime({ offset: true }),\n dimensions: z\n .object({\n width: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n height: z.number().int().positive().max(COMPUTER_SCREENSHOT_MAX_DIMENSION),\n })\n .strict()\n .optional(),\n retention: z.union([\n z\n .object({\n policy: z.literal(\"workspace_file\"),\n expiresAt: z.null(),\n })\n .strict(),\n z\n .object({\n policy: z.literal(\"session_screenshot\"),\n expiresAt: z.string().datetime({ offset: true }),\n })\n .strict(),\n ]),\n retrieval: z\n .object({\n method: z.literal(\"GET\"),\n path: z.string().max(256),\n acceptRanges: z.literal(\"bytes\"),\n maxRangeBytes: z.number().int().positive().max(RETAINED_OUTPUT_MAX_PAGE_BYTES),\n })\n .strict(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const workspaceMatch = WORKSPACE_RETRIEVAL_PATH.exec(value.retrieval.path);\n const sessionMatch = SESSION_RETRIEVAL_PATH.exec(value.retrieval.path);\n const workspaceId = workspaceMatch?.[1] ?? sessionMatch?.[1];\n const sessionId = sessionMatch?.[2];\n const artifactId = workspaceMatch?.[2] ?? sessionMatch?.[3];\n if (\n !workspaceId ||\n !LOWERCASE_UUID.test(workspaceId) ||\n (sessionId !== undefined && !LOWERCASE_UUID.test(sessionId)) ||\n artifactId !== value.artifactId\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retrieval\", \"path\"],\n message: \"retrieval path must be a workspace/session API content path for this artifact\",\n });\n }\n\n if (\n value.kind === \"computer_screenshot\" ||\n value.kind === \"generated_image\" ||\n value.kind === \"generated_video\"\n ) {\n if (!value.dimensions) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} receipts require exact dimensions`,\n });\n } else if (\n value.dimensions.width * value.dimensions.height >\n COMPUTER_SCREENSHOT_MAX_PIXELS\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"dimensions\"],\n message: `${value.kind} dimensions exceed the pixel limit`,\n });\n }\n }\n\n if (value.kind === \"generated_image\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated images require permanent workspace-file retrieval\",\n });\n }\n if (\n ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(value.contentType) ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated image media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"generated_video\") {\n if (value.retention.policy !== \"workspace_file\" || !workspaceMatch || sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"generated videos require permanent workspace-file retrieval\",\n });\n }\n if (\n value.contentType !== \"video/mp4\" ||\n value.originalBytes <= 0 ||\n value.originalBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"contentType\"],\n message: \"generated video media metadata is invalid\",\n });\n }\n }\n\n if (value.kind === \"computer_screenshot\") {\n if (value.retention.policy !== \"session_screenshot\" || !sessionMatch) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"retention\"],\n message: \"computer screenshots require session-scoped expiring retrieval\",\n });\n }\n }\n\n if (encoder.encode(JSON.stringify(value)).byteLength > RETAINED_OUTPUT_RECEIPT_MAX_BYTES) {\n ctx.addIssue({\n code: \"custom\",\n message: \"retained-output receipt exceeds its byte envelope\",\n });\n }\n });\n\n/**\n * Canonical evidence fact carried by bounded audit/NATS/SSE/UI previews.\n *\n * The available variant is intentionally provider-neutral and closed: no bucket,\n * object key, signed URL, arbitrary metadata, or producer-controlled labels can\n * cross this boundary.\n */\nexport const RetainedOutputEvidenceSchema = z.discriminatedUnion(\"available\", [\n RetainedOutputUnavailableEvidenceSchema,\n RetainedArtifactReferenceSchema,\n]);\nexport type RetainedOutputEvidence = z.infer<typeof RetainedOutputEvidenceSchema>;\nexport type RetainedArtifactReference = z.infer<typeof RetainedArtifactReferenceSchema>;\n/** @deprecated use RetainedArtifactReference. */\nexport type RetainedOutputAvailableEvidence = RetainedArtifactReference;\n\nexport const RetainedArtifactUnavailableSchema = z\n .object({\n available: z.literal(false),\n artifactId: z.string().regex(LOWERCASE_UUID),\n reason: RetainedOutputUnavailableReason,\n })\n .strict();\nexport type RetainedArtifactUnavailable = z.infer<typeof RetainedArtifactUnavailableSchema>;\n\n/** Authenticated metadata result for one opaque workspace file identity. */\nexport const RetainedArtifactMetadataSchema = z.union([\n RetainedArtifactReferenceSchema,\n RetainedArtifactUnavailableSchema,\n]);\nexport type RetainedArtifactMetadata = z.infer<typeof RetainedArtifactMetadataSchema>;\n\nexport type RetainedArtifactFileInput = {\n id: string;\n workspaceId: string;\n status: string;\n contentType: string;\n sizeBytes: number;\n sha256: string | null;\n updatedAt: string;\n};\n\nexport type RetainedScreenshotArtifactInput = RetainedArtifactFileInput & {\n sessionId: string;\n width: number;\n height: number;\n expiresAt: string;\n};\n\nexport type RetainedGeneratedImageArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\nexport type RetainedGeneratedVideoArtifactInput = RetainedArtifactFileInput & {\n width: number;\n height: number;\n};\n\n/**\n * Convert a ready, integrity-addressed workspace file into the only available\n * retained-output receipt shape. Invalid, pending, or checksum-less files fail\n * closed instead of implying that full evidence is retrievable.\n */\nexport function retainedArtifactReferenceFromFile(\n file: RetainedArtifactFileInput,\n kind: RetainedOutputKind = \"file\",\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the closed, session-scoped receipt for one ready screenshot file. */\nexport function retainedScreenshotReferenceFromFile(\n file: RetainedScreenshotArtifactInput,\n): RetainedArtifactReference | null {\n if (file.status !== \"ready\" || !file.sha256 || file.sizeBytes <= 0) return null;\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"computer_screenshot\" as const,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"session_screenshot\" as const,\n expiresAt: file.expiresAt,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/sessions/${file.sessionId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated image. */\nexport function retainedGeneratedImageReferenceFromFile(\n file: RetainedGeneratedImageArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_IMAGE_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_image\" as const,\n contentType: canonicalRetainedContentType(file.contentType),\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\n/** Build the permanent workspace receipt for one validated generated video. */\nexport function retainedGeneratedVideoReferenceFromFile(\n file: RetainedGeneratedVideoArtifactInput,\n): RetainedArtifactReference | null {\n if (\n file.status !== \"ready\" ||\n file.contentType !== \"video/mp4\" ||\n !file.sha256 ||\n file.sizeBytes <= 0 ||\n file.sizeBytes > GENERATED_VIDEO_MAX_BYTES\n ) {\n return null;\n }\n const value = {\n available: true as const,\n artifactId: file.id,\n kind: \"generated_video\" as const,\n contentType: \"video/mp4\" as const,\n originalBytes: file.sizeBytes,\n sha256: file.sha256,\n retainedAt: file.updatedAt,\n dimensions: { width: file.width, height: file.height },\n retention: {\n policy: \"workspace_file\" as const,\n expiresAt: null,\n },\n retrieval: {\n method: \"GET\" as const,\n path: `/v1/workspaces/${file.workspaceId}/artifacts/${file.id}/content`,\n acceptRanges: \"bytes\" as const,\n maxRangeBytes: RETAINED_OUTPUT_MAX_PAGE_BYTES,\n },\n };\n const parsed = RetainedArtifactReferenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nfunction canonicalRetainedContentType(value: string): string {\n const mediaType = value.split(\";\", 1)[0]?.trim().toLowerCase() ?? \"\";\n return CANONICAL_MEDIA_TYPE.test(mediaType) ? mediaType : \"application/octet-stream\";\n}\n\n/** Parse and clone a trusted server receipt; invalid/untrusted data fails closed. */\nexport function validateRetainedOutputEvidence(value: unknown): RetainedOutputEvidence | null {\n const parsed = RetainedOutputEvidenceSchema.safeParse(value);\n return parsed.success ? parsed.data : null;\n}\n\nexport function retainedOutputUnavailable(\n reason: RetainedOutputUnavailableReason = \"not_retained\",\n): RetainedOutputEvidence {\n return { available: false, reason };\n}\n\nexport type RetainedOutputResolvedRange = {\n kind: \"range\";\n start: number;\n end: number;\n length: number;\n totalBytes: number;\n status: 200 | 206;\n contentRange: string | null;\n acceptRanges: \"bytes\";\n};\n\nexport type RetainedOutputRangeResolution =\n | RetainedOutputResolvedRange\n | {\n kind: \"empty\";\n length: 0;\n totalBytes: 0;\n status: 200;\n contentRange: null;\n acceptRanges: \"bytes\";\n }\n | {\n kind: \"invalid\";\n reason: \"malformed\" | \"multipart_not_supported\" | \"numeric_overflow\" | \"range_too_large\";\n maxPageBytes: number;\n }\n | {\n kind: \"unsatisfiable\";\n reason: \"empty_artifact\" | \"start_out_of_bounds\" | \"end_before_start\" | \"zero_suffix\";\n totalBytes: number;\n contentRange: string;\n };\n\n/**\n * Resolve one RFC-style bytes range without ever licensing a response larger\n * than `maxPageBytes`. Multipart ranges and oversized explicit/suffix requests\n * fail closed. An omitted or open-ended range becomes one resumable bounded page.\n */\nexport function resolveRetainedOutputRange(\n rangeHeader: string | null | undefined,\n totalBytes: number,\n maxPageBytes = RETAINED_OUTPUT_DEFAULT_PAGE_BYTES,\n): RetainedOutputRangeResolution {\n assertRangeInputs(totalBytes, maxPageBytes);\n\n if (rangeHeader === null || rangeHeader === undefined || rangeHeader === \"\") {\n if (totalBytes === 0) {\n return {\n kind: \"empty\",\n length: 0,\n totalBytes: 0,\n status: 200,\n contentRange: null,\n acceptRanges: \"bytes\",\n };\n }\n const end = Math.min(totalBytes - 1, maxPageBytes - 1);\n const partial = end + 1 < totalBytes;\n return resolvedRange(0, end, totalBytes, partial ? 206 : 200);\n }\n\n if (rangeHeader.length > 128 || /[^\\x20-\\x7e]/.test(rangeHeader)) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n if (rangeHeader.includes(\",\")) {\n return invalidRange(\"multipart_not_supported\", maxPageBytes);\n }\n const match = /^bytes=(\\d*)-(\\d*)$/.exec(rangeHeader);\n if (!match || (!match[1] && !match[2])) {\n return invalidRange(\"malformed\", maxPageBytes);\n }\n\n const first = parseRangeInteger(match[1]);\n const second = parseRangeInteger(match[2]);\n if (first === \"overflow\" || second === \"overflow\") {\n return invalidRange(\"numeric_overflow\", maxPageBytes);\n }\n\n if (first === null) {\n const suffixLength = second;\n if (suffixLength === null) return invalidRange(\"malformed\", maxPageBytes);\n if (suffixLength === 0) return unsatisfiableRange(\"zero_suffix\", totalBytes);\n if (suffixLength > maxPageBytes) return invalidRange(\"range_too_large\", maxPageBytes);\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n const length = Math.min(suffixLength, totalBytes);\n return resolvedRange(totalBytes - length, totalBytes - 1, totalBytes, 206);\n }\n\n if (totalBytes === 0) return unsatisfiableRange(\"empty_artifact\", totalBytes);\n if (first >= totalBytes) return unsatisfiableRange(\"start_out_of_bounds\", totalBytes);\n\n if (second === null) {\n const end = Math.min(totalBytes - 1, first + maxPageBytes - 1);\n return resolvedRange(first, end, totalBytes, 206);\n }\n if (second < first) return unsatisfiableRange(\"end_before_start\", totalBytes);\n if (second - first >= maxPageBytes) {\n return invalidRange(\"range_too_large\", maxPageBytes);\n }\n return resolvedRange(first, Math.min(second, totalBytes - 1), totalBytes, 206);\n}\n\nfunction assertRangeInputs(totalBytes: number, maxPageBytes: number): void {\n if (!Number.isSafeInteger(totalBytes) || totalBytes < 0) {\n throw new RangeError(\"totalBytes must be a nonnegative safe integer\");\n }\n if (\n !Number.isSafeInteger(maxPageBytes) ||\n maxPageBytes <= 0 ||\n maxPageBytes > RETAINED_OUTPUT_MAX_PAGE_BYTES\n ) {\n throw new RangeError(\n `maxPageBytes must be an integer between 1 and ${RETAINED_OUTPUT_MAX_PAGE_BYTES}`,\n );\n }\n}\n\nfunction parseRangeInteger(value: string | undefined): number | null | \"overflow\" {\n if (!value) return null;\n // Avoid both precision loss and work proportional to an adversarial digit run.\n if (value.length > 16) return \"overflow\";\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) ? parsed : \"overflow\";\n}\n\nfunction resolvedRange(\n start: number,\n end: number,\n totalBytes: number,\n status: 200 | 206,\n): RetainedOutputResolvedRange {\n return {\n kind: \"range\",\n start,\n end,\n length: end - start + 1,\n totalBytes,\n status,\n contentRange: status === 206 ? `bytes ${start}-${end}/${totalBytes}` : null,\n acceptRanges: \"bytes\",\n };\n}\n\nfunction invalidRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"invalid\" }>[\"reason\"],\n maxPageBytes: number,\n): RetainedOutputRangeResolution {\n return { kind: \"invalid\", reason, maxPageBytes };\n}\n\nfunction unsatisfiableRange(\n reason: Extract<RetainedOutputRangeResolution, { kind: \"unsatisfiable\" }>[\"reason\"],\n totalBytes: number,\n): RetainedOutputRangeResolution {\n return {\n kind: \"unsatisfiable\",\n reason,\n totalBytes,\n contentRange: `bytes */${totalBytes}`,\n };\n}\n"],"mappings":"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","names":["z","z"]}