@dee-wan/cache 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +31 -1
  2. package/dist/{chunk-MOJBHU3S.js → chunk-LAXBP5DQ.js} +72 -173
  3. package/dist/chunk-LAXBP5DQ.js.map +1 -0
  4. package/dist/{chunk-ZREX7LLC.js → chunk-M4UOCIDQ.js} +18 -6
  5. package/dist/chunk-M4UOCIDQ.js.map +1 -0
  6. package/dist/chunk-NFBMWKY5.js +54 -0
  7. package/dist/chunk-NFBMWKY5.js.map +1 -0
  8. package/dist/{chunk-HGAUU4EU.js → chunk-O3KHMFHX.js} +51 -14
  9. package/dist/chunk-O3KHMFHX.js.map +1 -0
  10. package/dist/chunk-WJNCFFF3.js +637 -0
  11. package/dist/chunk-WJNCFFF3.js.map +1 -0
  12. package/dist/{chunk-OOPPXK7Q.js → chunk-WKZ7TKGM.js} +3 -54
  13. package/dist/chunk-WKZ7TKGM.js.map +1 -0
  14. package/dist/chunk-ZBYAKDNZ.js +45 -0
  15. package/dist/chunk-ZBYAKDNZ.js.map +1 -0
  16. package/dist/client.d.ts +14 -1
  17. package/dist/client.js +37 -1
  18. package/dist/client.js.map +1 -1
  19. package/dist/cloudflare/index.d.ts +1 -1
  20. package/dist/cloudflare/index.js +3 -3
  21. package/dist/d1/index.d.ts +18 -2
  22. package/dist/d1/index.js +33 -11
  23. package/dist/d1/index.js.map +1 -1
  24. package/dist/d1/response-lease.js +10 -8
  25. package/dist/d1/response-lease.js.map +1 -1
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.js +1 -1
  28. package/dist/response-lease.js +7 -2
  29. package/dist/{types-D-Gd11to.d.ts → types-CtErcz2a.d.ts} +13 -1
  30. package/package.json +1 -1
  31. package/dist/chunk-D2EESWMC.js +0 -19
  32. package/dist/chunk-D2EESWMC.js.map +0 -1
  33. package/dist/chunk-HGAUU4EU.js.map +0 -1
  34. package/dist/chunk-MOJBHU3S.js.map +0 -1
  35. package/dist/chunk-OOPPXK7Q.js.map +0 -1
  36. package/dist/chunk-ZREX7LLC.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/pk.ts","../src/core/plan.ts","../src/core/shape.ts","../src/core/targets.ts","../src/core/extension.ts"],"names":[],"mappings":"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","file":"chunk-M4UOCIDQ.js","sourcesContent":["export type PkValue = number | string;\n\nexport function isPlainRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function encodePk(parts: ReadonlyArray<PkValue>): string {\n return parts.map((part) => encodeURIComponent(String(part))).join(\":\");\n}\n\nfunction unwrapEquals(value: unknown): unknown {\n return isPlainRecord(value) && \"equals\" in value ? value.equals : value;\n}\n\nfunction isScalarPk(value: unknown): value is PkValue {\n return typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value));\n}\n\nexport function pkFromWhere(where: unknown, pkFields: string[], compoundName?: string): null | string {\n if (!isPlainRecord(where)) return null;\n const compound = where[compoundName ?? pkFields.join(\"_\")];\n const source = pkFields.length > 1 && isPlainRecord(compound) ? compound : where;\n const parts: PkValue[] = [];\n for (const field of pkFields) {\n const value = source === where ? unwrapEquals(where[field]) : source[field];\n if (!isScalarPk(value)) return null;\n parts.push(value);\n }\n return encodePk(parts);\n}\n\nexport function pkFromRow(row: unknown, pkFields: string[]): null | string {\n if (!isPlainRecord(row)) return null;\n const parts: PkValue[] = [];\n for (const field of pkFields) {\n const value = row[field];\n if (!isScalarPk(value)) return null;\n parts.push(value);\n }\n return encodePk(parts);\n}\n","import type { GeneratedCacheConfig, InvalidationTarget, RelationInfo } from \"./types\";\n\nimport { entityFence, GLOBAL_FENCE, modelFence, writeFence } from \"./fences\";\nimport { isPlainRecord, pkFromRow, pkFromWhere } from \"./pk\";\n\nexport const MAX_NESTED_WRITE_DEPTH = 5;\nexport const MAX_ENTITY_FENCES_PER_MODEL = 100;\n\nexport const READ_OPERATIONS = new Set([\"aggregate\", \"count\", \"findFirst\", \"findFirstOrThrow\", \"findMany\", \"findUnique\", \"findUniqueOrThrow\", \"groupBy\"]);\n\nexport const WRITE_OPERATIONS = new Set([\n \"create\",\n \"createMany\",\n \"createManyAndReturn\",\n \"delete\",\n \"deleteMany\",\n \"update\",\n \"updateMany\",\n \"updateManyAndReturn\",\n \"upsert\",\n]);\n\ninterface ModelTouch {\n pks: Set<string>;\n wide: boolean;\n}\n\nexport interface WritePlan {\n all: boolean;\n touched: Map<string, ModelTouch>;\n}\n\ninterface PlanContext {\n config: GeneratedCacheConfig;\n plan: WritePlan;\n}\n\nconst pkFieldsOf = (config: GeneratedCacheConfig, model: string): string[] => config.primaryKeyFieldsByModel[model] ?? [\"id\"];\n\nfunction touch(plan: WritePlan, model: string): ModelTouch {\n const existing = plan.touched.get(model);\n if (existing) return existing;\n const created: ModelTouch = { pks: new Set(), wide: false };\n plan.touched.set(model, created);\n return created;\n}\n\nconst touchWrite = (ctx: PlanContext, model: string): void => void touch(ctx.plan, model);\n\nconst touchWide = (ctx: PlanContext, model: string): void => void (touch(ctx.plan, model).wide = true);\n\nfunction touchEntity(ctx: PlanContext, model: string, where: unknown): void {\n const pk = pkFromWhere(where, pkFieldsOf(ctx.config, model), ctx.config.primaryKeyNameByModel[model]);\n if (pk === null) touchWide(ctx, model);\n else touch(ctx.plan, model).pks.add(pk);\n}\n\nfunction referencedFields(config: GeneratedCacheConfig, model: string): Set<string> {\n const fields = new Set<string>();\n for (const relations of Object.values(config.relationGraph)) {\n for (const relation of relations) {\n if (relation.targetModel === model && relation.localFields.length > 0) {\n for (const field of relation.foreignFields) fields.add(field);\n }\n }\n }\n return fields;\n}\n\nfunction touchReferencing(ctx: PlanContext, model: string, seen = new Set<string>()): void {\n if (seen.has(model)) return;\n seen.add(model);\n for (const [owner, relations] of Object.entries(ctx.config.relationGraph)) {\n const references = relations.some((relation) => relation.targetModel === model && relation.localFields.length > 0);\n if (!references) continue;\n touchWide(ctx, owner);\n touchReferencing(ctx, owner, seen);\n }\n}\n\nfunction touchReferencingIfKeyChanges(ctx: PlanContext, model: string, data: unknown): void {\n if (!isPlainRecord(data)) return;\n const referenced = referencedFields(ctx.config, model);\n if (Object.keys(data).some((field) => referenced.has(field))) touchReferencing(ctx, model);\n}\n\nconst asItems = (value: unknown): unknown[] => (Array.isArray(value) ? value : [value]);\n\nconst ONE_TO_ONE_REPARENTING_OPS = new Set([\"connect\", \"connectOrCreate\", \"create\", \"upsert\"]);\n\nconst FOREIGN_KEY_CHANGING_OPS = new Set([\"connect\", \"connectOrCreate\", \"create\", \"delete\", \"disconnect\", \"set\", \"upsert\"]);\n\nconst overlaps = (fields: string[], referenced: Set<string>): boolean => fields.some((field) => referenced.has(field));\n\nfunction widenIfForeignKeyReferenced(ctx: PlanContext, model: string, relation: RelationInfo): void {\n if (overlaps(relation.localFields, referencedFields(ctx.config, model))) touchReferencing(ctx, model);\n const opposite = (ctx.config.relationGraph[relation.targetModel] ?? []).find(\n (candidate) => candidate !== relation && candidate.relationName !== undefined && candidate.relationName === relation.relationName,\n );\n if (opposite && overlaps(opposite.localFields, referencedFields(ctx.config, relation.targetModel))) {\n touchReferencing(ctx, relation.targetModel);\n }\n}\n\nfunction nestedWrites(ctx: PlanContext, model: string, data: unknown, depth: number): void {\n if (!isPlainRecord(data)) return;\n for (const relation of ctx.config.relationGraph[model] ?? []) {\n const ops = data[relation.fieldName];\n if (!isPlainRecord(ops)) continue;\n const target = relation.targetModel;\n if (depth >= MAX_NESTED_WRITE_DEPTH) {\n ctx.plan.all = true;\n return;\n }\n touchWrite(ctx, target);\n const recurse = (value: unknown) => nestedWrites(ctx, target, value, depth + 1);\n for (const [op, value] of Object.entries(ops)) {\n const items = asItems(value);\n if (relation.oneToOne === true && ONE_TO_ONE_REPARENTING_OPS.has(op)) {\n touchWide(ctx, target);\n touchWide(ctx, model);\n }\n if (FOREIGN_KEY_CHANGING_OPS.has(op)) widenIfForeignKeyReferenced(ctx, model, relation);\n switch (op) {\n case \"create\":\n items.forEach(recurse);\n break;\n case \"createMany\":\n break;\n case \"connect\":\n items.forEach((item) => touchEntity(ctx, target, item));\n break;\n case \"connectOrCreate\":\n for (const item of items) {\n touchEntity(ctx, target, isPlainRecord(item) ? item.where : undefined);\n if (isPlainRecord(item)) recurse(item.create);\n }\n break;\n case \"disconnect\":\n items.forEach((item) => (isPlainRecord(item) ? touchEntity(ctx, target, item) : touchWide(ctx, target)));\n break;\n case \"delete\":\n items.forEach((item) => (isPlainRecord(item) ? touchEntity(ctx, target, item) : touchWide(ctx, target)));\n touchReferencing(ctx, target);\n break;\n case \"deleteMany\":\n touchWide(ctx, target);\n touchReferencing(ctx, target);\n break;\n case \"update\":\n case \"upsert\":\n for (const item of items) {\n const hasWhere = isPlainRecord(item) && \"where\" in item;\n if (hasWhere) touchEntity(ctx, target, item.where);\n else touchWide(ctx, target);\n const payloads = isPlainRecord(item) ? [item.data, item.create, item.update, hasWhere ? undefined : item] : [];\n for (const payload of payloads) {\n touchReferencingIfKeyChanges(ctx, target, payload);\n recurse(payload);\n }\n }\n break;\n default:\n touchWide(ctx, target);\n for (const item of items) if (isPlainRecord(item)) touchReferencingIfKeyChanges(ctx, target, item.data);\n }\n }\n }\n}\n\nexport function planWrite(config: GeneratedCacheConfig, model: string, operation: string, args: unknown): WritePlan {\n const ctx: PlanContext = { config, plan: { all: false, touched: new Map() } };\n const input = isPlainRecord(args) ? args : {};\n touchWrite(ctx, model);\n switch (operation) {\n case \"create\":\n nestedWrites(ctx, model, input.data, 0);\n break;\n case \"createMany\":\n case \"createManyAndReturn\":\n break;\n case \"update\":\n touchEntity(ctx, model, input.where);\n touchReferencingIfKeyChanges(ctx, model, input.data);\n nestedWrites(ctx, model, input.data, 0);\n break;\n case \"upsert\":\n touchEntity(ctx, model, input.where);\n touchReferencingIfKeyChanges(ctx, model, input.update);\n nestedWrites(ctx, model, input.create, 0);\n nestedWrites(ctx, model, input.update, 0);\n break;\n case \"delete\":\n touchEntity(ctx, model, input.where);\n touchReferencing(ctx, model);\n break;\n case \"deleteMany\":\n touchWide(ctx, model);\n touchReferencing(ctx, model);\n break;\n default:\n touchWide(ctx, model);\n touchReferencingIfKeyChanges(ctx, model, input.data);\n }\n return ctx.plan;\n}\n\nexport function planFences(plan: WritePlan): string[] {\n if (plan.all) return [GLOBAL_FENCE];\n const fences: string[] = [];\n for (const [model, { pks, wide }] of plan.touched) {\n fences.push(writeFence(model));\n if (wide || pks.size > MAX_ENTITY_FENCES_PER_MODEL) fences.push(modelFence(model));\n else for (const pk of pks) fences.push(entityFence(model, pk));\n }\n return fences;\n}\n\nexport function rawWritePlanFences(config: GeneratedCacheConfig, target: InvalidationTarget): string[] {\n if (\"all\" in target) return [GLOBAL_FENCE];\n const ctx: PlanContext = { config, plan: { all: false, touched: new Map() } };\n const known = new Set(config.modelNames);\n const models = \"models\" in target ? target.models : target.entities.map(({ model }) => model);\n const unknown = models.filter((model) => !known.has(model));\n if (unknown.length > 0) throw new TypeError(`cache invalidation: unknown models ${unknown.join(\", \")}`);\n if (\"models\" in target) target.models.forEach((model) => touchWide(ctx, model));\n else {\n for (const { model, pk } of target.entities) {\n const fields = pkFieldsOf(config, model);\n const encoded = pk.length === fields.length ? pkFromRow(Object.fromEntries(fields.map((field, i) => [field, pk[i]])), fields) : null;\n if (encoded === null) touchWide(ctx, model);\n else touch(ctx.plan, model).pks.add(encoded);\n }\n }\n models.forEach((model) => touchReferencing(ctx, model));\n return planFences(ctx.plan);\n}\n","import type { CacheExtensionOptions, CacheShape, ResolvedShape } from \"./types\";\n\nimport { MAX_SHAPE_TTL_SECONDS } from \"./limits\";\n\nexport const DEFAULT_SHAPE: ResolvedShape = { freshTtlSeconds: 3600, negativeTtlSeconds: 600, softTtlRatio: 0.8 };\n\nfunction validate(label: string, shape: CacheShape | undefined): void {\n if (!shape) return;\n for (const field of [\"freshTtlSeconds\", \"negativeTtlSeconds\"] as const) {\n const value = shape[field];\n if (value !== undefined && !(Number.isFinite(value) && value > 0 && value <= MAX_SHAPE_TTL_SECONDS)) {\n throw new TypeError(`cache shape ${label}: ${field} must be in (0, ${MAX_SHAPE_TTL_SECONDS}]`);\n }\n }\n const ratio = shape.softTtlRatio;\n if (ratio !== undefined && !(Number.isFinite(ratio) && ratio > 0 && ratio <= 1)) {\n throw new TypeError(`cache shape ${label}: softTtlRatio must be in (0, 1]`);\n }\n}\n\nexport function validateShapes(shape: CacheExtensionOptions[\"shape\"]): void {\n validate(\"default\", shape?.default);\n for (const [model, value] of Object.entries(shape?.byModel ?? {})) validate(`byModel.${model}`, value);\n}\n\nexport function resolveShape(shape: CacheExtensionOptions[\"shape\"], model: string): ResolvedShape {\n const pick = <K extends keyof ResolvedShape>(field: K): ResolvedShape[K] =>\n shape?.byModel?.[model]?.[field] ?? shape?.default?.[field] ?? DEFAULT_SHAPE[field];\n return { freshTtlSeconds: pick(\"freshTtlSeconds\"), negativeTtlSeconds: pick(\"negativeTtlSeconds\"), softTtlRatio: pick(\"softTtlRatio\") };\n}\n","import type { RelationInfo } from \"./types\";\n\nimport { isPlainRecord } from \"./pk\";\n\nexport const MAX_RELATION_DEPTH = 10;\n\nconst RELATION_FILTER_KEYS = [\"some\", \"every\", \"none\", \"is\", \"isNot\"];\nconst LOGICAL_KEYS = new Set([\"AND\", \"OR\", \"NOT\"]);\n\ntype Graph = Record<string, RelationInfo[]>;\n\nexport interface ReadTargets {\n models: Set<string>;\n relational: boolean;\n}\n\ninterface Walk {\n graph: Graph;\n out: ReadTargets;\n}\n\nfunction relationsOf(graph: Graph, model: string): Map<string, RelationInfo> {\n return new Map((graph[model] ?? []).map((relation) => [relation.fieldName, relation]));\n}\n\nfunction reach(walk: Walk, relation: RelationInfo): void {\n walk.out.models.add(relation.targetModel);\n walk.out.relational = true;\n}\n\nfunction walkFilter(walk: Walk, model: string, value: unknown, depth: number): boolean {\n if (depth > MAX_RELATION_DEPTH) return false;\n if (Array.isArray(value)) return value.every((item) => walkFilter(walk, model, item, depth + 1));\n if (!isPlainRecord(value)) return true;\n const relations = relationsOf(walk.graph, model);\n for (const [key, nested] of Object.entries(value)) {\n if (LOGICAL_KEYS.has(key)) {\n if (!walkFilter(walk, model, nested, depth + 1)) return false;\n continue;\n }\n const relation = relations.get(key);\n if (!relation) continue;\n reach(walk, relation);\n if (!isPlainRecord(nested)) continue;\n const wrapped = RELATION_FILTER_KEYS.filter((wrapper) => wrapper in nested);\n const inner = wrapped.length > 0 ? wrapped.map((wrapper) => nested[wrapper]) : [nested];\n if (!inner.every((item) => walkFilter(walk, relation.targetModel, item, depth + 1))) return false;\n }\n return true;\n}\n\nfunction walkCount(walk: Walk, model: string, count: unknown, depth: number): boolean {\n if (count === undefined) return true;\n const select = isPlainRecord(count) && isPlainRecord(count.select) ? count.select : null;\n for (const relation of walk.graph[model] ?? []) {\n const selected = select ? select[relation.fieldName] : count;\n if (!selected) continue;\n reach(walk, relation);\n if (isPlainRecord(selected) && !walkFilter(walk, relation.targetModel, selected.where, depth + 1)) return false;\n }\n return true;\n}\n\nfunction walkArgs(walk: Walk, model: string, args: unknown, depth: number): boolean {\n walk.out.models.add(model);\n if (!isPlainRecord(args)) return true;\n for (const filter of [args.where, args.orderBy, args.cursor]) {\n if (!walkFilter(walk, model, filter, depth)) return false;\n }\n for (const projection of [args.include, args.select]) {\n if (!isPlainRecord(projection)) continue;\n if (!walkCount(walk, model, projection._count, depth)) return false;\n for (const relation of walk.graph[model] ?? []) {\n const nested = projection[relation.fieldName];\n if (!nested) continue;\n reach(walk, relation);\n if (!walkArgs(walk, relation.targetModel, nested, depth + 1)) return false;\n }\n }\n return true;\n}\n\nexport function readTargets(graph: Graph, model: string, args: unknown): null | ReadTargets {\n const walk: Walk = { graph, out: { models: new Set(), relational: false } };\n return walkArgs(walk, model, args, 0) ? walk.out : null;\n}\n","import type { CacheExtensionOptions, InvalidationTarget, ReadResponse } from \"./types\";\n\nimport { decode, encode, sha256Hex, stableStringify } from \"./codec\";\nimport { entityFence, GLOBAL_FENCE, modelFence, writeFence } from \"./fences\";\nimport {\n CONFIG_FORMAT,\n MAX_GENERATION_LENGTH,\n MAX_LEASE_MS,\n MAX_LOCK_MS,\n MAX_VALUE_BYTES,\n PLANNER_VERSION,\n TTL_JITTER_RATIO,\n} from \"./limits\";\nimport { planFences, planWrite, rawWritePlanFences, READ_OPERATIONS, WRITE_OPERATIONS } from \"./plan\";\nimport { isPlainRecord, pkFromWhere } from \"./pk\";\nimport { resolveShape, validateShapes } from \"./shape\";\nimport { readTargets } from \"./targets\";\n\nexport class CacheUnavailableError extends Error {\n constructor(cause: unknown) {\n super(\"cache coordinator unavailable; the write was not executed\", { cause });\n this.name = \"CacheUnavailableError\";\n }\n}\n\nexport const DEFAULT_FILL_POLL_DELAYS_MS = [20, 40, 80, 160, 320, 640];\nexport const DEFAULT_LOCK_MS = 30_000;\nexport const DEFAULT_LEASE_MS = 60_000;\nexport const DEFAULT_MAX_VALUE_BYTES = 1_500_000;\n\ntype Query = (args: unknown) => Promise<unknown>;\n\ninterface OperationParams {\n __internalParams?: unknown;\n args: unknown;\n model?: string;\n operation: string;\n query: Query;\n}\n\ninterface ReadContext {\n args: unknown;\n entityFences: string[] | null;\n fences: string[];\n key: string;\n model: string;\n operation: string;\n query: Query;\n}\n\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst pickEpochs = (epochs: Record<string, number>, fences: string[]): Record<string, number> =>\n Object.fromEntries(fences.map((fence) => [fence, epochs[fence] ?? 0]));\n\nconst isNegative = (value: unknown): boolean => value === null || (Array.isArray(value) && value.length === 0);\n\nconst sum = (values: number[]): number => values.reduce((total, value) => total + value, 0);\n\nfunction internalParams(params: OperationParams): { dataPath: unknown[]; inBatch: boolean } {\n const internal = isPlainRecord(params.__internalParams) ? params.__internalParams : {};\n const transaction = internal.transaction;\n return {\n dataPath: Array.isArray(internal.dataPath) ? internal.dataPath : [],\n inBatch: isPlainRecord(transaction) && transaction.kind === \"batch\",\n };\n}\n\nfunction validateOptions(options: CacheExtensionOptions): void {\n if (options.config.configFormat !== CONFIG_FORMAT) {\n throw new TypeError(\n `cache extension: generated config format ${String(options.config.configFormat)} does not match ${CONFIG_FORMAT}; run prisma generate`,\n );\n }\n const inRange = (value: number | undefined, max: number) => value === undefined || (Number.isFinite(value) && value > 0 && value <= max);\n const problems = [\n !inRange(options.lockMs, MAX_LOCK_MS) && `lockMs must be in (0, ${MAX_LOCK_MS}]`,\n !inRange(options.leaseMs, MAX_LEASE_MS) && `leaseMs must be in (0, ${MAX_LEASE_MS}]`,\n !inRange(options.maxValueBytes, MAX_VALUE_BYTES) && `maxValueBytes must be in (0, ${MAX_VALUE_BYTES}]`,\n options.fillPollDelaysMs?.some((delay) => !(Number.isFinite(delay) && delay >= 0)) && \"fillPollDelaysMs must be non-negative\",\n options.excludeModels?.some((model) => !options.config.modelNames.includes(model)) && \"excludeModels names an unknown model\",\n options.config.hasDecimalFields &&\n !options.decimal &&\n \"decimal is required because the schema has Decimal fields (pass Prisma.Decimal)\",\n options.generation !== undefined &&\n !(options.generation.length > 0 && options.generation.length <= MAX_GENERATION_LENGTH) &&\n `generation must be 1..${MAX_GENERATION_LENGTH} characters`,\n options.coordinationGeneration !== undefined &&\n !(options.coordinationGeneration.length > 0 && options.coordinationGeneration.length <= MAX_GENERATION_LENGTH) &&\n `coordinationGeneration must be 1..${MAX_GENERATION_LENGTH} characters`,\n ].filter((problem): problem is string => typeof problem === \"string\");\n if (problems.length > 0) throw new TypeError(`cache extension: ${problems.join(\"; \")}`);\n validateShapes(options.shape);\n}\n\nexport function createCacheExtension(options: CacheExtensionOptions) {\n validateOptions(options);\n const { config, store, unsafeTestHooks: hooks } = options;\n const enabled = options.enabled ?? true;\n const excluded = new Set(options.excludeModels ?? []);\n const scope = options.scope ?? \"\";\n const generation = options.coordinationGeneration ?? `${PLANNER_VERSION}/${config.cacheVersion}/${options.generation ?? \"\"}`;\n const pollDelays = options.fillPollDelaysMs ?? DEFAULT_FILL_POLL_DELAYS_MS;\n const lockMs = options.lockMs ?? DEFAULT_LOCK_MS;\n const leaseMs = options.leaseMs ?? DEFAULT_LEASE_MS;\n const maxValueBytes = options.maxValueBytes ?? DEFAULT_MAX_VALUE_BYTES;\n const report = (error: unknown, context: string): void => options.onError?.(error, context);\n\n const isCacheable = (model: string): boolean =>\n enabled && config.cacheableByModel[model] === true && !excluded.has(model);\n\n function readContext(model: string, operation: string, args: unknown, query: Query, key: string): ReadContext | null {\n const targets = readTargets(config.relationGraph, model, args);\n if (!targets || [...targets.models].some((target) => !isCacheable(target))) return null;\n const rootPk = operation.startsWith(\"findUnique\")\n ? pkFromWhere(\n isPlainRecord(args) ? args.where : undefined,\n config.primaryKeyFieldsByModel[model] ?? [\"id\"],\n config.primaryKeyNameByModel[model],\n )\n : null;\n const base = [GLOBAL_FENCE, modelFence(model)];\n const entity = rootPk === null ? null : entityFence(model, rootPk);\n const fences = [...base, ...[...targets.models].map(writeFence), ...(entity ? [entity] : [])];\n const entityFences = entity && !targets.relational ? [...base, entity] : null;\n return { args, entityFences, fences, key, model, operation, query };\n }\n\n const release = (key: string, lockToken: string): Promise<void> =>\n store.release({ key, lockToken }).catch((error) => report(error, \"release\"));\n\n function serialize(value: unknown): null | string {\n try {\n const serialized = JSON.stringify(encode(value));\n if (new TextEncoder().encode(serialized).byteLength <= maxValueBytes) return serialized;\n report(new Error(`cache value exceeds ${maxValueBytes} bytes`), \"serialize\");\n } catch (error) {\n report(error, \"serialize\");\n }\n return null;\n }\n\n async function fill(ctx: ReadContext, lockToken: string, epochs: Record<string, number>): Promise<unknown> {\n let value: unknown;\n let cached: unknown;\n try {\n const loaded = options.sessionCache ? await options.sessionCache.fill(() => ctx.query(ctx.args)) : { value:await ctx.query(ctx.args), cached:undefined };\n value = loaded.value;\n cached = options.sessionCache ? loaded.cached : value;\n await hooks?.afterFillQuery?.();\n } catch (error) {\n await release(ctx.key, lockToken);\n throw error;\n }\n const serialized = serialize(cached);\n if (serialized === null) {\n await release(ctx.key, lockToken);\n return value;\n }\n const shape = resolveShape(options.shape, ctx.model);\n const baseTtl = ctx.operation !== \"count\" && isNegative(value) ? shape.negativeTtlSeconds : shape.freshTtlSeconds;\n const ttlMs = Math.round(baseTtl * 1000 * (1 + Math.random() * TTL_JITTER_RATIO));\n const snapshotFences = ctx.entityFences && isPlainRecord(value) ? ctx.entityFences : ctx.fences;\n try {\n const result = await store.write({\n key: ctx.key,\n lockToken,\n snapshot: pickEpochs(epochs, snapshotFences),\n softTtlMs: Math.round(ttlMs * shape.softTtlRatio),\n ttlMs,\n value: serialized,\n });\n if (!result.ok) report(new Error(`cache write rejected: ${result.reason}`), \"write\");\n } catch (error) {\n report(error, \"write\");\n await release(ctx.key, lockToken);\n }\n return value;\n }\n\n async function scheduleRefresh(ctx: ReadContext, response: Extract<ReadResponse, { kind: \"hit\" }>): Promise<void> {\n const token = response.refreshToken;\n if (!token) return;\n if (!options.waitUntil) return release(ctx.key, token);\n try {\n const refresh = () => fill(ctx, token, response.epochs).then(() => undefined);\n options.waitUntil((options.sessionCache?.background ? options.sessionCache.background(refresh) : refresh()).catch((error) => report(error, \"refresh\")));\n } catch (error) {\n report(error, \"waitUntil\");\n await release(ctx.key, token);\n }\n }\n\n async function handleRead(model: string, operation: string, args: unknown, query: Query, dataPath: unknown[]): Promise<unknown> {\n let key: string;\n try {\n const identity = [PLANNER_VERSION, config.cacheVersion, scope, ...(options.sessionCache ? [options.sessionCache.key()] : []), model, operation, dataPath, (options.keyArgs ? options.keyArgs(args) : args) ?? null];\n key = `${model}:${await sha256Hex(stableStringify(identity))}`;\n } catch (error) {\n report(error, \"key\");\n return query(args);\n }\n const ctx = readContext(model, operation, args, query, key);\n if (!ctx) return query(args);\n for (let attempt = 0; ; attempt++) {\n let response: ReadResponse;\n try {\n response = await store.read({ fences: ctx.fences, generation, key, lockMs, refresh: !!options.waitUntil });\n } catch (error) {\n report(error, \"read\");\n return query(args);\n }\n if (response.kind === \"hit\") {\n let value: unknown;\n try {\n value = decode(JSON.parse(response.value), options.decimal);\n if (options.sessionCache) {\n const cached = options.sessionCache.read(value);\n if (!cached) {\n if (response.refreshToken) await release(key, response.refreshToken);\n return (await options.sessionCache.fill(() => query(args))).value;\n }\n value = cached.value;\n }\n } catch (error) {\n report(error, \"decode\");\n if (response.refreshToken) await release(key, response.refreshToken);\n return query(args);\n }\n await scheduleRefresh(ctx, response);\n return value;\n }\n if (response.lockToken) return fill(ctx, response.lockToken, response.epochs);\n const delay = pollDelays[attempt];\n const holderTooSlow = response.lockHeldForMs !== null && response.lockHeldForMs > sum(pollDelays);\n if (response.pending || delay === undefined || holderTooSlow) return query(args);\n await sleep(delay);\n }\n }\n\n async function withLease<T>(fences: string[], run: () => Promise<T>): Promise<T> {\n const token = crypto.randomUUID();\n try {\n await store.beginWrite({ fences, generation, leaseMs, token });\n } catch (error) {\n report(error, \"beginWrite\");\n await endWrite(token, fences);\n throw new CacheUnavailableError(error);\n }\n try {\n await hooks?.afterBeginWrite?.();\n return await run();\n } finally {\n if (!hooks?.skipEndWrite?.()) await endWrite(token, fences);\n }\n }\n\n async function endWrite(token: string, fences: string[]): Promise<void> {\n await store.endWrite({ fences, token }).catch((error) => report(error, \"endWrite\"));\n }\n\n const targetFences = (target: InvalidationTarget): string[] => rawWritePlanFences(config, target);\n\n return {\n client: {\n async $cacheInvalidate(target: InvalidationTarget): Promise<void> {\n await store.invalidate(targetFences(target));\n },\n async $cacheRawWrite<T>(target: InvalidationTarget, run: () => Promise<T>): Promise<T> {\n const fences = targetFences(target);\n return enabled ? withLease(fences, run) : run();\n },\n },\n name: \"dee-wan-cache\",\n query: {\n $allModels: {\n $allOperations(params: OperationParams): Promise<unknown> {\n const { args, model, operation, query } = params;\n if (!model) return query(args);\n const { dataPath, inBatch } = internalParams(params);\n if (READ_OPERATIONS.has(operation) && isCacheable(model) && !inBatch) {\n return handleRead(model, operation, args, query, dataPath);\n }\n if (WRITE_OPERATIONS.has(operation) && enabled) {\n return withLease(planFences(planWrite(config, model, operation, args)), () => query(args));\n }\n return query(args);\n },\n },\n },\n };\n}\n"]}
