@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/d1/json-read.ts","../../src/d1/regional-response.ts"],"names":["identity","requestIdentity","response"],"mappings":"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","file":"index.js","sourcesContent":["import type { D1Database } from '@cloudflare/workers-types';\nimport { cacheD1Read, type D1ReadOptions } from './read';\n\nconst MAX_BODY_BYTES = 1_000_000;\nconst sensitiveHeaders = new Set(['authorization', 'cookie', 'proxy-authorization', 'x-api-key', 'x-site-token', 'x-capability', 'x-capability-token']);\nconst ephemeralHeaders = new Set(['cf-ray', 'x-request-id', 'traceparent', 'tracestate', 'cf-connecting-ip', 'x-forwarded-for']);\nconst hopHeaders = new Set(['connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization', 'te', 'trailer', 'transfer-encoding', 'upgrade']);\n\nexport interface D1JsonReadOptions extends Omit<D1ReadOptions<never>, 'cacheable' | 'regionalTtlMs'> {\n request: Request;\n buffered?: true;\n}\n\nexport interface JsonResponseEntry {\n status: number;\n statusText: string;\n headers: [string, string][];\n body: string;\n}\n\nfunction requestIdentity(request: Request): unknown | null {\n if (request.method !== 'GET') return null;\n for (const name of ['range', 'if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since', 'if-range', 'x-capability', 'x-capability-token', 'x-site-token', 'x-api-key', 'authorization']) if (request.headers.has(name)) return null;\n const url = new URL(request.url);\n if (/(?:^|\\/)(?:capability|capabilities)(?:\\/|$)/i.test(url.pathname)) return null;\n for (const name of url.searchParams.keys()) if (/^(?:preview|token|capability|capability_token)$/i.test(name)) return null;\n const headers = [...request.headers.entries()].filter(([name]) => !sensitiveHeaders.has(name.toLowerCase()) && !ephemeralHeaders.has(name.toLowerCase())).sort(([a], [b]) => a.localeCompare(b));\n return { url: url.toString(), headers };\n}\n\nexport async function responseEntry(response: Response): Promise<JsonResponseEntry | null> {\n if (response.status !== 200 || response.headers.has('set-cookie') || response.headers.has('content-disposition') || response.headers.has('transfer-encoding') || response.headers.has('content-encoding')) return null;\n if (!/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(response.headers.get('content-type') ?? '')) return null;\n const vary = response.headers.get('vary');\n if (vary && vary.split(',').some((name) => name.trim() === '*' || (sensitiveHeaders.has(name.trim().toLowerCase()) || ephemeralHeaders.has(name.trim().toLowerCase())))) return null;\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || !Number.isSafeInteger(Number(length)) || Number(length) > MAX_BODY_BYTES)) 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(new Error('buffered body timeout')), 1000); });\n for (;;) {\n const next = await Promise.race([reader.read(), timeout]);\n if (next.done) break;\n size += next.value.byteLength;\n if (size > MAX_BODY_BYTES) return null;\n chunks.push(next.value);\n }\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n void reader.cancel().catch(() => undefined);\n }\n if (length !== null && size !== Number(length)) return null;\n const joined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { joined.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(joined);\n try { JSON.parse(body); } catch { return null; }\n const headers: [string, string][] = [...response.headers.entries()].filter(([name]) => !hopHeaders.has(name.toLowerCase()));\n return { status: response.status, statusText: response.statusText, headers, body };\n}\n\nexport async function cacheD1JsonRead(database: D1Database, options: D1JsonReadOptions, load: () => Promise<Response>): Promise<Response> {\n if (options.buffered !== true) return load();\n let identity: unknown | null;\n try { identity = requestIdentity(options.request); } catch { return load(); }\n if (identity === null) return load();\n let original: Response | undefined;\n const entry = await cacheD1Read<JsonResponseEntry | null>(database, {\n key: ['json-response-v1', options.key, identity],\n scope: options.scope,\n ...(options.dependencies ? { dependencies: options.dependencies } : {}),\n ...(options.ttlMs !== undefined ? { ttlMs: options.ttlMs } : {}),\n cacheable: (value) => value !== null,\n }, async () => {\n original = await load();\n try { return await responseEntry(original); } catch { return null; }\n });\n if (original) return original;\n if (!entry || entry.status !== 200 || typeof entry.statusText !== 'string' || typeof entry.body !== 'string' || !Array.isArray(entry.headers) || !entry.headers.every((header) => Array.isArray(header) && header.length === 2 && typeof header[0] === 'string' && typeof header[1] === 'string' && !hopHeaders.has(header[0].toLowerCase()) && header[0].toLowerCase() !== 'set-cookie' && header[0].toLowerCase() !== 'content-disposition')) return load();\n try {\n JSON.parse(entry.body);\n const headers = new Headers(entry.headers);\n if (headers.has('content-encoding') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return load();\n const vary = headers.get('vary');\n if (vary && vary.split(',').some((name) => name.trim() === '*' || sensitiveHeaders.has(name.trim().toLowerCase()) || ephemeralHeaders.has(name.trim().toLowerCase()))) return load();\n return new Response(entry.body, { status: entry.status, statusText: entry.statusText, headers });\n } catch { return load(); }\n}\n","import { responseEntry, type JsonResponseEntry } from './json-read';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\n\nexport interface RegionalResponseOptions {\n namespace: string;\n ttlMs: number;\n waitUntil?: (promise: Promise<void>) => void;\n}\n\nconst sensitive = /^(?:cookie|authorization|proxy-authorization|(?:x-)?api-key|(?:x-)?site-token|(?:x-)?site-key|(?:x-)?capability(?:-token)?|x-preview|preview)$/i;\nconst ephemeral = /^(?:cf-ray|x-request-id|traceparent|tracestate|cf-connecting-ip|x-forwarded-for)$/i;\nconst hop = /^(?:connection|keep-alive|proxy-authenticate|proxy-authorization|te|trailer|transfer-encoding|upgrade)$/i;\nconst conditional = /^(?:range|if-match|if-none-match|if-modified-since|if-unmodified-since|if-range)$/i;\n\nfunction identity(request: Request): unknown | null {\n if (request.method !== 'GET') return null;\n const url = new URL(request.url);\n if (/(?:^|\\/)(?:capability|capabilities)(?:\\/|$)/i.test(url.pathname)) return null;\n if ([...url.searchParams.keys()].some((name) => /^(?:preview|token|capability|capability_token)$/i.test(name))) return null;\n if ((request.headers.get('cache-control') ?? '').split(',').some((part) => /^\\s*(?:no-cache|no-store)(?:\\s*=|\\s*$)/i.test(part))) return null;\n const headers: [string, string][] = [];\n for (const [name, value] of request.headers) {\n if (sensitive.test(name) || conditional.test(name) || /(?:^|[-_])(?:capability|preview)(?:[-_]|$)/i.test(name)) return null;\n if (!ephemeral.test(name)) headers.push([name, value]);\n }\n headers.sort(([a], [b]) => a.localeCompare(b));\n return [url.toString(), headers];\n}\n\nfunction eligible(headers: Headers): boolean {\n const control = headers.get('cache-control') ?? '';\n const directives = control.split(',').map((part) => part.trim());\n if (!directives.some((part) => /^public$/i.test(part)) || directives.some((part) => /^(?:private|no-store|no-cache)(?:\\s*=|$)/i.test(part))) return false;\n if (!directives.some((part) => /^s-maxage\\s*=\\s*\"?[1-9]\\d*\"?$/i.test(part))) return false;\n for (const [name] of headers) if (hop.test(name)) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((part) => {\n const name = part.trim();\n return !!name && name !== '*' && !sensitive.test(name) && !ephemeral.test(name) && !conditional.test(name) && !hop.test(name) && !/(?:^|[-_])(?:capability|preview)(?:[-_]|$)/i.test(name);\n });\n}\n\nfunction reconstruct(value: unknown): Response | null {\n if (!value || typeof value !== 'object') return null;\n const entry = value as Partial<JsonResponseEntry>;\n if (entry.status !== 200 || typeof entry.statusText !== 'string' || typeof entry.body !== 'string' || !Array.isArray(entry.headers) || !entry.headers.every((header) => Array.isArray(header) && header.length === 2 && typeof header[0] === 'string' && typeof header[1] === 'string')) return null;\n try {\n if (new TextEncoder().encode(entry.body).byteLength > 1_000_000) return null;\n JSON.parse(entry.body);\n const headers = new Headers(entry.headers);\n const length = headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== new TextEncoder().encode(entry.body).byteLength)) return null;\n if (!eligible(headers) || headers.has('set-cookie') || headers.has('content-disposition') || headers.has('content-encoding') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return null;\n headers.set('cache-control', 'public, max-age=0, must-revalidate');\n return new Response(entry.body, { status:200, statusText:entry.statusText, headers });\n } catch { return null; }\n}\n\nexport async function cacheRegionalResponse(request: Request, options: RegionalResponseOptions, load: () => Promise<Response>): Promise<Response> {\n let requestIdentity: unknown | null;\n try { requestIdentity = identity(request); } catch { return load(); }\n if (requestIdentity === null || typeof options.namespace !== 'string' || !options.namespace.trim()) return load();\n const key = await regionalKey(options.ttlMs, ['http-response', options.namespace, options.ttlMs, requestIdentity]);\n if (!key) return load();\n const cached = await regionalRead(key, options.ttlMs);\n if (cached) {\n const response = reconstruct(cached.value);\n if (response) return response;\n }\n const started = Date.now();\n const response = await load();\n if (!eligible(response.headers)) return response;\n let entry: JsonResponseEntry | null;\n try { entry = await responseEntry(response); } catch { return response; }\n if (!entry) return response;\n const output = reconstruct(entry);\n if (!output) return response;\n const sharedAge = (response.headers.get('cache-control') ?? '').split(',').map((part) => /^\\s*s-maxage\\s*=\\s*\"?([1-9]\\d*)\"?\\s*$/i.exec(part)).filter((match): match is RegExpExecArray => match !== null).map((match) => Number(match[1]));\n const fill = regionalWrite(key, Math.min(options.ttlMs, ...sharedAge.map((age) => age * 1000)), started, entry);\n if (options.waitUntil) {\n try { options.waitUntil(fill); } catch { await fill; }\n } else await fill;\n return output;\n}\n"]}
1
+ {"version":3,"sources":["../../src/d1/json-read.ts","../../src/d1/regional-response.ts"],"names":["identity","requestIdentity","response"],"mappings":"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","file":"index.js","sourcesContent":["import type { D1Database } from '@cloudflare/workers-types';\nimport { cacheD1Read, type D1ReadOptions } from './read';\n\nconst MAX_BODY_BYTES = 1_000_000;\nconst sensitiveHeaders = new Set(['authorization', 'cookie', 'proxy-authorization', 'x-api-key', 'x-site-token', 'x-capability', 'x-capability-token']);\nconst ephemeralHeaders = new Set(['cf-ray', 'x-request-id', 'traceparent', 'tracestate', 'cf-connecting-ip', 'x-forwarded-for']);\nconst hopHeaders = new Set(['connection', 'keep-alive', 'proxy-authenticate', 'proxy-authorization', 'te', 'trailer', 'transfer-encoding', 'upgrade']);\n\nexport interface D1JsonReadOptions extends Omit<D1ReadOptions<never>, 'cacheable' | 'regionalTtlMs'> {\n request: Request;\n buffered?: true;\n}\n\nexport interface JsonResponseEntry {\n status: number;\n statusText: string;\n headers: [string, string][];\n body: string;\n}\n\nfunction requestIdentity(request: Request): unknown | null {\n if (request.method !== 'GET') return null;\n for (const name of ['range', 'if-match', 'if-none-match', 'if-modified-since', 'if-unmodified-since', 'if-range', 'x-capability', 'x-capability-token', 'x-site-token', 'x-api-key', 'authorization']) if (request.headers.has(name)) return null;\n const url = new URL(request.url);\n if (/(?:^|\\/)(?:capability|capabilities)(?:\\/|$)/i.test(url.pathname)) return null;\n for (const name of url.searchParams.keys()) if (/^(?:preview|token|capability|capability_token)$/i.test(name)) return null;\n const headers = [...request.headers.entries()].filter(([name]) => !sensitiveHeaders.has(name.toLowerCase()) && !ephemeralHeaders.has(name.toLowerCase())).sort(([a], [b]) => a.localeCompare(b));\n return { url: url.toString(), headers };\n}\n\nexport async function responseEntry(response: Response): Promise<JsonResponseEntry | null> {\n if (response.status !== 200 || response.headers.has('set-cookie') || response.headers.has('content-disposition') || response.headers.has('transfer-encoding') || response.headers.has('content-encoding')) return null;\n if (!/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(response.headers.get('content-type') ?? '')) return null;\n const vary = response.headers.get('vary');\n if (vary && vary.split(',').some((name) => name.trim() === '*' || (sensitiveHeaders.has(name.trim().toLowerCase()) || ephemeralHeaders.has(name.trim().toLowerCase())))) return null;\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || !Number.isSafeInteger(Number(length)) || Number(length) > MAX_BODY_BYTES)) 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(new Error('buffered body timeout')), 1000); });\n for (;;) {\n const next = await Promise.race([reader.read(), timeout]);\n if (next.done) break;\n size += next.value.byteLength;\n if (size > MAX_BODY_BYTES) return null;\n chunks.push(next.value);\n }\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n void reader.cancel().catch(() => undefined);\n }\n if (length !== null && size !== Number(length)) return null;\n const joined = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { joined.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal: true, ignoreBOM: false }).decode(joined);\n try { JSON.parse(body); } catch { return null; }\n const headers: [string, string][] = [...response.headers.entries()].filter(([name]) => !hopHeaders.has(name.toLowerCase()));\n return { status: response.status, statusText: response.statusText, headers, body };\n}\n\nexport async function cacheD1JsonRead(database: D1Database, options: D1JsonReadOptions, load: () => Promise<Response>): Promise<Response> {\n if (options.buffered !== true) return load();\n let identity: unknown | null;\n try { identity = requestIdentity(options.request); } catch { return load(); }\n if (identity === null) return load();\n let original: Response | undefined;\n const entry = await cacheD1Read<JsonResponseEntry | null>(database, {\n key: ['json-response-v1', options.key, identity],\n scope: options.scope,\n ...(options.dependencies ? { dependencies: options.dependencies } : {}),\n ...(options.ttlMs !== undefined ? { ttlMs: options.ttlMs } : {}),\n cacheable: (value) => value !== null,\n }, async () => {\n original = await load();\n try { return await responseEntry(original); } catch { return null; }\n });\n if (original) return original;\n if (!entry || entry.status !== 200 || typeof entry.statusText !== 'string' || typeof entry.body !== 'string' || !Array.isArray(entry.headers) || !entry.headers.every((header) => Array.isArray(header) && header.length === 2 && typeof header[0] === 'string' && typeof header[1] === 'string' && !hopHeaders.has(header[0].toLowerCase()) && header[0].toLowerCase() !== 'set-cookie' && header[0].toLowerCase() !== 'content-disposition')) return load();\n try {\n JSON.parse(entry.body);\n const headers = new Headers(entry.headers);\n if (headers.has('content-encoding') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return load();\n const vary = headers.get('vary');\n if (vary && vary.split(',').some((name) => name.trim() === '*' || sensitiveHeaders.has(name.trim().toLowerCase()) || ephemeralHeaders.has(name.trim().toLowerCase()))) return load();\n return new Response(entry.body, { status: entry.status, statusText: entry.statusText, headers });\n } catch { return load(); }\n}\n","import { responseEntry, type JsonResponseEntry } from './json-read';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './bookmarks';\nimport { d1SessionBookmarkFloor, trackD1SessionSource, responseD1SessionBookmarks, advanceD1SessionBookmarks, varyD1Bookmarks, runPrimaryD1SessionSource } from './session';\n\nexport interface RegionalResponseOptions {\n namespace: string;\n ttlMs: number;\n waitUntil?: (promise: Promise<void>) => void;\n}\n\nconst sensitive = /^(?:cookie|authorization|proxy-authorization|(?:x-)?api-key|(?:x-)?site-token|(?:x-)?site-key|(?:x-)?capability(?:-token)?|x-preview|preview)$/i;\nconst ephemeral = /^(?:cf-ray|x-request-id|traceparent|tracestate|cf-connecting-ip|x-forwarded-for)$/i;\nconst hop = /^(?:connection|keep-alive|proxy-authenticate|proxy-authorization|te|trailer|transfer-encoding|upgrade)$/i;\nconst conditional = /^(?:range|if-match|if-none-match|if-modified-since|if-unmodified-since|if-range)$/i;\n\nfunction identity(request: Request): unknown | null {\n if (request.method !== 'GET') return null;\n const url = new URL(request.url);\n if (/(?:^|\\/)(?:capability|capabilities)(?:\\/|$)/i.test(url.pathname)) return null;\n if ([...url.searchParams.keys()].some((name) => /^(?:preview|token|capability|capability_token)$/i.test(name))) return null;\n if ((request.headers.get('cache-control') ?? '').split(',').some((part) => /^\\s*(?:no-cache|no-store)(?:\\s*=|\\s*$)/i.test(part))) return null;\n const headers: [string, string][] = [];\n for (const [name, value] of request.headers) {\n if (sensitive.test(name) || conditional.test(name) || /(?:^|[-_])(?:capability|preview)(?:[-_]|$)/i.test(name)) return null;\n if (!ephemeral.test(name) && name.toLowerCase() !== D1_BOOKMARK_HEADER.toLowerCase()) headers.push([name, value]);\n }\n headers.sort(([a], [b]) => a.localeCompare(b));\n return [url.toString(), headers];\n}\n\nfunction eligible(headers: Headers): boolean {\n const control = headers.get('cache-control') ?? '';\n const directives = control.split(',').map((part) => part.trim());\n if (!directives.some((part) => /^public$/i.test(part)) || directives.some((part) => /^(?:private|no-store|no-cache)(?:\\s*=|$)/i.test(part))) return false;\n if (!directives.some((part) => /^s-maxage\\s*=\\s*\"?[1-9]\\d*\"?$/i.test(part))) return false;\n for (const [name] of headers) if (hop.test(name)) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((part) => {\n const name = part.trim();\n return !!name && name !== '*' && !sensitive.test(name) && !ephemeral.test(name) && !conditional.test(name) && !hop.test(name) && !/(?:^|[-_])(?:capability|preview)(?:[-_]|$)/i.test(name);\n });\n}\n\nfunction reconstruct(value: unknown): Response | null {\n if (!value || typeof value !== 'object') return null;\n const entry = value as Partial<JsonResponseEntry>;\n if (entry.status !== 200 || typeof entry.statusText !== 'string' || typeof entry.body !== 'string' || !Array.isArray(entry.headers) || !entry.headers.every((header) => Array.isArray(header) && header.length === 2 && typeof header[0] === 'string' && typeof header[1] === 'string')) return null;\n try {\n if (new TextEncoder().encode(entry.body).byteLength > 1_000_000) return null;\n JSON.parse(entry.body);\n const headers = new Headers(entry.headers);\n const length = headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== new TextEncoder().encode(entry.body).byteLength)) return null;\n if (!eligible(headers) || headers.has('set-cookie') || headers.has('content-disposition') || headers.has('content-encoding') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return null;\n headers.set('cache-control', 'public, max-age=0, must-revalidate');\n return new Response(entry.body, { status:200, statusText:entry.statusText, headers });\n } catch { return null; }\n}\n\nexport async function cacheRegionalResponse(request: Request, options: RegionalResponseOptions, load: () => Promise<Response>): Promise<Response> {\n let requestIdentity: unknown | null;\n try { requestIdentity = identity(request); } catch { return load(); }\n if (requestIdentity === null || typeof options.namespace !== 'string' || !options.namespace.trim()) return load();\n const floor = d1SessionBookmarkFloor();\n const key = await regionalKey(options.ttlMs, ['http-response', floor ? 'session-v1' : null, options.namespace, options.ttlMs, requestIdentity]);\n if (!key) return load();\n const cached = await regionalRead(key, options.ttlMs);\n if (cached) {\n const response = reconstruct(cached.value);\n if (response) {\n if (!floor) return response;\n const raw = response.headers.get(D1_BOOKMARK_HEADER);\n const source = decodeD1Bookmarks(raw);\n if (raw && source && Object.entries(floor).every(([id, bookmark]) => source[id] && source[id] >= bookmark)) {\n advanceD1SessionBookmarks(source);\n return response;\n }\n void response.body?.cancel().catch(() => undefined);\n }\n }\n const started = Date.now();\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(load));\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 if (!eligible(response.headers)) return response;\n let entry: JsonResponseEntry | null;\n try { entry = await responseEntry(response); } catch { return response; }\n if (!entry) return response;\n const output = reconstruct(entry);\n if (!output) return response;\n const sharedAge = (response.headers.get('cache-control') ?? '').split(',').map((part) => /^\\s*s-maxage\\s*=\\s*\"?([1-9]\\d*)\"?\\s*$/i.exec(part)).filter((match): match is RegExpExecArray => match !== null).map((match) => Number(match[1]));\n const fill = regionalWrite(key, Math.min(options.ttlMs, ...sharedAge.map((age) => age * 1000)), started, entry);\n if (options.waitUntil) {\n try { options.waitUntil(fill); } catch { await fill; }\n } else await fill;\n return output;\n}\n"]}
@@ -1,16 +1,18 @@
1
- import { d1CacheRuntime } from '../chunk-MOJBHU3S.js';
2
- import '../chunk-ZREX7LLC.js';
3
- import '../chunk-OOPPXK7Q.js';
4
- import '../chunk-OQRNVGQE.js';
5
- import { isD1BindingName } from '../chunk-AENVFT2S.js';
6
- import { createReadResponseLease } from '../chunk-HGAUU4EU.js';
7
- export { forwardReadLease as forwardD1ReadLease, limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin } from '../chunk-HGAUU4EU.js';
1
+ import { d1CacheRuntime } from '../chunk-LAXBP5DQ.js';
2
+ import '../chunk-NFBMWKY5.js';
3
+ import { createReadResponseLease } from '../chunk-O3KHMFHX.js';
4
+ export { forwardReadLease as forwardD1ReadLease, limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin } from '../chunk-O3KHMFHX.js';
8
5
  import '../chunk-JPK2AF7X.js';
9
6
  import '../chunk-A4WV6RY4.js';
10
- import '../chunk-D2EESWMC.js';
7
+ import '../chunk-WJNCFFF3.js';
11
8
  import '../chunk-LHOK33GI.js';
9
+ import '../chunk-M4UOCIDQ.js';
10
+ import '../chunk-ZBYAKDNZ.js';
11
+ import '../chunk-WKZ7TKGM.js';
12
12
  import '../chunk-E6OZZ5UX.js';
13
+ import '../chunk-OQRNVGQE.js';
13
14
  import '../chunk-ZCMZJKGN.js';
15
+ import { isD1BindingName } from '../chunk-AENVFT2S.js';
14
16
 
15
17
  // src/d1/read-response-lease.ts
16
18
  function wrapD1ReadResponseLease(handler, profile, options) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/d1/read-response-lease.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAMO,SAAS,uBAAA,CAAqD,OAAA,EAA8E,OAAA,EAAyB,OAAA,EAAuH;AACjS,EAAA,OAAO,uBAAA,CAAwB,OAAA,EAAS,CAAC,GAAA,KAAQ;AAC/C,IAAA,MAAM,SAAS,OAAA,CAAQ,iBAAA;AACvB,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,MAAM,aAAsB,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,oBAAA,CAAsB,CAAA;AACvF,IAAA,MAAM,OAAA,GAAU,OAAO,UAAA,KAAe,QAAA,IAAY,sBAAA,CAAuB,KAAK,UAAU,CAAA,GAAI,MAAA,CAAO,UAAU,CAAA,GAAI,CAAA;AACjH,IAAA,MAAM,OAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,OAAO,aAAa,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,OAAO,eAAe,CAAA;AACjE,IAAA,MAAM,UAAU,QAAA,IAAY,OAAO,aAAa,QAAA,GAAW,cAAA,CAAe,QAAQ,CAAA,GAAI,MAAA;AACtF,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAA,CAAO,iBAAiB,OAAO,CAAA,IAAK,OAAO,OAAA,KAAY,QAAA,IAAY,CAAC,OAAA,CAAQ,IAAA,MAAU,CAAC,OAAA,EAAS,gBAAgB,CAAC,OAAA,CAAQ,kBAAkB,OAAO,IAAA;AACvK,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAO,OAAA,CAAQ,MAAA,EAAO,GAAI,MAAA,EAAQ,OAAA,EAAS,UAAU,MAAM;AACzG,MAAA,MAAM,aAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC/C,QAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA,EAAG;AACrC,QAAA,MAAM,aAAa,KAAA,IAAS,OAAO,UAAU,QAAA,GAAW,cAAA,CAAe,KAAK,CAAA,GAAI,MAAA;AAChF,QAAA,IAAI,CAAC,UAAA,EAAY,YAAA,IAAgB,CAAC,UAAA,CAAW,kBAAkB,OAAO,IAAA;AACtE,QAAA,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,EAAM,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,eAAA,EAAiB,UAAA,CAAW,gBAAgB,CAAC,CAAA;AAAA,MAC/H;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAA,OAAO,CAAC,sBAAA,EAAwB,OAAA,EAAS,OAAA,EAAS,UAAU,CAAA;AAAA,IAC9D,CAAA,EAAE;AAAA,EACJ,CAAC,CAAA;AACH","file":"response-lease.js","sourcesContent":["import { d1CacheRuntime } from './env';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createReadResponseLease, type ReadResponseWarmupOptions } from '../response-lease';\n\nexport { limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin, forwardReadLease as forwardD1ReadLease } from '../response-lease';\n\nexport function wrapD1ReadResponseLease<Env extends object, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, profile: D1CacheProfile, options?: { warmup?: ReadResponseWarmupOptions }): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, (env) => {\n const config = profile.readResponseLease;\n if (!config) return null;\n const rawSeconds: unknown = Reflect.get(env, `${profile.envPrefix}_READ_ACCESS_SECONDS`);\n const seconds = typeof rawSeconds === 'string' && /^(?:0|[1-9]\\d{0,2})$/.test(rawSeconds) ? Number(rawSeconds) : 0;\n const release: unknown = Reflect.get(env, config.deploymentEnv);\n const database: unknown = Reflect.get(env, config.databaseBinding);\n const runtime = database && typeof database === 'object' ? d1CacheRuntime(database) : undefined;\n if (!isD1BindingName(config.databaseBinding, profile) || typeof release !== 'string' || !release.trim() || !runtime?.readsEnabled || !runtime.regionalIdentity) return null;\n return { config: options?.warmup ? { ...config, warmup:options.warmup } : config, seconds, identity: () => {\n const identities: unknown[] = [];\n for (const [name, value] of Object.entries(env)) {\n if (!isD1BindingName(name, profile)) continue;\n const dependency = value && typeof value === 'object' ? d1CacheRuntime(value) : undefined;\n if (!dependency?.readsEnabled || !dependency.regionalIdentity) return null;\n identities.push([name, dependency.databaseId, dependency.generation, dependency.coordinatorName, dependency.regionalIdentity]);\n }\n identities.sort((a, b) => String(a).localeCompare(String(b)));\n return ['d1-response-lease-v2', profile, release, identities];\n } };\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/d1/read-response-lease.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAMO,SAAS,uBAAA,CAAqD,OAAA,EAA8E,OAAA,EAAyB,OAAA,EAAuH;AACjS,EAAA,OAAO,uBAAA,CAAwB,OAAA,EAAS,CAAC,GAAA,KAAQ;AAC/C,IAAA,MAAM,SAAS,OAAA,CAAQ,iBAAA;AACvB,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,MAAM,aAAsB,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,oBAAA,CAAsB,CAAA;AACvF,IAAA,MAAM,OAAA,GAAU,OAAO,UAAA,KAAe,QAAA,IAAY,sBAAA,CAAuB,KAAK,UAAU,CAAA,GAAI,MAAA,CAAO,UAAU,CAAA,GAAI,CAAA;AACjH,IAAA,MAAM,OAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,OAAO,aAAa,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,OAAO,eAAe,CAAA;AACjE,IAAA,MAAM,UAAU,QAAA,IAAY,OAAO,aAAa,QAAA,GAAW,cAAA,CAAe,QAAQ,CAAA,GAAI,MAAA;AACtF,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAA,CAAO,iBAAiB,OAAO,CAAA,IAAK,OAAO,OAAA,KAAY,QAAA,IAAY,CAAC,OAAA,CAAQ,IAAA,MAAU,CAAC,OAAA,EAAS,gBAAgB,CAAC,OAAA,CAAQ,kBAAkB,OAAO,IAAA;AACvK,IAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAA,GAAS,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAO,OAAA,CAAQ,MAAA,EAAO,GAAI,MAAA,EAAQ,OAAA,EAAS,UAAU,MAAM;AACzG,MAAA,MAAM,aAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC/C,QAAA,IAAI,CAAC,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA,EAAG;AACrC,QAAA,MAAM,aAAa,KAAA,IAAS,OAAO,UAAU,QAAA,GAAW,cAAA,CAAe,KAAK,CAAA,GAAI,MAAA;AAChF,QAAA,IAAI,CAAC,UAAA,EAAY,YAAA,IAAgB,CAAC,UAAA,CAAW,kBAAkB,OAAO,IAAA;AACtE,QAAA,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,EAAM,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,eAAA,EAAiB,UAAA,CAAW,gBAAgB,CAAC,CAAA;AAAA,MAC/H;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC5D,MAAA,OAAO,CAAC,sBAAA,EAAwB,OAAA,EAAS,OAAA,EAAS,UAAU,CAAA;AAAA,IAC9D,CAAA,EAAE;AAAA,EACJ,CAAC,CAAA;AACH","file":"response-lease.js","sourcesContent":["import { d1CacheRuntime } from './env';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createReadResponseLease, type ReadResponseWarmupOptions } from '../response-lease';\n\nexport { limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin, forwardReadLease as forwardD1ReadLease } from '../response-lease';\n\nexport function wrapD1ReadResponseLease<Env extends object, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, profile: D1CacheProfile, options?: { warmup?: ReadResponseWarmupOptions }): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, (env) => {\n const config = profile.readResponseLease;\n if (!config) return null;\n const rawSeconds: unknown = Reflect.get(env, `${profile.envPrefix}_READ_ACCESS_SECONDS`);\n const seconds = typeof rawSeconds === 'string' && /^(?:0|[1-9]\\d{0,2})$/.test(rawSeconds) ? Number(rawSeconds) : 0;\n const release: unknown = Reflect.get(env, config.deploymentEnv);\n const database: unknown = Reflect.get(env, config.databaseBinding);\n const runtime = database && typeof database === 'object' ? d1CacheRuntime(database) : undefined;\n if (!isD1BindingName(config.databaseBinding, profile) || typeof release !== 'string' || !release.trim() || !runtime?.readsEnabled || !runtime.regionalIdentity) return null;\n return { config: options?.warmup ? { ...config, warmup:options.warmup } : config, seconds, identity: () => {\n const identities: unknown[] = [];\n for (const [name, value] of Object.entries(env)) {\n if (!isD1BindingName(name, profile)) continue;\n const dependency = value && typeof value === 'object' ? d1CacheRuntime(value) : undefined;\n if (!dependency?.readsEnabled || !dependency.regionalIdentity) return null;\n identities.push([name, dependency.databaseId, dependency.generation, dependency.coordinatorName, dependency.regionalIdentity]);\n }\n identities.sort((a, b) => String(a).localeCompare(String(b)));\n return ['d1-response-lease-v2', profile, release, identities];\n } };\n });\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { e as CacheExtensionOptions, f as InvalidationTarget } from './types-D-Gd11to.js';
