@nifrajs/middleware 3.2.0 → 3.5.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/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +110 -22
- package/dist/cache.js.map +1 -1
- package/dist/idempotency.d.ts +7 -6
- package/dist/idempotency.d.ts.map +1 -1
- package/dist/idempotency.js +29 -16
- package/dist/idempotency.js.map +1 -1
- package/dist/trailing-slash.d.ts.map +1 -1
- package/dist/trailing-slash.js +12 -1
- package/dist/trailing-slash.js.map +1 -1
- package/package.json +3 -3
- package/src/cache.ts +119 -21
- package/src/idempotency.ts +50 -22
- package/src/trailing-slash.ts +13 -1
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAA;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,OAAO,GAAE,0BAA+B;IAcpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAU5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAQhD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;IAClC,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAA;IAC3C,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAA;IAC7C,0EAA0E;IAC1E,QAAQ,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAA;IAC9C,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC;;;kEAG8D;IAC9D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IACrC,wGAAwG;IACxG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjD,2FAA2F;IAC3F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC5C;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,aAAa,CAAA;AAE5D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,cAAc,GAAG,SAAS,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,OAAO,GAAE,0BAA+B;IAcpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAU5C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAQhD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;IAClC,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,2FAA2F;IAC3F,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAA;IAC3C,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAA;IAC7C,0EAA0E;IAC1E,QAAQ,CAAC,2BAA2B,CAAC,EAAE,OAAO,CAAA;IAC9C,0DAA0D;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC;;;kEAG8D;IAC9D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IACrC,wGAAwG;IACxG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjD,2FAA2F;IAC3F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC5C;AAyKD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAwIvD;AAED,eAAO,MAAM,aAAa,cAAQ,CAAA"}
|
package/dist/cache.js
CHANGED
|
@@ -79,10 +79,64 @@ function defaultKey(req, vary) {
|
|
|
79
79
|
key += `\n${header.toLowerCase()}:${req.headers.get(header) ?? ""}`;
|
|
80
80
|
return key;
|
|
81
81
|
}
|
|
82
|
+
const concatBytes = (chunks, total) => {
|
|
83
|
+
const out = new Uint8Array(total);
|
|
84
|
+
let offset = 0;
|
|
85
|
+
for (const chunk of chunks) {
|
|
86
|
+
out.set(chunk, offset);
|
|
87
|
+
offset += chunk.byteLength;
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
};
|
|
91
|
+
function replayFrom(res, chunks, reader) {
|
|
92
|
+
let released = false;
|
|
93
|
+
const release = () => {
|
|
94
|
+
if (!released) {
|
|
95
|
+
released = true;
|
|
96
|
+
reader.releaseLock();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const stream = new ReadableStream({
|
|
100
|
+
start(controller) {
|
|
101
|
+
for (const chunk of chunks)
|
|
102
|
+
controller.enqueue(chunk);
|
|
103
|
+
},
|
|
104
|
+
async pull(controller) {
|
|
105
|
+
try {
|
|
106
|
+
const { done, value } = await reader.read();
|
|
107
|
+
if (done || value === undefined) {
|
|
108
|
+
release();
|
|
109
|
+
controller.close();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
controller.enqueue(value);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
release();
|
|
117
|
+
controller.error(error);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
cancel: (reason) => reader.cancel(reason).finally(release),
|
|
121
|
+
});
|
|
122
|
+
return new Response(stream, {
|
|
123
|
+
status: res.status,
|
|
124
|
+
statusText: res.statusText,
|
|
125
|
+
headers: res.headers,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
82
128
|
async function readBytesCapped(res, maxBytes) {
|
|
83
|
-
const body = res.
|
|
84
|
-
if (body === null)
|
|
85
|
-
return
|
|
129
|
+
const body = res.body;
|
|
130
|
+
if (body === null) {
|
|
131
|
+
return {
|
|
132
|
+
bytes: new Uint8Array(),
|
|
133
|
+
response: new Response(null, {
|
|
134
|
+
status: res.status,
|
|
135
|
+
statusText: res.statusText,
|
|
136
|
+
headers: res.headers,
|
|
137
|
+
}),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
86
140
|
const reader = body.getReader();
|
|
87
141
|
const chunks = [];
|
|
88
142
|
let total = 0;
|
|
@@ -90,26 +144,46 @@ async function readBytesCapped(res, maxBytes) {
|
|
|
90
144
|
while (true) {
|
|
91
145
|
const { done, value } = await reader.read();
|
|
92
146
|
if (done) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
147
|
+
reader.releaseLock();
|
|
148
|
+
const bytes = concatBytes(chunks, total);
|
|
149
|
+
return {
|
|
150
|
+
bytes,
|
|
151
|
+
response: new Response(bytes.byteLength === 0 ? null : bytes, {
|
|
152
|
+
status: res.status,
|
|
153
|
+
statusText: res.statusText,
|
|
154
|
+
headers: res.headers,
|
|
155
|
+
}),
|
|
156
|
+
};
|
|
100
157
|
}
|
|
158
|
+
if (value === undefined)
|
|
159
|
+
return { response: replayFrom(res, chunks, reader) };
|
|
101
160
|
total += value.byteLength;
|
|
102
161
|
if (total > maxBytes) {
|
|
103
|
-
|
|
104
|
-
return null;
|
|
162
|
+
return { response: replayFrom(res, chunks.concat([value]), reader) };
|
|
105
163
|
}
|
|
106
164
|
chunks.push(value);
|
|
107
165
|
}
|
|
108
166
|
}
|
|
109
167
|
catch {
|
|
110
|
-
return
|
|
168
|
+
return { response: replayFrom(res, chunks, reader) };
|
|
111
169
|
}
|
|
112
170
|
}
|
|
171
|
+
function responseVary(headers) {
|
|
172
|
+
const value = headers.get("vary");
|
|
173
|
+
if (value === null)
|
|
174
|
+
return [];
|
|
175
|
+
return value
|
|
176
|
+
.split(",")
|
|
177
|
+
.map((part) => part.trim().toLowerCase())
|
|
178
|
+
.filter((part) => part !== "");
|
|
179
|
+
}
|
|
180
|
+
function responseVaryMatchesKey(headers, configured) {
|
|
181
|
+
const declared = responseVary(headers);
|
|
182
|
+
if (declared.includes("*"))
|
|
183
|
+
return false;
|
|
184
|
+
const configuredSet = new Set(configured.map((header) => header.toLowerCase()));
|
|
185
|
+
return declared.every((header) => configuredSet.has(header));
|
|
186
|
+
}
|
|
113
187
|
function withStatusHeader(res, header, status) {
|
|
114
188
|
if (header === false)
|
|
115
189
|
return res;
|
|
@@ -143,6 +217,7 @@ export function cache(options) {
|
|
|
143
217
|
throw new Error("cache: cacheStatusHeader is empty");
|
|
144
218
|
}
|
|
145
219
|
const hits = new WeakSet();
|
|
220
|
+
const requestKeys = new WeakMap();
|
|
146
221
|
const hasAuthentication = (req) => authenticatedHeaders.some((header) => req.headers.has(header));
|
|
147
222
|
return {
|
|
148
223
|
name: "cache",
|
|
@@ -153,6 +228,7 @@ export function cache(options) {
|
|
|
153
228
|
return undefined;
|
|
154
229
|
}
|
|
155
230
|
const key = keyOf(req);
|
|
231
|
+
requestKeys.set(req, key);
|
|
156
232
|
const entry = await store.get(key);
|
|
157
233
|
if (entry === undefined)
|
|
158
234
|
return undefined;
|
|
@@ -184,6 +260,7 @@ export function cache(options) {
|
|
|
184
260
|
async onResponse(res, req) {
|
|
185
261
|
if (hits.has(req)) {
|
|
186
262
|
hits.delete(req);
|
|
263
|
+
requestKeys.delete(req);
|
|
187
264
|
return res;
|
|
188
265
|
}
|
|
189
266
|
if (!methods.has(req.method.toUpperCase()))
|
|
@@ -199,6 +276,12 @@ export function cache(options) {
|
|
|
199
276
|
if (!cacheSetCookie && res.headers.has("set-cookie")) {
|
|
200
277
|
return withStatusHeader(res, cacheStatusHeader, "BYPASS");
|
|
201
278
|
}
|
|
279
|
+
// A response-declared Vary must be represented in the lookup key. If the caller did not opt
|
|
280
|
+
// those request headers into `vary`, bypass storage instead of replaying one representation to
|
|
281
|
+
// another request. `Vary: *` is never cacheable by a shared cache.
|
|
282
|
+
if (!responseVaryMatchesKey(res.headers, vary)) {
|
|
283
|
+
return withStatusHeader(res, cacheStatusHeader, "BYPASS");
|
|
284
|
+
}
|
|
202
285
|
// Shared-cache safety (RFC 9111 §3.5): never store a response to an authenticated request
|
|
203
286
|
// (Authorization or Cookie) unless it's explicitly public - otherwise a personalized 200 leaks
|
|
204
287
|
// across users. Opt in with `cacheAuthenticated: true` for a route that's the same for everyone.
|
|
@@ -211,16 +294,21 @@ export function cache(options) {
|
|
|
211
294
|
if (declared !== undefined && declared > maxBytes) {
|
|
212
295
|
return withStatusHeader(res, cacheStatusHeader, "BYPASS");
|
|
213
296
|
}
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
return withStatusHeader(
|
|
217
|
-
|
|
297
|
+
const captured = await readBytesCapped(res, maxBytes);
|
|
298
|
+
if (!("bytes" in captured)) {
|
|
299
|
+
return withStatusHeader(captured.response, cacheStatusHeader, "BYPASS");
|
|
300
|
+
}
|
|
301
|
+
const body = captured.bytes;
|
|
302
|
+
const capturedResponse = captured.response;
|
|
303
|
+
const headers = new Headers(capturedResponse.headers);
|
|
218
304
|
headers.delete("age");
|
|
219
305
|
if (cacheStatusHeader !== false)
|
|
220
306
|
headers.delete(cacheStatusHeader);
|
|
221
307
|
appendVary(headers, vary);
|
|
222
308
|
const now = Date.now();
|
|
223
|
-
|
|
309
|
+
const key = requestKeys.get(req) ?? keyOf(req);
|
|
310
|
+
requestKeys.delete(req);
|
|
311
|
+
await store.set(key, {
|
|
224
312
|
status: res.status,
|
|
225
313
|
statusText: res.statusText,
|
|
226
314
|
headers: [...headers.entries()],
|
|
@@ -228,13 +316,13 @@ export function cache(options) {
|
|
|
228
316
|
expiresAt: now + ttlMs,
|
|
229
317
|
storedAt: now,
|
|
230
318
|
});
|
|
231
|
-
const outgoing = new Headers(
|
|
319
|
+
const outgoing = new Headers(capturedResponse.headers);
|
|
232
320
|
appendVary(outgoing, vary);
|
|
233
321
|
if (cacheStatusHeader !== false)
|
|
234
322
|
outgoing.set(cacheStatusHeader, "MISS");
|
|
235
|
-
return new Response(
|
|
236
|
-
status:
|
|
237
|
-
statusText:
|
|
323
|
+
return new Response(capturedResponse.body, {
|
|
324
|
+
status: capturedResponse.status,
|
|
325
|
+
statusText: capturedResponse.statusText,
|
|
238
326
|
headers: outgoing,
|
|
239
327
|
});
|
|
240
328
|
},
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/idempotency.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface IdempotencyRecord {
|
|
|
19
19
|
}
|
|
20
20
|
export type IdempotencyClaim = {
|
|
21
21
|
readonly state: "new";
|
|
22
|
+
readonly reservation: string;
|
|
22
23
|
} | {
|
|
23
24
|
readonly state: "in_flight";
|
|
24
25
|
} | {
|
|
@@ -37,10 +38,10 @@ export interface IdempotencyStore {
|
|
|
37
38
|
* The in-flight lock expires after `lockTtlMs` so a crashed handler can't wedge the key forever.
|
|
38
39
|
*/
|
|
39
40
|
begin(key: string, lockTtlMs: number): Promise<IdempotencyClaim>;
|
|
40
|
-
/** Store the completed response
|
|
41
|
-
complete(key: string, record: IdempotencyRecord, ttlMs: number): Promise<
|
|
42
|
-
/** Release the lock
|
|
43
|
-
release(key: string): Promise<
|
|
41
|
+
/** Store the completed response only when `reservation` still owns the lock (kept for `ttlMs`). */
|
|
42
|
+
complete(key: string, reservation: string, record: IdempotencyRecord, ttlMs: number): Promise<boolean>;
|
|
43
|
+
/** Release only the lock owned by `reservation` (handler errored / response not cacheable). */
|
|
44
|
+
release(key: string, reservation: string): Promise<boolean>;
|
|
44
45
|
}
|
|
45
46
|
export interface MemoryIdempotencyStoreOptions {
|
|
46
47
|
/** Allow the in-memory store in production. Off by default - a per-instance store can't dedupe across instances. */
|
|
@@ -67,8 +68,8 @@ export declare class MemoryIdempotencyStore implements IdempotencyStore {
|
|
|
67
68
|
private maintain;
|
|
68
69
|
private reserve;
|
|
69
70
|
begin(key: string, lockTtlMs: number): Promise<IdempotencyClaim>;
|
|
70
|
-
complete(key: string, record: IdempotencyRecord, ttlMs: number): Promise<
|
|
71
|
-
release(key: string): Promise<
|
|
71
|
+
complete(key: string, reservation: string, record: IdempotencyRecord, ttlMs: number): Promise<boolean>;
|
|
72
|
+
release(key: string, reservation: string): Promise<boolean>;
|
|
72
73
|
}
|
|
73
74
|
export interface IdempotencyOptions {
|
|
74
75
|
/** Where claims + cached responses live. `MemoryIdempotencyStore` for dev; a shared store in production. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAE/D;;;;;;;;;GASG;AAEH,2GAA2G;AAC3G,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,6GAA6G;IAC7G,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1D,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
|
package/dist/idempotency.js
CHANGED
|
@@ -72,20 +72,31 @@ export class MemoryIdempotencyStore {
|
|
|
72
72
|
: { state: "in_flight" });
|
|
73
73
|
}
|
|
74
74
|
// Free (or expired): take the lock. Synchronous Map write ⇒ atomic on a single instance.
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
const reservation = crypto.randomUUID();
|
|
76
|
+
this.reserve(key, { kind: "lock", reservation, expiresAt: now + lockTtlMs });
|
|
77
|
+
return Promise.resolve({ state: "new", reservation });
|
|
77
78
|
}
|
|
78
|
-
complete(key, record, ttlMs) {
|
|
79
|
+
complete(key, reservation, record, ttlMs) {
|
|
79
80
|
this.validateKey(key);
|
|
80
81
|
assertPositiveTtl(ttlMs, "ttlMs");
|
|
81
|
-
this.reserve(key, { kind: "record", record, expiresAt: Date.now() + ttlMs });
|
|
82
|
-
return Promise.resolve();
|
|
83
|
-
}
|
|
84
|
-
release(key) {
|
|
85
82
|
const entry = this.entries.get(key);
|
|
86
|
-
if (entry
|
|
83
|
+
if (entry === undefined || entry.kind !== "lock" || entry.reservation !== reservation) {
|
|
84
|
+
return Promise.resolve(false);
|
|
85
|
+
}
|
|
86
|
+
if (entry.expiresAt <= Date.now()) {
|
|
87
87
|
this.entries.delete(key);
|
|
88
|
-
|
|
88
|
+
return Promise.resolve(false);
|
|
89
|
+
}
|
|
90
|
+
this.entries.set(key, { kind: "record", record, expiresAt: Date.now() + ttlMs });
|
|
91
|
+
return Promise.resolve(true);
|
|
92
|
+
}
|
|
93
|
+
release(key, reservation) {
|
|
94
|
+
const entry = this.entries.get(key);
|
|
95
|
+
if (entry === undefined || entry.kind !== "lock" || entry.reservation !== reservation) {
|
|
96
|
+
return Promise.resolve(false);
|
|
97
|
+
}
|
|
98
|
+
this.entries.delete(key);
|
|
99
|
+
return Promise.resolve(true);
|
|
89
100
|
}
|
|
90
101
|
}
|
|
91
102
|
const DEFAULT_METHODS = ["POST", "PUT", "PATCH", "DELETE"];
|
|
@@ -299,16 +310,18 @@ export function idempotency(options) {
|
|
|
299
310
|
},
|
|
300
311
|
});
|
|
301
312
|
}
|
|
302
|
-
|
|
313
|
+
if (claim.state !== "new")
|
|
314
|
+
return undefined;
|
|
315
|
+
claimed.set(req, { key, reservation: claim.reservation });
|
|
303
316
|
return undefined;
|
|
304
317
|
},
|
|
305
318
|
async onResponse(res, req) {
|
|
306
|
-
const
|
|
307
|
-
if (
|
|
319
|
+
const claim = claimed.get(req);
|
|
320
|
+
if (claim === undefined)
|
|
308
321
|
return res; // not a claimed request (safe method / no key / a replay)
|
|
309
322
|
claimed.delete(req);
|
|
310
323
|
if (!shouldCache(res)) {
|
|
311
|
-
await store.release(key);
|
|
324
|
+
await store.release(claim.key, claim.reservation);
|
|
312
325
|
return res;
|
|
313
326
|
}
|
|
314
327
|
// Buffer the body (consumes `res`), so a fresh Response is returned in its place.
|
|
@@ -317,16 +330,16 @@ export function idempotency(options) {
|
|
|
317
330
|
captured = await captureBody(res, maxBytes);
|
|
318
331
|
}
|
|
319
332
|
catch (err) {
|
|
320
|
-
await store.release(key);
|
|
333
|
+
await store.release(claim.key, claim.reservation);
|
|
321
334
|
throw err;
|
|
322
335
|
}
|
|
323
336
|
if (!("bytes" in captured)) {
|
|
324
|
-
await store.release(key); // too large to store - return it, but don't cache
|
|
337
|
+
await store.release(claim.key, claim.reservation); // too large to store - return it, but don't cache
|
|
325
338
|
return captured.response;
|
|
326
339
|
}
|
|
327
340
|
const bytes = captured.bytes;
|
|
328
341
|
const headers = [...captured.response.headers].filter(([name]) => name !== "set-cookie");
|
|
329
|
-
await store.complete(key, { status: res.status, headers, body: toBase64(bytes) }, ttlMs);
|
|
342
|
+
await store.complete(claim.key, claim.reservation, { status: res.status, headers, body: toBase64(bytes) }, ttlMs);
|
|
330
343
|
return captured.response;
|
|
331
344
|
},
|
|
332
345
|
};
|
package/dist/idempotency.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trailing-slash.d.ts","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACvC,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,oGAAoG;IACpG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CAC9D;
|
|
1
|
+
{"version":3,"file":"trailing-slash.d.ts","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;IACvC,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,oGAAoG;IACpG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;CAC9D;AAkDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,oBAAyB,iDAenE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,iDAiBrE"}
|
package/dist/trailing-slash.js
CHANGED
|
@@ -16,10 +16,21 @@ function withPath(req, path) {
|
|
|
16
16
|
url.pathname = path;
|
|
17
17
|
return url;
|
|
18
18
|
}
|
|
19
|
+
const relativeLocation = (url) => {
|
|
20
|
+
// A path beginning with `//` is parsed as a network-path reference and can still redirect to a
|
|
21
|
+
// different host. Prefix it with `/.` so URL resolution keeps the request authority.
|
|
22
|
+
const pathname = url.pathname.startsWith("//") ? `/.${url.pathname}` : url.pathname;
|
|
23
|
+
return `${pathname}${url.search}`;
|
|
24
|
+
};
|
|
19
25
|
function route(req, url, mode, status) {
|
|
20
26
|
return mode === "rewrite"
|
|
21
27
|
? new Request(url.toString(), req)
|
|
22
|
-
:
|
|
28
|
+
: // Redirects need no authority. Using the request's Host here would reflect an untrusted Host
|
|
29
|
+
// header into an absolute open redirect before the adapter's host policy has a chance to run.
|
|
30
|
+
new Response(null, {
|
|
31
|
+
status,
|
|
32
|
+
headers: { location: relativeLocation(url) },
|
|
33
|
+
});
|
|
23
34
|
}
|
|
24
35
|
function methodsOf(methods) {
|
|
25
36
|
return new Set((methods ?? DEFAULT_METHODS).map((m) => m.toUpperCase()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trailing-slash.js","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAezD,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,CAAU,CAAA;AAChD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAEvD,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACrC,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY,EAAE,IAAY;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA;IACnB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,KAAK,CACZ,GAAY,EACZ,GAAQ,EACR,IAA4B,EAC5B,MAA6B;IAE7B,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC;QAClC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"trailing-slash.js","sourceRoot":"","sources":["../src/trailing-slash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/middleware",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"description": "Composable middleware for nifra - auth, CSRF, JWT/JWKS, IP restriction, CORS, body limits, response cache, timing, and operational helpers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@nifrajs/schema": "3.
|
|
49
|
+
"@nifrajs/schema": "3.5.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@nifrajs/core": "^3.
|
|
52
|
+
"@nifrajs/core": "^3.5.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@nifrajs/core": "workspace:*",
|
package/src/cache.ts
CHANGED
|
@@ -140,36 +140,119 @@ function defaultKey(req: Request, vary: readonly string[]): string {
|
|
|
140
140
|
return key
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
type ReadBytes =
|
|
144
|
+
| { readonly bytes: Uint8Array; readonly response: Response }
|
|
145
|
+
| { readonly response: Response }
|
|
146
|
+
|
|
147
|
+
interface ChunkReader {
|
|
148
|
+
read(): Promise<{ readonly done: boolean; readonly value?: Uint8Array }>
|
|
149
|
+
cancel(reason?: unknown): Promise<void>
|
|
150
|
+
releaseLock(): void
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const concatBytes = (chunks: readonly Uint8Array[], total: number): Uint8Array => {
|
|
154
|
+
const out = new Uint8Array(total)
|
|
155
|
+
let offset = 0
|
|
156
|
+
for (const chunk of chunks) {
|
|
157
|
+
out.set(chunk, offset)
|
|
158
|
+
offset += chunk.byteLength
|
|
159
|
+
}
|
|
160
|
+
return out
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function replayFrom(res: Response, chunks: readonly Uint8Array[], reader: ChunkReader): Response {
|
|
164
|
+
let released = false
|
|
165
|
+
const release = (): void => {
|
|
166
|
+
if (!released) {
|
|
167
|
+
released = true
|
|
168
|
+
reader.releaseLock()
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const stream = new ReadableStream<Uint8Array>({
|
|
172
|
+
start(controller) {
|
|
173
|
+
for (const chunk of chunks) controller.enqueue(chunk)
|
|
174
|
+
},
|
|
175
|
+
async pull(controller) {
|
|
176
|
+
try {
|
|
177
|
+
const { done, value } = await reader.read()
|
|
178
|
+
if (done || value === undefined) {
|
|
179
|
+
release()
|
|
180
|
+
controller.close()
|
|
181
|
+
} else {
|
|
182
|
+
controller.enqueue(value)
|
|
183
|
+
}
|
|
184
|
+
} catch (error) {
|
|
185
|
+
release()
|
|
186
|
+
controller.error(error)
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
cancel: (reason) => reader.cancel(reason).finally(release),
|
|
190
|
+
})
|
|
191
|
+
return new Response(stream, {
|
|
192
|
+
status: res.status,
|
|
193
|
+
statusText: res.statusText,
|
|
194
|
+
headers: res.headers,
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async function readBytesCapped(res: Response, maxBytes: number): Promise<ReadBytes> {
|
|
199
|
+
const body = res.body
|
|
200
|
+
if (body === null) {
|
|
201
|
+
return {
|
|
202
|
+
bytes: new Uint8Array(),
|
|
203
|
+
response: new Response(null, {
|
|
204
|
+
status: res.status,
|
|
205
|
+
statusText: res.statusText,
|
|
206
|
+
headers: res.headers,
|
|
207
|
+
}),
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const reader = body.getReader() as unknown as ChunkReader
|
|
147
211
|
const chunks: Uint8Array[] = []
|
|
148
212
|
let total = 0
|
|
149
213
|
try {
|
|
150
214
|
while (true) {
|
|
151
215
|
const { done, value } = await reader.read()
|
|
152
216
|
if (done) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
217
|
+
reader.releaseLock()
|
|
218
|
+
const bytes = concatBytes(chunks, total)
|
|
219
|
+
return {
|
|
220
|
+
bytes,
|
|
221
|
+
response: new Response(bytes.byteLength === 0 ? null : bytes, {
|
|
222
|
+
status: res.status,
|
|
223
|
+
statusText: res.statusText,
|
|
224
|
+
headers: res.headers,
|
|
225
|
+
}),
|
|
158
226
|
}
|
|
159
|
-
return out
|
|
160
227
|
}
|
|
228
|
+
if (value === undefined) return { response: replayFrom(res, chunks, reader) }
|
|
161
229
|
total += value.byteLength
|
|
162
230
|
if (total > maxBytes) {
|
|
163
|
-
|
|
164
|
-
return null
|
|
231
|
+
return { response: replayFrom(res, chunks.concat([value]), reader) }
|
|
165
232
|
}
|
|
166
233
|
chunks.push(value)
|
|
167
234
|
}
|
|
168
235
|
} catch {
|
|
169
|
-
return
|
|
236
|
+
return { response: replayFrom(res, chunks, reader) }
|
|
170
237
|
}
|
|
171
238
|
}
|
|
172
239
|
|
|
240
|
+
function responseVary(headers: Headers): readonly string[] {
|
|
241
|
+
const value = headers.get("vary")
|
|
242
|
+
if (value === null) return []
|
|
243
|
+
return value
|
|
244
|
+
.split(",")
|
|
245
|
+
.map((part) => part.trim().toLowerCase())
|
|
246
|
+
.filter((part) => part !== "")
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function responseVaryMatchesKey(headers: Headers, configured: readonly string[]): boolean {
|
|
250
|
+
const declared = responseVary(headers)
|
|
251
|
+
if (declared.includes("*")) return false
|
|
252
|
+
const configuredSet = new Set(configured.map((header) => header.toLowerCase()))
|
|
253
|
+
return declared.every((header) => configuredSet.has(header))
|
|
254
|
+
}
|
|
255
|
+
|
|
173
256
|
function withStatusHeader(
|
|
174
257
|
res: Response,
|
|
175
258
|
header: string | false,
|
|
@@ -210,6 +293,7 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
210
293
|
throw new Error("cache: cacheStatusHeader is empty")
|
|
211
294
|
}
|
|
212
295
|
const hits = new WeakSet<Request>()
|
|
296
|
+
const requestKeys = new WeakMap<Request, string>()
|
|
213
297
|
const hasAuthentication = (req: Request): boolean =>
|
|
214
298
|
authenticatedHeaders.some((header) => req.headers.has(header))
|
|
215
299
|
|
|
@@ -221,6 +305,7 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
221
305
|
return undefined
|
|
222
306
|
}
|
|
223
307
|
const key = keyOf(req)
|
|
308
|
+
requestKeys.set(req, key)
|
|
224
309
|
const entry = await store.get(key)
|
|
225
310
|
if (entry === undefined) return undefined
|
|
226
311
|
// Never replay a personalized entry before route-scoped authentication runs. Public entries
|
|
@@ -252,6 +337,7 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
252
337
|
async onResponse(res, req) {
|
|
253
338
|
if (hits.has(req)) {
|
|
254
339
|
hits.delete(req)
|
|
340
|
+
requestKeys.delete(req)
|
|
255
341
|
return res
|
|
256
342
|
}
|
|
257
343
|
if (!methods.has(req.method.toUpperCase())) return res
|
|
@@ -265,6 +351,12 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
265
351
|
if (!cacheSetCookie && res.headers.has("set-cookie")) {
|
|
266
352
|
return withStatusHeader(res, cacheStatusHeader, "BYPASS")
|
|
267
353
|
}
|
|
354
|
+
// A response-declared Vary must be represented in the lookup key. If the caller did not opt
|
|
355
|
+
// those request headers into `vary`, bypass storage instead of replaying one representation to
|
|
356
|
+
// another request. `Vary: *` is never cacheable by a shared cache.
|
|
357
|
+
if (!responseVaryMatchesKey(res.headers, vary)) {
|
|
358
|
+
return withStatusHeader(res, cacheStatusHeader, "BYPASS")
|
|
359
|
+
}
|
|
268
360
|
// Shared-cache safety (RFC 9111 §3.5): never store a response to an authenticated request
|
|
269
361
|
// (Authorization or Cookie) unless it's explicitly public - otherwise a personalized 200 leaks
|
|
270
362
|
// across users. Opt in with `cacheAuthenticated: true` for a route that's the same for everyone.
|
|
@@ -279,15 +371,21 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
279
371
|
if (declared !== undefined && declared > maxBytes) {
|
|
280
372
|
return withStatusHeader(res, cacheStatusHeader, "BYPASS")
|
|
281
373
|
}
|
|
282
|
-
const
|
|
283
|
-
if (
|
|
374
|
+
const captured = await readBytesCapped(res, maxBytes)
|
|
375
|
+
if (!("bytes" in captured)) {
|
|
376
|
+
return withStatusHeader(captured.response, cacheStatusHeader, "BYPASS")
|
|
377
|
+
}
|
|
378
|
+
const body = captured.bytes
|
|
379
|
+
const capturedResponse = captured.response
|
|
284
380
|
|
|
285
|
-
const headers = new Headers(
|
|
381
|
+
const headers = new Headers(capturedResponse.headers)
|
|
286
382
|
headers.delete("age")
|
|
287
383
|
if (cacheStatusHeader !== false) headers.delete(cacheStatusHeader)
|
|
288
384
|
appendVary(headers, vary)
|
|
289
385
|
const now = Date.now()
|
|
290
|
-
|
|
386
|
+
const key = requestKeys.get(req) ?? keyOf(req)
|
|
387
|
+
requestKeys.delete(req)
|
|
388
|
+
await store.set(key, {
|
|
291
389
|
status: res.status,
|
|
292
390
|
statusText: res.statusText,
|
|
293
391
|
headers: [...headers.entries()],
|
|
@@ -295,12 +393,12 @@ export function cache(options: CacheOptions): Middleware {
|
|
|
295
393
|
expiresAt: now + ttlMs,
|
|
296
394
|
storedAt: now,
|
|
297
395
|
})
|
|
298
|
-
const outgoing = new Headers(
|
|
396
|
+
const outgoing = new Headers(capturedResponse.headers)
|
|
299
397
|
appendVary(outgoing, vary)
|
|
300
398
|
if (cacheStatusHeader !== false) outgoing.set(cacheStatusHeader, "MISS")
|
|
301
|
-
return new Response(
|
|
302
|
-
status:
|
|
303
|
-
statusText:
|
|
399
|
+
return new Response(capturedResponse.body, {
|
|
400
|
+
status: capturedResponse.status,
|
|
401
|
+
statusText: capturedResponse.statusText,
|
|
304
402
|
headers: outgoing,
|
|
305
403
|
})
|
|
306
404
|
},
|
package/src/idempotency.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface IdempotencyRecord {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export type IdempotencyClaim =
|
|
25
|
-
| { readonly state: "new" }
|
|
25
|
+
| { readonly state: "new"; readonly reservation: string }
|
|
26
26
|
| { readonly state: "in_flight" }
|
|
27
27
|
| { readonly state: "replay"; readonly record: IdempotencyRecord }
|
|
28
28
|
|
|
@@ -38,10 +38,15 @@ export interface IdempotencyStore {
|
|
|
38
38
|
* The in-flight lock expires after `lockTtlMs` so a crashed handler can't wedge the key forever.
|
|
39
39
|
*/
|
|
40
40
|
begin(key: string, lockTtlMs: number): Promise<IdempotencyClaim>
|
|
41
|
-
/** Store the completed response
|
|
42
|
-
complete(
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
/** Store the completed response only when `reservation` still owns the lock (kept for `ttlMs`). */
|
|
42
|
+
complete(
|
|
43
|
+
key: string,
|
|
44
|
+
reservation: string,
|
|
45
|
+
record: IdempotencyRecord,
|
|
46
|
+
ttlMs: number,
|
|
47
|
+
): Promise<boolean>
|
|
48
|
+
/** Release only the lock owned by `reservation` (handler errored / response not cacheable). */
|
|
49
|
+
release(key: string, reservation: string): Promise<boolean>
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
export interface MemoryIdempotencyStoreOptions {
|
|
@@ -54,7 +59,7 @@ export interface MemoryIdempotencyStoreOptions {
|
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
type Entry =
|
|
57
|
-
| { readonly kind: "lock"; readonly expiresAt: number }
|
|
62
|
+
| { readonly kind: "lock"; readonly reservation: string; readonly expiresAt: number }
|
|
58
63
|
| { readonly kind: "record"; readonly record: IdempotencyRecord; readonly expiresAt: number }
|
|
59
64
|
|
|
60
65
|
const KEY_ENCODER = new TextEncoder()
|
|
@@ -137,21 +142,38 @@ export class MemoryIdempotencyStore implements IdempotencyStore {
|
|
|
137
142
|
)
|
|
138
143
|
}
|
|
139
144
|
// Free (or expired): take the lock. Synchronous Map write ⇒ atomic on a single instance.
|
|
140
|
-
|
|
141
|
-
|
|
145
|
+
const reservation = crypto.randomUUID()
|
|
146
|
+
this.reserve(key, { kind: "lock", reservation, expiresAt: now + lockTtlMs })
|
|
147
|
+
return Promise.resolve({ state: "new", reservation })
|
|
142
148
|
}
|
|
143
149
|
|
|
144
|
-
complete(
|
|
150
|
+
complete(
|
|
151
|
+
key: string,
|
|
152
|
+
reservation: string,
|
|
153
|
+
record: IdempotencyRecord,
|
|
154
|
+
ttlMs: number,
|
|
155
|
+
): Promise<boolean> {
|
|
145
156
|
this.validateKey(key)
|
|
146
157
|
assertPositiveTtl(ttlMs, "ttlMs")
|
|
147
|
-
|
|
148
|
-
|
|
158
|
+
const entry = this.entries.get(key)
|
|
159
|
+
if (entry === undefined || entry.kind !== "lock" || entry.reservation !== reservation) {
|
|
160
|
+
return Promise.resolve(false)
|
|
161
|
+
}
|
|
162
|
+
if (entry.expiresAt <= Date.now()) {
|
|
163
|
+
this.entries.delete(key)
|
|
164
|
+
return Promise.resolve(false)
|
|
165
|
+
}
|
|
166
|
+
this.entries.set(key, { kind: "record", record, expiresAt: Date.now() + ttlMs })
|
|
167
|
+
return Promise.resolve(true)
|
|
149
168
|
}
|
|
150
169
|
|
|
151
|
-
release(key: string): Promise<
|
|
170
|
+
release(key: string, reservation: string): Promise<boolean> {
|
|
152
171
|
const entry = this.entries.get(key)
|
|
153
|
-
if (entry
|
|
154
|
-
|
|
172
|
+
if (entry === undefined || entry.kind !== "lock" || entry.reservation !== reservation) {
|
|
173
|
+
return Promise.resolve(false)
|
|
174
|
+
}
|
|
175
|
+
this.entries.delete(key)
|
|
176
|
+
return Promise.resolve(true)
|
|
155
177
|
}
|
|
156
178
|
}
|
|
157
179
|
|
|
@@ -405,7 +427,7 @@ export function idempotency(options: IdempotencyOptions): Middleware {
|
|
|
405
427
|
? (req: Request): Promise<string | null> | null =>
|
|
406
428
|
defaultIdempotencyKey(req, header, principalHeaders)
|
|
407
429
|
: (req: Request): string | null | Promise<string | null> => custom(req, header)
|
|
408
|
-
const claimed = new WeakMap<Request, string>()
|
|
430
|
+
const claimed = new WeakMap<Request, { readonly key: string; readonly reservation: string }>()
|
|
409
431
|
|
|
410
432
|
const middleware: Middleware = {
|
|
411
433
|
name: "idempotency",
|
|
@@ -436,15 +458,16 @@ export function idempotency(options: IdempotencyOptions): Middleware {
|
|
|
436
458
|
},
|
|
437
459
|
})
|
|
438
460
|
}
|
|
439
|
-
|
|
461
|
+
if (claim.state !== "new") return undefined
|
|
462
|
+
claimed.set(req, { key, reservation: claim.reservation })
|
|
440
463
|
return undefined
|
|
441
464
|
},
|
|
442
465
|
async onResponse(res, req) {
|
|
443
|
-
const
|
|
444
|
-
if (
|
|
466
|
+
const claim = claimed.get(req)
|
|
467
|
+
if (claim === undefined) return res // not a claimed request (safe method / no key / a replay)
|
|
445
468
|
claimed.delete(req)
|
|
446
469
|
if (!shouldCache(res)) {
|
|
447
|
-
await store.release(key)
|
|
470
|
+
await store.release(claim.key, claim.reservation)
|
|
448
471
|
return res
|
|
449
472
|
}
|
|
450
473
|
// Buffer the body (consumes `res`), so a fresh Response is returned in its place.
|
|
@@ -452,16 +475,21 @@ export function idempotency(options: IdempotencyOptions): Middleware {
|
|
|
452
475
|
try {
|
|
453
476
|
captured = await captureBody(res, maxBytes)
|
|
454
477
|
} catch (err) {
|
|
455
|
-
await store.release(key)
|
|
478
|
+
await store.release(claim.key, claim.reservation)
|
|
456
479
|
throw err
|
|
457
480
|
}
|
|
458
481
|
if (!("bytes" in captured)) {
|
|
459
|
-
await store.release(key) // too large to store - return it, but don't cache
|
|
482
|
+
await store.release(claim.key, claim.reservation) // too large to store - return it, but don't cache
|
|
460
483
|
return captured.response
|
|
461
484
|
}
|
|
462
485
|
const bytes = captured.bytes
|
|
463
486
|
const headers = [...captured.response.headers].filter(([name]) => name !== "set-cookie")
|
|
464
|
-
await store.complete(
|
|
487
|
+
await store.complete(
|
|
488
|
+
claim.key,
|
|
489
|
+
claim.reservation,
|
|
490
|
+
{ status: res.status, headers, body: toBase64(bytes) },
|
|
491
|
+
ttlMs,
|
|
492
|
+
)
|
|
465
493
|
return captured.response
|
|
466
494
|
},
|
|
467
495
|
}
|
package/src/trailing-slash.ts
CHANGED
|
@@ -34,6 +34,13 @@ function withPath(req: Request, path: string): URL {
|
|
|
34
34
|
return url
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
const relativeLocation = (url: URL): string => {
|
|
38
|
+
// A path beginning with `//` is parsed as a network-path reference and can still redirect to a
|
|
39
|
+
// different host. Prefix it with `/.` so URL resolution keeps the request authority.
|
|
40
|
+
const pathname = url.pathname.startsWith("//") ? `/.${url.pathname}` : url.pathname
|
|
41
|
+
return `${pathname}${url.search}`
|
|
42
|
+
}
|
|
43
|
+
|
|
37
44
|
function route(
|
|
38
45
|
req: Request,
|
|
39
46
|
url: URL,
|
|
@@ -42,7 +49,12 @@ function route(
|
|
|
42
49
|
) {
|
|
43
50
|
return mode === "rewrite"
|
|
44
51
|
? new Request(url.toString(), req)
|
|
45
|
-
:
|
|
52
|
+
: // Redirects need no authority. Using the request's Host here would reflect an untrusted Host
|
|
53
|
+
// header into an absolute open redirect before the adapter's host policy has a chance to run.
|
|
54
|
+
new Response(null, {
|
|
55
|
+
status,
|
|
56
|
+
headers: { location: relativeLocation(url) },
|
|
57
|
+
})
|
|
46
58
|
}
|
|
47
59
|
|
|
48
60
|
function methodsOf(methods: readonly string[] | undefined): ReadonlySet<string> {
|