@@ -0,0 +1,54 @@
1
+ // src/cloudflare/retry.ts
2
+ var BASE_BACKOFF_MS = 50;
3
+ var isRetryable = (error) => !!error && typeof error === "object" && Reflect.get(error, "retryable") === true && Reflect.get(error, "overloaded") !== true;
4
+ async function retryTransient(call, attempts, sleep) {
5
+ for (let attempt = 0; ; attempt++) {
6
+ try {
7
+ return await call();
8
+ } catch (error) {
9
+ if (attempt + 1 >= attempts || !isRetryable(error)) throw error;
10
+ await sleep(BASE_BACKOFF_MS * Math.random() * 2 ** attempt);
11
+ }
12
+ }
13
+ }
14
+
15
+ // src/cloudflare/store-options.ts
16
+ var WRITE_PATH_ATTEMPTS = 3;
17
+ var MAX_COORDINATOR_NAME_LENGTH = 256;
18
+ var LOCATION_HINTS = ["wnam", "enam", "sam", "weur", "eeur", "apac", "oc", "afr", "me"];
19
+ var isLocationHint = (value) => LOCATION_HINTS.some((hint) => hint === value);
20
+ function resolveStoreOptions(options) {
21
+ const { attempts = WRITE_PATH_ATTEMPTS, locationHint, name } = options;
22
+ const problems = [
23
+ !(typeof name === "string" && name.length > 0 && name.length <= MAX_COORDINATOR_NAME_LENGTH) && `name must be 1..${MAX_COORDINATOR_NAME_LENGTH} characters and identify one D1 database`,
24
+ !(Number.isInteger(attempts) && attempts >= 1 && attempts <= 10) && "attempts must be an integer in 1..10",
25
+ locationHint !== void 0 && !isLocationHint(locationHint) && `locationHint must be one of ${LOCATION_HINTS.join(", ")}`
26
+ ].filter((problem) => typeof problem === "string");
27
+ if (problems.length > 0) throw new TypeError(`cache store: ${problems.join("; ")}`);
28
+ return {
29
+ attempts,
30
+ name,
31
+ sleep: options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms))),
32
+ ...locationHint ? { locationHint } : {}
33
+ };
34
+ }
35
+
36
+ // src/cloudflare/store.ts
37
+ function createDurableObjectStore(namespace, options) {
38
+ const { attempts, locationHint, name, sleep } = resolveStoreOptions(options);
39
+ const stub = () => namespace.get(namespace.idFromName(name), locationHint ? { locationHint } : void 0);
40
+ const withRetry = (call) => retryTransient(() => call(stub()), attempts, sleep);
41
+ return {
42
+ inspectFences: async (request) => stub().inspectFences(request),
43
+ beginWrite: (request) => withRetry(async (coordinator) => void await coordinator.beginWrite(request)),
44
+ endWrite: (request) => withRetry(async (coordinator) => void await coordinator.endWrite(request)),
45
+ invalidate: (fences) => withRetry(async (coordinator) => void await coordinator.invalidate(fences)),
46
+ read: async (request) => stub().read(request),
47
+ release: async (request) => void await stub().release(request),
48
+ write: async (request) => stub().write(request)
49
+ };
50
+ }
51
+
52
+ export { createDurableObjectStore };
53
+ //# sourceMappingURL=chunk-NFBMWKY5.js.map
54
+ //# sourceMappingURL=chunk-NFBMWKY5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cloudflare/retry.ts","../src/cloudflare/store-options.ts","../src/cloudflare/store.ts"],"names":[],"mappings":"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","file":"chunk-NFBMWKY5.js","sourcesContent":["const BASE_BACKOFF_MS = 50;\n\nexport const isRetryable = (error: unknown): boolean =>\n !!error && typeof error === \"object\" && Reflect.get(error, \"retryable\") === true && Reflect.get(error, \"overloaded\") !== true;\n\nexport async function retryTransient<T>(call: () => Promise<T>, attempts: number, sleep: (ms: number) => Promise<void>): Promise<T> {\n for (let attempt = 0; ; attempt++) {\n try {\n return await call();\n } catch (error) {\n if (attempt + 1 >= attempts || !isRetryable(error)) throw error;\n await sleep(BASE_BACKOFF_MS * Math.random() * 2 ** attempt);\n }\n }\n}\n","export const WRITE_PATH_ATTEMPTS = 3;\nexport const MAX_COORDINATOR_NAME_LENGTH = 256;\n\nexport const LOCATION_HINTS = [\"wnam\", \"enam\", \"sam\", \"weur\", \"eeur\", \"apac\", \"oc\", \"afr\", \"me\"] as const;\n\nexport type CoordinatorLocationHint = (typeof LOCATION_HINTS)[number];\n\nexport interface DurableObjectStoreOptions {\n attempts?: number;\n locationHint?: CoordinatorLocationHint;\n name: string;\n sleep?: (ms: number) => Promise<void>;\n}\n\nexport interface ResolvedStoreOptions {\n attempts: number;\n locationHint?: CoordinatorLocationHint;\n name: string;\n sleep: (ms: number) => Promise<void>;\n}\n\nconst isLocationHint = (value: unknown): value is CoordinatorLocationHint =>\n LOCATION_HINTS.some((hint) => hint === value);\n\nexport function resolveStoreOptions(options: DurableObjectStoreOptions): ResolvedStoreOptions {\n const { attempts = WRITE_PATH_ATTEMPTS, locationHint, name } = options;\n const problems = [\n !(typeof name === \"string\" && name.length > 0 && name.length <= MAX_COORDINATOR_NAME_LENGTH) &&\n `name must be 1..${MAX_COORDINATOR_NAME_LENGTH} characters and identify one D1 database`,\n !(Number.isInteger(attempts) && attempts >= 1 && attempts <= 10) && \"attempts must be an integer in 1..10\",\n locationHint !== undefined && !isLocationHint(locationHint) && `locationHint must be one of ${LOCATION_HINTS.join(\", \")}`,\n ].filter((problem): problem is string => typeof problem === \"string\");\n if (problems.length > 0) throw new TypeError(`cache store: ${problems.join(\"; \")}`);\n return {\n attempts,\n name,\n sleep: options.sleep ?? ((ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms))),\n ...(locationHint ? { locationHint } : {}),\n };\n}\n","import type { CacheStore } from \"../core/types\";\nimport type { CacheCoordinator } from \"./coordinator\";\n\nimport { retryTransient } from \"./retry\";\nimport { type DurableObjectStoreOptions, resolveStoreOptions } from \"./store-options\";\n\nexport function createDurableObjectStore<Env>(\n namespace: DurableObjectNamespace<CacheCoordinator<Env>>,\n options: DurableObjectStoreOptions,\n): CacheStore {\n const { attempts, locationHint, name, sleep } = resolveStoreOptions(options);\n const stub = () => namespace.get(namespace.idFromName(name), locationHint ? { locationHint } : undefined);\n const withRetry = <T>(call: (coordinator: ReturnType<typeof stub>) => Promise<T>): Promise<T> =>\n retryTransient(() => call(stub()), attempts, sleep);\n\n return {\n inspectFences: async (request) => stub().inspectFences(request),\n beginWrite: (request) => withRetry(async (coordinator) => void (await coordinator.beginWrite(request))),\n endWrite: (request) => withRetry(async (coordinator) => void (await coordinator.endWrite(request))),\n invalidate: (fences) => withRetry(async (coordinator) => void (await coordinator.invalidate(fences))),\n read: async (request) => stub().read(request),\n release: async (request) => void (await stub().release(request)),\n write: async (request) => stub().write(request),\n };\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { isMutation, needsFreshness, matchesPath } from './chunk-JPK2AF7X.js';
2
2
  import { createResponseWarmup } from './chunk-A4WV6RY4.js';
