@nifrajs/middleware 4.0.2 → 5.1.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 +3 -0
- package/dist/_utils.d.ts +15 -9
- package/dist/_utils.d.ts.map +1 -1
- package/dist/_utils.js +39 -40
- package/dist/_utils.js.map +1 -1
- package/dist/admission.d.ts +4 -2
- package/dist/admission.d.ts.map +1 -1
- package/dist/admission.js +17 -5
- package/dist/admission.js.map +1 -1
- package/dist/basic-auth.d.ts.map +1 -1
- package/dist/basic-auth.js +8 -13
- package/dist/basic-auth.js.map +1 -1
- package/dist/cache-control.d.ts.map +1 -1
- package/dist/cache-control.js +4 -2
- package/dist/cache-control.js.map +1 -1
- package/dist/cache.d.ts +7 -4
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +58 -25
- package/dist/cache.js.map +1 -1
- package/dist/compression.d.ts.map +1 -1
- package/dist/compression.js +58 -1
- package/dist/compression.js.map +1 -1
- package/dist/conditional.d.ts.map +1 -1
- package/dist/conditional.js +1 -1
- package/dist/conditional.js.map +1 -1
- package/dist/content-negotiation.d.ts.map +1 -1
- package/dist/content-negotiation.js +3 -1
- package/dist/content-negotiation.js.map +1 -1
- package/dist/csrf.d.ts.map +1 -1
- package/dist/csrf.js +10 -5
- package/dist/csrf.js.map +1 -1
- package/dist/healthcheck.d.ts.map +1 -1
- package/dist/healthcheck.js +3 -1
- package/dist/healthcheck.js.map +1 -1
- package/dist/idempotency.d.ts +20 -4
- package/dist/idempotency.d.ts.map +1 -1
- package/dist/idempotency.js +44 -17
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jwt.d.ts +17 -2
- package/dist/jwt.d.ts.map +1 -1
- package/dist/jwt.js +70 -31
- package/dist/jwt.js.map +1 -1
- package/dist/language.d.ts.map +1 -1
- package/dist/language.js +12 -0
- package/dist/language.js.map +1 -1
- package/dist/openapi.d.ts +19 -4
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +24 -8
- package/dist/openapi.js.map +1 -1
- package/dist/rate-limit.d.ts +31 -0
- package/dist/rate-limit.d.ts.map +1 -1
- package/dist/rate-limit.js +160 -26
- package/dist/rate-limit.js.map +1 -1
- package/dist/request-id.d.ts.map +1 -1
- package/dist/request-id.js +1 -1
- package/dist/request-id.js.map +1 -1
- package/dist/timing.d.ts.map +1 -1
- package/dist/timing.js +1 -1
- package/dist/timing.js.map +1 -1
- package/dist/token-auth.d.ts.map +1 -1
- package/dist/token-auth.js +8 -13
- package/dist/token-auth.js.map +1 -1
- package/package.json +3 -3
- package/src/_utils.ts +61 -35
- package/src/admission.ts +15 -5
- package/src/basic-auth.ts +15 -13
- package/src/cache-control.ts +5 -2
- package/src/cache.ts +68 -28
- package/src/compression.ts +84 -4
- package/src/conditional.ts +8 -4
- package/src/content-negotiation.ts +3 -1
- package/src/csrf.ts +10 -6
- package/src/healthcheck.ts +4 -1
- package/src/idempotency.ts +77 -20
- package/src/index.ts +3 -0
- package/src/jwt.ts +106 -34
- package/src/language.ts +11 -0
- package/src/openapi.ts +52 -10
- package/src/rate-limit.ts +233 -41
- package/src/request-id.ts +7 -3
- package/src/timing.ts +8 -4
- package/src/token-auth.ts +18 -16
package/README.md
CHANGED
|
@@ -41,6 +41,9 @@ const app = server()
|
|
|
41
41
|
- **`basicAuth(options)`** - Basic Auth plugin with constant-time static credential comparison or
|
|
42
42
|
a custom verifier.
|
|
43
43
|
- **`bearer(options)` / `apiKey(options)`** - token auth plugins with typed principals.
|
|
44
|
+
- Required `basicAuth`, `bearer`, `apiKey` and `jwt` refuse in the core `authenticate()` stage:
|
|
45
|
+
before the body is read or validated and before any `derive` or `beforeHandle`. A rate limiter
|
|
46
|
+
that must count refused requests belongs in `onRequest`, where `rateLimit()` runs.
|
|
44
47
|
- **`csrf({ secret })`** - signed double-submit CSRF protection plus Origin/Referer checking. The
|
|
45
48
|
token travels in the `x-csrf-token` header; set `field: "_csrf"` to also accept it from a plain
|
|
46
49
|
HTML form's hidden input (urlencoded or multipart, bodies up to `fieldMaxBytes`, default 64 KiB).
|
package/dist/_utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type MaybePromise<T> = T | Promise<T>;
|
|
2
|
-
import type { NodeResponseContext } from "@nifrajs/core/server";
|
|
2
|
+
import type { AnyServer, NodeResponseContext } from "@nifrajs/core/server";
|
|
3
3
|
import { parseCookies as parseCoreCookies } from "@nifrajs/core/server";
|
|
4
4
|
export declare const SAFE_METHODS: Set<string>;
|
|
5
5
|
export declare function jsonError(status: number, error: string, headers?: Record<string, string>): Response;
|
|
@@ -9,6 +9,15 @@ export declare function jsonError(status: number, error: string, headers?: Recor
|
|
|
9
9
|
* a tighter `rateLimit()` inside a `group()`). The same instance applied twice still dedupes.
|
|
10
10
|
*/
|
|
11
11
|
export declare function guardName(base: string): string;
|
|
12
|
+
/** One request header by name, or `null`: what a credential extractor reads. */
|
|
13
|
+
export type HeaderGet = (name: string) => string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Install a credential guard. Required, it is an `authenticate()` stage, so a request without a
|
|
16
|
+
* principal is refused before its body or query is read or validated, and before any `derive` or
|
|
17
|
+
* `beforeHandle`. Optional never refuses, so it stays a `beforeHandle` that records a principal when
|
|
18
|
+
* the request carries one.
|
|
19
|
+
*/
|
|
20
|
+
export declare function installAuthGuard<P>(app: AnyServer, id: string, optional: boolean, store: WeakMap<Request, P>, verify: (header: HeaderGet) => MaybePromise<P | null | undefined>, refuse: () => Response): AnyServer;
|
|
12
21
|
/** Shared with core so auth/CSRF middleware gets the allocation-light cookie scanner too. */
|
|
13
22
|
export declare const parseCookies: typeof parseCoreCookies;
|
|
14
23
|
/**
|
|
@@ -34,15 +43,12 @@ export declare function importHmacKey(secret: string | Uint8Array, hash?: string
|
|
|
34
43
|
export declare function hmacSha256(input: string, secret: string | Uint8Array): Promise<string>;
|
|
35
44
|
export declare function verifyHmacSha256(input: string, signature: string, secret: string | Uint8Array): Promise<boolean>;
|
|
36
45
|
/**
|
|
37
|
-
* Apply header mutations to
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* never on Bun) makes `.set`/`.append` throw; that path clones into a fresh `Headers` + `Response`,
|
|
42
|
-
* exactly the old always-clone behavior. `apply` runs once either way (immutability is all-or-nothing
|
|
43
|
-
* - the first mutation throws before any partial change), so a mutation chain is safe to pass.
|
|
46
|
+
* Apply header mutations to the copy of `res` this request owns (`writableResponse`): a body-bearing
|
|
47
|
+
* response with mutable headers is written in place, a body-less one (sendable any number of times,
|
|
48
|
+
* so possibly shared) or one with guarded headers is copied first. Pass the `request` being answered
|
|
49
|
+
* so a copy already made for it is reused.
|
|
44
50
|
*/
|
|
45
|
-
export declare function withHeaders(res: Response, apply: (headers: Headers) => void): Response;
|
|
51
|
+
export declare function withHeaders(res: Response, apply: (headers: Headers) => void, request?: Request): Response;
|
|
46
52
|
/**
|
|
47
53
|
* Set one Node-direct response header without constructing a Web Response. `name` must already be
|
|
48
54
|
* the lowercase wire spelling - the record documents that contract, and it is what `Headers` emits
|
package/dist/_utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../src/_utils.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAE5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../src/_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/_utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseCookies as parseCoreCookies } from "@nifrajs/core/server";
|
|
1
|
+
import { authenticated, markAuthenticatedRequest, parseCookies as parseCoreCookies, rejected, writableResponse, } from "@nifrajs/core/server";
|
|
2
2
|
export const SAFE_METHODS = new Set(["GET", "HEAD", "OPTIONS", "TRACE"]);
|
|
3
3
|
const TEXT = new TextEncoder();
|
|
4
4
|
export function jsonError(status, error, headers) {
|
|
@@ -14,6 +14,36 @@ export function guardName(base) {
|
|
|
14
14
|
guardInstances += 1;
|
|
15
15
|
return `${base}#${guardInstances}`;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Install a credential guard. Required, it is an `authenticate()` stage, so a request without a
|
|
19
|
+
* principal is refused before its body or query is read or validated, and before any `derive` or
|
|
20
|
+
* `beforeHandle`. Optional never refuses, so it stays a `beforeHandle` that records a principal when
|
|
21
|
+
* the request carries one.
|
|
22
|
+
*/
|
|
23
|
+
export function installAuthGuard(app, id, optional, store, verify, refuse) {
|
|
24
|
+
if (optional) {
|
|
25
|
+
return app.beforeHandle(async (c) => {
|
|
26
|
+
const principal = await verify((name) => c.req.headers.get(name));
|
|
27
|
+
if (principal !== null && principal !== undefined) {
|
|
28
|
+
store.set(c.req, principal);
|
|
29
|
+
markAuthenticatedRequest(c.req);
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
return app.authenticate({
|
|
35
|
+
id,
|
|
36
|
+
mode: "async",
|
|
37
|
+
run: async (input) => {
|
|
38
|
+
const principal = await verify((name) => input.headers.get(name));
|
|
39
|
+
if (principal === null || principal === undefined) {
|
|
40
|
+
return rejected("unauthenticated", refuse());
|
|
41
|
+
}
|
|
42
|
+
store.set(input.request, principal);
|
|
43
|
+
return authenticated(principal);
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
17
47
|
/** Shared with core so auth/CSRF middleware gets the allocation-light cookie scanner too. */
|
|
18
48
|
export const parseCookies = parseCoreCookies;
|
|
19
49
|
/**
|
|
@@ -129,46 +159,15 @@ export async function verifyHmacSha256(input, signature, secret) {
|
|
|
129
159
|
return crypto.subtle.verify("HMAC", key, sig, utf8Bytes(input));
|
|
130
160
|
}
|
|
131
161
|
/**
|
|
132
|
-
* Apply header mutations to
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* never on Bun) makes `.set`/`.append` throw; that path clones into a fresh `Headers` + `Response`,
|
|
137
|
-
* exactly the old always-clone behavior. `apply` runs once either way (immutability is all-or-nothing
|
|
138
|
-
* - the first mutation throws before any partial change), so a mutation chain is safe to pass.
|
|
162
|
+
* Apply header mutations to the copy of `res` this request owns (`writableResponse`): a body-bearing
|
|
163
|
+
* response with mutable headers is written in place, a body-less one (sendable any number of times,
|
|
164
|
+
* so possibly shared) or one with guarded headers is copied first. Pass the `request` being answered
|
|
165
|
+
* so a copy already made for it is reused.
|
|
139
166
|
*/
|
|
140
|
-
export function withHeaders(res, apply) {
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
let mutable = true;
|
|
145
|
-
try {
|
|
146
|
-
previous = responseHeaders.get(probe);
|
|
147
|
-
responseHeaders.set(probe, "1");
|
|
148
|
-
if (previous === null)
|
|
149
|
-
responseHeaders.delete(probe);
|
|
150
|
-
else
|
|
151
|
-
responseHeaders.set(probe, previous);
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
mutable = false;
|
|
155
|
-
try {
|
|
156
|
-
if (previous === null)
|
|
157
|
-
responseHeaders.delete(probe);
|
|
158
|
-
else
|
|
159
|
-
responseHeaders.set(probe, previous);
|
|
160
|
-
}
|
|
161
|
-
catch {
|
|
162
|
-
// The guarded response rejected cleanup; the clone below is authoritative.
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (!mutable) {
|
|
166
|
-
const headers = new Headers(res.headers);
|
|
167
|
-
apply(headers);
|
|
168
|
-
return new Response(res.body, { status: res.status, statusText: res.statusText, headers });
|
|
169
|
-
}
|
|
170
|
-
apply(responseHeaders);
|
|
171
|
-
return res;
|
|
167
|
+
export function withHeaders(res, apply, request) {
|
|
168
|
+
const target = writableResponse(res, request);
|
|
169
|
+
apply(target.headers);
|
|
170
|
+
return target;
|
|
172
171
|
}
|
|
173
172
|
/**
|
|
174
173
|
* Set one Node-direct response header without constructing a Web Response. `name` must already be
|
package/dist/_utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.js","sourceRoot":"","sources":["../src/_utils.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"_utils.js","sourceRoot":"","sources":["../src/_utils.ts"],"names":[],"mappings":"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"}
|
package/dist/admission.d.ts
CHANGED
|
@@ -81,8 +81,10 @@ export type LoopDelayMonitor = (resolutionMs: number) => LoopDelayHistogram | un
|
|
|
81
81
|
/**
|
|
82
82
|
* Event-loop-lag sampler. By default it measures timer drift using only Web/JS runtime primitives, so
|
|
83
83
|
* it works under Node ESM, Bun, Deno, and workers without a hidden CommonJS `require` fallback. An
|
|
84
|
-
* injected histogram remains available for deterministic tests or a runtime-native monitor.
|
|
85
|
-
* returns
|
|
84
|
+
* injected histogram remains available for deterministic tests or a runtime-native monitor. A read
|
|
85
|
+
* returns the mean lag of the samples taken since the previous read and starts a new window; a read
|
|
86
|
+
* with no new sample since then returns the same value again, so every request that arrives between
|
|
87
|
+
* two samples of a lagging loop sees the lag.
|
|
86
88
|
*/
|
|
87
89
|
export declare function createEventLoopLagSampler(resolutionMs?: number, monitor?: LoopDelayMonitor): () => number;
|
|
88
90
|
/**
|
package/dist/admission.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,sBAAsB,CAAA;AAElF;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE3F,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,iBAAiB,KACxB;IAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAA;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8FAA8F;IAC9F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,MAAM,IAAI,IAAI,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,uEAAuE;IACvE,QAAQ,IAAI,iBAAiB,CAAA;CAC9B;AAaD,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAA;IACd,KAAK,IAAI,IAAI,CAAA;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAA;AAKvF
|
|
1
|
+
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,sBAAsB,CAAA;AAElF;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE3F,oGAAoG;AACpG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,iBAAiB,KACxB;IAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAA;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,sGAAsG;IACtG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8FAA8F;IAC9F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC,qEAAqE;IACrE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IACnC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAA;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,MAAM,IAAI,IAAI,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,uEAAuE;IACvE,QAAQ,IAAI,iBAAiB,CAAA;CAC9B;AAaD,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAA;IACd,KAAK,IAAI,IAAI,CAAA;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAA;AAKvF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,SAAK,EACjB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,MAAM,CA8Cd;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gBAAgB,GAAG,yBAAyB,CA8K9F"}
|
package/dist/admission.js
CHANGED
|
@@ -4,8 +4,10 @@ const NO_LAG = () => 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* Event-loop-lag sampler. By default it measures timer drift using only Web/JS runtime primitives, so
|
|
6
6
|
* it works under Node ESM, Bun, Deno, and workers without a hidden CommonJS `require` fallback. An
|
|
7
|
-
* injected histogram remains available for deterministic tests or a runtime-native monitor.
|
|
8
|
-
* returns
|
|
7
|
+
* injected histogram remains available for deterministic tests or a runtime-native monitor. A read
|
|
8
|
+
* returns the mean lag of the samples taken since the previous read and starts a new window; a read
|
|
9
|
+
* with no new sample since then returns the same value again, so every request that arrives between
|
|
10
|
+
* two samples of a lagging loop sees the lag.
|
|
9
11
|
*/
|
|
10
12
|
export function createEventLoopLagSampler(resolutionMs = 20, monitor) {
|
|
11
13
|
if (!Number.isFinite(resolutionMs) || resolutionMs <= 0) {
|
|
@@ -23,11 +25,16 @@ export function createEventLoopLagSampler(resolutionMs = 20, monitor) {
|
|
|
23
25
|
expected = now + resolutionMs;
|
|
24
26
|
}, resolutionMs);
|
|
25
27
|
timer.unref?.();
|
|
28
|
+
let latest = 0;
|
|
26
29
|
return () => {
|
|
27
|
-
|
|
30
|
+
// An empty window is not a healthy loop: a burst of requests reads between two ticks.
|
|
31
|
+
if (samples === 0)
|
|
32
|
+
return latest;
|
|
33
|
+
const mean = totalLagMs / samples;
|
|
28
34
|
totalLagMs = 0;
|
|
29
35
|
samples = 0;
|
|
30
|
-
|
|
36
|
+
latest = Number.isFinite(mean) ? mean : 0;
|
|
37
|
+
return latest;
|
|
31
38
|
};
|
|
32
39
|
}
|
|
33
40
|
let histogram;
|
|
@@ -40,10 +47,15 @@ export function createEventLoopLagSampler(resolutionMs = 20, monitor) {
|
|
|
40
47
|
if (histogram === undefined)
|
|
41
48
|
return NO_LAG;
|
|
42
49
|
histogram.enable();
|
|
50
|
+
let latest = 0;
|
|
43
51
|
return () => {
|
|
44
52
|
const meanNs = histogram.mean;
|
|
53
|
+
// A histogram reads NaN until it records a sample after a reset: the window is still open.
|
|
54
|
+
if (!Number.isFinite(meanNs))
|
|
55
|
+
return latest;
|
|
45
56
|
histogram.reset();
|
|
46
|
-
|
|
57
|
+
latest = Math.max(0, meanNs / 1e6 - resolutionMs);
|
|
58
|
+
return latest;
|
|
47
59
|
};
|
|
48
60
|
}
|
|
49
61
|
/**
|
package/dist/admission.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"AAoFA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;AAe1E,gGAAgG;AAChG,MAAM,MAAM,GAAiB,GAAG,EAAE,CAAC,CAAC,CAAA;AAEpC
|
|
1
|
+
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"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"}
|
package/dist/basic-auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-auth.d.ts","sourceRoot":"","sources":["../src/basic-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,
|
|
1
|
+
{"version":3,"file":"basic-auth.d.ts","sourceRoot":"","sources":["../src/basic-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAChF,OAAO,EAKL,KAAK,YAAY,EAIlB,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,cAAc,GAAG;IAChD,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAAA;IACrC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,MAAM;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,YAAY,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAC5B;AA0CD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;AACnF,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AACpF,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/basic-auth.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NIFRA_ASSURANCE, withRouteAssurance } from "@nifrajs/core/assurance";
|
|
2
2
|
import { defineIdentityPlugin } from "@nifrajs/core/server";
|
|
3
|
-
import { decodeBase64, guardName, jsonError, quotedHeaderValue, sha256, timingSafeEqualBytes, } from "./_utils.js";
|
|
3
|
+
import { decodeBase64, guardName, installAuthGuard, jsonError, quotedHeaderValue, sha256, timingSafeEqualBytes, } from "./_utils.js";
|
|
4
4
|
const UTF8 = new TextDecoder("utf-8", { fatal: true });
|
|
5
5
|
function challenge(realm) {
|
|
6
6
|
return `Basic realm="${quotedHeaderValue(realm)}", charset="UTF-8"`;
|
|
@@ -8,9 +8,9 @@ function challenge(realm) {
|
|
|
8
8
|
function reject(realm) {
|
|
9
9
|
return jsonError(401, "unauthorized", { "www-authenticate": challenge(realm) });
|
|
10
10
|
}
|
|
11
|
-
function credentials(
|
|
12
|
-
|
|
13
|
-
if (header
|
|
11
|
+
function credentials(header) {
|
|
12
|
+
// The auth-scheme is case-insensitive (RFC 9110 section 11.1): `basic` and `BASIC` are Basic too.
|
|
13
|
+
if (header == null || header.slice(0, 6).toLowerCase() !== "basic ")
|
|
14
14
|
return null;
|
|
15
15
|
const raw = decodeBase64(header.slice(6).trim());
|
|
16
16
|
if (raw === null)
|
|
@@ -43,15 +43,10 @@ export function basicAuth(options) {
|
|
|
43
43
|
const verifyPromise = "verify" in options
|
|
44
44
|
? Promise.resolve(options.verify)
|
|
45
45
|
: staticVerifier(options.username, options.password, options.principal ?? options.username);
|
|
46
|
-
const plugin = defineIdentityPlugin(guardName("basicAuth"), (app) => app
|
|
47
|
-
const parsed = credentials(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
store.set(c.req, principal);
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
return optional ? undefined : reject(realm);
|
|
54
|
-
}));
|
|
46
|
+
const plugin = defineIdentityPlugin(guardName("basicAuth"), (app) => installAuthGuard(app, "basicAuth", optional, store, async (header) => {
|
|
47
|
+
const parsed = credentials(header("authorization"));
|
|
48
|
+
return parsed === null ? null : (await verifyPromise)(parsed.username, parsed.password);
|
|
49
|
+
}, () => reject(realm)));
|
|
55
50
|
const instrumented = optional
|
|
56
51
|
? plugin
|
|
57
52
|
: withRouteAssurance(plugin, {
|
package/dist/basic-auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-auth.js","sourceRoot":"","sources":["../src/basic-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAA;AAChF,OAAO,EACL,YAAY,EACZ,SAAS,EACT,SAAS,EAET,iBAAiB,EACjB,MAAM,EACN,oBAAoB,GACrB,MAAM,aAAa,CAAA;AAqBpB,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAEtD,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,gBAAgB,iBAAiB,CAAC,KAAK,CAAC,oBAAoB,CAAA;AACrE,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,kBAAkB,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACjF,CAAC;AAED,SAAS,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"basic-auth.js","sourceRoot":"","sources":["../src/basic-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-control.d.ts","sourceRoot":"","sources":["../src/cache-control.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,wFAAwF;IACxF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;
|
|
1
|
+
{"version":3,"file":"cache-control.d.ts","sourceRoot":"","sources":["../src/cache-control.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7C,wFAAwF;IACxF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnC;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC,EAC1D,OAAO,GAAE,mBAAwB,iDA8BlC"}
|
package/dist/cache-control.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { withResponseObserver } from "@nifrajs/core/response-observer";
|
|
2
2
|
import { defineRouterPlugin } from "@nifrajs/core/server";
|
|
3
3
|
import { withHeaders } from "./_utils.js";
|
|
4
|
+
// Named per call, so a second, differently configured instance applies instead of being deduped.
|
|
5
|
+
let instances = 0;
|
|
4
6
|
/**
|
|
5
7
|
* Set a `Cache-Control` header on matching responses. `value` is either a fixed directive string or a
|
|
6
8
|
* function of the request (return `undefined` to leave a response untouched - e.g. cache by path).
|
|
@@ -18,7 +20,7 @@ export function cacheControl(value, options = {}) {
|
|
|
18
20
|
const methods = new Set((options.methods ?? ["GET", "HEAD"]).map((m) => m.toUpperCase()));
|
|
19
21
|
const statusOk = options.status ?? ((status) => status >= 200 && status < 300);
|
|
20
22
|
const respectExisting = options.respectExisting !== false;
|
|
21
|
-
return defineRouterPlugin(
|
|
23
|
+
return defineRouterPlugin(`cacheControl#${++instances}`, (app) => {
|
|
22
24
|
// A fixed directive needs nothing from the request beyond the method, so it ships as one
|
|
23
25
|
// portable header hook. A dynamic directive's resolver takes a real `Request`, which only the
|
|
24
26
|
// Web response walk carries - it keeps the full `onResponse` contract (and its cost).
|
|
@@ -43,7 +45,7 @@ export function cacheControl(value, options = {}) {
|
|
|
43
45
|
const directive = value(req);
|
|
44
46
|
if (directive === undefined)
|
|
45
47
|
return res;
|
|
46
|
-
return withHeaders(res, (headers) => headers.set("cache-control", directive));
|
|
48
|
+
return withHeaders(res, (headers) => headers.set("cache-control", directive), req);
|
|
47
49
|
},
|
|
48
50
|
};
|
|
49
51
|
return app.use(middleware);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-control.js","sourceRoot":"","sources":["../src/cache-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAmB,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAWzC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA0D,EAC1D,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,CAAA;IACtF,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAA;IACzD,OAAO,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"cache-control.js","sourceRoot":"","sources":["../src/cache-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAmB,MAAM,sBAAsB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAWzC,iGAAiG;AACjG,IAAI,SAAS,GAAG,CAAC,CAAA;AAEjB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAC1B,KAA0D,EAC1D,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,CAAA;IACtF,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAA;IACzD,OAAO,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;QAC/D,yFAAyF;QACzF,8FAA8F;QAC9F,sFAAsF;QACtF,MAAM,UAAU,GACd,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,oBAAoB,CAAa;gBAC/B,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM;oBACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAAE,OAAM;oBACzD,IAAI,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;wBAAE,OAAM;oBAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;gBACrC,CAAC;aACF,CAAC;YACJ,CAAC,CAAC;gBACE,UAAU,CAAC,GAAG,EAAE,GAAG;oBACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,OAAO,GAAG,CAAA;oBACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;wBAAE,OAAO,GAAG,CAAA;oBACrC,IAAI,eAAe,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;wBAAE,OAAO,GAAG,CAAA;oBACnE,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC5B,IAAI,SAAS,KAAK,SAAS;wBAAE,OAAO,GAAG,CAAA;oBACvC,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAA;gBACpF,CAAC;aACF,CAAA;QACP,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/cache.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Middleware } from "@nifrajs/core/server";
|
|
2
2
|
import { type MaybePromise } from "./_utils.js";
|
|
3
3
|
export interface CachedResponse {
|
|
4
4
|
readonly status: number;
|
|
@@ -29,7 +29,7 @@ export declare class MemoryResponseCache implements ResponseCacheStore {
|
|
|
29
29
|
}
|
|
30
30
|
export interface CacheOptions {
|
|
31
31
|
readonly store: ResponseCacheStore;
|
|
32
|
-
/**
|
|
32
|
+
/** Maximum time to live in milliseconds; response freshness can shorten it. */
|
|
33
33
|
readonly ttlMs: number;
|
|
34
34
|
/** Methods cached. Default `["GET", "HEAD"]`. */
|
|
35
35
|
readonly methods?: readonly string[];
|
|
@@ -43,7 +43,8 @@ export interface CacheOptions {
|
|
|
43
43
|
readonly maxBytes?: number;
|
|
44
44
|
/** Respect request `Cache-Control: no-cache/no-store`. Default `true`. */
|
|
45
45
|
readonly respectRequestCacheControl?: boolean;
|
|
46
|
-
/** Respect response
|
|
46
|
+
/** Respect response private/no-store/no-cache and max-age/s-maxage freshness. Default `true`.
|
|
47
|
+
* Responses requiring validation bypass this cache, which has no revalidation transport. */
|
|
47
48
|
readonly respectResponseCacheControl?: boolean;
|
|
48
49
|
/** Cache responses with `Set-Cookie`. Default `false`. */
|
|
49
50
|
readonly cacheSetCookie?: boolean;
|
|
@@ -52,7 +53,9 @@ export interface CacheOptions {
|
|
|
52
53
|
* personalized response (RFC 9111 §3.5), or it would be replayed to other users. Leave this off unless
|
|
53
54
|
* the cached route is genuinely the same for every caller. */
|
|
54
55
|
readonly cacheAuthenticated?: boolean;
|
|
55
|
-
/** Credential headers that make a request private. Defaults to Authorization, Cookie, and x-api-key.
|
|
56
|
+
/** Credential headers that make a request private. Defaults to Authorization, Cookie, and x-api-key.
|
|
57
|
+
* A response to a request an authentication stage accepted (or an integration marked with
|
|
58
|
+
* `markAuthenticatedRequest`) is treated as private too, whichever header carried the credential. */
|
|
56
59
|
readonly authenticatedHeaders?: readonly string[];
|
|
57
60
|
/** Response header for cache status. Default `"x-nifra-cache"`; set `false` to disable. */
|
|
58
61
|
readonly cacheStatusHeader?: string | false;
|
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,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC9E,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,+EAA+E;IAC/E,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;gGAC4F;IAC5F,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;;yGAEqG;IACrG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjD,2FAA2F;IAC3F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAC5C;AA8LD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,CAwJvD;AAED,eAAO,MAAM,aAAa,cAAQ,CAAA"}
|