2
- export { g as CacheShape, C as CacheStore, h as CacheTestHooks, D as DecimalConstructor, G as GeneratedCacheConfig, I as InspectFencesRequest, a as InspectFencesResponse, i as RelationInfo } from './types-D-Gd11to.js';
1
+ import { f as CacheExtensionOptions, g as InvalidationTarget } from './types-CtErcz2a.js';
2
+ export { h as CacheShape, C as CacheStore, i as CacheTestHooks, D as DecimalConstructor, G as GeneratedCacheConfig, I as InspectFencesRequest, a as InspectFencesResponse, j as RelationInfo } from './types-CtErcz2a.js';
3
3
 
4
4
  declare class CacheUnavailableError extends Error {
5
5
  constructor(cause: unknown);
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { CacheUnavailableError, createCacheExtension } from './chunk-ZREX7LLC.js';
1
+ export { CacheUnavailableError, createCacheExtension } from './chunk-M4UOCIDQ.js';
2
2
  import './chunk-OQRNVGQE.js';
3
3
  import './chunk-ZCMZJKGN.js';
4
4
  //# sourceMappingURL=index.js.map
@@ -1,9 +1,14 @@
1
- export { forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin } from './chunk-HGAUU4EU.js';
1
+ export { forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin } from './chunk-O3KHMFHX.js';
2
2
  export { matchesPath as matchesReadResponsePath } from './chunk-JPK2AF7X.js';
3
3
  import './chunk-A4WV6RY4.js';
4
- import './chunk-D2EESWMC.js';
4
+ import './chunk-WJNCFFF3.js';
5
5
  import './chunk-LHOK33GI.js';
6
+ import './chunk-M4UOCIDQ.js';
7
+ import './chunk-ZBYAKDNZ.js';
8
+ import './chunk-WKZ7TKGM.js';
6
9
  import './chunk-E6OZZ5UX.js';
10
+ import './chunk-OQRNVGQE.js';
7
11
  import './chunk-ZCMZJKGN.js';
12
+ import './chunk-AENVFT2S.js';
8
13
  //# sourceMappingURL=response-lease.js.map
9
14
  //# sourceMappingURL=response-lease.js.map
@@ -95,6 +95,17 @@ interface CacheTestHooks {
95
95
  interface DecimalConstructor {
96
96
  new (value: string): unknown;
97
97
  }
98
+ interface CacheSessionHooks {
99
+ key(): unknown;
100
+ read(value: unknown): {
101
+ value: unknown;
102
+ } | null;
103
+ fill(load: () => Promise<unknown>): Promise<{
104
+ value: unknown;
105
+ cached: unknown;
106
+ }>;
107
+ background?(operation: () => Promise<void>): Promise<void>;
108
+ }
98
109
  interface CacheExtensionOptions {
99
110
  config: GeneratedCacheConfig;
100
111
  decimal?: DecimalConstructor;
@@ -109,6 +120,7 @@ interface CacheExtensionOptions {
109
120
  maxValueBytes?: number;
110
121
  onError?: (error: unknown, context: string) => void;
111
122
  scope?: string;
123
+ sessionCache?: CacheSessionHooks;
112
124
  shape?: {
113
125
  byModel?: Record<string, CacheShape>;
114
126
  default?: CacheShape;
@@ -129,4 +141,4 @@ type InvalidationTarget = {
129
141
  models: string[];
130
142
  };
131
143
 
132
- export type { BeginWriteRequest as B, CacheStore as C, DecimalConstructor as D, EndWriteRequest as E, GeneratedCacheConfig as G, InspectFencesRequest as I, ReadRequest as R, WriteRequest as W, InspectFencesResponse as a, ReadResponse as b, WriteResult as c, ReleaseRequest as d, CacheExtensionOptions as e, InvalidationTarget as f, CacheShape as g, CacheTestHooks as h, RelationInfo as i };
144
+ export type { BeginWriteRequest as B, CacheStore as C, DecimalConstructor as D, EndWriteRequest as E, GeneratedCacheConfig as G, InspectFencesRequest as I, ReadRequest as R, WriteRequest as W, InspectFencesResponse as a, ReadResponse as b, WriteResult as c, ReleaseRequest as d, CacheSessionHooks as e, CacheExtensionOptions as f, InvalidationTarget as g, CacheShape as h, CacheTestHooks as i, RelationInfo as j };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dee-wan/cache",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "Prisma read cache for Cloudflare Workers and D1, coordinated by a Durable Object",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,19 +0,0 @@
1
- // src/d1/request-freshness.ts
2
- var validFreshnessHeader = (name) => /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name);
3
- var hasFreshnessCookie = (request, name) => (request.headers.get("cookie") ?? "").split(";").some((part) => part.split("=", 1)[0]?.trim() === name);
4
- var hasFreshnessGeneration = (request, name) => {
5
- const matches = (request.headers.get("cookie") ?? "").split(";").map((part) => part.trim()).filter((part) => part.split("=", 1)[0]?.trim() === name);
6
- const value = matches[0]?.slice(matches[0].indexOf("=") + 1).trim() ?? "";
7
- return matches.length === 1 && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
8
- };
9
- var hasCacheBypass = (request) => (request.headers.get("cache-control") ?? "").split(",").some((part) => /^\s*(?:no-cache|no-store)(?:\s*=|\s*$)/i.test(part));
10
- function regionalD1MetadataTtl(request, policy) {
11
- if (request.method !== "GET" || hasFreshnessCookie(request, policy.freshnessCookie)) return 0;
12
- if (policy.freshnessHeader !== void 0 && (!validFreshnessHeader(policy.freshnessHeader) || request.headers.has(policy.freshnessHeader))) return 0;
13
- if (!policy.ignoreRequestCacheControl && hasCacheBypass(request)) return 0;
14
- return 5e3;
15
- }
16
-
17
- export { hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, regionalD1MetadataTtl, validFreshnessHeader };
18
- //# sourceMappingURL=chunk-D2EESWMC.js.map
19
- //# sourceMappingURL=chunk-D2EESWMC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/d1/request-freshness.ts"],"names":[],"mappings":";AAGO,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAA0B,+BAAA,CAAgC,KAAK,IAAI;AACjG,IAAM,kBAAA,GAAqB,CAAC,OAAA,EAAkB,IAAA,KAAA,CAA2B,OAAA,CAAQ,QAAQ,GAAA,CAAI,QAAQ,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,GAAG,EAAE,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK,KAAM,IAAI;AAC9K,IAAM,sBAAA,GAAyB,CAAC,OAAA,EAAkB,IAAA,KAA0B;AACjF,EAAA,MAAM,OAAA,GAAA,CAAW,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,OAAW,IAAI,CAAA;AACnJ,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,CAAC,CAAA,EAAG,MAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA,GAAI,CAAC,CAAA,CAAE,MAAK,IAAK,EAAA;AACvE,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,IAAK,wEAAA,CAAyE,KAAK,KAAK,CAAA;AACpH;AACO,IAAM,iBAAiB,CAAC,OAAA,KAAA,CAA+B,QAAQ,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA,IAAK,EAAA,EAAI,KAAA,CAAM,GAAG,EAAE,IAAA,CAAK,CAAC,SAAS,yCAAA,CAA0C,IAAA,CAAK,IAAI,CAAC;AAEjL,SAAS,qBAAA,CAAsB,SAAkB,MAAA,EAAmC;AACzF,EAAA,IAAI,OAAA,CAAQ,WAAW,KAAA,IAAS,kBAAA,CAAmB,SAAS,MAAA,CAAO,eAAe,GAAG,OAAO,CAAA;AAC5F,EAAA,IAAI,MAAA,CAAO,eAAA,KAAoB,MAAA,KAAc,CAAC,qBAAqB,MAAA,CAAO,eAAe,CAAA,IAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,eAAe,IAAI,OAAO,CAAA;AACnJ,EAAA,IAAI,CAAC,MAAA,CAAO,yBAAA,IAA6B,cAAA,CAAe,OAAO,GAAG,OAAO,CAAA;AACzE,EAAA,OAAO,GAAA;AACT","file":"chunk-D2EESWMC.js","sourcesContent":["import type { D1CacheProfile } from './profile';\n\ntype FreshnessPolicy = Pick<NonNullable<D1CacheProfile['readResponseLease']>, 'freshnessCookie' | 'freshnessHeader' | 'ignoreRequestCacheControl'>;\nexport const validFreshnessHeader = (name: string): boolean => /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name);\nexport const hasFreshnessCookie = (request: Request, name: string): boolean => (request.headers.get('cookie') ?? '').split(';').some((part) => part.split('=', 1)[0]?.trim() === name);\nexport const hasFreshnessGeneration = (request: Request, name: string): boolean => {\n const matches = (request.headers.get('cookie') ?? '').split(';').map((part) => part.trim()).filter((part) => part.split('=', 1)[0]?.trim() === name);\n const value = matches[0]?.slice(matches[0].indexOf('=') + 1).trim() ?? '';\n return matches.length === 1 && /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n};\nexport const hasCacheBypass = (request: Request): boolean => (request.headers.get('cache-control') ?? '').split(',').some((part) => /^\\s*(?:no-cache|no-store)(?:\\s*=|\\s*$)/i.test(part));\n\nexport function regionalD1MetadataTtl(request: Request, policy: FreshnessPolicy): 0 | 5000 {\n if (request.method !== 'GET' || hasFreshnessCookie(request, policy.freshnessCookie)) return 0;\n if (policy.freshnessHeader !== undefined && (!validFreshnessHeader(policy.freshnessHeader) || request.headers.has(policy.freshnessHeader))) return 0;\n if (!policy.ignoreRequestCacheControl && hasCacheBypass(request)) return 0;\n return 5000;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/response-lease.ts"],"names":["response","lease","source"],"mappings":"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","file":"chunk-HGAUU4EU.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 { 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) => 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);\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 const cached = forceSource ? null : await readLease(key, ttl, permittedVary);\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 task = warming.start(warmOptions, request, 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 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 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 const response = await scope.run(lease, () => handler(source, env, context));\n try { await fillResponse(response, lease, started, () => refresh.valid); }\n finally { void response.body?.cancel().catch(() => undefined); }\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 response = await scope.run(lease, () => serve(source));\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/d1/adapter.ts","../src/d1/env.ts","../src/d1/read.ts"],"names":["index","wrapped","runtimes"],"mappings":"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","file":"chunk-MOJBHU3S.js","sourcesContent":["import { CacheUnavailableError } from '../core/extension';\nimport type { CacheStore } from '../core/types';\nimport type { D1WritePolicy } from './profile';\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Result } from '@cloudflare/workers-types';\nimport { boundedD1Store } from './bounded-store';\n\nconst fence = ['g'];\n\nconst lexemes = /\\s+|--[^\\n]*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)|'(?:[^']|'')*'?|`(?:[^`]|``)*`?|\"(?:[^\"]|\"\")*\"?|\\[[^\\]]*\\]?|[A-Za-z_][A-Za-z0-9_$]*|[\\s\\S]/g;\nconst safePragmas = new Set(['database_list', 'table_list', 'table_info', 'table_xinfo', 'index_list', 'index_info', 'index_xinfo', 'foreign_key_list']);\n\nfunction operationOf(tokens: string[], start = 0): string | undefined {\n const word = (index: number) => tokens[index]?.toLowerCase();\n if (word(start) !== 'with') return word(start);\n let index = start + 1;\n if (word(index) === 'recursive') index++;\n const group = (): boolean => {\n if (tokens[index] !== '(') return false;\n let depth = 0;\n do {\n if (tokens[index] === '(') depth++;\n if (tokens[index] === ')') depth--;\n index++;\n } while (index < tokens.length && depth > 0);\n return depth === 0;\n };\n while (index < tokens.length) {\n if (!/^(?:[A-Za-z_][A-Za-z0-9_$]*|`[^`]+`|\"[^\"]+\"|\\[[^\\]]+\\])$/.test(tokens[index] ?? '')) return undefined;\n index++;\n if (tokens[index] === '(' && !group()) return undefined;\n if (word(index++) !== 'as') return undefined;\n if (word(index) === 'not') index++;\n if (word(index) === 'materialized') index++;\n if (tokens[index] !== '(' || !['select', 'with'].includes(word(index + 1) ?? '')) return undefined;\n if (!group()) return undefined;\n if (tokens[index] !== ',') return word(index);\n index++;\n }\n return undefined;\n}\n\nfunction isReadonly(sql: string): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n const first = tokens[0]?.toLowerCase();\n const pragmaName = first === 'pragma' ? (tokens[2] === '.' ? tokens[3] : tokens[1])?.toLowerCase() : undefined;\n const readonlyPragma = first === 'pragma' && pragmaName !== undefined && safePragmas.has(pragmaName) && !tokens.includes('=');\n return !tokens.includes(';') && (operationOf(tokens) === 'select' || readonlyPragma);\n}\n\nfunction needsWriteFence(sql: string, unrelatedWrites: ReadonlySet<string>): boolean {\n const tokens = [...sql.matchAll(lexemes)].map(([token = '']) => token).filter((token) => !/^(?:\\s|--|\\/\\*)/.test(token));\n if (tokens.at(-1) === ';') tokens.pop();\n if (tokens.includes(';')) return true;\n let index = 0;\n const word = () => tokens[index]?.toLowerCase();\n const operation = word();\n if (operation !== 'insert' && operation !== 'update' && operation !== 'delete') return true;\n index++;\n if ((operation === 'insert' || operation === 'update') && word() === 'or') {\n index++;\n if (!['rollback', 'abort', 'replace', 'fail', 'ignore'].includes(word() ?? '')) return true;\n index++;\n }\n if (operation === 'insert') { if (word() !== 'into') return true; index++; }\n if (operation === 'delete') { if (word() !== 'from') return true; index++; }\n const identifier = (token: string | undefined): string | null => {\n if (!token) return null;\n if (/^[A-Za-z_][A-Za-z0-9_$]*$/.test(token)) return token.toLowerCase();\n if (/^\"[A-Za-z_][A-Za-z0-9_$]*\"$/.test(token) || /^`[A-Za-z_][A-Za-z0-9_$]*`$/.test(token) || /^\\[[A-Za-z_][A-Za-z0-9_$]*\\]$/.test(token)) return token.slice(1, -1).toLowerCase();\n return null;\n };\n let target = identifier(tokens[index++]);\n if (tokens[index] === '.') {\n if (target !== 'main') return true;\n index++;\n target = identifier(tokens[index++]);\n }\n if (!target || !unrelatedWrites.has(target)) return true;\n if (operation === 'update' && word() !== 'set') return true;\n if (operation === 'delete' && !['where', 'returning'].includes(word() ?? '') && index !== tokens.length) return true;\n return false;\n}\n\nexport function fenceD1Writes(db: D1Database, options: { store: CacheStore; generation: string; policy: D1WritePolicy }): D1Database {\n const { generation, policy } = options;\n const store = boundedD1Store(options.store);\n const unrelatedWrites = new Set(policy.unfencedWriteTables.map((name) => name.toLowerCase()));\n if (!generation) throw new TypeError('cache generation is required');\n const statements = new WeakMap<D1PreparedStatement, { raw: D1PreparedStatement; fence: boolean }>();\n const withWrite = async <T>(operation: () => Promise<T>): Promise<T> => {\n const token = crypto.randomUUID();\n try {\n await store.beginWrite({ fences: fence, generation, leaseMs: 600000, token });\n } catch (error) {\n await store.endWrite({ fences: fence, token }).catch(() => undefined);\n throw new CacheUnavailableError(error);\n }\n try { return await operation(); }\n finally { await store.endWrite({ fences: fence, token }).catch(() => undefined); }\n };\n const wrapStatement = (raw: D1PreparedStatement, sql: string): D1PreparedStatement => {\n const requiresFence = !isReadonly(sql) && needsWriteFence(sql, unrelatedWrites);\n const execute = <T>(operation: () => Promise<T>): Promise<T> => requiresFence ? withWrite(operation) : operation();\n function rawRows<T = unknown[]>(rawOptions: { columnNames: true }): Promise<[string[], ...T[]]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: false }): Promise<T[]>;\n function rawRows<T = unknown[]>(rawOptions?: { columnNames?: boolean }): Promise<T[] | [string[], ...T[]]> {\n return execute<T[] | [string[], ...T[]]>(() => rawOptions?.columnNames === true ? raw.raw<T>({ columnNames: true }) : raw.raw<T>(rawOptions?.columnNames === false ? { columnNames: false } : undefined));\n }\n const wrapped: D1PreparedStatement = {\n bind: (...next) => wrapStatement(raw.bind(...next), sql),\n first: <T = Record<string, unknown>>(column?: string): Promise<T | null> => execute(() => column === undefined ? raw.first<T>() : raw.first<T>(column)),\n all: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.all<T>()),\n run: <T = Record<string, unknown>>(): Promise<D1Result<T>> => execute(() => raw.run<T>()),\n raw: rawRows,\n };\n statements.set(wrapped, { raw, fence: requiresFence });\n return wrapped;\n };\n const batch = <T>(target: D1Database | D1DatabaseSession, items: D1PreparedStatement[]): Promise<D1Result<T>[]> => {\n const resolved = items.map((item) => statements.get(item));\n const raw = items.map((item, index) => resolved[index]?.raw ?? item);\n const operation = () => target.batch<T>(raw);\n return resolved.every((item) => item !== undefined && !item.fence) ? operation() : withWrite(operation);\n };\n return {\n prepare: (sql) => wrapStatement(db.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(db, items),\n exec: (sql) => isReadonly(sql) || !needsWriteFence(sql, unrelatedWrites) ? db.exec(sql) : withWrite(() => db.exec(sql)),\n dump: () => db.dump(),\n withSession: (constraint) => {\n const session = db.withSession(constraint);\n return {\n prepare: (sql) => wrapStatement(session.prepare(sql), sql),\n batch: <T = unknown>(items: D1PreparedStatement[]) => batch<T>(session, items),\n getBookmark: () => session.getBookmark(),\n };\n },\n };\n}\n","import { createDurableObjectStore } from '../cloudflare/store';\nimport type { CoordinatorLocationHint } from '../cloudflare/store-options';\nimport type { CacheCoordinator } from '../cloudflare/coordinator';\nimport { fenceD1Writes } from './adapter';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createCacheExtension } from '../core/extension';\nimport type { CacheStore, DecimalConstructor, GeneratedCacheConfig } from '../core/types';\nimport { sha256Hex, stableStringify } from '../core/codec';\nimport { boundedValue, dependencyRuntimes, inspect, sameSnapshots } from './read';\nimport { boundedD1Store } from './bounded-store';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { readTargets } from '../core/targets';\n\nconst uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst hints = new Set(['wnam', 'enam', 'sam', 'weur', 'eeur', 'apac', 'oc', 'afr', 'me']);\nconst wrapped = new WeakMap<object, WeakMap<D1Database, Map<string, D1Database>>>();\nexport interface D1CacheRuntime { store: CacheStore; generation: string; databaseId: string; readsEnabled: boolean; readModels: readonly string[]; coordinatorIdentity: object; coordinatorName: string; regionalIdentity?: string }\nconst runtimes = new WeakMap<object, D1CacheRuntime>();\nexport const d1CacheRuntime = (database: object): D1CacheRuntime | undefined => runtimes.get(database);\nexport function createD1CacheRuntime(database: D1Database, options: { store: CacheStore; databaseId: string; generation: string; readsEnabled?: boolean; profile: D1CacheProfile; coordinatorIdentity?: object; coordinatorName?: string; regionalIdentity?: string }): D1Database {\n const { generation, databaseId, profile, readsEnabled = true } = options;\n const store = boundedD1Store(options.store);\n const fenced = fenceD1Writes(database, { store, generation, policy: profile });\n runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? '', regionalIdentity: options.regionalIdentity });\n return fenced;\n}\n\nexport function cacheD1Env<T extends object>(env: T, profile: D1CacheProfile): T {\n const value = (suffix: string): unknown => Reflect.get(env, `${profile.envPrefix}_${suffix}`);\n const enabled = value('ENABLED');\n if (enabled === undefined || enabled === 'false') return env;\n if (enabled !== 'true') throw new Error(`Invalid ${profile.envPrefix}_ENABLED`);\n const reads = value('READS_ENABLED');\n if (reads !== undefined && reads !== 'true' && reads !== 'false') throw new Error(`Invalid ${profile.envPrefix}_READS_ENABLED`);\n const readsEnabled = reads !== 'false';\n const namespace = value('COORDINATOR');\n const rawIds = value('DATABASE_IDS');\n const generation = value('GENERATION');\n if (!namespace || typeof namespace !== 'object' || typeof Reflect.get(namespace, 'idFromName') !== 'function' || typeof Reflect.get(namespace, 'get') !== 'function' || typeof rawIds !== 'string' || typeof generation !== 'string' || !generation.trim())\n throw new Error(`${profile.envPrefix} requires coordinator, database identities and generation`);\n if (generation.length > 256) throw new Error(`Invalid ${profile.envPrefix}_GENERATION`);\n let ids: unknown;\n try { ids = JSON.parse(rawIds); } catch { throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`); }\n if (!ids || typeof ids !== 'object' || Array.isArray(ids)) throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);\n const map = Object.entries(ids);\n if (map.some(([key, id]) => !isD1BindingName(key, profile) || typeof id !== 'string' || !uuid.test(id))) throw new Error('Invalid cache database identity');\n const locationHint = value('LOCATION_HINT') ?? 'weur';\n if (typeof locationHint !== 'string' || !hints.has(locationHint)) throw new Error(`Invalid ${profile.envPrefix}_LOCATION_HINT`);\n const identities = new Map(map);\n const scoped = { ...env };\n for (const name of profile.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Cache missing D1 binding: ${name}`);\n for (const [key, database] of Object.entries(env)) {\n if (profile.bindingPrefixes.some((prefix) => key.startsWith(prefix)) && !isD1BindingName(key, profile)) throw new Error(`Invalid cache binding: ${key}`);\n if (!isD1BindingName(key, profile)) continue;\n const id = identities.get(key);\n if (typeof id !== 'string' || !database || typeof database.prepare !== 'function') throw new Error(`Cache missing D1 identity or binding: ${key}`);\n const databaseId = id.toLowerCase();\n const cacheKey = JSON.stringify([databaseId, generation, locationHint, readsEnabled, profile]);\n let databases = wrapped.get(namespace);\n if (!databases) { databases = new WeakMap(); wrapped.set(namespace, databases); }\n let versions = databases.get(database);\n if (!versions) { versions = new Map(); databases.set(database, versions); }\n let cached = versions.get(cacheKey);\n if (!cached) {\n const coordinatorName = `${profile.coordinatorNamePrefix}${databaseId}`;\n const store = createDurableObjectStore(namespace as DurableObjectNamespace<CacheCoordinator>, { name: coordinatorName, locationHint: locationHint as CoordinatorLocationHint });\n cached = createD1CacheRuntime(database, { store, generation, databaseId, readsEnabled, profile, coordinatorIdentity: namespace, coordinatorName, regionalIdentity: (namespace as DurableObjectNamespace<CacheCoordinator>).idFromName(coordinatorName).toString() });\n versions.set(cacheKey, cached);\n }\n Reflect.set(scoped, key, cached);\n }\n return scoped;\n}\n\nexport function wrapD1Handler<Event, Env extends object, Context, Result>(handler: (event: Event, env: Env, context: Context) => Result, profile: D1CacheProfile): (event: Event, env: Env, context: Context) => Result {\n return (event, env, context) => handler(event, cacheD1Env(env, profile), context);\n}\n\nexport interface D1PrismaCacheOptions {\n scope: unknown;\n dependencies?: readonly D1Database[];\n keyArgs?: (args: unknown) => unknown;\n regionalTtlMs?: number;\n regionalModels?: readonly string[];\n}\n\nexport function d1PrismaCacheExtension(database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): ReturnType<typeof createCacheExtension> | undefined {\n const runtime = runtimes.get(database);\n if (!runtime || !runtime.readsEnabled) return undefined;\n const options = typeof optionsOrDecimal === 'function' ? undefined : optionsOrDecimal;\n const decimal = typeof optionsOrDecimal === 'function' ? optionsOrDecimal : decimalArg;\n const allowed = new Set(runtime.readModels);\n const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };\n const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...(decimal ? { decimal } : {}), ...(options?.keyArgs ? { keyArgs: options.keyArgs } : {}) };\n const base = createCacheExtension({ ...common, scope: runtime.databaseId });\n if (!options) return base;\n const operation = base.query.$allModels.$allOperations;\n return {\n ...base,\n query: { $allModels: { async $allOperations(params: Parameters<typeof operation>[0]) {\n if (!params.model || !allowed.has(params.model) || !['findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow', 'findMany', 'count', 'aggregate', 'groupBy'].includes(params.operation)) return operation(params);\n if (options.scope === null || options.scope === undefined || !boundedValue(options.scope, 32_768, true) || (options.dependencies?.length ?? 0) > 32) return params.query(params.args);\n const dependencies = dependencyRuntimes(database, options.dependencies ?? []);\n if (!dependencies) return params.query(params.args);\n const internal = params.__internalParams;\n const dataPath = internal && typeof internal === 'object' && Array.isArray(Reflect.get(internal, 'dataPath')) ? Reflect.get(internal, 'dataPath') : [];\n const transaction: unknown = internal && typeof internal === 'object' ? Reflect.get(internal, 'transaction') : undefined;\n const inBatch = !!transaction && typeof transaction === 'object' && Reflect.get(transaction, 'kind') === 'batch';\n let regional: string | null = null;\n let normalizedArgs: unknown;\n let normalized = false;\n try {\n const identities = [runtime, ...dependencies].map((item) => [item.databaseId, item.generation, item.coordinatorName, item.regionalIdentity]);\n const targets = options.regionalModels ? readTargets(config.relationGraph, params.model, params.args) : undefined;\n const allowedTargets = !options.regionalModels || (!!targets && [...targets.models].every((model) => options.regionalModels?.includes(model)));\n if (options.regionalTtlMs && options.regionalTtlMs > 0 && options.regionalTtlMs <= 5000 && !inBatch && allowedTargets && identities.every((item) => item[3])) {\n normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;\n normalized = true;\n const configDigest = await sha256Hex(stableStringify(config));\n regional = await regionalKey(options.regionalTtlMs, ['prisma', options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);\n }\n } catch { /* Key callbacks use the strict path on failure. */ }\n const hit = await regionalRead(regional, options.regionalTtlMs, decimal);\n if (hit) { limitRegionalDataUntil(hit.expires); return hit.value; }\n let started = Date.now();\n const snapshot = await inspect(dependencies);\n if (!snapshot) return params.query(params.args);\n let scope: string;\n try {\n scope = stableStringify([runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);\n if (new TextEncoder().encode(scope).byteLength > 32_768) return params.query(params.args);\n } catch { return params.query(params.args); }\n let verifiedHit = false;\n let verifiedWrite = false;\n let queried = false;\n const store: CacheStore = { ...runtime.store,\n async write(request) {\n const result = await runtime.store.write(request);\n verifiedWrite = result.ok;\n return result;\n },\n async read(request) {\n const result = await runtime.store.read(request);\n if (result.kind === 'hit' && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: 'miss', epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };\n if (result.kind === 'hit') verifiedHit = true;\n return result;\n } };\n const scoped = createCacheExtension({ ...common, store, scope, ...(normalized ? { keyArgs: () => normalizedArgs } : {}) });\n const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {\n queried = true;\n started = Date.now();\n return params.query(args);\n } });\n if (regional && ((!queried && verifiedHit) || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, value);\n return value;\n } } },\n };\n}\n\nexport function withD1PrismaCache<Client extends object>(client: Client, database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): Client {\n const extension = d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg);\n if (!extension) return client;\n const extend: unknown = Reflect.get(client, '$extends', client);\n if (typeof extend !== 'function') throw new TypeError('Prisma client must support $extends');\n const extended: unknown = Reflect.apply(extend, client, [extension]);\n if (!extended || typeof extended !== 'object') throw new TypeError('Prisma extension returned no client');\n return new Proxy(client, {\n get(target, property) {\n const source = property === '$on' ? target : extended;\n const member: unknown = Reflect.get(source, property, source);\n return typeof member === 'function' ? member.bind(source) : member;\n },\n });\n}\n","import { boundedValue } from '../core/bounded-value';\nimport type { D1Database } from '@cloudflare/workers-types';\nimport { decode, encode, sha256Hex, stableStringify } from '../core/codec';\nimport { MAX_VALUE_BYTES } from '../core/limits';\nimport { d1CacheRuntime, type D1CacheRuntime } from './env';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\n\nconst FENCES = ['g'];\nconst DEFAULT_TTL_MS = 30_000;\nconst MAX_TTL_MS = 300_000;\nconst MAX_IDENTITY_BYTES = 32_768;\nconst MAX_VALUE_SIZE = Math.min(1_500_000, MAX_VALUE_BYTES);\n\nexport interface D1ReadOptions<T> {\n key: unknown;\n scope: unknown;\n dependencies?: readonly D1Database[];\n ttlMs?: number;\n regionalTtlMs?: number;\n cacheable?: (value: T) => boolean;\n}\n\nexport { boundedValue } from '../core/bounded-value';\n\nexport interface Snapshot { runtime: D1CacheRuntime; epoch: number }\nexport function sameD1CacheDatabase(left: object, right: object): boolean {\n const a = d1CacheRuntime(left);\n const b = d1CacheRuntime(right);\n return !!a && !!b && a.databaseId === b.databaseId && a.generation === b.generation && a.coordinatorIdentity === b.coordinatorIdentity && a.coordinatorName === b.coordinatorName;\n}\nexport async function d1CacheEpoch(database: object): Promise<string | null> {\n const runtime = d1CacheRuntime(database);\n if (!runtime || !runtime.readsEnabled) return null;\n const snapshot = await inspect([runtime]);\n if (!snapshot?.[0]) return null;\n return stableStringify([runtime.databaseId, runtime.generation, snapshot[0].epoch]);\n}\nexport async function inspect(runtimes: readonly D1CacheRuntime[]): Promise<Snapshot[] | null> {\n if (runtimes.length === 0) return [];\n try {\n const states = await Promise.all(runtimes.map(async (runtime) => {\n if (!runtime.store.inspectFences) return null;\n const state = await runtime.store.inspectFences({ fences: FENCES, generation: runtime.generation });\n const epoch = state.epochs.g;\n if (state.pending !== false || typeof epoch !== 'number' || !Number.isSafeInteger(epoch) || epoch < 0) return null;\n return { runtime, epoch };\n }));\n return states.some((state) => state === null) ? null : states.filter((state): state is Snapshot => state !== null);\n } catch { return null; }\n}\n\nexport const sameSnapshots = (a: readonly Snapshot[], b: readonly Snapshot[] | null): boolean =>\n b !== null && a.length === b.length && a.every((item, index) => item.runtime.databaseId === b[index]?.runtime.databaseId && item.runtime.generation === b[index]?.runtime.generation && item.epoch === b[index]?.epoch);\n\nexport function dependencyRuntimes(database: object, dependencies: readonly object[]): D1CacheRuntime[] | null {\n if (dependencies.length > 32) return null;\n const primary = d1CacheRuntime(database);\n if (!primary || !primary.readsEnabled) return null;\n const byId = new Map<string, D1CacheRuntime>();\n for (const dependency of dependencies) {\n const runtime = d1CacheRuntime(dependency);\n if (!runtime || !runtime.readsEnabled) return null;\n const prior = runtime.databaseId === primary.databaseId ? primary : byId.get(runtime.databaseId);\n if (prior && (prior.generation !== runtime.generation || prior.coordinatorIdentity !== runtime.coordinatorIdentity || prior.coordinatorName !== runtime.coordinatorName)) return null;\n if (runtime.databaseId === primary.databaseId) continue;\n if (!runtime.store.inspectFences) return null;\n byId.set(runtime.databaseId, prior ?? runtime);\n }\n return [...byId.values()].sort((a, b) => a.databaseId.localeCompare(b.databaseId));\n}\n\nexport async function cacheD1Read<T>(database: D1Database, options: D1ReadOptions<T>, load: () => Promise<T>): Promise<T> {\n const primary = d1CacheRuntime(database);\n const ttl = options.ttlMs ?? DEFAULT_TTL_MS;\n if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === undefined || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();\n const runtimes = dependencyRuntimes(database, options.dependencies ?? []);\n if (!runtimes) return load();\n const regionalIdentities = [primary, ...runtimes].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);\n const regional = regionalIdentities.every((identity) => identity[3])\n ? await regionalKey(options.regionalTtlMs, ['d1-read', options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;\n const hit = await regionalRead(regional, options.regionalTtlMs);\n if (hit) { limitRegionalDataUntil(hit.expires); return hit.value as T; }\n const started = Date.now();\n const snapshot = await inspect(runtimes);\n if (!snapshot) return load();\n let key: string;\n try {\n const identity = stableStringify(['d1-read-v1', primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);\n if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();\n key = `d1:${await sha256Hex(identity)}`;\n } catch { return load(); }\n let result;\n try { result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 30_000, refresh: false }); }\n catch { return load(); }\n if (result.kind === 'hit') {\n try {\n const value: unknown = decode(JSON.parse(result.value));\n if (boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes))) {\n await regionalWrite(regional, options.regionalTtlMs, started, value);\n return value as T;\n }\n } catch { /* Invalid cached values are read from the source. */ }\n return load();\n }\n if (!result.lockToken || result.pending) return load();\n const lockToken = result.lockToken;\n try {\n const value = await load();\n try {\n if (value !== null && value !== undefined && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {\n const text = JSON.stringify(encode(value));\n if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes))) {\n const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });\n if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes))) await regionalWrite(regional, options.regionalTtlMs, started, value);\n }\n }\n } catch { /* The source result remains authoritative when caching fails. */ }\n return value;\n } finally {\n try { await primary.store.release({ key, lockToken }); } catch { /* The lock expires if the coordinator cannot be reached. */ }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cloudflare/retry.ts","../src/cloudflare/store-options.ts","../src/cloudflare/store.ts","../src/d1/deadline.ts","../src/d1/bounded-store.ts"],"names":[],"mappings":"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","file":"chunk-OOPPXK7Q.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","const COORDINATOR_TIMEOUT_MS = 2_000;\n\nexport async function withinCoordinatorDeadline<T>(work: Promise<T>): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([work, new Promise<never>((_, reject) => { timer = setTimeout(() => reject(new Error('cache coordinator timeout')), COORDINATOR_TIMEOUT_MS); })]);\n } finally { if (timer !== undefined) clearTimeout(timer); }\n}\n","import type { CacheStore, EndWriteRequest } from '../core/types';\nimport { withinCoordinatorDeadline } from './deadline';\n\nconst boundedStores = new WeakMap<CacheStore, CacheStore>();\n\nexport function boundedD1Store(store: CacheStore): CacheStore {\n const existing = boundedStores.get(store);\n if (existing) return existing;\n const failedBegins = new Set<string>();\n const inspectFences = store.inspectFences;\n const endWrite = async (request: EndWriteRequest): Promise<void> => {\n let active = true;\n try {\n await withinCoordinatorDeadline((async () => {\n for (let attempt = 0; ; attempt++) {\n try { await store.endWrite(request); return; }\n catch (error) { if (!active || attempt === 1) throw error; }\n }\n })());\n } finally { active = false; }\n };\n const bounded: CacheStore = {\n ...store,\n ...(inspectFences ? { inspectFences: (request: Parameters<typeof inspectFences>[0]) => withinCoordinatorDeadline(Promise.resolve().then(() => inspectFences.call(store, request))) } : {}),\n async read(request) {\n const pending = Promise.resolve().then(() => store.read(request));\n try { return await withinCoordinatorDeadline(pending); }\n catch (error) {\n void pending.then((result) => {\n const token = result.kind === 'miss' ? result.lockToken : result.refreshToken;\n if (token) return bounded.release({ key: request.key, lockToken: token });\n return undefined;\n }).catch(() => undefined);\n throw error;\n }\n },\n write: (request) => withinCoordinatorDeadline(Promise.resolve().then(() => store.write(request))),\n release: (request) => withinCoordinatorDeadline(Promise.resolve().then(() => store.release(request))),\n async beginWrite(request) {\n const begin = Promise.resolve().then(() => store.beginWrite(request));\n try { await withinCoordinatorDeadline(begin); }\n catch (error) {\n failedBegins.add(request.token);\n void begin.then(\n () => endWrite({ fences: request.fences, token: request.token }),\n () => endWrite({ fences: request.fences, token: request.token }),\n ).catch(() => undefined);\n throw error;\n }\n },\n async endWrite(request) {\n if (failedBegins.delete(request.token)) return;\n await endWrite(request);\n },\n invalidate: (fences) => withinCoordinatorDeadline(Promise.resolve().then(() => store.invalidate(fences))),\n };\n boundedStores.set(store, bounded);\n boundedStores.set(bounded, bounded);\n return bounded;\n}\n"]}