3
- import { hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader, hasCacheBypass } from './chunk-D2EESWMC.js';
3
+ import { runIsolatedD1Session, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader, d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, hasCacheBypass } from './chunk-WJNCFFF3.js';
4
4
  import { registerRegionalDeadlineReporter } from './chunk-LHOK33GI.js';
5
+ import { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './chunk-ZBYAKDNZ.js';
5
6
  import { responseLeaseKey, MAX_RESPONSE_LEASE_BYTES } from './chunk-E6OZZ5UX.js';
6
7
  import { AsyncLocalStorage } from 'node:async_hooks';
7
8
 
@@ -173,7 +174,7 @@ async function responseEntry(response, permittedVary) {
173
174
  function createReadResponseLease(handler, resolve) {
174
175
  const pending = /* @__PURE__ */ new Map();
175
176
  let foreground = 0;
176
- const warming = createResponseWarmup((request, env, context) => wrapped(request, env, context), () => foreground === 0);
177
+ const warming = createResponseWarmup((request, env, context) => runIsolatedD1Session(request, () => wrapped(request, env, context)), () => foreground === 0);
177
178
  const wrapped = async (request, env, context) => {
178
179
  const requestStarted = Date.now();
179
180
  const requestGeneration = warming.snapshot();
@@ -220,11 +221,20 @@ function createReadResponseLease(handler, resolve) {
220
221
  const identity = resolved.identity();
221
222
  if (!identity) return serve(noCache(request));
222
223
  const names = [...new Set([...config.credentialHeaders, ...config.varyHeaders].map((name) => name.toLowerCase()))].sort();
223
- const permittedVary = new Set(names);
224
+ const permittedVary = /* @__PURE__ */ new Set([...names, D1_BOOKMARK_HEADER.toLowerCase()]);
224
225
  const ttl = seconds * 1e3;
225
226
  const key = await responseLeaseKey(ttl, [identity[0], request.method, request.url, ...identity.slice(1), names.map((name) => [name, headerValue(name)])]);
226
227
  if (!key) return serve(noCache(request));
227
- const cached = forceSource ? null : await readLease(key, ttl, permittedVary);
228
+ let cached = forceSource ? null : await readLease(key, ttl, permittedVary);
229
+ const bookmarkFloor = d1SessionBookmarkFloor();
230
+ if (cached && bookmarkFloor) {
231
+ const rawBookmarks = cached.response.headers.get(D1_BOOKMARK_HEADER);
232
+ const source2 = decodeD1Bookmarks(rawBookmarks);
233
+ if (!rawBookmarks || !source2 || Object.entries(bookmarkFloor).some(([id, floor]) => !source2[id] || source2[id] < floor)) {
234
+ void cached.response.body?.cancel().catch(() => void 0);
235
+ cached = null;
236
+ } else advanceD1SessionBookmarks(source2);
237
+ }
228
238
  const warmOptions = config.warmup;
229
239
  const warmGroup = warmOptions && typeof warmOptions.scopeHeader === "string" && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(warmOptions.scopeHeader) && config.varyHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ["response-warmup-group", identity, names.map((name) => [name, headerValue(name)]), request.headers.get(warmOptions.scopeHeader)]) : null;
230
240
  const credentialGroup = warmOptions?.catalogScope === "credential" && warmGroup && !config.credentialHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ["response-warmup-credential-group", identity, names.filter((name) => name !== warmOptions.scopeHeader.toLowerCase()).map((name) => [name, name === "cookie" ? withoutCookie(headerValue(name), config.freshnessCookie) : headerValue(name)])]) : null;
@@ -235,7 +245,11 @@ function createReadResponseLease(handler, resolve) {
235
245
  if (!warmOptions || !warmGroup || warming.isInternal(request) || !warming.current(requestGeneration)) return;
236
246
  const wait = context && typeof context === "object" ? Reflect.get(context, "waitUntil") : void 0;
237
247
  if (typeof wait !== "function") return;
238
- const task = warming.start(warmOptions, request, response2, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? void 0);
248
+ const warmHeaders = new Headers(request.headers);
249
+ const sourceBookmarks2 = response2.headers.get(D1_BOOKMARK_HEADER);
250
+ if (sourceBookmarks2) warmHeaders.set(D1_BOOKMARK_HEADER, sourceBookmarks2);
251
+ const warmRequest = new Request(request, { headers: warmHeaders });
252
+ const task = warming.start(warmOptions, warmRequest, response2, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? void 0);
239
253
  transferred = true;
240
254
  Reflect.apply(wait, context, [task]);
241
255
  } catch {
@@ -275,6 +289,7 @@ function createReadResponseLease(handler, resolve) {
275
289
  };
276
290
  const waitUntil = context && typeof context === "object" ? Reflect.get(context, "waitUntil") : void 0;
277
291
  if (cached) {
292
+ const cachedResponse = cached.response;
278
293
  warming.verify(request);
279
294
  if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === "function") {
280
295
  try {
@@ -291,16 +306,29 @@ function createReadResponseLease(handler, resolve) {
291
306
  const headers = new Headers(request.headers);
292
307
  for (const name of ["range", "if-match", "if-unmodified-since", "if-range", "if-none-match", "if-modified-since"]) headers.delete(name);
293
308
  headers.set("cache-control", "no-cache");
309
+ const cachedBookmarks = cachedResponse.headers.get(D1_BOOKMARK_HEADER);
310
+ if (cachedBookmarks) headers.set(D1_BOOKMARK_HEADER, cachedBookmarks);
294
311
  if (config.freshnessHeader !== void 0) headers.set(config.freshnessHeader, "1");
295
312
  const source2 = new Request(request.url, { method: "GET", headers, signal: new AbortController().signal });
296
313
  const lease2 = {};
297
314
  try {
298
- const response2 = await scope.run(lease2, () => handler(source2, env, context));
299
- try {
300
- await fillResponse(response2, lease2, started, () => refresh.valid);
301
- } finally {
302
- void response2.body?.cancel().catch(() => void 0);
303
- }
315
+ await runIsolatedD1Session(source2, async () => {
316
+ const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease2, () => handler(source2, env, context))));
317
+ let response2 = tracked.value;
318
+ const bookmarks = responseD1SessionBookmarks(response2.headers, tracked.bookmarks);
319
+ if (bookmarks) {
320
+ const headers2 = new Headers(response2.headers);
321
+ const encoded = serializeD1Bookmarks(bookmarks);
322
+ if (encoded) headers2.set(D1_BOOKMARK_HEADER, encoded);
323
+ varyD1Bookmarks(headers2);
324
+ response2 = new Response(response2.body, { status: response2.status, statusText: response2.statusText, headers: headers2 });
325
+ }
326
+ try {
327
+ await fillResponse(response2, lease2, started, () => refresh.valid);
328
+ } finally {
329
+ void response2.body?.cancel().catch(() => void 0);
330
+ }
331
+ });
304
332
  } catch {
305
333
  }
306
334
  }).finally(() => {
@@ -321,7 +349,16 @@ function createReadResponseLease(handler, resolve) {
321
349
  const lease = {};
322
350
  const source = noCache(request);
323
351
  if (config.freshnessHeader !== void 0) source.headers.set(config.freshnessHeader, "1");
324
- const response = await scope.run(lease, () => serve(source));
352
+ const sourceResult = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => serve(source))));
353
+ let response = sourceResult.value;
354
+ const sourceBookmarks = responseD1SessionBookmarks(response.headers, sourceResult.bookmarks);
355
+ if (sourceBookmarks) {
356
+ const headers = new Headers(response.headers);
357
+ varyD1Bookmarks(headers);
358
+ const encoded = serializeD1Bookmarks(sourceBookmarks);
359
+ if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);
360
+ response = new Response(response.body, { status: response.status, statusText: response.statusText, headers });
361
+ }
325
362
  const fill = fillResponse(response, lease, requestStarted, () => true, priorRefresh?.task);
326
363
  try {
327
364
  if (!warming.isInternal(request) && typeof waitUntil === "function") {
@@ -384,5 +421,5 @@ async function forwardReadLease(request, service) {
384
421
  }
385
422
 
386
423
  export { createReadResponseLease, forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin };
387
- //# sourceMappingURL=chunk-HGAUU4EU.js.map
388
- //# sourceMappingURL=chunk-HGAUU4EU.js.map
424
+ //# sourceMappingURL=chunk-O3KHMFHX.js.map
425
+ //# sourceMappingURL=chunk-O3KHMFHX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/response-lease.ts"],"names":["response","source","sourceBookmarks","lease","headers"],"mappings":"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","file":"chunk-O3KHMFHX.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createResponseWarmup, type ReadResponseWarmupOptions } from './response-warmup';\nexport type { ReadResponseWarmupOptions, ReadResponseWarmupTarget, ReadResponseWarmupContext } from './response-warmup';\nimport { registerRegionalDeadlineReporter } from './d1/regional-deadline';\nimport type { D1CacheProfile } from './d1/profile';\nimport { MAX_RESPONSE_LEASE_BYTES, responseLeaseKey } from './d1/regional';\nimport { isMutation, matchesPath, needsFreshness } from './d1/read-freshness-policy';\nimport { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\nimport { d1SessionBookmarkFloor, advanceD1SessionBookmarks, runIsolatedD1Session, trackD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, runPrimaryD1SessionSource } from './d1/session';\nimport { hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader } from './d1/request-freshness';\n\ninterface LeaseScope { deadline?: number; dataDeadline?: number }\nconst scope = new AsyncLocalStorage<LeaseScope>();\nexport function limitReadResponseDataUntil(deadline: number): void { const current = scope.getStore(); if (current) current.dataDeadline = Math.min(current.dataDeadline ?? Infinity, deadline); }\nregisterRegionalDeadlineReporter(limitReadResponseDataUntil);\n\nexport function limitReadResponseLeaseUntil(deadline: number | undefined): void {\n const current = scope.getStore();\n if (!current) return;\n if (deadline === undefined || !Number.isFinite(deadline)) { current.deadline = 0; return; }\n current.deadline = Math.min(current.deadline ?? Infinity, deadline);\n}\n\nconst noCache = (request: Request): Request => {\n const headers = new Headers(request.headers);\n headers.set('cache-control', 'no-cache');\n return new Request(request, { headers });\n};\nconst bypass = (request: Request, ignoreCacheControl: boolean): boolean => request.body !== null || ['range','if-match','if-unmodified-since','if-range'].some((name) => request.headers.has(name)) || (!ignoreCacheControl && hasCacheBypass(request));\n\nfunction entityTags(value: string): string[] | null {\n const tags: string[] = [];\n let index = 0;\n const whitespace = () => { while (value[index] === ' ' || value[index] === '\\t') index++; };\n whitespace();\n while (index < value.length) {\n if (value.slice(index, index + 2) === 'W/') index += 2;\n if (value[index++] !== '\"') return null;\n const start = index;\n while (index < value.length && value[index] !== '\"') {\n const code = value.charCodeAt(index++);\n if (code < 33 || code === 127 || code > 255) return null;\n }\n if (value[index] !== '\"') return null;\n tags.push(value.slice(start, index++));\n whitespace();\n if (index === value.length) break;\n if (value[index++] !== ',') return null;\n whitespace();\n if (index === value.length) return null;\n }\n return tags.length ? tags : null;\n}\n\nfunction httpDate(value: string | null): number {\n if (!value || !/^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \\d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d{4} \\d{2}:\\d{2}:\\d{2} GMT|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \\d{2}-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{2} \\d{2}:\\d{2}:\\d{2} GMT|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ \\d]\\d \\d{2}:\\d{2}:\\d{2} \\d{4})$/.test(value)) return NaN;\n const time = Date.parse(value.endsWith(' GMT') ? value : `${value} GMT`);\n if (!Number.isFinite(time)) return NaN;\n const date = new Date(time);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const day = days[date.getUTCDay()];\n const month = months[date.getUTCMonth()];\n const number = String(date.getUTCDate()).padStart(2, '0');\n const clock = date.toUTCString().slice(17, 25);\n const rfc850 = `${day}, ${number}-${month}-${String(date.getUTCFullYear() % 100).padStart(2, '0')} ${clock} GMT`;\n const asctime = `${day?.slice(0, 3)} ${month} ${String(date.getUTCDate()).padStart(2, ' ')} ${clock} ${date.getUTCFullYear()}`;\n return value === date.toUTCString() || value === rfc850 || value === asctime ? time : NaN;\n}\n\nfunction conditionalHit(request: Request, response: Response): Response {\n const condition = request.headers.get('if-none-match');\n let matches = false;\n if (condition !== null) {\n if (condition.trim() === '*') matches = true;\n else {\n const requested = entityTags(condition);\n const current = entityTags(response.headers.get('etag') ?? '');\n matches = !!requested && !!current && current.length === 1 && requested.includes(current[0] ?? '');\n }\n } else {\n const modified = httpDate(response.headers.get('last-modified'));\n const since = httpDate(request.headers.get('if-modified-since'));\n matches = Number.isFinite(modified) && Number.isFinite(since) && modified <= since;\n }\n if (!matches) return response;\n const headers = new Headers(response.headers);\n headers.delete('content-length');\n void response.body?.cancel().catch(() => undefined);\n return new Response(null, { status:304, headers });\n}\n\nfunction selectedCookies(header: string | null, names: readonly string[]): string | null {\n const selected = (header ?? '').split(';').map((part) => part.trimStart()).filter((part) => {\n const separator = part.indexOf('=');\n return separator > 0 && names.includes(part.slice(0, separator).trim());\n });\n return selected.length ? selected.join(';') : null;\n}\n\nfunction withoutCookie(header: string | null, name: string): string | null {\n if (!header) return null;\n const value = header.split(';').filter((part) => {\n const separator = part.indexOf('=');\n return separator < 0 || part.slice(0, separator).trim() !== name;\n }).join(';').trim();\n return value || null;\n}\n\nconst metadataHeader = 'x-dee-wan-lease-meta';\n\nasync function readLease(key: string, ttl: number, permittedVary: Set<string>): Promise<{ response: Response; expires: number } | null> {\n let cached: Response | undefined;\n let transferred = false;\n try {\n cached = await caches.default.match(key);\n if (!cached || cached.status !== 200 || !eligibleHeaders(cached.headers, permittedVary)) return null;\n const metadata = cached.headers.get(metadataHeader);\n if (!metadata) return null;\n const parsed: unknown = JSON.parse(metadata);\n if (!Array.isArray(parsed) || parsed.length !== 3) return null;\n const [started, expires, control] = parsed;\n const now = Date.now();\n if (!Number.isSafeInteger(started) || !Number.isSafeInteger(expires) || started > now || expires <= now || expires > started + ttl || (control !== null && typeof control !== 'string')) return null;\n const headers = new Headers(cached.headers);\n headers.delete(metadataHeader);\n if (control === null) headers.delete('cache-control');\n else headers.set('cache-control', control);\n const response = new Response(cached.body, { status:cached.status, statusText:cached.statusText, headers });\n transferred = true;\n return { response, expires };\n } catch { return null; }\n finally { if (cached && !transferred) void cached.body?.cancel().catch(() => undefined); }\n}\n\nfunction eligibleHeaders(headers: Headers, permittedVary: Set<string>): boolean {\n if (headers.has('set-cookie') || headers.has('content-encoding') || headers.has('content-disposition') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((name) => permittedVary.has(name.trim().toLowerCase()));\n}\n\nasync function responseEntry(response: Response, permittedVary: Set<string>): Promise<Uint8Array | null> {\n if (response.status !== 200 || response.headers.has(metadataHeader) || !eligibleHeaders(response.headers, permittedVary)) return null;\n const reader = response.clone().body?.getReader();\n if (!reader) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(Error('body timeout')), 5000); });\n for (;;) {\n const part = await Promise.race([reader.read(), timeout]);\n if (part.done) break;\n size += part.value.byteLength;\n if (size > MAX_RESPONSE_LEASE_BYTES) return null;\n chunks.push(part.value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal:true, ignoreBOM:false }).decode(bytes);\n JSON.parse(body);\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== size)) return null;\n return bytes;\n } catch { return null; }\n finally { if (timer !== undefined) clearTimeout(timer); void reader.cancel().catch(() => undefined); }\n}\n\nexport type ReadResponseLeasePolicy = Omit<NonNullable<D1CacheProfile['readResponseLease']>, 'databaseBinding' | 'deploymentEnv'>;\nexport interface ReadResponseLeaseOptions extends ReadResponseLeasePolicy {\n namespace: string;\n deployment: string;\n database: string;\n seconds: number;\n warmup?: ReadResponseWarmupOptions;\n}\ntype LeaseConfig = (NonNullable<D1CacheProfile['readResponseLease']> | ReadResponseLeaseOptions) & { warmup?: ReadResponseWarmupOptions };\ninterface ResolvedLease { config: LeaseConfig; seconds: number; identity: () => unknown[] | null }\nexport function createReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, resolve: (env: Env) => ResolvedLease | null): (request: Request, env: Env, context: Context) => Promise<Response> {\n const pending = new Map<string, { valid: boolean; task: Promise<void> }>();\n let foreground = 0;\n const warming = createResponseWarmup<Env, Context>((request, env, context) => runIsolatedD1Session(request, () => wrapped(request, env, context)), () => foreground === 0);\n const wrapped = async (request: Request, env: Env, context: Context): Promise<Response> => {\n const requestStarted = Date.now();\n const requestGeneration = warming.snapshot();\n const serve = async (input: Request): Promise<Response> => {\n if (input.method !== 'GET' || warming.isInternal(request)) return handler(input, env, context);\n foreground++;\n try { return await handler(input, env, context); }\n finally { foreground--; }\n };\n const resolved = resolve(env);\n if (!resolved) return serve(request);\n const { config, seconds } = resolved;\n const maxSeconds = config.maxSeconds ?? 5;\n const refreshAhead = config.refreshAheadSeconds ?? 0;\n if (!Number.isInteger(refreshAhead) || refreshAhead < 0 || refreshAhead > maxSeconds || !Number.isInteger(maxSeconds) || maxSeconds < 1 || maxSeconds > 300 || !Number.isInteger(seconds) || seconds <= 0 || seconds > maxSeconds || !/^[A-Za-z0-9_-]+$/.test(config.freshnessCookie)) return serve(request);\n if (config.cookieNames !== undefined && (!Array.isArray(config.cookieNames) || config.cookieNames.length === 0 || !config.cookieNames.every((name) => typeof name === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) || new Set(config.cookieNames).size !== config.cookieNames.length || !config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie') || (config.freshnessCookieMode === 'generation' && !config.cookieNames.includes(config.freshnessCookie)))) return serve(request);\n const generationMode = config.freshnessCookieMode === 'generation' && config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie');\n if (isMutation(request.method)) {\n const response = await handler(request, env, context);\n if (response.status < 200 || response.status >= 300 || !needsFreshness(request.method, new URL(request.url).pathname, config.freshnessCookieExcludedPaths)) return response;\n warming.invalidate();\n const headers = new Headers(response.headers);\n headers.append('set-cookie', `${config.freshnessCookie}=${generationMode ? crypto.randomUUID() : '1'}; Max-Age=${maxSeconds}; Path=/; HttpOnly; SameSite=Lax${new URL(request.url).protocol === 'https:' ? '; Secure' : ''}`);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n if (request.method !== 'GET') return serve(request);\n if (hasFreshnessCookie(request, config.freshnessCookie) && (!generationMode || !hasFreshnessGeneration(request, config.freshnessCookie))) return serve(noCache(request));\n if (config.freshnessHeader !== undefined && !validFreshnessHeader(config.freshnessHeader)) return serve(noCache(request));\n const forceSource = config.freshnessHeader !== undefined && request.headers.has(config.freshnessHeader);\n const url = new URL(request.url);\n const headerValue = (name: string): string | null => name.toLowerCase() === 'cookie' && config.cookieNames !== undefined ? selectedCookies(request.headers.get('cookie'), config.cookieNames) : request.headers.get(name);\n const hasCredential = (name: string): boolean => {\n const value = headerValue(name);\n if (name.toLowerCase() !== 'cookie' || config.cookieNames === undefined) return !!value?.trim();\n return (value ?? '').split(';').some((pair) => { const separator = pair.indexOf('='); return separator > 0 && pair.slice(0, separator).trim() !== config.freshnessCookie && !!pair.slice(separator + 1).trim(); });\n };\n if (bypass(request, config.ignoreRequestCacheControl === true) || !matchesPath(url.pathname, config.paths) || config.bypassQueryParams?.some((name) => url.searchParams.has(name)) || !config.credentialHeaders.some(hasCredential)) return serve(forceSource ? noCache(request) : request);\n const identity = resolved.identity();\n if (!identity) return serve(noCache(request));\n const names = [...new Set([...config.credentialHeaders, ...config.varyHeaders].map((name) => name.toLowerCase()))].sort();\n const permittedVary = new Set([...names, D1_BOOKMARK_HEADER.toLowerCase()]);\n const ttl = seconds * 1000;\n const key = await responseLeaseKey(ttl, [identity[0], request.method, request.url, ...identity.slice(1), names.map((name) => [name, headerValue(name)])]);\n if (!key) return serve(noCache(request));\n let cached = forceSource ? null : await readLease(key, ttl, permittedVary);\n const bookmarkFloor = d1SessionBookmarkFloor();\n if (cached && bookmarkFloor) {\n const rawBookmarks = cached.response.headers.get(D1_BOOKMARK_HEADER);\n const source = decodeD1Bookmarks(rawBookmarks);\n if (!rawBookmarks || !source || Object.entries(bookmarkFloor).some(([id, floor]) => !source[id] || source[id] < floor)) {\n void cached.response.body?.cancel().catch(() => undefined);\n cached = null;\n } else advanceD1SessionBookmarks(source);\n }\n const warmOptions = config.warmup;\n const warmGroup = warmOptions && typeof warmOptions.scopeHeader === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(warmOptions.scopeHeader) && config.varyHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-group', identity, names.map((name) => [name, headerValue(name)]), request.headers.get(warmOptions.scopeHeader)]) : null;\n const credentialGroup = warmOptions?.catalogScope === 'credential' && warmGroup && !config.credentialHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-credential-group', identity, names.filter((name) => name !== warmOptions.scopeHeader.toLowerCase()).map((name) => [name, name === 'cookie' ? withoutCookie(headerValue(name), config.freshnessCookie) : headerValue(name)])]) : null;\n const eligible = (target: URL) => matchesPath(target.pathname, config.paths) && !config.bypassQueryParams?.some((name) => target.searchParams.has(name));\n const scheduleWarm = (response: Response) => {\n let transferred = false;\n try {\n if (!warmOptions || !warmGroup || warming.isInternal(request) || !warming.current(requestGeneration)) return;\n const wait: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (typeof wait !== 'function') return;\n const warmHeaders = new Headers(request.headers);\n const sourceBookmarks = response.headers.get(D1_BOOKMARK_HEADER);\n if (sourceBookmarks) warmHeaders.set(D1_BOOKMARK_HEADER, sourceBookmarks);\n const warmRequest = new Request(request, { headers:warmHeaders });\n const task = warming.start(warmOptions, warmRequest, response, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? undefined);\n transferred = true;\n Reflect.apply(wait, context, [task]);\n } catch { /* Warming is optional. */ }\n finally { if (!transferred) void response.body?.cancel().catch(() => undefined); }\n };\n const fillResponse = async (response: Response, lease: LeaseScope, started: number, allowed: () => boolean, beforePut?: Promise<void>) => {\n if (lease.deadline === undefined || !Number.isFinite(lease.deadline)) return;\n let warmResponse: Response | undefined;\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { warmResponse = response.clone(); } catch { /* Warming is optional. */ }\n }\n const expires = Math.floor(Math.min(started + ttl, lease.deadline, lease.dataDeadline ?? Infinity));\n try {\n const entry = await responseEntry(response, permittedVary);\n if (entry && beforePut) await beforePut;\n if (entry && Number.isSafeInteger(expires) && expires > Date.now() && allowed() && warming.current(requestGeneration) && warming.allowed(request)) {\n warming.verify(request);\n if (warmResponse) { const owned = warmResponse; warmResponse = undefined; scheduleWarm(owned); }\n const headers = new Headers(response.headers);\n headers.set(metadataHeader, JSON.stringify([Math.floor(started), expires, headers.get('cache-control')]));\n headers.set('cache-control', 'public, max-age=300');\n await caches.default.put(key, new Response(entry, { status:response.status, statusText:response.statusText, headers }));\n }\n } catch { /* Cache filling must not affect the source response. */ }\n finally { if (warmResponse) void warmResponse.body?.cancel().catch(() => undefined); }\n };\n const waitUntil: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (cached) {\n const cachedResponse = cached.response;\n warming.verify(request);\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { scheduleWarm(cached.response.clone()); } catch { /* Warming is optional. */ }\n }\n if (refreshAhead > 0 && refreshAhead <= seconds && cached.expires - Date.now() <= refreshAhead * 1000 && typeof waitUntil === 'function' && !pending.has(key)) {\n const refresh = { valid:true, task:Promise.resolve() };\n let accepted = false;\n refresh.task = Promise.resolve().then(async () => {\n if (!accepted) return;\n const started = Date.now();\n const headers = new Headers(request.headers);\n for (const name of ['range', 'if-match', 'if-unmodified-since', 'if-range', 'if-none-match', 'if-modified-since']) headers.delete(name);\n headers.set('cache-control', 'no-cache');\n const cachedBookmarks = cachedResponse.headers.get(D1_BOOKMARK_HEADER);\n if (cachedBookmarks) headers.set(D1_BOOKMARK_HEADER, cachedBookmarks);\n if (config.freshnessHeader !== undefined) headers.set(config.freshnessHeader, '1');\n const source = new Request(request.url, { method:'GET', headers, signal:new AbortController().signal });\n const lease: LeaseScope = {};\n try {\n await runIsolatedD1Session(source, async () => {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => handler(source, env, context))));\n let response = tracked.value;\n const bookmarks = responseD1SessionBookmarks(response.headers, tracked.bookmarks);\n if (bookmarks) {\n const headers = new Headers(response.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n varyD1Bookmarks(headers);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n try { await fillResponse(response, lease, started, () => refresh.valid); }\n finally { void response.body?.cancel().catch(() => undefined); }\n });\n } catch { /* Refresh failures leave the old lease untouched. */ }\n }).finally(() => { if (pending.get(key) === refresh) pending.delete(key); });\n pending.set(key, refresh);\n try { Reflect.apply(waitUntil, context, [refresh.task]); accepted = true; } catch { pending.delete(key); }\n }\n return conditionalHit(request, cached.response);\n }\n const priorRefresh = pending.get(key);\n if (priorRefresh) priorRefresh.valid = false;\n const lease: LeaseScope = {};\n const source = noCache(request);\n if (config.freshnessHeader !== undefined) source.headers.set(config.freshnessHeader, '1');\n const sourceResult = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => serve(source))));\n let response = sourceResult.value;\n const sourceBookmarks = responseD1SessionBookmarks(response.headers, sourceResult.bookmarks);\n if (sourceBookmarks) {\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const encoded = serializeD1Bookmarks(sourceBookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n const fill = fillResponse(response, lease, requestStarted, () => true, priorRefresh?.task);\n try {\n if (!warming.isInternal(request) && typeof waitUntil === 'function') { Reflect.apply(waitUntil, context, [fill]); return response; }\n } catch { /* Await the fill if the request context is unavailable. */ }\n await fill;\n return response;\n };\n return wrapped;\n}\n\nexport function wrapReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: ReadResponseLeaseOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, () => {\n if (![options.namespace, options.deployment, options.database].every((value) => typeof value === 'string' && value.trim().length > 0)) return null;\n const identity = { ...options };\n delete identity.warmup;\n return { config: options, seconds: options.seconds, identity: () => ['response-lease-v1', identity] };\n });\n}\n\nconst proofHeader = 'x-dee-wan-read-lease-deadline';\n\nfunction withoutProof(request: Request): Request {\n if (!request.headers.has(proofHeader)) return request;\n const headers = new Headers(request.headers);\n headers.delete(proofHeader);\n return new Request(request, { headers });\n}\n\nfunction responseWithProof(response: Response, deadline?: number): Response {\n if (!response.headers.has(proofHeader) && deadline === undefined) return response;\n const headers = new Headers(response.headers);\n headers.delete(proofHeader);\n if (deadline !== undefined) headers.set(proofHeader, String(Math.floor(deadline)));\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers, ...(response.webSocket ? { webSocket:response.webSocket } : {}) });\n}\n\nexport function wrapReadResponseLeaseOrigin<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n const lease: LeaseScope = {};\n const response = await scope.run(lease, () => handler(withoutProof(request), env, context));\n const deadline = lease.deadline;\n const type = response.headers.get('content-type') ?? '';\n if (request.method !== 'GET' || response.status !== 200 || response.headers.has('set-cookie') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(type) || deadline === undefined || !Number.isFinite(deadline) || deadline <= Date.now()) return responseWithProof(response);\n return responseWithProof(response, Math.min(deadline, lease.dataDeadline ?? Infinity));\n };\n}\n\nexport async function forwardReadLease(request: Request, service: { fetch(request: Request): Promise<Response> }): Promise<Response> {\n let forwarded = withoutProof(request);\n if (request.method === 'GET') {\n const headers = new Headers(forwarded.headers);\n headers.set('accept-encoding', 'identity');\n forwarded = new Request(forwarded, { headers });\n }\n const response = await service.fetch(forwarded);\n const raw = response.headers.get(proofHeader);\n if (raw && /^\\d+$/.test(raw)) {\n const deadline = Number(raw);\n if (Number.isSafeInteger(deadline) && deadline > Date.now()) limitReadResponseLeaseUntil(deadline);\n }\n return responseWithProof(response);\n}\n"]}