@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.
@@ -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,CAi5BlD"}
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":"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"}
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, false);
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, true);
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
- acquire(userId, force) {
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, force).finally(() => {
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, force) {
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 (!force) {
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 (!force || row.refreshToken !== first.refreshToken) {
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() <= this.dials.accessSkewMs)
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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"}
@@ -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,EAC1B,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"}
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"}
@@ -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,EAEnB,eAAe,EACf,yBAAyB,EAC1B,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"}
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.0",
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.3.0",
143
- "@antasphere/chassis-db": "1.3.0"
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, false);
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, true);
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, force: boolean): Promise<GrantAccess> {
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, force).finally(() => {
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, force: boolean): Promise<GrantAccess> {
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 (!force) {
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 (!force || row.refreshToken !== first.refreshToken) {
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(userId: string, row: GrantRow): Promise<string | null> {
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() <= this.dials.accessSkewMs) return null;
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
- if (error === 'invalid_grant') return { kind: 'invalid_grant' };
661
- if (error === 'invalid_client') return { kind: 'invalid_client' };
662
- this.opts.logger.warn({ status: res.status, error }, 'hub grant: unrecognized token-endpoint error');
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');
@@ -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
+ });