@proof-holdings/delegation-verifier 0.1.0 → 0.2.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/jwks.js CHANGED
@@ -1,30 +1,57 @@
1
1
  /**
2
- * JWKS retrieval and key cache.
2
+ * JWKS retrieval and key cache — the I/O half. The rules a fetched key set is held to (merge,
3
+ * tombstones, purpose, window) live in `keyset.ts`; this file decides WHEN to fetch and what to
4
+ * answer when a fetch fails.
3
5
  *
4
- * Three behaviours here are load-bearing rather than tidy, all learned from the hand-rolled Go
5
- * verifier that shipped before this package:
6
+ * Behaviours that are load-bearing rather than tidy, the first three learned from the hand-rolled
7
+ * Go verifier that shipped before this package:
6
8
  *
7
9
  * - The algorithm is chosen from THIS list, never from the token's own header. A token that
8
10
  * asks for `none` or for an HMAC is refused before any key is looked up.
9
- * - An unknown `kid` is indistinguishable from a rotated key, so a miss triggers at most one
10
- * refetch per cooldown window. Without it every junk-kid token costs one outbound request
11
- * and a busy verifier trips the issuer's rate limit — failing its GOOD tokens too.
11
+ * - An unknown `kid` is indistinguishable from a rotated (or emergency) key, so a miss triggers
12
+ * at most one refetch per cooldown window. Without it every junk-kid token costs one outbound
13
+ * request and a busy verifier trips the issuer's rate limit — failing its GOOD tokens too.
12
14
  * - Concurrent misses share ONE in-flight fetch per key set, with the cache re-checked after
13
15
  * it resolves. Serialising is what makes the cooldown hold under concurrency.
16
+ * - A failed refetch does not discard a cached key set. Under `maxJwksAgeMs` its CONFIRMED keys
17
+ * keep answering (a kid they do not cover is `jwks_unavailable`: it may be new); over it the answer
18
+ * is `jwks_stale` — except for an applied tombstone, which is `key_revoked` at any age. A set
19
+ * that was never fetched has no cache to fall back on, so its failure stays `jwks_unavailable`
20
+ * and is retried on every call.
21
+ * - Age is measured on a monotonic clock in-process. Only what is persisted uses wall clock.
14
22
  */
15
23
  import { isRecord } from './jwt.js';
24
+ import { checkKeyPolicy, deserializeKeySetState, emptyKeySetState, isRegistryLive, mergeFetchedDocument, selectKeys, serializeKeySetState, withConfirmedKeysOnly, withoutTombstones, withPersistedTombstones, } from './keyset.js';
16
25
  export const SUPPORTED_ALGORITHMS = ['RS256', 'ES256'];
17
- /** How long a `kid` miss suppresses further refetches of the same key set. */
26
+ /** How long a `kid` miss — or a failed refetch of a cached set — suppresses further fetches. */
18
27
  export const KEY_MISS_COOLDOWN_MS = 30_000;
19
28
  /** How long a successfully fetched key set is reused without refetching. */
20
29
  export const KEY_SET_TTL_MS = 10 * 60_000;
30
+ /** Default `maxJwksAgeMs`. */
31
+ export const DEFAULT_MAX_JWKS_AGE_MS = 24 * 60 * 60_000;
32
+ /** Largest accepted `maxJwksAgeMs` — below the issuer's ~30-day lead on its next key. */
33
+ export const MAX_JWKS_AGE_CAP_MS = 25 * 24 * 60 * 60_000;
34
+ /** Bound on a JWKS fetch and on each `keySetStore` call when the caller passes no `timeoutMs`. */
35
+ const DEFAULT_IO_TIMEOUT_MS = 5_000;
21
36
  /**
22
37
  * A key set is kilobytes. Anything larger is not a JWKS, and the request is driven by input the
23
38
  * verifier does not control, so it is capped rather than streamed to completion.
24
39
  */
25
40
  export const MAX_REMOTE_BODY_BYTES = 512 * 1024;
41
+ const systemClock = {
42
+ monotonicMs: () => performance.now(),
43
+ wallMs: () => Date.now(),
44
+ };
45
+ let clock = systemClock;
46
+ /** Test seam — replaces both clocks; `null` restores the system clocks. Not exported publicly. */
47
+ export function setJwksClockForTests(replacement) {
48
+ clock = replacement ?? systemClock;
49
+ }
50
+ function readClock() {
51
+ return { monotonicMs: clock.monotonicMs(), wallMs: clock.wallMs() };
52
+ }
26
53
  const cache = new Map();
