@antasphere/chassis-server 1.3.0 → 1.4.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/boot.d.ts.map +1 -1
- package/dist/boot.js +5 -0
- package/dist/boot.js.map +1 -1
- package/dist/identity/hub-grant.d.ts +70 -0
- package/dist/identity/hub-grant.d.ts.map +1 -1
- package/dist/identity/hub-grant.js +119 -14
- package/dist/identity/hub-grant.js.map +1 -1
- package/dist/identity/index.d.ts +1 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +1 -1
- package/dist/identity/index.js.map +1 -1
- package/package.json +3 -3
- package/src/boot.ts +5 -0
- package/src/identity/hub-grant.ts +187 -15
- package/src/identity/index.ts +6 -1
- package/test/integration/hub-grant.test.ts +97 -0
- package/test/unit/hub-grant-refusal.test.ts +29 -0
- package/test/unit/hub-grant-sweep.test.ts +151 -0
package/dist/boot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0D7B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAGf,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,wBAAsB,YAAY,CAChC,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,OAAO,EACP,QAAQ,SAAS,MAAM,EACvB,OAAO,EACP,cAAc,EAEd,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAC3E,MAAM,GAAE,MAAM,CAAC,UAAwB,EACvC,SAAS,GAAE,aAAa,CAAC,cAAc,CAAM,GAC5C,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"boot.d.ts","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0D7B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAGf,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,wBAAsB,YAAY,CAChC,SAAS,SAAS,CAAC,CAAC,WAAW,EAC/B,OAAO,EACP,QAAQ,SAAS,MAAM,EACvB,OAAO,EACP,cAAc,EAEd,IAAI,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAC3E,MAAM,GAAE,MAAM,CAAC,UAAwB,EACvC,SAAS,GAAE,aAAa,CAAC,cAAc,CAAM,GAC5C,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAs5BlD"}
|
package/dist/boot.js
CHANGED
|
@@ -498,6 +498,11 @@ export async function bootPlatform(tool, source = process.env, overrides = {}) {
|
|
|
498
498
|
}
|
|
499
499
|
})
|
|
500
500
|
: undefined;
|
|
501
|
+
// The grants of the people this replica saw in the last hour are renewed
|
|
502
|
+
// in the background before they expire (PRDCT-3584), so a request never
|
|
503
|
+
// waits on the hub's token endpoint when the sweep got there first. The
|
|
504
|
+
// timer never holds the process open and pauses while draining.
|
|
505
|
+
hubGrant?.startSweep({ isDraining: () => state.draining });
|
|
501
506
|
// RP-initiated logout against the hub (SL-2, cloud only): builds the
|
|
502
507
|
// end-session URL /sso/logout returns. Same key seam as the grant store
|
|
503
508
|
// (it only decrypts if a future Better Auth starts encrypting id_tokens);
|
package/dist/boot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,36 @@ export interface HubGrantDials {
|
|
|
15
15
|
lockWatchdogMs: number;
|
|
16
16
|
}
|
|
17
17
|
export declare const DEFAULT_GRANT_DIALS: HubGrantDials;
|
|
18
|
+
/**
|
|
19
|
+
* The background renewal of grants about to expire (PRDCT-3584). Hub access
|
|
20
|
+
* tokens live 15 minutes, so a person who comes back to a tool after a
|
|
21
|
+
* coffee met the token endpoint INSIDE their first request: the refresh
|
|
22
|
+
* (the hub's rotation and the row write) stood between the click and the
|
|
23
|
+
* page. The sweep renews, off any request, the token of every person seen
|
|
24
|
+
* on this replica within `activeWithinMs` whose cached token expires within
|
|
25
|
+
* `renewAheadMs`; a person not seen for an hour is forgotten and renews on
|
|
26
|
+
* demand as before. It goes through `renew()`, the same acquisition as a
|
|
27
|
+
* request's (the single-flight, the advisory lock, the re-read and the
|
|
28
|
+
* presentation ledger stay the only writers of the refresh chain), with two
|
|
29
|
+
* differences the verifier of 18 October 2026 asked for: the cached token is
|
|
30
|
+
* served until the rotation's result is known, and a sibling replica's
|
|
31
|
+
* fresh token is adopted instead of rotated again. The timer never holds
|
|
32
|
+
* the process open and skips while the replica drains.
|
|
33
|
+
*/
|
|
34
|
+
export interface GrantSweepDials {
|
|
35
|
+
/** How often the sweep runs. */
|
|
36
|
+
intervalMs: number;
|
|
37
|
+
/** Renew a cached token this long before it expires. */
|
|
38
|
+
renewAheadMs: number;
|
|
39
|
+
/** Only people seen on this replica within this window are renewed. */
|
|
40
|
+
activeWithinMs: number;
|
|
41
|
+
}
|
|
42
|
+
export declare const DEFAULT_GRANT_SWEEP_DIALS: GrantSweepDials;
|
|
43
|
+
/** What `startSweep` hands back: the timer (never holding the process open) and its stop. */
|
|
44
|
+
export interface GrantSweepHandle {
|
|
45
|
+
timer: NodeJS.Timeout;
|
|
46
|
+
stop(): void;
|
|
47
|
+
}
|
|
18
48
|
/**
|
|
19
49
|
* One answer about a user's hub access.
|
|
20
50
|
* - 'ok': a hub-callable access token.
|
|
@@ -72,11 +102,26 @@ export interface HubGrantServiceOptions {
|
|
|
72
102
|
* tolerant rule. Re-verify on any Better Auth bump.
|
|
73
103
|
*/
|
|
74
104
|
export declare function isLikelyEncrypted(token: string): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* What the hub said when it refused: the RFC 6749 `error_description` and
|
|
107
|
+
* the HTTP status, kept for the log line and nothing else (PRDCT-3584). A
|
|
108
|
+
* refusal read as `invalid_grant` has four different causes at the pinned
|
|
109
|
+
* plugin (an unknown token, an expired one, a rotated-out one, a refresh
|
|
110
|
+
* the pre-flight refused), and only this sentence tells them apart.
|
|
111
|
+
*/
|
|
112
|
+
export interface RefusalReason {
|
|
113
|
+
status: number;
|
|
114
|
+
description: string | null;
|
|
115
|
+
}
|
|
116
|
+
/** The `error_description` of an RFC 6749 error payload, when it is a non-empty string. */
|
|
117
|
+
export declare function refusalDescription(payload: unknown): string | null;
|
|
75
118
|
export declare class HubGrantService {
|
|
76
119
|
private readonly opts;
|
|
77
120
|
/** userId → fresh access token (in-memory only; the row is the durable store). */
|
|
78
121
|
private readonly cache;
|
|
79
122
|
private readonly inFlight;
|
|
123
|
+
/** userId → when this replica last read a token for them (the sweep's population). */
|
|
124
|
+
private readonly lastSeen;
|
|
80
125
|
private readonly tokenUrl;
|
|
81
126
|
private readonly introspectUrl;
|
|
82
127
|
private readonly fetchImpl;
|
|
@@ -132,6 +177,31 @@ export declare class HubGrantService {
|
|
|
132
177
|
* re-read-after-lock still guarantee at most one live rotation.
|
|
133
178
|
*/
|
|
134
179
|
refresh(userId: string): Promise<GrantAccess>;
|
|
180
|
+
private markSeen;
|
|
181
|
+
/**
|
|
182
|
+
* One pass of the background renewal (GrantSweepDials): renew the cached
|
|
183
|
+
* token of every recently seen person whose token expires within the
|
|
184
|
+
* window, one at a time, through `renew()`. Answers how many renewals
|
|
185
|
+
* were attempted. Never throws: a failed renewal is the next request's
|
|
186
|
+
* on-demand refresh, exactly as before the sweep existed.
|
|
187
|
+
*/
|
|
188
|
+
sweepExpiring(dials?: Omit<GrantSweepDials, 'intervalMs'>): Promise<number>;
|
|
189
|
+
/**
|
|
190
|
+
* Run the sweep on a timer that never holds the process open and skips
|
|
191
|
+
* while the replica drains. Returns the function that stops it.
|
|
192
|
+
*/
|
|
193
|
+
startSweep(options?: {
|
|
194
|
+
isDraining?: () => boolean;
|
|
195
|
+
dials?: Partial<GrantSweepDials>;
|
|
196
|
+
}): GrantSweepHandle;
|
|
197
|
+
/**
|
|
198
|
+
* Renew the grant in the background (the sweep's path, PRDCT-3584): the
|
|
199
|
+
* cached token keeps being served until the rotation's result is known
|
|
200
|
+
* (nothing is evicted up front, unlike `refresh()`), and a token a sibling
|
|
201
|
+
* replica stored with at least `minLeftMs` of life left is adopted instead
|
|
202
|
+
* of rotating a second time. Joins an acquisition already in flight.
|
|
203
|
+
*/
|
|
204
|
+
renew(userId: string, minLeftMs?: number): Promise<GrantAccess>;
|
|
135
205
|
private acquire;
|
|
136
206
|
private doAcquire;
|
|
137
207
|
/** The user's hub account link, tokens as stored (possibly encrypted). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-grant.d.ts","sourceRoot":"","sources":["../../src/identity/hub-grant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAkC,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AA6E3C,qGAAqG;AACrG,eAAO,MAAM,yBAAyB,OAAQ,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,aAOjC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAE7B,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,EAAE,CAAC;IACP,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,GAAG,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtC,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,CAAC;IACrB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAeD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGxD;
|
|
1
|
+
{"version":3,"file":"hub-grant.d.ts","sourceRoot":"","sources":["../../src/identity/hub-grant.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,6 +87,13 @@ export const DEFAULT_GRANT_DIALS = {
|
|
|
87
87
|
// constructor clamps anything smaller (see there).
|
|
88
88
|
lockWatchdogMs: 12_000
|
|
89
89
|
};
|
|
90
|
+
export const DEFAULT_GRANT_SWEEP_DIALS = {
|
|
91
|
+
intervalMs: 60_000,
|
|
92
|
+
renewAheadMs: 3 * 60_000,
|
|
93
|
+
activeWithinMs: 60 * 60_000
|
|
94
|
+
};
|
|
95
|
+
/** Bound the seen-map — a user-id flood must never balloon memory. */
|
|
96
|
+
const MAX_SEEN_USERS = 10_000;
|
|
90
97
|
/**
|
|
91
98
|
* Mirror of Better Auth 1.6.15's `isLikelyEncrypted` (dist/oauth2/utils.mjs):
|
|
92
99
|
* its decrypt path passes LEGACY PLAINTEXT tokens through untouched, and so
|
|
@@ -99,11 +106,18 @@ export function isLikelyEncrypted(token) {
|
|
|
99
106
|
return true;
|
|
100
107
|
return token.length % 2 === 0 && /^[0-9a-f]+$/i.test(token);
|
|
101
108
|
}
|
|
109
|
+
/** The `error_description` of an RFC 6749 error payload, when it is a non-empty string. */
|
|
110
|
+
export function refusalDescription(payload) {
|
|
111
|
+
const d = payload?.error_description;
|
|
112
|
+
return typeof d === 'string' && d.trim() ? d.trim().slice(0, 300) : null;
|
|
113
|
+
}
|
|
102
114
|
export class HubGrantService {
|
|
103
115
|
opts;
|
|
104
116
|
/** userId → fresh access token (in-memory only; the row is the durable store). */
|
|
105
117
|
cache = new Map();
|
|
106
118
|
inFlight = new Map();
|
|
119
|
+
/** userId → when this replica last read a token for them (the sweep's population). */
|
|
120
|
+
lastSeen = new Map();
|
|
107
121
|
tokenUrl;
|
|
108
122
|
introspectUrl;
|
|
109
123
|
fetchImpl;
|
|
@@ -209,11 +223,12 @@ export class HubGrantService {
|
|
|
209
223
|
}
|
|
210
224
|
/** A hub-callable access token for the user, refresh-on-demand. */
|
|
211
225
|
async accessToken(userId) {
|
|
226
|
+
this.markSeen(userId);
|
|
212
227
|
const cached = this.cache.get(userId);
|
|
213
228
|
if (cached && cached.expiresAtMs - this.now() > this.dials.accessSkewMs) {
|
|
214
229
|
return { kind: 'ok', accessToken: cached.token };
|
|
215
230
|
}
|
|
216
|
-
return this.acquire(userId,
|
|
231
|
+
return this.acquire(userId, 'demand');
|
|
217
232
|
}
|
|
218
233
|
/**
|
|
219
234
|
* Force a refresh (the caller saw the hub refuse the current token).
|
|
@@ -225,12 +240,85 @@ export class HubGrantService {
|
|
|
225
240
|
const existing = this.inFlight.get(userId);
|
|
226
241
|
if (existing)
|
|
227
242
|
await existing.catch(() => { });
|
|
228
|
-
return this.acquire(userId,
|
|
243
|
+
return this.acquire(userId, 'force');
|
|
244
|
+
}
|
|
245
|
+
markSeen(userId) {
|
|
246
|
+
if (!this.lastSeen.has(userId) && this.lastSeen.size >= MAX_SEEN_USERS) {
|
|
247
|
+
// Drop the oldest entry (Map keeps insertion order); a re-seen user is
|
|
248
|
+
// re-inserted at the end below.
|
|
249
|
+
const oldest = this.lastSeen.keys().next().value;
|
|
250
|
+
if (oldest !== undefined)
|
|
251
|
+
this.lastSeen.delete(oldest);
|
|
252
|
+
}
|
|
253
|
+
this.lastSeen.delete(userId);
|
|
254
|
+
this.lastSeen.set(userId, this.now());
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* One pass of the background renewal (GrantSweepDials): renew the cached
|
|
258
|
+
* token of every recently seen person whose token expires within the
|
|
259
|
+
* window, one at a time, through `renew()`. Answers how many renewals
|
|
260
|
+
* were attempted. Never throws: a failed renewal is the next request's
|
|
261
|
+
* on-demand refresh, exactly as before the sweep existed.
|
|
262
|
+
*/
|
|
263
|
+
async sweepExpiring(dials = DEFAULT_GRANT_SWEEP_DIALS) {
|
|
264
|
+
const now = this.now();
|
|
265
|
+
let attempted = 0;
|
|
266
|
+
for (const [userId, seenAt] of [...this.lastSeen]) {
|
|
267
|
+
if (now - seenAt > dials.activeWithinMs) {
|
|
268
|
+
this.lastSeen.delete(userId);
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
const cached = this.cache.get(userId);
|
|
272
|
+
if (!cached || cached.expiresAtMs - now > dials.renewAheadMs)
|
|
273
|
+
continue;
|
|
274
|
+
if (this.inFlight.has(userId))
|
|
275
|
+
continue;
|
|
276
|
+
attempted += 1;
|
|
277
|
+
try {
|
|
278
|
+
const out = await this.renew(userId, dials.renewAheadMs);
|
|
279
|
+
if (out.kind !== 'ok') {
|
|
280
|
+
this.opts.logger.info({ userId, outcome: out.kind }, 'hub grant: background renewal did not renew');
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
this.opts.logger.warn({ err, userId }, 'hub grant: background renewal failed — the next request refreshes on demand');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return attempted;
|
|
229
288
|
}
|
|
230
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Run the sweep on a timer that never holds the process open and skips
|
|
291
|
+
* while the replica drains. Returns the function that stops it.
|
|
292
|
+
*/
|
|
293
|
+
startSweep(options = {}) {
|
|
294
|
+
const dials = { ...DEFAULT_GRANT_SWEEP_DIALS, ...options.dials };
|
|
295
|
+
let running = false;
|
|
296
|
+
const timer = setInterval(() => {
|
|
297
|
+
// One pass at a time: a slow hub must never stack passes.
|
|
298
|
+
if (running || options.isDraining?.())
|
|
299
|
+
return;
|
|
300
|
+
running = true;
|
|
301
|
+
void this.sweepExpiring(dials).finally(() => {
|
|
302
|
+
running = false;
|
|
303
|
+
});
|
|
304
|
+
}, dials.intervalMs);
|
|
305
|
+
timer.unref();
|
|
306
|
+
return { timer, stop: () => clearInterval(timer) };
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Renew the grant in the background (the sweep's path, PRDCT-3584): the
|
|
310
|
+
* cached token keeps being served until the rotation's result is known
|
|
311
|
+
* (nothing is evicted up front, unlike `refresh()`), and a token a sibling
|
|
312
|
+
* replica stored with at least `minLeftMs` of life left is adopted instead
|
|
313
|
+
* of rotating a second time. Joins an acquisition already in flight.
|
|
314
|
+
*/
|
|
315
|
+
async renew(userId, minLeftMs = DEFAULT_GRANT_SWEEP_DIALS.renewAheadMs) {
|
|
316
|
+
return this.acquire(userId, 'renew', minLeftMs);
|
|
317
|
+
}
|
|
318
|
+
acquire(userId, mode, minLeftMs) {
|
|
231
319
|
let flight = this.inFlight.get(userId);
|
|
232
320
|
if (!flight) {
|
|
233
|
-
flight = this.doAcquire(userId,
|
|
321
|
+
flight = this.doAcquire(userId, mode, minLeftMs).finally(() => {
|
|
234
322
|
if (this.inFlight.get(userId) === flight)
|
|
235
323
|
this.inFlight.delete(userId);
|
|
236
324
|
});
|
|
@@ -238,18 +326,26 @@ export class HubGrantService {
|
|
|
238
326
|
}
|
|
239
327
|
return flight;
|
|
240
328
|
}
|
|
241
|
-
async doAcquire(userId,
|
|
329
|
+
async doAcquire(userId, mode, minLeftMs) {
|
|
242
330
|
try {
|
|
243
331
|
const first = await this.readRow(userId);
|
|
244
332
|
if (!first)
|
|
245
333
|
return { kind: 'no_link' };
|
|
246
334
|
if (!first.refreshToken)
|
|
247
335
|
return { kind: 'grant_dead' };
|
|
248
|
-
if (
|
|
336
|
+
if (mode === 'demand') {
|
|
249
337
|
const stored = await this.storedAccess(userId, first);
|
|
250
338
|
if (stored)
|
|
251
339
|
return { kind: 'ok', accessToken: stored };
|
|
252
340
|
}
|
|
341
|
+
else if (mode === 'renew') {
|
|
342
|
+
// A sibling replica (or a login) already renewed: adopt its token
|
|
343
|
+
// without taking the lock (verifier round 6: the common case on
|
|
344
|
+
// several replicas was paying a dedicated connection for nothing).
|
|
345
|
+
const stored = await this.storedAccess(userId, first, minLeftMs);
|
|
346
|
+
if (stored)
|
|
347
|
+
return { kind: 'ok', accessToken: stored };
|
|
348
|
+
}
|
|
253
349
|
// Slow path: rotate under the cross-replica lock.
|
|
254
350
|
const lock = await this.acquireLock(userId);
|
|
255
351
|
try {
|
|
@@ -263,11 +359,19 @@ export class HubGrantService {
|
|
|
263
359
|
return { kind: 'no_link' };
|
|
264
360
|
if (!row.refreshToken)
|
|
265
361
|
return { kind: 'grant_dead' };
|
|
266
|
-
if (
|
|
362
|
+
if (mode === 'demand' || row.refreshToken !== first.refreshToken) {
|
|
267
363
|
const stored = await this.storedAccess(userId, row);
|
|
268
364
|
if (stored)
|
|
269
365
|
return { kind: 'ok', accessToken: stored };
|
|
270
366
|
}
|
|
367
|
+
else if (mode === 'renew') {
|
|
368
|
+
// A renewal rotates only what is about to expire: a stored token
|
|
369
|
+
// with more life than the renewal window is a sibling replica's
|
|
370
|
+
// fresh one (or a login's), adopted rather than rotated again.
|
|
371
|
+
const stored = await this.storedAccess(userId, row, minLeftMs);
|
|
372
|
+
if (stored)
|
|
373
|
+
return { kind: 'ok', accessToken: stored };
|
|
374
|
+
}
|
|
271
375
|
let refreshToken;
|
|
272
376
|
try {
|
|
273
377
|
refreshToken = await this.decrypt(row.refreshToken);
|
|
@@ -317,7 +421,7 @@ export class HubGrantService {
|
|
|
317
421
|
await this.clearPresentation(row.id);
|
|
318
422
|
this.cache.delete(userId);
|
|
319
423
|
this.refreshes.inc({ outcome: 'invalid_grant' });
|
|
320
|
-
this.opts.logger.warn({ userId }, 'hub grant: token endpoint answered invalid_grant — grant marked dead; a browser SSO login heals it');
|
|
424
|
+
this.opts.logger.warn({ userId, status: outcome.status, reason: outcome.description }, 'hub grant: token endpoint answered invalid_grant — grant marked dead; a browser SSO login heals it');
|
|
321
425
|
return { kind: 'grant_dead' };
|
|
322
426
|
}
|
|
323
427
|
if (outcome.kind === 'invalid_client') {
|
|
@@ -327,7 +431,7 @@ export class HubGrantService {
|
|
|
327
431
|
// is cleared, not kept.
|
|
328
432
|
await this.clearPresentation(row.id);
|
|
329
433
|
this.refreshes.inc({ outcome: 'invalid_client' });
|
|
330
|
-
this.opts.logger.error('hub grant: token endpoint answered invalid_client — HUB_CLIENT_ID/HUB_CLIENT_SECRET are broken; ' +
|
|
434
|
+
this.opts.logger.error({ status: outcome.status, reason: outcome.description }, 'hub grant: token endpoint answered invalid_client — HUB_CLIENT_ID/HUB_CLIENT_SECRET are broken; ' +
|
|
331
435
|
'refreshes are failing transient (grants are NOT being killed); fix the client credentials');
|
|
332
436
|
return { kind: 'inconclusive' };
|
|
333
437
|
}
|
|
@@ -453,11 +557,11 @@ export class HubGrantService {
|
|
|
453
557
|
return row ?? null;
|
|
454
558
|
}
|
|
455
559
|
/** Decrypt-and-cache the row's access token when it is still fresh. */
|
|
456
|
-
async storedAccess(userId, row) {
|
|
560
|
+
async storedAccess(userId, row, minLeftMs = this.dials.accessSkewMs) {
|
|
457
561
|
if (!row.accessToken || !row.accessTokenExpiresAt)
|
|
458
562
|
return null;
|
|
459
563
|
const expiresAtMs = row.accessTokenExpiresAt.getTime();
|
|
460
|
-
if (expiresAtMs - this.now() <=
|
|
564
|
+
if (expiresAtMs - this.now() <= minLeftMs)
|
|
461
565
|
return null;
|
|
462
566
|
try {
|
|
463
567
|
const token = await this.decrypt(row.accessToken);
|
|
@@ -546,11 +650,12 @@ export class HubGrantService {
|
|
|
546
650
|
// RFC 6749 errors ride 400/401; anything else (5xx…) is transient.
|
|
547
651
|
if (res.status === 400 || res.status === 401) {
|
|
548
652
|
const error = payload?.error;
|
|
653
|
+
const description = refusalDescription(payload);
|
|
549
654
|
if (error === 'invalid_grant')
|
|
550
|
-
return { kind: 'invalid_grant' };
|
|
655
|
+
return { kind: 'invalid_grant', status: res.status, description };
|
|
551
656
|
if (error === 'invalid_client')
|
|
552
|
-
return { kind: 'invalid_client' };
|
|
553
|
-
this.opts.logger.warn({ status: res.status, error }, 'hub grant: unrecognized token-endpoint error');
|
|
657
|
+
return { kind: 'invalid_client', status: res.status, description };
|
|
658
|
+
this.opts.logger.warn({ status: res.status, error, description }, 'hub grant: unrecognized token-endpoint error');
|
|
554
659
|
return { kind: 'transient' };
|
|
555
660
|
}
|
|
556
661
|
this.opts.logger.warn({ status: res.status }, 'hub grant: token endpoint answered non-2xx');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hub-grant.js","sourceRoot":"","sources":["../../src/identity/hub-grant.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hub-grant.js","sourceRoot":"","sources":["../../src/identity/hub-grant.ts"],"names":[],"mappings":"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"}
|
package/dist/identity/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { type AccountEvent, type Auth, createAuth, mcpResourceUrl, signInOriginRefused, trustedOriginsFor } from './better-auth.js';
|
|
2
2
|
export { DEMO_PASS_DEFAULT_MINUTES, DEMO_PASS_MAX_MINUTES, DEMO_PASS_MAX_PATH_LENGTH, DEMO_SESSION_REFUSED_API_ROUTES, DEMO_SESSION_REFUSED_AUTH_PATHS, type DemoSessionRefusedApiRoute, demoSessionApiRefusalMessage, demoSessionAuthRefusal, isDemoAddress, isDemoSignInHost, isSafeDemoPath, parseDemoEmailDomains, parseDemoHosts } from './demo-pass-rules.js';
|
|
3
|
-
export { DEFAULT_GRANT_DIALS, type GrantAccess, HubGrantService, LOCK_WATCHDOG_HEADROOM_MS } from './hub-grant.js';
|
|
3
|
+
export { DEFAULT_GRANT_DIALS, DEFAULT_GRANT_SWEEP_DIALS, type GrantAccess, type GrantSweepDials, type GrantSweepHandle, HubGrantService, LOCK_WATCHDOG_HEADROOM_MS, type RefusalReason, refusalDescription } from './hub-grant.js';
|
|
4
4
|
export { HubJwtVerifier } from './hub-jwt.js';
|
|
5
5
|
export { HubLogoutService, hintCookieClearHeader } from './hub-logout.js';
|
|
6
6
|
export { projectOrgMembership } from './hub-projection.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,KAAK,WAAW,EAChB,eAAe,EACf,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,eAAe,EACf,yBAAyB,EACzB,KAAK,aAAa,EAClB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/identity/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { createAuth, mcpResourceUrl, signInOriginRefused, trustedOriginsFor } from './better-auth.js';
|
|
2
2
|
export { DEMO_PASS_DEFAULT_MINUTES, DEMO_PASS_MAX_MINUTES, DEMO_PASS_MAX_PATH_LENGTH, DEMO_SESSION_REFUSED_API_ROUTES, DEMO_SESSION_REFUSED_AUTH_PATHS, demoSessionApiRefusalMessage, demoSessionAuthRefusal, isDemoAddress, isDemoSignInHost, isSafeDemoPath, parseDemoEmailDomains, parseDemoHosts } from './demo-pass-rules.js';
|
|
3
|
-
export { DEFAULT_GRANT_DIALS, HubGrantService, LOCK_WATCHDOG_HEADROOM_MS } from './hub-grant.js';
|
|
3
|
+
export { DEFAULT_GRANT_DIALS, DEFAULT_GRANT_SWEEP_DIALS, HubGrantService, LOCK_WATCHDOG_HEADROOM_MS, refusalDescription } from './hub-grant.js';
|
|
4
4
|
export { HubJwtVerifier } from './hub-jwt.js';
|
|
5
5
|
export { HubLogoutService, hintCookieClearHeader } from './hub-logout.js';
|
|
6
6
|
export { projectOrgMembership } from './hub-projection.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAE/B,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAE/B,4BAA4B,EAC5B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAIzB,eAAe,EACf,yBAAyB,EAEzB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EAExB,gBAAgB,EAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEd,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,aAAa,EACb,0BAA0B,EAC1B,cAAc,EACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAwB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antasphere/chassis-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -139,8 +139,8 @@
|
|
|
139
139
|
"ulid": "^3.0.2",
|
|
140
140
|
"yazl": "^3.3.1",
|
|
141
141
|
"zod": "^4.1.0",
|
|
142
|
-
"@antasphere/chassis-contract": "1.
|
|
143
|
-
"@antasphere/chassis-db": "1.
|
|
142
|
+
"@antasphere/chassis-contract": "1.4.0",
|
|
143
|
+
"@antasphere/chassis-db": "1.4.0"
|
|
144
144
|
},
|
|
145
145
|
"devDependencies": {
|
|
146
146
|
"@better-auth/core": "1.6.22",
|
package/src/boot.ts
CHANGED
|
@@ -592,6 +592,11 @@ export async function bootPlatform<
|
|
|
592
592
|
}
|
|
593
593
|
})
|
|
594
594
|
: undefined;
|
|
595
|
+
// The grants of the people this replica saw in the last hour are renewed
|
|
596
|
+
// in the background before they expire (PRDCT-3584), so a request never
|
|
597
|
+
// waits on the hub's token endpoint when the sweep got there first. The
|
|
598
|
+
// timer never holds the process open and pauses while draining.
|
|
599
|
+
hubGrant?.startSweep({ isDraining: () => state.draining });
|
|
595
600
|
// RP-initiated logout against the hub (SL-2, cloud only): builds the
|
|
596
601
|
// end-session URL /sso/logout returns. Same key seam as the grant store
|
|
597
602
|
// (it only decrypts if a future Better Auth starts encrypting id_tokens);
|
|
@@ -103,6 +103,46 @@ export const DEFAULT_GRANT_DIALS: HubGrantDials = {
|
|
|
103
103
|
lockWatchdogMs: 12_000
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
+
/**
|
|
107
|
+
* The background renewal of grants about to expire (PRDCT-3584). Hub access
|
|
108
|
+
* tokens live 15 minutes, so a person who comes back to a tool after a
|
|
109
|
+
* coffee met the token endpoint INSIDE their first request: the refresh
|
|
110
|
+
* (the hub's rotation and the row write) stood between the click and the
|
|
111
|
+
* page. The sweep renews, off any request, the token of every person seen
|
|
112
|
+
* on this replica within `activeWithinMs` whose cached token expires within
|
|
113
|
+
* `renewAheadMs`; a person not seen for an hour is forgotten and renews on
|
|
114
|
+
* demand as before. It goes through `renew()`, the same acquisition as a
|
|
115
|
+
* request's (the single-flight, the advisory lock, the re-read and the
|
|
116
|
+
* presentation ledger stay the only writers of the refresh chain), with two
|
|
117
|
+
* differences the verifier of 18 October 2026 asked for: the cached token is
|
|
118
|
+
* served until the rotation's result is known, and a sibling replica's
|
|
119
|
+
* fresh token is adopted instead of rotated again. The timer never holds
|
|
120
|
+
* the process open and skips while the replica drains.
|
|
121
|
+
*/
|
|
122
|
+
export interface GrantSweepDials {
|
|
123
|
+
/** How often the sweep runs. */
|
|
124
|
+
intervalMs: number;
|
|
125
|
+
/** Renew a cached token this long before it expires. */
|
|
126
|
+
renewAheadMs: number;
|
|
127
|
+
/** Only people seen on this replica within this window are renewed. */
|
|
128
|
+
activeWithinMs: number;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const DEFAULT_GRANT_SWEEP_DIALS: GrantSweepDials = {
|
|
132
|
+
intervalMs: 60_000,
|
|
133
|
+
renewAheadMs: 3 * 60_000,
|
|
134
|
+
activeWithinMs: 60 * 60_000
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/** What `startSweep` hands back: the timer (never holding the process open) and its stop. */
|
|
138
|
+
export interface GrantSweepHandle {
|
|
139
|
+
timer: NodeJS.Timeout;
|
|
140
|
+
stop(): void;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Bound the seen-map — a user-id flood must never balloon memory. */
|
|
144
|
+
const MAX_SEEN_USERS = 10_000;
|
|
145
|
+
|
|
106
146
|
/**
|
|
107
147
|
* One answer about a user's hub access.
|
|
108
148
|
* - 'ok': a hub-callable access token.
|
|
@@ -175,12 +215,38 @@ export function isLikelyEncrypted(token: string): boolean {
|
|
|
175
215
|
return token.length % 2 === 0 && /^[0-9a-f]+$/i.test(token);
|
|
176
216
|
}
|
|
177
217
|
|
|
218
|
+
/**
|
|
219
|
+
* What the hub said when it refused: the RFC 6749 `error_description` and
|
|
220
|
+
* the HTTP status, kept for the log line and nothing else (PRDCT-3584). A
|
|
221
|
+
* refusal read as `invalid_grant` has four different causes at the pinned
|
|
222
|
+
* plugin (an unknown token, an expired one, a rotated-out one, a refresh
|
|
223
|
+
* the pre-flight refused), and only this sentence tells them apart.
|
|
224
|
+
*/
|
|
225
|
+
export interface RefusalReason {
|
|
226
|
+
status: number;
|
|
227
|
+
description: string | null;
|
|
228
|
+
}
|
|
229
|
+
|
|
178
230
|
type RefreshOutcome =
|
|
179
231
|
| { kind: 'ok'; accessToken: string; expiresAt: Date; refreshToken: string | null }
|
|
180
|
-
| { kind: 'invalid_grant' }
|
|
181
|
-
| { kind: 'invalid_client' }
|
|
232
|
+
| ({ kind: 'invalid_grant' } & RefusalReason)
|
|
233
|
+
| ({ kind: 'invalid_client' } & RefusalReason)
|
|
182
234
|
| { kind: 'transient' };
|
|
183
235
|
|
|
236
|
+
/** The `error_description` of an RFC 6749 error payload, when it is a non-empty string. */
|
|
237
|
+
export function refusalDescription(payload: unknown): string | null {
|
|
238
|
+
const d = (payload as { error_description?: unknown } | null)?.error_description;
|
|
239
|
+
return typeof d === 'string' && d.trim() ? d.trim().slice(0, 300) : null;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* How a token is acquired: on `demand` (serve a fresh stored one, else
|
|
244
|
+
* present); by `force` (the hub refused the current one: present, after the
|
|
245
|
+
* cache was dropped by the caller); or as a `renew` (the background sweep:
|
|
246
|
+
* nothing dropped up front, a sibling's fresh stored token adopted).
|
|
247
|
+
*/
|
|
248
|
+
type AcquireMode = 'demand' | 'force' | 'renew';
|
|
249
|
+
|
|
184
250
|
/** The RFC 7662 probe's answer about a refresh token the hub never confirmed consuming. */
|
|
185
251
|
type ProbeOutcome = 'active' | 'inactive' | 'transient';
|
|
186
252
|
|
|
@@ -188,6 +254,8 @@ export class HubGrantService {
|
|
|
188
254
|
/** userId → fresh access token (in-memory only; the row is the durable store). */
|
|
189
255
|
private readonly cache = new Map<string, { token: string; expiresAtMs: number }>();
|
|
190
256
|
private readonly inFlight = new Map<string, Promise<GrantAccess>>();
|
|
257
|
+
/** userId → when this replica last read a token for them (the sweep's population). */
|
|
258
|
+
private readonly lastSeen = new Map<string, number>();
|
|
191
259
|
private readonly tokenUrl: string;
|
|
192
260
|
private readonly introspectUrl: string;
|
|
193
261
|
private readonly fetchImpl: typeof fetch;
|
|
@@ -302,11 +370,12 @@ export class HubGrantService {
|
|
|
302
370
|
|
|
303
371
|
/** A hub-callable access token for the user, refresh-on-demand. */
|
|
304
372
|
async accessToken(userId: string): Promise<GrantAccess> {
|
|
373
|
+
this.markSeen(userId);
|
|
305
374
|
const cached = this.cache.get(userId);
|
|
306
375
|
if (cached && cached.expiresAtMs - this.now() > this.dials.accessSkewMs) {
|
|
307
376
|
return { kind: 'ok', accessToken: cached.token };
|
|
308
377
|
}
|
|
309
|
-
return this.acquire(userId,
|
|
378
|
+
return this.acquire(userId, 'demand');
|
|
310
379
|
}
|
|
311
380
|
|
|
312
381
|
/**
|
|
@@ -318,13 +387,95 @@ export class HubGrantService {
|
|
|
318
387
|
this.cache.delete(userId);
|
|
319
388
|
const existing = this.inFlight.get(userId);
|
|
320
389
|
if (existing) await existing.catch(() => {});
|
|
321
|
-
return this.acquire(userId,
|
|
390
|
+
return this.acquire(userId, 'force');
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
private markSeen(userId: string): void {
|
|
394
|
+
if (!this.lastSeen.has(userId) && this.lastSeen.size >= MAX_SEEN_USERS) {
|
|
395
|
+
// Drop the oldest entry (Map keeps insertion order); a re-seen user is
|
|
396
|
+
// re-inserted at the end below.
|
|
397
|
+
const oldest = this.lastSeen.keys().next().value;
|
|
398
|
+
if (oldest !== undefined) this.lastSeen.delete(oldest);
|
|
399
|
+
}
|
|
400
|
+
this.lastSeen.delete(userId);
|
|
401
|
+
this.lastSeen.set(userId, this.now());
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* One pass of the background renewal (GrantSweepDials): renew the cached
|
|
406
|
+
* token of every recently seen person whose token expires within the
|
|
407
|
+
* window, one at a time, through `renew()`. Answers how many renewals
|
|
408
|
+
* were attempted. Never throws: a failed renewal is the next request's
|
|
409
|
+
* on-demand refresh, exactly as before the sweep existed.
|
|
410
|
+
*/
|
|
411
|
+
async sweepExpiring(
|
|
412
|
+
dials: Omit<GrantSweepDials, 'intervalMs'> = DEFAULT_GRANT_SWEEP_DIALS
|
|
413
|
+
): Promise<number> {
|
|
414
|
+
const now = this.now();
|
|
415
|
+
let attempted = 0;
|
|
416
|
+
for (const [userId, seenAt] of [...this.lastSeen]) {
|
|
417
|
+
if (now - seenAt > dials.activeWithinMs) {
|
|
418
|
+
this.lastSeen.delete(userId);
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
const cached = this.cache.get(userId);
|
|
422
|
+
if (!cached || cached.expiresAtMs - now > dials.renewAheadMs) continue;
|
|
423
|
+
if (this.inFlight.has(userId)) continue;
|
|
424
|
+
attempted += 1;
|
|
425
|
+
try {
|
|
426
|
+
const out = await this.renew(userId, dials.renewAheadMs);
|
|
427
|
+
if (out.kind !== 'ok') {
|
|
428
|
+
this.opts.logger.info({ userId, outcome: out.kind }, 'hub grant: background renewal did not renew');
|
|
429
|
+
}
|
|
430
|
+
} catch (err) {
|
|
431
|
+
this.opts.logger.warn(
|
|
432
|
+
{ err, userId },
|
|
433
|
+
'hub grant: background renewal failed — the next request refreshes on demand'
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return attempted;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Run the sweep on a timer that never holds the process open and skips
|
|
442
|
+
* while the replica drains. Returns the function that stops it.
|
|
443
|
+
*/
|
|
444
|
+
startSweep(
|
|
445
|
+
options: { isDraining?: () => boolean; dials?: Partial<GrantSweepDials> } = {}
|
|
446
|
+
): GrantSweepHandle {
|
|
447
|
+
const dials = { ...DEFAULT_GRANT_SWEEP_DIALS, ...options.dials };
|
|
448
|
+
let running = false;
|
|
449
|
+
const timer = setInterval(() => {
|
|
450
|
+
// One pass at a time: a slow hub must never stack passes.
|
|
451
|
+
if (running || options.isDraining?.()) return;
|
|
452
|
+
running = true;
|
|
453
|
+
void this.sweepExpiring(dials).finally(() => {
|
|
454
|
+
running = false;
|
|
455
|
+
});
|
|
456
|
+
}, dials.intervalMs);
|
|
457
|
+
timer.unref();
|
|
458
|
+
return { timer, stop: () => clearInterval(timer) };
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Renew the grant in the background (the sweep's path, PRDCT-3584): the
|
|
463
|
+
* cached token keeps being served until the rotation's result is known
|
|
464
|
+
* (nothing is evicted up front, unlike `refresh()`), and a token a sibling
|
|
465
|
+
* replica stored with at least `minLeftMs` of life left is adopted instead
|
|
466
|
+
* of rotating a second time. Joins an acquisition already in flight.
|
|
467
|
+
*/
|
|
468
|
+
async renew(
|
|
469
|
+
userId: string,
|
|
470
|
+
minLeftMs: number = DEFAULT_GRANT_SWEEP_DIALS.renewAheadMs
|
|
471
|
+
): Promise<GrantAccess> {
|
|
472
|
+
return this.acquire(userId, 'renew', minLeftMs);
|
|
322
473
|
}
|
|
323
474
|
|
|
324
|
-
private acquire(userId: string,
|
|
475
|
+
private acquire(userId: string, mode: AcquireMode, minLeftMs?: number): Promise<GrantAccess> {
|
|
325
476
|
let flight = this.inFlight.get(userId);
|
|
326
477
|
if (!flight) {
|
|
327
|
-
flight = this.doAcquire(userId,
|
|
478
|
+
flight = this.doAcquire(userId, mode, minLeftMs).finally(() => {
|
|
328
479
|
if (this.inFlight.get(userId) === flight) this.inFlight.delete(userId);
|
|
329
480
|
});
|
|
330
481
|
this.inFlight.set(userId, flight);
|
|
@@ -332,15 +483,21 @@ export class HubGrantService {
|
|
|
332
483
|
return flight;
|
|
333
484
|
}
|
|
334
485
|
|
|
335
|
-
private async doAcquire(userId: string,
|
|
486
|
+
private async doAcquire(userId: string, mode: AcquireMode, minLeftMs?: number): Promise<GrantAccess> {
|
|
336
487
|
try {
|
|
337
488
|
const first = await this.readRow(userId);
|
|
338
489
|
if (!first) return { kind: 'no_link' };
|
|
339
490
|
if (!first.refreshToken) return { kind: 'grant_dead' };
|
|
340
491
|
|
|
341
|
-
if (
|
|
492
|
+
if (mode === 'demand') {
|
|
342
493
|
const stored = await this.storedAccess(userId, first);
|
|
343
494
|
if (stored) return { kind: 'ok', accessToken: stored };
|
|
495
|
+
} else if (mode === 'renew') {
|
|
496
|
+
// A sibling replica (or a login) already renewed: adopt its token
|
|
497
|
+
// without taking the lock (verifier round 6: the common case on
|
|
498
|
+
// several replicas was paying a dedicated connection for nothing).
|
|
499
|
+
const stored = await this.storedAccess(userId, first, minLeftMs);
|
|
500
|
+
if (stored) return { kind: 'ok', accessToken: stored };
|
|
344
501
|
}
|
|
345
502
|
|
|
346
503
|
// Slow path: rotate under the cross-replica lock.
|
|
@@ -354,9 +511,15 @@ export class HubGrantService {
|
|
|
354
511
|
const row = await this.readRow(userId);
|
|
355
512
|
if (!row) return { kind: 'no_link' };
|
|
356
513
|
if (!row.refreshToken) return { kind: 'grant_dead' };
|
|
357
|
-
if (
|
|
514
|
+
if (mode === 'demand' || row.refreshToken !== first.refreshToken) {
|
|
358
515
|
const stored = await this.storedAccess(userId, row);
|
|
359
516
|
if (stored) return { kind: 'ok', accessToken: stored };
|
|
517
|
+
} else if (mode === 'renew') {
|
|
518
|
+
// A renewal rotates only what is about to expire: a stored token
|
|
519
|
+
// with more life than the renewal window is a sibling replica's
|
|
520
|
+
// fresh one (or a login's), adopted rather than rotated again.
|
|
521
|
+
const stored = await this.storedAccess(userId, row, minLeftMs);
|
|
522
|
+
if (stored) return { kind: 'ok', accessToken: stored };
|
|
360
523
|
}
|
|
361
524
|
|
|
362
525
|
let refreshToken: string;
|
|
@@ -416,7 +579,7 @@ export class HubGrantService {
|
|
|
416
579
|
this.cache.delete(userId);
|
|
417
580
|
this.refreshes.inc({ outcome: 'invalid_grant' });
|
|
418
581
|
this.opts.logger.warn(
|
|
419
|
-
{ userId },
|
|
582
|
+
{ userId, status: outcome.status, reason: outcome.description },
|
|
420
583
|
'hub grant: token endpoint answered invalid_grant — grant marked dead; a browser SSO login heals it'
|
|
421
584
|
);
|
|
422
585
|
return { kind: 'grant_dead' };
|
|
@@ -429,6 +592,7 @@ export class HubGrantService {
|
|
|
429
592
|
await this.clearPresentation(row.id);
|
|
430
593
|
this.refreshes.inc({ outcome: 'invalid_client' });
|
|
431
594
|
this.opts.logger.error(
|
|
595
|
+
{ status: outcome.status, reason: outcome.description },
|
|
432
596
|
'hub grant: token endpoint answered invalid_client — HUB_CLIENT_ID/HUB_CLIENT_SECRET are broken; ' +
|
|
433
597
|
'refreshes are failing transient (grants are NOT being killed); fix the client credentials'
|
|
434
598
|
);
|
|
@@ -564,10 +728,14 @@ export class HubGrantService {
|
|
|
564
728
|
}
|
|
565
729
|
|
|
566
730
|
/** Decrypt-and-cache the row's access token when it is still fresh. */
|
|
567
|
-
private async storedAccess(
|
|
731
|
+
private async storedAccess(
|
|
732
|
+
userId: string,
|
|
733
|
+
row: GrantRow,
|
|
734
|
+
minLeftMs: number = this.dials.accessSkewMs
|
|
735
|
+
): Promise<string | null> {
|
|
568
736
|
if (!row.accessToken || !row.accessTokenExpiresAt) return null;
|
|
569
737
|
const expiresAtMs = row.accessTokenExpiresAt.getTime();
|
|
570
|
-
if (expiresAtMs - this.now() <=
|
|
738
|
+
if (expiresAtMs - this.now() <= minLeftMs) return null;
|
|
571
739
|
try {
|
|
572
740
|
const token = await this.decrypt(row.accessToken);
|
|
573
741
|
this.cache.set(userId, { token, expiresAtMs });
|
|
@@ -657,9 +825,13 @@ export class HubGrantService {
|
|
|
657
825
|
// RFC 6749 errors ride 400/401; anything else (5xx…) is transient.
|
|
658
826
|
if (res.status === 400 || res.status === 401) {
|
|
659
827
|
const error = (payload as { error?: unknown } | null)?.error;
|
|
660
|
-
|
|
661
|
-
if (error === '
|
|
662
|
-
|
|
828
|
+
const description = refusalDescription(payload);
|
|
829
|
+
if (error === 'invalid_grant') return { kind: 'invalid_grant', status: res.status, description };
|
|
830
|
+
if (error === 'invalid_client') return { kind: 'invalid_client', status: res.status, description };
|
|
831
|
+
this.opts.logger.warn(
|
|
832
|
+
{ status: res.status, error, description },
|
|
833
|
+
'hub grant: unrecognized token-endpoint error'
|
|
834
|
+
);
|
|
663
835
|
return { kind: 'transient' };
|
|
664
836
|
}
|
|
665
837
|
this.opts.logger.warn({ status: res.status }, 'hub grant: token endpoint answered non-2xx');
|
package/src/identity/index.ts
CHANGED
|
@@ -23,9 +23,14 @@ export {
|
|
|
23
23
|
} from './demo-pass-rules.js';
|
|
24
24
|
export {
|
|
25
25
|
DEFAULT_GRANT_DIALS,
|
|
26
|
+
DEFAULT_GRANT_SWEEP_DIALS,
|
|
26
27
|
type GrantAccess,
|
|
28
|
+
type GrantSweepDials,
|
|
29
|
+
type GrantSweepHandle,
|
|
27
30
|
HubGrantService,
|
|
28
|
-
LOCK_WATCHDOG_HEADROOM_MS
|
|
31
|
+
LOCK_WATCHDOG_HEADROOM_MS,
|
|
32
|
+
type RefusalReason,
|
|
33
|
+
refusalDescription
|
|
29
34
|
} from './hub-grant.js';
|
|
30
35
|
export { HubJwtVerifier } from './hub-jwt.js';
|
|
31
36
|
export { HubLogoutService, hintCookieClearHeader } from './hub-logout.js';
|
|
@@ -503,3 +503,100 @@ describe('ambiguous outcomes: the presentation record + the RFC 7662 probe (PRDC
|
|
|
503
503
|
expect((await makeService(FAST).accessToken(aliceId)).kind).toBe('ok');
|
|
504
504
|
});
|
|
505
505
|
});
|
|
506
|
+
|
|
507
|
+
/** Bring the stored access token to the renewal window (two minutes left) — the row is what a renewal judges. */
|
|
508
|
+
async function nearExpiryStoredAccess(): Promise<void> {
|
|
509
|
+
await app.db.pool.query(
|
|
510
|
+
`UPDATE account SET access_token_expires_at = now() + interval '2 minutes'
|
|
511
|
+
WHERE provider_id = 'antasphere' AND user_id = $1`,
|
|
512
|
+
[aliceId]
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
describe('the background renewal (PRDCT-3584, verifier round 5)', () => {
|
|
517
|
+
it('keeps serving the cached token while the hub answers the rotation', async () => {
|
|
518
|
+
const service = makeService();
|
|
519
|
+
await sso.ssoLogin(app, hub, alice);
|
|
520
|
+
const row = await grantRow();
|
|
521
|
+
const current = await symmetricDecrypt({ key: AUTH_SECRET, data: row.access_token! });
|
|
522
|
+
// the token is about to expire: inside the renewal window, outside the on-demand skew
|
|
523
|
+
service.prime(aliceId, current, new Date(Date.now() + 2 * 60_000));
|
|
524
|
+
await nearExpiryStoredAccess();
|
|
525
|
+
hub.tokenDelayMs = 1_200;
|
|
526
|
+
try {
|
|
527
|
+
const before = hub.refreshCount();
|
|
528
|
+
const renewal = service.renew(aliceId);
|
|
529
|
+
const t0 = Date.now();
|
|
530
|
+
const during = await service.accessToken(aliceId);
|
|
531
|
+
const waited = Date.now() - t0;
|
|
532
|
+
expect(during).toEqual({ kind: 'ok', accessToken: current });
|
|
533
|
+
expect(waited).toBeLessThan(300);
|
|
534
|
+
const out = await renewal;
|
|
535
|
+
expect(out.kind).toBe('ok');
|
|
536
|
+
expect(hub.refreshCount()).toBe(before + 1);
|
|
537
|
+
// the renewed token is what the next demand serves, without a hub call
|
|
538
|
+
const after = await service.accessToken(aliceId);
|
|
539
|
+
expect(after.kind).toBe('ok');
|
|
540
|
+
expect((after as { accessToken: string }).accessToken).not.toBe(current);
|
|
541
|
+
expect(hub.refreshCount()).toBe(before + 1);
|
|
542
|
+
} finally {
|
|
543
|
+
hub.tokenDelayMs = 0;
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
it('a transient answer leaves the cached token in place', async () => {
|
|
548
|
+
const service = makeService();
|
|
549
|
+
await sso.ssoLogin(app, hub, alice);
|
|
550
|
+
const row = await grantRow();
|
|
551
|
+
const current = await symmetricDecrypt({ key: AUTH_SECRET, data: row.access_token! });
|
|
552
|
+
service.prime(aliceId, current, new Date(Date.now() + 2 * 60_000));
|
|
553
|
+
await nearExpiryStoredAccess();
|
|
554
|
+
hub.tokenMode = 'http500';
|
|
555
|
+
try {
|
|
556
|
+
expect(await service.renew(aliceId)).toEqual({ kind: 'inconclusive' });
|
|
557
|
+
} finally {
|
|
558
|
+
hub.tokenMode = 'ok';
|
|
559
|
+
}
|
|
560
|
+
const before = hub.refreshCount();
|
|
561
|
+
expect(await service.accessToken(aliceId)).toEqual({ kind: 'ok', accessToken: current });
|
|
562
|
+
expect(hub.refreshCount()).toBe(before);
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
it('a sibling replica adopts the fresh token the first one stored instead of rotating again', async () => {
|
|
566
|
+
const a = makeService();
|
|
567
|
+
const b = makeService();
|
|
568
|
+
await sso.ssoLogin(app, hub, alice);
|
|
569
|
+
const row = await grantRow();
|
|
570
|
+
const current = await symmetricDecrypt({ key: AUTH_SECRET, data: row.access_token! });
|
|
571
|
+
a.prime(aliceId, current, new Date(Date.now() + 2 * 60_000));
|
|
572
|
+
b.prime(aliceId, current, new Date(Date.now() + 2 * 60_000));
|
|
573
|
+
await nearExpiryStoredAccess();
|
|
574
|
+
const before = hub.refreshCount();
|
|
575
|
+
expect((await a.renew(aliceId)).kind).toBe('ok');
|
|
576
|
+
expect(hub.refreshCount()).toBe(before + 1);
|
|
577
|
+
const adopted = await b.renew(aliceId);
|
|
578
|
+
expect(adopted.kind).toBe('ok');
|
|
579
|
+
expect(hub.refreshCount()).toBe(before + 1); // no second rotation
|
|
580
|
+
const fresh = await grantRow();
|
|
581
|
+
expect((adopted as { accessToken: string }).accessToken).toBe(
|
|
582
|
+
await symmetricDecrypt({ key: AUTH_SECRET, data: fresh.access_token! })
|
|
583
|
+
);
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
it('a refused renewal marks the grant dead like a refused refresh', async () => {
|
|
587
|
+
const service = makeService();
|
|
588
|
+
await sso.ssoLogin(app, hub, alice);
|
|
589
|
+
const row = await grantRow();
|
|
590
|
+
const current = await symmetricDecrypt({ key: AUTH_SECRET, data: row.access_token! });
|
|
591
|
+
service.prime(aliceId, current, new Date(Date.now() + 2 * 60_000));
|
|
592
|
+
await nearExpiryStoredAccess();
|
|
593
|
+
hub.tokenMode = 'invalid_grant';
|
|
594
|
+
try {
|
|
595
|
+
expect(await service.renew(aliceId)).toEqual({ kind: 'grant_dead' });
|
|
596
|
+
} finally {
|
|
597
|
+
hub.tokenMode = 'ok';
|
|
598
|
+
}
|
|
599
|
+
expect(await service.accessToken(aliceId)).toEqual({ kind: 'grant_dead' });
|
|
600
|
+
await sso.ssoLogin(app, hub, alice); // heal for any later suite
|
|
601
|
+
});
|
|
602
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { refusalDescription } from '../../src/identity/hub-grant.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* PRDCT-3584. The hub's `invalid_grant` has four causes at the pinned
|
|
6
|
+
* plugin (unknown token, expired, rotated out, refused by the pre-flight)
|
|
7
|
+
* and the tool used to drop the sentence that tells them apart. The reader
|
|
8
|
+
* keeps it for the log line, bounded and trimmed, and nothing else.
|
|
9
|
+
*/
|
|
10
|
+
describe('refusalDescription', () => {
|
|
11
|
+
it('reads a non-empty error_description', () => {
|
|
12
|
+
expect(refusalDescription({ error: 'invalid_grant', error_description: 'session not found' })).toBe(
|
|
13
|
+
'session not found'
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
it('trims and bounds it', () => {
|
|
17
|
+
expect(refusalDescription({ error_description: ' invalid refresh token \n' })).toBe(
|
|
18
|
+
'invalid refresh token'
|
|
19
|
+
);
|
|
20
|
+
expect(refusalDescription({ error_description: 'x'.repeat(1000) })?.length).toBe(300);
|
|
21
|
+
});
|
|
22
|
+
it('answers null for anything else', () => {
|
|
23
|
+
expect(refusalDescription({ error: 'invalid_grant' })).toBeNull();
|
|
24
|
+
expect(refusalDescription({ error_description: '' })).toBeNull();
|
|
25
|
+
expect(refusalDescription({ error_description: 42 })).toBeNull();
|
|
26
|
+
expect(refusalDescription(null)).toBeNull();
|
|
27
|
+
expect(refusalDescription('invalid_grant')).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { DEFAULT_GRANT_SWEEP_DIALS, HubGrantService } from '../../src/identity/hub-grant.js';
|
|
3
|
+
import type { Logger } from '../../src/logger.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* PRDCT-3584. A person back after a coffee used to meet the hub's token
|
|
7
|
+
* endpoint inside their first request. The sweep renews, off any request,
|
|
8
|
+
* the token of every recently seen person whose token is about to expire,
|
|
9
|
+
* through `refresh()` alone, and forgets the people not seen for an hour.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const silent = { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() } as unknown as Logger;
|
|
13
|
+
|
|
14
|
+
function service(nowRef: { t: number }) {
|
|
15
|
+
// The constructor only stores its options; nothing here touches the db
|
|
16
|
+
// (the refresh is stubbed below), so the dummies never run.
|
|
17
|
+
const svc = new HubGrantService({
|
|
18
|
+
db: {} as never,
|
|
19
|
+
issuerUrl: 'http://hub.test',
|
|
20
|
+
clientId: 'tool-x',
|
|
21
|
+
clientSecret: 'secret',
|
|
22
|
+
tokenResource: null,
|
|
23
|
+
key: async () => 'k',
|
|
24
|
+
connectionString: 'postgres://unused',
|
|
25
|
+
logger: silent,
|
|
26
|
+
dials: {
|
|
27
|
+
accessSkewMs: 60_000,
|
|
28
|
+
tokenTimeoutMs: 5_000,
|
|
29
|
+
introspectTimeoutMs: 5_000,
|
|
30
|
+
lockWatchdogMs: 12_000
|
|
31
|
+
},
|
|
32
|
+
now: () => nowRef.t
|
|
33
|
+
});
|
|
34
|
+
const refresh = vi.spyOn(svc, 'renew').mockResolvedValue({ kind: 'ok', accessToken: 'renewed' });
|
|
35
|
+
return { svc, refresh };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const MIN = 60_000;
|
|
39
|
+
|
|
40
|
+
describe('HubGrantService.sweepExpiring', () => {
|
|
41
|
+
it('renews a recently seen person whose cached token expires within the window', async () => {
|
|
42
|
+
const now = { t: 1_000_000 };
|
|
43
|
+
const { svc, refresh } = service(now);
|
|
44
|
+
svc.prime('alice', 'tok', new Date(now.t + 15 * MIN));
|
|
45
|
+
await svc.accessToken('alice'); // seen
|
|
46
|
+
now.t += 13 * MIN; // 2 min left: inside renewAheadMs (3 min)
|
|
47
|
+
expect(await svc.sweepExpiring()).toBe(1);
|
|
48
|
+
expect(refresh).toHaveBeenCalledTimes(1);
|
|
49
|
+
expect(refresh).toHaveBeenCalledWith('alice', DEFAULT_GRANT_SWEEP_DIALS.renewAheadMs);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('leaves a token that still has time, and a person it never saw', async () => {
|
|
53
|
+
const now = { t: 1_000_000 };
|
|
54
|
+
const { svc, refresh } = service(now);
|
|
55
|
+
svc.prime('alice', 'tok', new Date(now.t + 15 * MIN));
|
|
56
|
+
await svc.accessToken('alice');
|
|
57
|
+
svc.prime('bob', 'tok', new Date(now.t + 1 * MIN)); // primed, never read: not seen
|
|
58
|
+
now.t += 5 * MIN; // alice: 10 min left
|
|
59
|
+
expect(await svc.sweepExpiring()).toBe(0);
|
|
60
|
+
expect(refresh).not.toHaveBeenCalled();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('forgets a person not seen within the active window instead of renewing them', async () => {
|
|
64
|
+
const now = { t: 1_000_000 };
|
|
65
|
+
const { svc, refresh } = service(now);
|
|
66
|
+
svc.prime('alice', 'tok', new Date(now.t + 15 * MIN));
|
|
67
|
+
await svc.accessToken('alice');
|
|
68
|
+
now.t += 61 * MIN; // seen 61 min ago, token long expired
|
|
69
|
+
expect(await svc.sweepExpiring()).toBe(0);
|
|
70
|
+
expect(refresh).not.toHaveBeenCalled();
|
|
71
|
+
// and she is gone: a later pass with a fresh token in cache still skips her
|
|
72
|
+
svc.prime('alice', 'tok2', new Date(now.t + 2 * MIN));
|
|
73
|
+
expect(await svc.sweepExpiring()).toBe(0);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('never throws when a renewal fails, and says so', async () => {
|
|
77
|
+
const now = { t: 1_000_000 };
|
|
78
|
+
const { svc, refresh } = service(now);
|
|
79
|
+
refresh.mockRejectedValueOnce(new Error('boom'));
|
|
80
|
+
svc.prime('alice', 'tok', new Date(now.t + 2 * MIN));
|
|
81
|
+
await svc.accessToken('alice');
|
|
82
|
+
expect(await svc.sweepExpiring()).toBe(1);
|
|
83
|
+
expect(silent.warn).toHaveBeenCalled();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('runs on a timer that skips while draining and can be stopped', async () => {
|
|
87
|
+
vi.useFakeTimers();
|
|
88
|
+
try {
|
|
89
|
+
const now = { t: 1_000_000 };
|
|
90
|
+
const { svc, refresh } = service(now);
|
|
91
|
+
svc.prime('alice', 'tok', new Date(now.t + 2 * MIN));
|
|
92
|
+
await svc.accessToken('alice');
|
|
93
|
+
let draining = true;
|
|
94
|
+
const sweep = svc.startSweep({ isDraining: () => draining, dials: { intervalMs: 1_000 } });
|
|
95
|
+
// the timer never holds the process open (verifier round 5, gap d)
|
|
96
|
+
expect(sweep.timer.hasRef()).toBe(false);
|
|
97
|
+
await vi.advanceTimersByTimeAsync(1_500);
|
|
98
|
+
expect(refresh).not.toHaveBeenCalled();
|
|
99
|
+
draining = false;
|
|
100
|
+
await vi.advanceTimersByTimeAsync(1_000);
|
|
101
|
+
expect(refresh).toHaveBeenCalledTimes(1);
|
|
102
|
+
sweep.stop();
|
|
103
|
+
svc.prime('alice', 'tok', new Date(now.t + 2 * MIN));
|
|
104
|
+
await vi.advanceTimersByTimeAsync(5_000);
|
|
105
|
+
expect(refresh).toHaveBeenCalledTimes(1);
|
|
106
|
+
} finally {
|
|
107
|
+
vi.useRealTimers();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('skips a person whose acquisition is already in flight (verifier round 5, gap a)', async () => {
|
|
112
|
+
const now = { t: 1_000_000 };
|
|
113
|
+
const { svc, refresh } = service(now);
|
|
114
|
+
svc.prime('alice', 'tok', new Date(now.t + 2 * MIN));
|
|
115
|
+
await svc.accessToken('alice');
|
|
116
|
+
// a request's acquisition is running: the sweep must not stack a rotation behind it
|
|
117
|
+
(svc as unknown as { inFlight: Map<string, Promise<unknown>> }).inFlight.set(
|
|
118
|
+
'alice',
|
|
119
|
+
new Promise(() => {})
|
|
120
|
+
);
|
|
121
|
+
expect(await svc.sweepExpiring()).toBe(0);
|
|
122
|
+
expect(refresh).not.toHaveBeenCalled();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('never runs two passes at once: a slow renewal holds the next tick (verifier round 5, gap e)', async () => {
|
|
126
|
+
vi.useFakeTimers();
|
|
127
|
+
try {
|
|
128
|
+
const now = { t: 1_000_000 };
|
|
129
|
+
const { svc, refresh } = service(now);
|
|
130
|
+
refresh.mockImplementation(
|
|
131
|
+
() => new Promise((resolve) => setTimeout(() => resolve({ kind: 'ok', accessToken: 'r' }), 2_500))
|
|
132
|
+
);
|
|
133
|
+
svc.prime('alice', 'tok', new Date(now.t + 2 * MIN));
|
|
134
|
+
await svc.accessToken('alice');
|
|
135
|
+
const sweep = svc.startSweep({ dials: { intervalMs: 1_000 } });
|
|
136
|
+
await vi.advanceTimersByTimeAsync(3_200); // ticks at 1 s, 2 s, 3 s; the renewal from the first still runs
|
|
137
|
+
expect(refresh).toHaveBeenCalledTimes(1);
|
|
138
|
+
sweep.stop();
|
|
139
|
+
} finally {
|
|
140
|
+
vi.useRealTimers();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('keeps the default dials readable', () => {
|
|
145
|
+
expect(DEFAULT_GRANT_SWEEP_DIALS).toEqual({
|
|
146
|
+
intervalMs: 60_000,
|
|
147
|
+
renewAheadMs: 180_000,
|
|
148
|
+
activeWithinMs: 3_600_000
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|