@dee-wan/cache 1.0.1 → 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.
- package/README.md +208 -3
- package/dist/chunk-A4WV6RY4.js +311 -0
- package/dist/chunk-A4WV6RY4.js.map +1 -0
- package/dist/chunk-AENVFT2S.js +6 -0
- package/dist/chunk-AENVFT2S.js.map +1 -0
- package/dist/chunk-E6OZZ5UX.js +133 -0
- package/dist/chunk-E6OZZ5UX.js.map +1 -0
- package/dist/chunk-JPK2AF7X.js +18 -0
- package/dist/chunk-JPK2AF7X.js.map +1 -0
- package/dist/chunk-LAXBP5DQ.js +330 -0
- package/dist/chunk-LAXBP5DQ.js.map +1 -0
- package/dist/chunk-LHOK33GI.js +12 -0
- package/dist/chunk-LHOK33GI.js.map +1 -0
- package/dist/chunk-M4UOCIDQ.js +557 -0
- package/dist/chunk-M4UOCIDQ.js.map +1 -0
- package/dist/chunk-NFBMWKY5.js +54 -0
- package/dist/chunk-NFBMWKY5.js.map +1 -0
- package/dist/chunk-O3KHMFHX.js +425 -0
- package/dist/chunk-O3KHMFHX.js.map +1 -0
- package/dist/chunk-WJNCFFF3.js +637 -0
- package/dist/chunk-WJNCFFF3.js.map +1 -0
- package/dist/chunk-WKZ7TKGM.js +82 -0
- package/dist/chunk-WKZ7TKGM.js.map +1 -0
- package/dist/chunk-ZBYAKDNZ.js +45 -0
- package/dist/chunk-ZBYAKDNZ.js.map +1 -0
- package/dist/chunk-ZCMZJKGN.js +78 -0
- package/dist/chunk-ZCMZJKGN.js.map +1 -0
- package/dist/client.d.ts +63 -0
- package/dist/client.js +260 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare/index.d.ts +15 -2
- package/dist/cloudflare/index.js +413 -45
- package/dist/cloudflare/index.js.map +1 -1
- package/dist/d1/config.d.ts +41 -0
- package/dist/d1/config.js +102 -0
- package/dist/d1/config.js.map +1 -0
- package/dist/d1/index.d.ts +80 -0
- package/dist/d1/index.js +218 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/d1/response-lease.d.ts +9 -0
- package/dist/d1/response-lease.js +44 -0
- package/dist/d1/response-lease.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -616
- package/dist/index.js.map +1 -1
- package/dist/profile--LBtbQI_.d.ts +30 -0
- package/dist/response-lease-DeeM-ofO.d.ts +19 -0
- package/dist/response-lease.d.ts +7 -0
- package/dist/response-lease.js +14 -0
- package/dist/response-lease.js.map +1 -0
- package/dist/response-warmup-BWQvnT1G.d.ts +38 -0
- package/dist/scoped-read.d.ts +12 -0
- package/dist/scoped-read.js +30 -0
- package/dist/scoped-read.js.map +1 -0
- package/dist/{types-DwtU0KpX.d.ts → types-CtErcz2a.d.ts} +25 -1
- package/docs/cache-contract.md +49 -1
- package/package.json +31 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/response-lease.ts"],"names":["response","source","sourceBookmarks","lease","headers"],"mappings":"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","file":"chunk-O3KHMFHX.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createResponseWarmup, type ReadResponseWarmupOptions } from './response-warmup';\nexport type { ReadResponseWarmupOptions, ReadResponseWarmupTarget, ReadResponseWarmupContext } from './response-warmup';\nimport { registerRegionalDeadlineReporter } from './d1/regional-deadline';\nimport type { D1CacheProfile } from './d1/profile';\nimport { MAX_RESPONSE_LEASE_BYTES, responseLeaseKey } from './d1/regional';\nimport { isMutation, matchesPath, needsFreshness } from './d1/read-freshness-policy';\nimport { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\nimport { d1SessionBookmarkFloor, advanceD1SessionBookmarks, runIsolatedD1Session, trackD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, runPrimaryD1SessionSource } from './d1/session';\nimport { hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader } from './d1/request-freshness';\n\ninterface LeaseScope { deadline?: number; dataDeadline?: number }\nconst scope = new AsyncLocalStorage<LeaseScope>();\nexport function limitReadResponseDataUntil(deadline: number): void { const current = scope.getStore(); if (current) current.dataDeadline = Math.min(current.dataDeadline ?? Infinity, deadline); }\nregisterRegionalDeadlineReporter(limitReadResponseDataUntil);\n\nexport function limitReadResponseLeaseUntil(deadline: number | undefined): void {\n const current = scope.getStore();\n if (!current) return;\n if (deadline === undefined || !Number.isFinite(deadline)) { current.deadline = 0; return; }\n current.deadline = Math.min(current.deadline ?? Infinity, deadline);\n}\n\nconst noCache = (request: Request): Request => {\n const headers = new Headers(request.headers);\n headers.set('cache-control', 'no-cache');\n return new Request(request, { headers });\n};\nconst bypass = (request: Request, ignoreCacheControl: boolean): boolean => request.body !== null || ['range','if-match','if-unmodified-since','if-range'].some((name) => request.headers.has(name)) || (!ignoreCacheControl && hasCacheBypass(request));\n\nfunction entityTags(value: string): string[] | null {\n const tags: string[] = [];\n let index = 0;\n const whitespace = () => { while (value[index] === ' ' || value[index] === '\\t') index++; };\n whitespace();\n while (index < value.length) {\n if (value.slice(index, index + 2) === 'W/') index += 2;\n if (value[index++] !== '\"') return null;\n const start = index;\n while (index < value.length && value[index] !== '\"') {\n const code = value.charCodeAt(index++);\n if (code < 33 || code === 127 || code > 255) return null;\n }\n if (value[index] !== '\"') return null;\n tags.push(value.slice(start, index++));\n whitespace();\n if (index === value.length) break;\n if (value[index++] !== ',') return null;\n whitespace();\n if (index === value.length) return null;\n }\n return tags.length ? tags : null;\n}\n\nfunction httpDate(value: string | null): number {\n if (!value || !/^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \\d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d{4} \\d{2}:\\d{2}:\\d{2} GMT|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \\d{2}-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{2} \\d{2}:\\d{2}:\\d{2} GMT|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ \\d]\\d \\d{2}:\\d{2}:\\d{2} \\d{4})$/.test(value)) return NaN;\n const time = Date.parse(value.endsWith(' GMT') ? value : `${value} GMT`);\n if (!Number.isFinite(time)) return NaN;\n const date = new Date(time);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const day = days[date.getUTCDay()];\n const month = months[date.getUTCMonth()];\n const number = String(date.getUTCDate()).padStart(2, '0');\n const clock = date.toUTCString().slice(17, 25);\n const rfc850 = `${day}, ${number}-${month}-${String(date.getUTCFullYear() % 100).padStart(2, '0')} ${clock} GMT`;\n const asctime = `${day?.slice(0, 3)} ${month} ${String(date.getUTCDate()).padStart(2, ' ')} ${clock} ${date.getUTCFullYear()}`;\n return value === date.toUTCString() || value === rfc850 || value === asctime ? time : NaN;\n}\n\nfunction conditionalHit(request: Request, response: Response): Response {\n const condition = request.headers.get('if-none-match');\n let matches = false;\n if (condition !== null) {\n if (condition.trim() === '*') matches = true;\n else {\n const requested = entityTags(condition);\n const current = entityTags(response.headers.get('etag') ?? '');\n matches = !!requested && !!current && current.length === 1 && requested.includes(current[0] ?? '');\n }\n } else {\n const modified = httpDate(response.headers.get('last-modified'));\n const since = httpDate(request.headers.get('if-modified-since'));\n matches = Number.isFinite(modified) && Number.isFinite(since) && modified <= since;\n }\n if (!matches) return response;\n const headers = new Headers(response.headers);\n headers.delete('content-length');\n void response.body?.cancel().catch(() => undefined);\n return new Response(null, { status:304, headers });\n}\n\nfunction selectedCookies(header: string | null, names: readonly string[]): string | null {\n const selected = (header ?? '').split(';').map((part) => part.trimStart()).filter((part) => {\n const separator = part.indexOf('=');\n return separator > 0 && names.includes(part.slice(0, separator).trim());\n });\n return selected.length ? selected.join(';') : null;\n}\n\nfunction withoutCookie(header: string | null, name: string): string | null {\n if (!header) return null;\n const value = header.split(';').filter((part) => {\n const separator = part.indexOf('=');\n return separator < 0 || part.slice(0, separator).trim() !== name;\n }).join(';').trim();\n return value || null;\n}\n\nconst metadataHeader = 'x-dee-wan-lease-meta';\n\nasync function readLease(key: string, ttl: number, permittedVary: Set<string>): Promise<{ response: Response; expires: number } | null> {\n let cached: Response | undefined;\n let transferred = false;\n try {\n cached = await caches.default.match(key);\n if (!cached || cached.status !== 200 || !eligibleHeaders(cached.headers, permittedVary)) return null;\n const metadata = cached.headers.get(metadataHeader);\n if (!metadata) return null;\n const parsed: unknown = JSON.parse(metadata);\n if (!Array.isArray(parsed) || parsed.length !== 3) return null;\n const [started, expires, control] = parsed;\n const now = Date.now();\n if (!Number.isSafeInteger(started) || !Number.isSafeInteger(expires) || started > now || expires <= now || expires > started + ttl || (control !== null && typeof control !== 'string')) return null;\n const headers = new Headers(cached.headers);\n headers.delete(metadataHeader);\n if (control === null) headers.delete('cache-control');\n else headers.set('cache-control', control);\n const response = new Response(cached.body, { status:cached.status, statusText:cached.statusText, headers });\n transferred = true;\n return { response, expires };\n } catch { return null; }\n finally { if (cached && !transferred) void cached.body?.cancel().catch(() => undefined); }\n}\n\nfunction eligibleHeaders(headers: Headers, permittedVary: Set<string>): boolean {\n if (headers.has('set-cookie') || headers.has('content-encoding') || headers.has('content-disposition') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((name) => permittedVary.has(name.trim().toLowerCase()));\n}\n\nasync function responseEntry(response: Response, permittedVary: Set<string>): Promise<Uint8Array | null> {\n if (response.status !== 200 || response.headers.has(metadataHeader) || !eligibleHeaders(response.headers, permittedVary)) return null;\n const reader = response.clone().body?.getReader();\n if (!reader) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(Error('body timeout')), 5000); });\n for (;;) {\n const part = await Promise.race([reader.read(), timeout]);\n if (part.done) break;\n size += part.value.byteLength;\n if (size > MAX_RESPONSE_LEASE_BYTES) return null;\n chunks.push(part.value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal:true, ignoreBOM:false }).decode(bytes);\n JSON.parse(body);\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== size)) return null;\n return bytes;\n } catch { return null; }\n finally { if (timer !== undefined) clearTimeout(timer); void reader.cancel().catch(() => undefined); }\n}\n\nexport type ReadResponseLeasePolicy = Omit<NonNullable<D1CacheProfile['readResponseLease']>, 'databaseBinding' | 'deploymentEnv'>;\nexport interface ReadResponseLeaseOptions extends ReadResponseLeasePolicy {\n namespace: string;\n deployment: string;\n database: string;\n seconds: number;\n warmup?: ReadResponseWarmupOptions;\n}\ntype LeaseConfig = (NonNullable<D1CacheProfile['readResponseLease']> | ReadResponseLeaseOptions) & { warmup?: ReadResponseWarmupOptions };\ninterface ResolvedLease { config: LeaseConfig; seconds: number; identity: () => unknown[] | null }\nexport function createReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, resolve: (env: Env) => ResolvedLease | null): (request: Request, env: Env, context: Context) => Promise<Response> {\n const pending = new Map<string, { valid: boolean; task: Promise<void> }>();\n let foreground = 0;\n const warming = createResponseWarmup<Env, Context>((request, env, context) => runIsolatedD1Session(request, () => wrapped(request, env, context)), () => foreground === 0);\n const wrapped = async (request: Request, env: Env, context: Context): Promise<Response> => {\n const requestStarted = Date.now();\n const requestGeneration = warming.snapshot();\n const serve = async (input: Request): Promise<Response> => {\n if (input.method !== 'GET' || warming.isInternal(request)) return handler(input, env, context);\n foreground++;\n try { return await handler(input, env, context); }\n finally { foreground--; }\n };\n const resolved = resolve(env);\n if (!resolved) return serve(request);\n const { config, seconds } = resolved;\n const maxSeconds = config.maxSeconds ?? 5;\n const refreshAhead = config.refreshAheadSeconds ?? 0;\n if (!Number.isInteger(refreshAhead) || refreshAhead < 0 || refreshAhead > maxSeconds || !Number.isInteger(maxSeconds) || maxSeconds < 1 || maxSeconds > 300 || !Number.isInteger(seconds) || seconds <= 0 || seconds > maxSeconds || !/^[A-Za-z0-9_-]+$/.test(config.freshnessCookie)) return serve(request);\n if (config.cookieNames !== undefined && (!Array.isArray(config.cookieNames) || config.cookieNames.length === 0 || !config.cookieNames.every((name) => typeof name === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) || new Set(config.cookieNames).size !== config.cookieNames.length || !config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie') || (config.freshnessCookieMode === 'generation' && !config.cookieNames.includes(config.freshnessCookie)))) return serve(request);\n const generationMode = config.freshnessCookieMode === 'generation' && config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie');\n if (isMutation(request.method)) {\n const response = await handler(request, env, context);\n if (response.status < 200 || response.status >= 300 || !needsFreshness(request.method, new URL(request.url).pathname, config.freshnessCookieExcludedPaths)) return response;\n warming.invalidate();\n const headers = new Headers(response.headers);\n headers.append('set-cookie', `${config.freshnessCookie}=${generationMode ? crypto.randomUUID() : '1'}; Max-Age=${maxSeconds}; Path=/; HttpOnly; SameSite=Lax${new URL(request.url).protocol === 'https:' ? '; Secure' : ''}`);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n if (request.method !== 'GET') return serve(request);\n if (hasFreshnessCookie(request, config.freshnessCookie) && (!generationMode || !hasFreshnessGeneration(request, config.freshnessCookie))) return serve(noCache(request));\n if (config.freshnessHeader !== undefined && !validFreshnessHeader(config.freshnessHeader)) return serve(noCache(request));\n const forceSource = config.freshnessHeader !== undefined && request.headers.has(config.freshnessHeader);\n const url = new URL(request.url);\n const headerValue = (name: string): string | null => name.toLowerCase() === 'cookie' && config.cookieNames !== undefined ? selectedCookies(request.headers.get('cookie'), config.cookieNames) : request.headers.get(name);\n const hasCredential = (name: string): boolean => {\n const value = headerValue(name);\n if (name.toLowerCase() !== 'cookie' || config.cookieNames === undefined) return !!value?.trim();\n return (value ?? '').split(';').some((pair) => { const separator = pair.indexOf('='); return separator > 0 && pair.slice(0, separator).trim() !== config.freshnessCookie && !!pair.slice(separator + 1).trim(); });\n };\n if (bypass(request, config.ignoreRequestCacheControl === true) || !matchesPath(url.pathname, config.paths) || config.bypassQueryParams?.some((name) => url.searchParams.has(name)) || !config.credentialHeaders.some(hasCredential)) return serve(forceSource ? noCache(request) : request);\n const identity = resolved.identity();\n if (!identity) return serve(noCache(request));\n const names = [...new Set([...config.credentialHeaders, ...config.varyHeaders].map((name) => name.toLowerCase()))].sort();\n const permittedVary = new Set([...names, D1_BOOKMARK_HEADER.toLowerCase()]);\n const ttl = seconds * 1000;\n const key = await responseLeaseKey(ttl, [identity[0], request.method, request.url, ...identity.slice(1), names.map((name) => [name, headerValue(name)])]);\n if (!key) return serve(noCache(request));\n let cached = forceSource ? null : await readLease(key, ttl, permittedVary);\n const bookmarkFloor = d1SessionBookmarkFloor();\n if (cached && bookmarkFloor) {\n const rawBookmarks = cached.response.headers.get(D1_BOOKMARK_HEADER);\n const source = decodeD1Bookmarks(rawBookmarks);\n if (!rawBookmarks || !source || Object.entries(bookmarkFloor).some(([id, floor]) => !source[id] || source[id] < floor)) {\n void cached.response.body?.cancel().catch(() => undefined);\n cached = null;\n } else advanceD1SessionBookmarks(source);\n }\n const warmOptions = config.warmup;\n const warmGroup = warmOptions && typeof warmOptions.scopeHeader === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(warmOptions.scopeHeader) && config.varyHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-group', identity, names.map((name) => [name, headerValue(name)]), request.headers.get(warmOptions.scopeHeader)]) : null;\n const credentialGroup = warmOptions?.catalogScope === 'credential' && warmGroup && !config.credentialHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-credential-group', identity, names.filter((name) => name !== warmOptions.scopeHeader.toLowerCase()).map((name) => [name, name === 'cookie' ? withoutCookie(headerValue(name), config.freshnessCookie) : headerValue(name)])]) : null;\n const eligible = (target: URL) => matchesPath(target.pathname, config.paths) && !config.bypassQueryParams?.some((name) => target.searchParams.has(name));\n const scheduleWarm = (response: Response) => {\n let transferred = false;\n try {\n if (!warmOptions || !warmGroup || warming.isInternal(request) || !warming.current(requestGeneration)) return;\n const wait: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (typeof wait !== 'function') return;\n const warmHeaders = new Headers(request.headers);\n const sourceBookmarks = response.headers.get(D1_BOOKMARK_HEADER);\n if (sourceBookmarks) warmHeaders.set(D1_BOOKMARK_HEADER, sourceBookmarks);\n const warmRequest = new Request(request, { headers:warmHeaders });\n const task = warming.start(warmOptions, warmRequest, response, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? undefined);\n transferred = true;\n Reflect.apply(wait, context, [task]);\n } catch { /* Warming is optional. */ }\n finally { if (!transferred) void response.body?.cancel().catch(() => undefined); }\n };\n const fillResponse = async (response: Response, lease: LeaseScope, started: number, allowed: () => boolean, beforePut?: Promise<void>) => {\n if (lease.deadline === undefined || !Number.isFinite(lease.deadline)) return;\n let warmResponse: Response | undefined;\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { warmResponse = response.clone(); } catch { /* Warming is optional. */ }\n }\n const expires = Math.floor(Math.min(started + ttl, lease.deadline, lease.dataDeadline ?? Infinity));\n try {\n const entry = await responseEntry(response, permittedVary);\n if (entry && beforePut) await beforePut;\n if (entry && Number.isSafeInteger(expires) && expires > Date.now() && allowed() && warming.current(requestGeneration) && warming.allowed(request)) {\n warming.verify(request);\n if (warmResponse) { const owned = warmResponse; warmResponse = undefined; scheduleWarm(owned); }\n const headers = new Headers(response.headers);\n headers.set(metadataHeader, JSON.stringify([Math.floor(started), expires, headers.get('cache-control')]));\n headers.set('cache-control', 'public, max-age=300');\n await caches.default.put(key, new Response(entry, { status:response.status, statusText:response.statusText, headers }));\n }\n } catch { /* Cache filling must not affect the source response. */ }\n finally { if (warmResponse) void warmResponse.body?.cancel().catch(() => undefined); }\n };\n const waitUntil: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (cached) {\n const cachedResponse = cached.response;\n warming.verify(request);\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { scheduleWarm(cached.response.clone()); } catch { /* Warming is optional. */ }\n }\n if (refreshAhead > 0 && refreshAhead <= seconds && cached.expires - Date.now() <= refreshAhead * 1000 && typeof waitUntil === 'function' && !pending.has(key)) {\n const refresh = { valid:true, task:Promise.resolve() };\n let accepted = false;\n refresh.task = Promise.resolve().then(async () => {\n if (!accepted) return;\n const started = Date.now();\n const headers = new Headers(request.headers);\n for (const name of ['range', 'if-match', 'if-unmodified-since', 'if-range', 'if-none-match', 'if-modified-since']) headers.delete(name);\n headers.set('cache-control', 'no-cache');\n const cachedBookmarks = cachedResponse.headers.get(D1_BOOKMARK_HEADER);\n if (cachedBookmarks) headers.set(D1_BOOKMARK_HEADER, cachedBookmarks);\n if (config.freshnessHeader !== undefined) headers.set(config.freshnessHeader, '1');\n const source = new Request(request.url, { method:'GET', headers, signal:new AbortController().signal });\n const lease: LeaseScope = {};\n try {\n await runIsolatedD1Session(source, async () => {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => handler(source, env, context))));\n let response = tracked.value;\n const bookmarks = responseD1SessionBookmarks(response.headers, tracked.bookmarks);\n if (bookmarks) {\n const headers = new Headers(response.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n varyD1Bookmarks(headers);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n try { await fillResponse(response, lease, started, () => refresh.valid); }\n finally { void response.body?.cancel().catch(() => undefined); }\n });\n } catch { /* Refresh failures leave the old lease untouched. */ }\n }).finally(() => { if (pending.get(key) === refresh) pending.delete(key); });\n pending.set(key, refresh);\n try { Reflect.apply(waitUntil, context, [refresh.task]); accepted = true; } catch { pending.delete(key); }\n }\n return conditionalHit(request, cached.response);\n }\n const priorRefresh = pending.get(key);\n if (priorRefresh) priorRefresh.valid = false;\n const lease: LeaseScope = {};\n const source = noCache(request);\n if (config.freshnessHeader !== undefined) source.headers.set(config.freshnessHeader, '1');\n const sourceResult = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => serve(source))));\n let response = sourceResult.value;\n const sourceBookmarks = responseD1SessionBookmarks(response.headers, sourceResult.bookmarks);\n if (sourceBookmarks) {\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const encoded = serializeD1Bookmarks(sourceBookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n const fill = fillResponse(response, lease, requestStarted, () => true, priorRefresh?.task);\n try {\n if (!warming.isInternal(request) && typeof waitUntil === 'function') { Reflect.apply(waitUntil, context, [fill]); return response; }\n } catch { /* Await the fill if the request context is unavailable. */ }\n await fill;\n return response;\n };\n return wrapped;\n}\n\nexport function wrapReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: ReadResponseLeaseOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, () => {\n if (![options.namespace, options.deployment, options.database].every((value) => typeof value === 'string' && value.trim().length > 0)) return null;\n const identity = { ...options };\n delete identity.warmup;\n return { config: options, seconds: options.seconds, identity: () => ['response-lease-v1', identity] };\n });\n}\n\nconst proofHeader = 'x-dee-wan-read-lease-deadline';\n\nfunction withoutProof(request: Request): Request {\n if (!request.headers.has(proofHeader)) return request;\n const headers = new Headers(request.headers);\n headers.delete(proofHeader);\n return new Request(request, { headers });\n}\n\nfunction responseWithProof(response: Response, deadline?: number): Response {\n if (!response.headers.has(proofHeader) && deadline === undefined) return response;\n const headers = new Headers(response.headers);\n headers.delete(proofHeader);\n if (deadline !== undefined) headers.set(proofHeader, String(Math.floor(deadline)));\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers, ...(response.webSocket ? { webSocket:response.webSocket } : {}) });\n}\n\nexport function wrapReadResponseLeaseOrigin<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n const lease: LeaseScope = {};\n const response = await scope.run(lease, () => handler(withoutProof(request), env, context));\n const deadline = lease.deadline;\n const type = response.headers.get('content-type') ?? '';\n if (request.method !== 'GET' || response.status !== 200 || response.headers.has('set-cookie') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(type) || deadline === undefined || !Number.isFinite(deadline) || deadline <= Date.now()) return responseWithProof(response);\n return responseWithProof(response, Math.min(deadline, lease.dataDeadline ?? Infinity));\n };\n}\n\nexport async function forwardReadLease(request: Request, service: { fetch(request: Request): Promise<Response> }): Promise<Response> {\n let forwarded = withoutProof(request);\n if (request.method === 'GET') {\n const headers = new Headers(forwarded.headers);\n headers.set('accept-encoding', 'identity');\n forwarded = new Request(forwarded, { headers });\n }\n const response = await service.fetch(forwarded);\n const raw = response.headers.get(proofHeader);\n if (raw && /^\\d+$/.test(raw)) {\n const deadline = Number(raw);\n if (Number.isSafeInteger(deadline) && deadline > Date.now()) limitReadResponseLeaseUntil(deadline);\n }\n return responseWithProof(response);\n}\n"]}
|