27
- /** Test seam — drops every cached key set. */
54
+ /** Test seam — drops every cached key set, tombstones included. */
28
55
  export function resetJwksCache() {
29
56
  cache.clear();
30
57
  }
@@ -34,31 +61,93 @@ export class JwksUnavailableError extends Error {
34
61
  this.name = 'JwksUnavailableError';
35
62
  }
36
63
  }
37
- function importParams(alg) {
38
- if (alg === 'ES256') {
39
- return {
40
- algorithm: { name: 'ECDSA', namedCurve: 'P-256' },
41
- verify: { name: 'ECDSA', hash: 'SHA-256' },
64
+ function entryFor(jwksUri) {
65
+ let entry = cache.get(jwksUri);
66
+ if (!entry) {
67
+ entry = {
68
+ state: emptyKeySetState(),
69
+ imported: new Map(),
70
+ lastMissAt: null,
71
+ lastFailedAt: null,
72
+ inFlight: null,
73
+ storeLoaded: null,
74
+ storeLoadFailed: false,
42
75
  };
76
+ cache.set(jwksUri, entry);
43
77
  }
44
- return {
45
- algorithm: { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },
46
- verify: { name: 'RSASSA-PKCS1-v1_5' },
47
- };
48
- }
49
- export function isSupportedAlgorithm(alg) {
50
- return typeof alg === 'string' && SUPPORTED_ALGORITHMS.includes(alg);
78
+ return entry;
51
79
  }
52
- async function importJwk(jwk, alg) {
80
+ function emit(options, jwksUri, event) {
81
+ if (!options.onJwksEvent)
82
+ return;
53
83
  try {
54
- const { algorithm } = importParams(alg);
55
- return await crypto.subtle.importKey('jwk', jwk, algorithm, false, ['verify']);
84
+ options.onJwksEvent({ ...event, jwksUri });
56
85
  }
57
86
  catch {
58
- return null;
87
+ // A throwing listener must not turn into a verification failure.
88
+ }
89
+ }
90
+ function errorMessage(error) {
91
+ return error instanceof Error ? error.message : String(error);
92
+ }
93
+ /** A store is the caller's code: a call that never settles must not hang every verification. */
94
+ async function boundedStoreCall(call, timeoutMs) {
95
+ let timer;
96
+ const timedOut = new Promise((_, reject) => {
97
+ timer = setTimeout(() => reject(new Error(`timed out after ${timeoutMs} ms`)), timeoutMs);
98
+ });
99
+ try {
100
+ return await Promise.race([Promise.resolve().then(call), timedOut]);
101
+ }
102
+ finally {
103
+ clearTimeout(timer);
104
+ }
105
+ }
106
+ async function loadFromStore(entry, jwksUri, options) {
107
+ const store = options.keySetStore;
108
+ if (!store || entry.storeLoaded) {
109
+ if (entry.storeLoaded)
110
+ await entry.storeLoaded;
111
+ return;
112
+ }
113
+ entry.storeLoaded = (async () => {
114
+ try {
115
+ const raw = await boundedStoreCall(() => store.load(jwksUri), options.timeoutMs ?? DEFAULT_IO_TIMEOUT_MS);
116
+ if (typeof raw !== 'string')
117
+ return;
118
+ const loaded = deserializeKeySetState(raw, readClock());
119
+ if (!loaded) {
120
+ emit(options, jwksUri, { type: 'store_error', message: 'keySetStore.load returned a state this version cannot read' });
121
+ return;
122
+ }
123
+ // A set fetched in this process before the store was first offered is newer than disk —
124
+ // except for its tombstones, which no later fetch can restore.
125
+ entry.state = entry.state.fetchedAt === null ? loaded : withPersistedTombstones(entry.state, loaded);
126
+ }
127
+ catch (error) {
128
+ entry.storeLoadFailed = true;
129
+ emit(options, jwksUri, { type: 'store_error', message: `keySetStore.load failed: ${errorMessage(error)}` });
130
+ }
131
+ })();
132
+ await entry.storeLoaded;
133
+ }
134
+ async function saveToStore(entry, jwksUri, options) {
135
+ const store = options.keySetStore;
136
+ if (!store)
137
+ return;
138
+ if (entry.storeLoadFailed) {
139
+ emit(options, jwksUri, { type: 'store_error', message: 'keySetStore.save skipped: the persisted state could not be loaded, and saving would overwrite it' });
140
+ return;
141
+ }
142
+ const serialized = serializeKeySetState(entry.state);
143
+ try {
144
+ await boundedStoreCall(() => store.save(jwksUri, serialized), options.timeoutMs ?? DEFAULT_IO_TIMEOUT_MS);
145
+ }
146
+ catch (error) {
147
+ emit(options, jwksUri, { type: 'store_error', message: `keySetStore.save failed: ${errorMessage(error)}` });
59
148
  }
60
149
  }
61
- async function fetchKeySet(entry, jwksUri, alg, fetchImpl, timeoutMs) {
150
+ async function fetchDocument(jwksUri, fetchImpl, timeoutMs) {
62
151
  const response = await fetchImpl(jwksUri, {
63
152
  signal: AbortSignal.timeout(timeoutMs),
64
153
  headers: { accept: 'application/json' },
@@ -86,91 +175,165 @@ async function fetchKeySet(entry, jwksUri, alg, fetchImpl, timeoutMs) {
86
175
  if (!isRecord(body) || !Array.isArray(body.keys)) {
87
176
  throw new JwksUnavailableError('JWKS response has no `keys` array');
88
177
  }
89
- const keys = new Map();
90
- const anonymousKeys = [];
91
- for (const candidate of body.keys) {
92
- if (!isRecord(candidate))
93
- continue;
94
- // A key set may legitimately mix algorithms; only the ones usable for THIS verification
95
- // are imported, and an unusable entry is skipped rather than failing the whole set.
96
- if (typeof candidate.alg === 'string' && candidate.alg !== alg)
97
- continue;
98
- const key = await importJwk(candidate, alg);
99
- if (!key)
100
- continue;
101
- if (typeof candidate.kid === 'string' && candidate.kid.length > 0) {
102
- keys.set(candidate.kid, key);
178
+ return body;
179
+ }
180
+ /**
181
+ * Fetch and merge once per key set at a time. The shared promise RESOLVES to the outcome rather
182
+ * than recording it on the entry: a waiter reading shared state after its await could be handed
183
+ * the state of the NEXT fetch — and a waiter that only saw an empty key set would report
184
+ * `unknown_key` ("this token names a key that does not exist") for what is actually "I could not
185
+ * reach the issuer": a false forgery signal during an outage.
186
+ */
187
+ function runFetch(entry, jwksUri, params) {
188
+ if (entry.inFlight)
189
+ return entry.inFlight;
190
+ const running = (async () => {
191
+ let failure;
192
+ try {
193
+ const body = await fetchDocument(jwksUri, params.fetch, params.timeoutMs);
194
+ const merged = mergeFetchedDocument(entry.state, body, readClock());
195
+ for (const event of merged.events)
196
+ emit(params, jwksUri, event);
197
+ if (merged.accepted) {
198
+ entry.state = merged.state;
199
+ entry.lastFailedAt = null;
200
+ await saveToStore(entry, jwksUri, params);
201
+ return { ok: true };
202
+ }
203
+ failure = merged.events[0]?.message ?? 'JWKS refused';
103
204
  }
104
- else {
105
- anonymousKeys.push(key);
205
+ catch (error) {
206
+ failure = error instanceof JwksUnavailableError ? error.message : errorMessage(error) || 'JWKS fetch failed';
106
207
  }
208
+ // The failure cooldown applies only to a set with a cache to fall back on; a set that was
209
+ // never fetched is retried on every call, exactly as before.
210
+ if (entry.state.fetchedAt !== null)
211
+ entry.lastFailedAt = clock.monotonicMs();
212
+ return { ok: false, message: failure };
213
+ })();
214
+ entry.inFlight = running;
215
+ void running.finally(() => {
216
+ if (entry.inFlight === running)
217
+ entry.inFlight = null;
218
+ });
219
+ return running;
220
+ }
221
+ function cacheAgeMs(state, now) {
222
+ if (state.fetchedAt === null || state.fetchedAtUntrusted)
223
+ return Number.POSITIVE_INFINITY;
224
+ return now - state.fetchedAt.monotonicMs;
225
+ }
226
+ function isFresh(state, now) {
227
+ return cacheAgeMs(state, now) < KEY_SET_TTL_MS;
228
+ }
229
+ function importParams(alg) {
230
+ if (alg === 'ES256') {
231
+ return {
232
+ algorithm: { name: 'ECDSA', namedCurve: 'P-256' },
233
+ verify: { name: 'ECDSA', hash: 'SHA-256' },
234
+ };
235
+ }
236
+ return {
237
+ algorithm: { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },
238
+ verify: { name: 'RSASSA-PKCS1-v1_5' },
239
+ };
240
+ }
241
+ export function isSupportedAlgorithm(alg) {
242
+ return typeof alg === 'string' && SUPPORTED_ALGORITHMS.includes(alg);
243
+ }
244
+ async function importRecord(entry, record, alg) {
245
+ // A key set may legitimately mix algorithms; a key declared for another one is not a candidate.
246
+ if (typeof record.jwk.alg === 'string' && record.jwk.alg !== alg)
247
+ return null;
248
+ // A key the JWKS marks for anything but signatures is not a candidate (RFC 7517 §4.2, §4.3). Only
249
+ // the material is handed to `importKey`, so these members would otherwise go unread — and the
250
+ // check precedes the import cache, which is keyed by material and shared across kids.
251
+ const { use, key_ops: keyOps } = record.jwk;
252
+ if (use !== undefined && use !== 'sig')
253
+ return null;
254
+ if (keyOps !== undefined && !(Array.isArray(keyOps) && keyOps.includes('verify')))
255
+ return null;
256
+ const cacheKey = `${record.fingerprint}|${alg}`;
257
+ if (entry.imported.has(cacheKey))
258
+ return entry.imported.get(cacheKey) ?? null;
259
+ let key = null;
260
+ try {
261
+ const { kty, crv, x, y, n, e } = record.jwk;
262
+ const material = Object.fromEntries(Object.entries({ kty, crv, x, y, n, e }).filter(([, value]) => value !== undefined));
263
+ key = await crypto.subtle.importKey('jwk', material, importParams(alg).algorithm, false, ['verify']);
264
+ }
265
+ catch {
266
+ key = null;
107
267
  }
108
- entry.keys = keys;
109
- entry.anonymousKeys = anonymousKeys;
110
- entry.fetchedAt = Date.now();
268
+ entry.imported.set(cacheKey, key);
269
+ return key;
111
270
  }
112
- function lookup(entry, kid) {
113
- if (kid) {
114
- const key = entry.keys.get(kid);
115
- return key ? [key] : [];
271
+ async function resolveFromState(entry, state, kid, family, alg) {
272
+ const selection = selectKeys(state, kid, family);
273
+ if (selection.kind !== 'candidates')
274
+ return selection;
275
+ const candidates = [];
276
+ for (const record of selection.records) {
277
+ const key = await importRecord(entry, record, alg);
278
+ if (key)
279
+ candidates.push({ key, record });
116
280
  }
117
- // No `kid` in the header: every key in the set is a candidate.
118
- return [...entry.anonymousKeys, ...entry.keys.values()];
281
+ if (candidates.length === 0)
282
+ return { kind: 'unknown' };
283
+ return { kind: 'keys', candidates, registryLive: isRegistryLive(state) };
284
+ }
285
+ function candidateCount(state, family) {
286
+ const selection = selectKeys(state, undefined, family);
287
+ return selection.kind === 'candidates' ? selection.records.length : 0;
119
288
  }
120
289
  /**
121
- * Candidate verification keys for `kid`, fetching the key set at most once per cooldown.
122
- * Returns an empty array when the key is genuinely unknown; throws `JwksUnavailableError`
123
- * when the key set could not be read at all ("I could not check" is not "the token is bad").
290
+ * The keys that may verify a token of `family` carrying `kid` — or why none may. Fetches the key
291
+ * set when it is older than the TTL, or once per cooldown when `kid` is unknown.
124
292
  */
125
- export async function getVerificationKeys(params) {
126
- const cacheKey = `${params.jwksUri}|${params.alg}`;
127
- let entry = cache.get(cacheKey);
128
- if (!entry) {
129
- entry = {
130
- keys: new Map(),
131
- anonymousKeys: [],
132
- fetchedAt: 0,
133
- lastMissAt: 0,
134
- inFlight: null,
135
- };
136
- cache.set(cacheKey, entry);
137
- }
138
- const fresh = entry.fetchedAt > 0 && Date.now() - entry.fetchedAt < KEY_SET_TTL_MS;
139
- const hit = lookup(entry, params.kid);
140
- if (fresh && hit.length > 0)
141
- return hit;
142
- if (fresh && Date.now() - entry.lastMissAt < KEY_MISS_COOLDOWN_MS) {
143
- return []; // Cooldown: a miss we already paid a request for.
144
- }
145
- const current = entry;
146
- if (!current.inFlight) {
147
- const running = fetchKeySet(current, params.jwksUri, params.alg, params.fetch, params.timeoutMs);
148
- // The shared promise RESOLVES to the outcome rather than recording it on the entry: a
149
- // waiter reading shared state after its await could be handed the state of the NEXT
150
- // fetch. Carried, not stored — a waiter that only saw an empty key set would report
151
- // `unknown_key` ("this token names a key that does not exist") for what is actually
152
- // "I could not reach the issuer": a false forgery signal during an outage.
153
- current.inFlight = running.then(() => null, (error) => error instanceof JwksUnavailableError
154
- ? error
155
- : new JwksUnavailableError(error instanceof Error ? error.message : 'JWKS fetch failed'));
156
- const settled = current.inFlight;
157
- settled.finally(() => {
158
- if (current.inFlight === settled)
159
- current.inFlight = null;
160
- });
161
- const failure = await settled;
162
- if (failure)
163
- throw failure;
164
- }
165
- else {
166
- const failure = await current.inFlight;
167
- if (failure)
168
- throw failure;
169
- }
170
- const after = lookup(current, params.kid);
171
- if (after.length === 0)
172
- current.lastMissAt = Date.now();
173
- return after;
293
+ export async function resolveVerificationKeys(params) {
294
+ const entry = entryFor(params.jwksUri);
295
+ await loadFromStore(entry, params.jwksUri, params);
296
+ const now = clock.monotonicMs();
297
+ if (isFresh(entry.state, now)) {
298
+ const cached = await resolveFromState(entry, entry.state, params.kid, params.family, params.alg);
299
+ if (cached.kind !== 'unknown')
300
+ return cached;
301
+ if (entry.lastMissAt !== null && now - entry.lastMissAt < KEY_MISS_COOLDOWN_MS) {
302
+ // Cooldown: no refetch. The kid may have been published since the last one, so this is
303
+ // "could not check", not "this key does not exist".
304
+ return { kind: 'unavailable', message: 'unknown key; the key set is refetched again after the cooldown' };
305
+ }
306
+ }
307
+ const recentlyFailed = entry.state.fetchedAt !== null && entry.lastFailedAt !== null && now - entry.lastFailedAt < KEY_MISS_COOLDOWN_MS;
308
+ const outcome = recentlyFailed
309
+ ? { ok: false, message: 'JWKS refetch failed recently; it is retried after the cooldown' }
310
+ : await runFetch(entry, params.jwksUri, params);
311
+ if (!outcome.ok) {
312
+ if (entry.state.fetchedAt === null)
313
+ return { kind: 'unavailable', message: outcome.message };
314
+ // An applied tombstone is final whatever the cache's age: no refetch could lift it.
315
+ const known = selectKeys(entry.state, params.kid, params.family);
316
+ if (known.kind === 'revoked')
317
+ return known;
318
+ const age = cacheAgeMs(entry.state, clock.monotonicMs());
319
+ if (age > params.maxJwksAgeMs) {
320
+ return { kind: 'stale', cacheAgeSeconds: Number.isFinite(age) ? Math.floor(age / 1000) : null };
321
+ }
322
+ // Only confirmed keys answer from a cache we failed to refresh (`withConfirmedKeysOnly`).
323
+ const fallback = withConfirmedKeysOnly(entry.state);
324
+ // A no-kid token tries every candidate: if the fallback lost one, a signature that matches none
325
+ // of the rest may still be that key's — "could not check", not a forgery.
326
+ if (params.kid === undefined && candidateCount(fallback, params.family) < candidateCount(entry.state, params.family)) {
327
+ return { kind: 'unavailable', message: outcome.message };
328
+ }
329
+ const cached = await resolveFromState(entry, fallback, params.kid, params.family, params.alg);
330
+ // An unknown kid we could not refetch may be a key the issuer just added: "could not check".
331
+ return cached.kind === 'unknown' ? { kind: 'unavailable', message: outcome.message } : cached;
332
+ }
333
+ const resolved = await resolveFromState(entry, entry.state, params.kid, params.family, params.alg);
334
+ if (resolved.kind === 'unknown')
335
+ entry.lastMissAt = clock.monotonicMs();
336
+ return resolved;
174
337
  }
175
338
  /** Verify a JWS signature against one candidate key. */
176
339
  export async function verifySignature(key, alg, signingInput, signature) {
@@ -182,4 +345,64 @@ export async function verifySignature(key, alg, signingInput, signature) {
182
345
  return false;
183
346
  }
184
347
  }
348
+ /**
349
+ * Signature first, then the window and lifetime of the key that verified it — so a forged token
350
+ * is reported as `bad_signature`, not as a policy violation of a key it never came from.
351
+ */
352
+ export async function verifyWithCandidates(resolution, alg, signingInput, signature, token) {
353
+ for (const candidate of resolution.candidates) {
354
+ if (await verifySignature(candidate.key, alg, signingInput, signature)) {
355
+ return checkKeyPolicy(candidate.record, token, resolution.registryLive) ?? 'ok';
356
+ }
357
+ }
358
+ return 'bad_signature';
359
+ }
360
+ /**
361
+ * Refetch a key set now, ignoring the TTL and cooldowns — the method a `jwks_stale` answer names.
362
+ * Resolves with the outcome rather than throwing.
363
+ */
364
+ export async function refreshJwks(params) {
365
+ const entry = entryFor(params.jwksUri);
366
+ await loadFromStore(entry, params.jwksUri, params);
367
+ return runFetch(entry, params.jwksUri, {
368
+ ...params,
369
+ fetch: params.fetch ?? ((input, init) => fetch(input, init)),
370
+ timeoutMs: params.timeoutMs ?? DEFAULT_IO_TIMEOUT_MS,
371
+ });
372
+ }
373
+ /**
374
+ * Forget every applied and pending tombstone — the documented manual reset. With `jwksUri`, only
375
+ * that key set (and, given a `keySetStore`, its persisted copy); without, every set in memory.
376
+ */
377
+ export async function clearTombstones(params = {}) {
378
+ const uris = params.jwksUri !== undefined ? [params.jwksUri] : [...cache.keys()];
379
+ for (const jwksUri of uris) {
380
+ const entry = entryFor(jwksUri);
381
+ await loadFromStore(entry, jwksUri, params);
382
+ entry.state = withoutTombstones(entry.state);
383
+ await saveToStore(entry, jwksUri, params);
384
+ }
385
+ }
386
+ /** What the verifier currently holds for one key set, or null if it has never been used. */
387
+ export function getJwksDiagnostics(jwksUri) {
388
+ const entry = cache.get(jwksUri);
389
+ if (!entry)
390
+ return null;
391
+ const now = clock.monotonicMs();
392
+ const age = cacheAgeMs(entry.state, now);
393
+ return {
394
+ jwksUri,
395
+ cacheAgeSeconds: Number.isFinite(age) ? Math.floor(age / 1000) : null,
396
+ registryLive: isRegistryLive(entry.state),
397
+ vanishedKids: [...entry.state.keys.values()]
398
+ .filter((record) => record.vanished && record.kid)
399
+ .map((record) => record.kid),
400
+ pendingTombstones: [...entry.state.pending.values()].map((pending) => ({
401
+ kid: pending.kid,
402
+ revokedAt: pending.revokedAt,
403
+ pendingForSeconds: Math.floor((now - pending.firstSeen.monotonicMs) / 1000),
404
+ })),
405
+ appliedTombstones: [...entry.state.applied.values()].map((applied) => ({ ...applied })),
406
+ };
407
+ }
185
408
  //# sourceMappingURL=jwks.js.map
package/dist/jwks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"jwks.js","sourceRoot":"","sources":["../src/jwks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwks.js","sourceRoot":"","sources":["../src/jwks.ts"],"names":[],"mappings":"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"}