@vybestack/llxprt-code 0.9.1 → 0.9.3

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.
Files changed (67) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/auth/BucketFailoverHandlerImpl.d.ts +6 -2
  3. package/dist/src/auth/BucketFailoverHandlerImpl.js +128 -22
  4. package/dist/src/auth/BucketFailoverHandlerImpl.js.map +1 -1
  5. package/dist/src/auth/BucketFailoverHandlerImpl.spec.js +201 -1
  6. package/dist/src/auth/BucketFailoverHandlerImpl.spec.js.map +1 -1
  7. package/dist/src/auth/__tests__/oauth-manager.getToken-bucket-peek.spec.js +2 -1
  8. package/dist/src/auth/__tests__/oauth-manager.getToken-bucket-peek.spec.js.map +1 -1
  9. package/dist/src/auth/oauth-manager.auth-lock.spec.js +6 -1
  10. package/dist/src/auth/oauth-manager.auth-lock.spec.js.map +1 -1
  11. package/dist/src/auth/oauth-manager.d.ts +10 -9
  12. package/dist/src/auth/oauth-manager.failover-wiring.spec.js +74 -1
  13. package/dist/src/auth/oauth-manager.failover-wiring.spec.js.map +1 -1
  14. package/dist/src/auth/oauth-manager.issue1468.spec.js +527 -2
  15. package/dist/src/auth/oauth-manager.issue1468.spec.js.map +1 -1
  16. package/dist/src/auth/oauth-manager.js +184 -67
  17. package/dist/src/auth/oauth-manager.js.map +1 -1
  18. package/dist/src/auth/oauth-manager.logout.spec.js +137 -0
  19. package/dist/src/auth/oauth-manager.logout.spec.js.map +1 -1
  20. package/dist/src/auth/oauth-manager.spec.js +58 -0
  21. package/dist/src/auth/oauth-manager.spec.js.map +1 -1
  22. package/dist/src/config/config.js +4 -0
  23. package/dist/src/config/config.js.map +1 -1
  24. package/dist/src/gemini.js.map +1 -1
  25. package/dist/src/generated/git-commit.d.ts +1 -1
  26. package/dist/src/generated/git-commit.js +1 -1
  27. package/dist/src/providers/aliases/chutes-ai.config +1 -1
  28. package/dist/src/providers/aliases/codex.config +1 -0
  29. package/dist/src/providers/aliases/deepseek.config +9 -0
  30. package/dist/src/providers/aliases/fireworks.config +1 -1
  31. package/dist/src/providers/aliases/gemini.config +1 -1
  32. package/dist/src/providers/aliases/openai.config +1 -1
  33. package/dist/src/providers/aliases/openrouter.config +1 -1
  34. package/dist/src/providers/aliases/synthetic.config +1 -1
  35. package/dist/src/providers/aliases/xai.config +1 -1
  36. package/dist/src/providers/aliases/zai.config +9 -0
  37. package/dist/src/providers/providerAliases.codex.test.js +2 -2
  38. package/dist/src/providers/providerAliases.codex.test.js.map +1 -1
  39. package/dist/src/providers/providerAliases.defaultModels.test.d.ts +6 -0
  40. package/dist/src/providers/providerAliases.defaultModels.test.js +57 -0
  41. package/dist/src/providers/providerAliases.defaultModels.test.js.map +1 -0
  42. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +1 -1
  43. package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
  44. package/dist/src/ui/AppContainer.js +1 -1
  45. package/dist/src/ui/AppContainer.js.map +1 -1
  46. package/dist/src/ui/commands/diagnosticsCommand.js +16 -7
  47. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  48. package/dist/src/ui/commands/diagnosticsCommand.spec.js +68 -0
  49. package/dist/src/ui/commands/diagnosticsCommand.spec.js.map +1 -1
  50. package/dist/src/ui/commands/statsCommand.js +63 -4
  51. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  52. package/dist/src/ui/components/AuthDialog.js +1 -1
  53. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  54. package/dist/src/ui/utils/terminalCapabilityManager.d.ts +1 -0
  55. package/dist/src/ui/utils/terminalCapabilityManager.js +25 -1
  56. package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
  57. package/dist/src/ui/utils/terminalCapabilityManager.test.js +34 -1
  58. package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -1
  59. package/dist/src/ui/utils/terminalProtocolCleanup.js +1 -1
  60. package/dist/src/ui/utils/terminalProtocolCleanup.js.map +1 -1
  61. package/dist/src/ui/utils/terminalProtocolCleanup.test.js +2 -2
  62. package/dist/src/ui/utils/terminalProtocolCleanup.test.js.map +1 -1
  63. package/dist/src/utils/sandbox.d.ts +13 -0
  64. package/dist/src/utils/sandbox.js +163 -7
  65. package/dist/src/utils/sandbox.js.map +1 -1
  66. package/dist/tsconfig.build.tsbuildinfo +1 -1
  67. package/package.json +3 -3
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vybestack/llxprt-code",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "description": "LLxprt Code",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "dist"
35
35
  ],
36
36
  "config": {
37
- "sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.9.1"
37
+ "sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.9.3"
38
38
  },
39
39
  "dependencies": {
40
40
  "@agentclientprotocol/sdk": "^0.14.1",
@@ -44,7 +44,7 @@
44
44
  "@iarna/toml": "^2.2.5",
45
45
  "@modelcontextprotocol/sdk": "^1.25.2",
46
46
  "@types/update-notifier": "^6.0.8",
47
- "@vybestack/llxprt-code-core": "0.9.1",
47
+ "@vybestack/llxprt-code-core": "0.9.3",
48
48
  "ansi-regex": "^6.2.2",
49
49
  "chalk": "^5.3.0",
50
50
  "cli-spinners": "2.9.2",
@@ -9,7 +9,7 @@
9
9
  * This class wraps OAuthManager to provide bucket failover capabilities
10
10
  * during API calls when rate limits or quota errors are encountered.
11
11
  */
12
- import { BucketFailoverHandler, type FailoverContext, type BucketFailureReason } from '@vybestack/llxprt-code-core';
12
+ import { BucketFailoverHandler, type FailoverContext, type BucketFailureReason, type OAuthTokenRequestMetadata } from '@vybestack/llxprt-code-core';
13
13
  import type { OAuthManager } from './oauth-manager.js';
14
14
  /**
15
15
  * CLI implementation of BucketFailoverHandler
@@ -24,14 +24,17 @@ export declare class BucketFailoverHandlerImpl implements BucketFailoverHandler
24
24
  private currentBucketIndex;
25
25
  private readonly provider;
26
26
  private readonly oauthManager;
27
+ private readonly metadata?;
27
28
  private triedBucketsThisSession;
29
+ private ensureBucketsAuthInFlight;
30
+ private foregroundReauthInFlightByBucket;
28
31
  /**
29
32
  * @plan PLAN-20260223-ISSUE1598.P05
30
33
  * @requirement REQ-1598-IC09
31
34
  * Record of failure reasons for buckets evaluated during last failover attempt
32
35
  */
33
36
  private lastFailoverReasons;
34
- constructor(buckets: string[], provider: string, oauthManager: OAuthManager);
37
+ constructor(buckets: string[], provider: string, oauthManager: OAuthManager, metadata?: OAuthTokenRequestMetadata);
35
38
  /**
36
39
  * Get the list of available buckets
37
40
  */
@@ -40,6 +43,7 @@ export declare class BucketFailoverHandlerImpl implements BucketFailoverHandler
40
43
  * Get the currently active bucket
41
44
  */
42
45
  getCurrentBucket(): string | undefined;
46
+ getRequestMetadata(): OAuthTokenRequestMetadata | undefined;
43
47
  /**
44
48
  * Try to failover to the next bucket
45
49
  *
@@ -24,21 +24,25 @@ export class BucketFailoverHandlerImpl {
24
24
  currentBucketIndex;
25
25
  provider;
26
26
  oauthManager;
27
+ metadata;
27
28
  triedBucketsThisSession;
29
+ ensureBucketsAuthInFlight = null;
30
+ foregroundReauthInFlightByBucket = new Map();
28
31
  /**
29
32
  * @plan PLAN-20260223-ISSUE1598.P05
30
33
  * @requirement REQ-1598-IC09
31
34
  * Record of failure reasons for buckets evaluated during last failover attempt
32
35
  */
33
36
  lastFailoverReasons = {};
34
- constructor(buckets, provider, oauthManager) {
37
+ constructor(buckets, provider, oauthManager, metadata) {
35
38
  this.buckets = buckets;
36
39
  this.currentBucketIndex = 0;
37
40
  this.provider = provider;
38
41
  this.oauthManager = oauthManager;
42
+ this.metadata = metadata;
39
43
  this.triedBucketsThisSession = new Set();
40
44
  // Align the handler state with any existing session override.
41
- const sessionBucket = this.oauthManager.getSessionBucket(provider);
45
+ const sessionBucket = this.oauthManager.getSessionBucket(provider, this.metadata);
42
46
  if (sessionBucket) {
43
47
  const existingIndex = this.buckets.indexOf(sessionBucket);
44
48
  if (existingIndex >= 0) {
@@ -47,7 +51,7 @@ export class BucketFailoverHandlerImpl {
47
51
  }
48
52
  else if (this.buckets.length > 0) {
49
53
  // Default to the first configured bucket for this session.
50
- this.oauthManager.setSessionBucket(provider, this.buckets[0]);
54
+ this.oauthManager.setSessionBucket(provider, this.buckets[0], this.metadata);
51
55
  }
52
56
  logger.debug('BucketFailoverHandler initialized', {
53
57
  provider,
@@ -70,6 +74,9 @@ export class BucketFailoverHandlerImpl {
70
74
  }
71
75
  return this.buckets[this.currentBucketIndex];
72
76
  }
77
+ getRequestMetadata() {
78
+ return this.metadata;
79
+ }
73
80
  /**
74
81
  * Try to failover to the next bucket
75
82
  *
@@ -88,7 +95,7 @@ export class BucketFailoverHandlerImpl {
88
95
  // Re-sync cursor from session state so that external session-bucket
89
96
  // switches (e.g. the peek loop in OAuthManager.getToken) are visible
90
97
  // to the failover algorithm.
91
- const sessionBucket = this.oauthManager.getSessionBucket(this.provider);
98
+ const sessionBucket = this.oauthManager.getSessionBucket(this.provider, this.metadata);
92
99
  if (sessionBucket) {
93
100
  const idx = this.buckets.indexOf(sessionBucket);
94
101
  if (idx >= 0) {
@@ -220,7 +227,7 @@ export class BucketFailoverHandlerImpl {
220
227
  }
221
228
  this.triedBucketsThisSession.add(bucket);
222
229
  try {
223
- this.oauthManager.setSessionBucket(this.provider, bucket);
230
+ this.oauthManager.setSessionBucket(this.provider, bucket, this.metadata);
224
231
  }
225
232
  catch (setError) {
226
233
  logger.warn(`Failed to set session bucket during pass-2 refresh: ${setError}`);
@@ -257,7 +264,7 @@ export class BucketFailoverHandlerImpl {
257
264
  }
258
265
  this.triedBucketsThisSession.add(bucket);
259
266
  try {
260
- this.oauthManager.setSessionBucket(this.provider, bucket);
267
+ this.oauthManager.setSessionBucket(this.provider, bucket, this.metadata);
261
268
  }
262
269
  catch (setError) {
263
270
  logger.warn(`Failed to set session bucket during pass-2 switch: ${setError}`);
@@ -294,17 +301,93 @@ export class BucketFailoverHandlerImpl {
294
301
  candidateBucket = currentBucket;
295
302
  }
296
303
  if (candidateBucket !== undefined) {
297
- try {
298
- logger.debug(`Attempting foreground reauth for bucket: ${candidateBucket}`);
299
- await this.oauthManager.authenticate(this.provider, candidateBucket);
300
- // Verify token exists after reauth (REQ-1598-FL08)
301
- const token = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
302
- if (token === null) {
303
- logger.warn(`Foreground reauth succeeded but token is null for bucket: ${candidateBucket}`);
304
- this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
304
+ const existingForegroundReauth = this.foregroundReauthInFlightByBucket.get(candidateBucket);
305
+ if (existingForegroundReauth) {
306
+ return existingForegroundReauth;
307
+ }
308
+ const pass3Promise = (async () => {
309
+ const eagerAuthInFlight = this.ensureBucketsAuthInFlight;
310
+ if (eagerAuthInFlight) {
311
+ logger.debug(`Foreground reauth waiting for in-flight eager auth (provider=${this.provider}, bucket=${candidateBucket})`);
312
+ try {
313
+ await eagerAuthInFlight;
314
+ }
315
+ catch (error) {
316
+ logger.debug(`In-flight eager auth failed before pass-3 reauth for ${candidateBucket}:`, error);
317
+ }
318
+ }
319
+ // Re-check whether token became available while this failover attempt was
320
+ // evaluating candidates (e.g. concurrent turn-boundary eager auth).
321
+ let existingToken = null;
322
+ try {
323
+ existingToken = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
324
+ }
325
+ catch (error) {
326
+ logger.debug(`Token re-check failed before pass-3 reauth for ${candidateBucket}:`, error);
327
+ }
328
+ if (existingToken !== null) {
329
+ const bucketIndex = this.buckets.indexOf(candidateBucket);
330
+ if (bucketIndex >= 0) {
331
+ this.currentBucketIndex = bucketIndex;
332
+ }
305
333
  this.triedBucketsThisSession.add(candidateBucket);
334
+ try {
335
+ this.oauthManager.setSessionBucket(this.provider, candidateBucket, this.metadata);
336
+ }
337
+ catch (setError) {
338
+ logger.warn(`Failed to set session bucket during pass-3 token re-check switch: ${setError}`);
339
+ // Continue anyway
340
+ }
341
+ logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after token became available`);
342
+ return true;
306
343
  }
307
- else {
344
+ const lateEagerAuthInFlight = this.ensureBucketsAuthInFlight;
345
+ if (lateEagerAuthInFlight) {
346
+ logger.debug(`Foreground reauth detected late in-flight eager auth (provider=${this.provider}, bucket=${candidateBucket})`);
347
+ try {
348
+ await lateEagerAuthInFlight;
349
+ }
350
+ catch (error) {
351
+ logger.debug(`Late in-flight eager auth failed before pass-3 reauth for ${candidateBucket}:`, error);
352
+ }
353
+ }
354
+ // Final TOCTOU guard: token state may have changed after the initial
355
+ // snapshot/re-checks, including when eager auth started and completed
356
+ // between checks. Re-check one last time before interactive auth.
357
+ let tokenBeforeForegroundAuth = null;
358
+ try {
359
+ tokenBeforeForegroundAuth = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
360
+ }
361
+ catch (error) {
362
+ logger.debug(`Final token re-check failed before pass-3 reauth for ${candidateBucket}:`, error);
363
+ }
364
+ if (tokenBeforeForegroundAuth !== null) {
365
+ const bucketIndex = this.buckets.indexOf(candidateBucket);
366
+ if (bucketIndex >= 0) {
367
+ this.currentBucketIndex = bucketIndex;
368
+ }
369
+ this.triedBucketsThisSession.add(candidateBucket);
370
+ try {
371
+ this.oauthManager.setSessionBucket(this.provider, candidateBucket, this.metadata);
372
+ }
373
+ catch (setError) {
374
+ logger.warn(`Failed to set session bucket during final pass-3 token re-check switch: ${setError}`);
375
+ // Continue anyway
376
+ }
377
+ logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after final token re-check`);
378
+ return true;
379
+ }
380
+ try {
381
+ logger.debug(`Attempting foreground reauth for bucket: ${candidateBucket}`);
382
+ await this.oauthManager.authenticate(this.provider, candidateBucket);
383
+ // Verify token exists after reauth (REQ-1598-FL08)
384
+ const token = await this.oauthManager.getOAuthToken(this.provider, candidateBucket);
385
+ if (token === null) {
386
+ logger.warn(`Foreground reauth succeeded but token is null for bucket: ${candidateBucket}`);
387
+ this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
388
+ this.triedBucketsThisSession.add(candidateBucket);
389
+ return false;
390
+ }
308
391
  // Reauth succeeded — switch bucket
309
392
  const bucketIndex = this.buckets.indexOf(candidateBucket);
310
393
  if (bucketIndex >= 0) {
@@ -312,7 +395,7 @@ export class BucketFailoverHandlerImpl {
312
395
  }
313
396
  this.triedBucketsThisSession.add(candidateBucket);
314
397
  try {
315
- this.oauthManager.setSessionBucket(this.provider, candidateBucket);
398
+ this.oauthManager.setSessionBucket(this.provider, candidateBucket, this.metadata);
316
399
  }
317
400
  catch (setError) {
318
401
  logger.warn(`Failed to set session bucket during pass-3 reauth: ${setError}`);
@@ -321,11 +404,22 @@ export class BucketFailoverHandlerImpl {
321
404
  logger.warn(() => `Bucket failover: switched from ${currentBucket} to ${candidateBucket} after reauth`);
322
405
  return true;
323
406
  }
407
+ catch (reauthError) {
408
+ logger.warn(`Foreground reauth failed for bucket ${candidateBucket}:`, reauthError);
409
+ this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
410
+ this.triedBucketsThisSession.add(candidateBucket);
411
+ return false;
412
+ }
413
+ })();
414
+ this.foregroundReauthInFlightByBucket.set(candidateBucket, pass3Promise);
415
+ try {
416
+ return await pass3Promise;
324
417
  }
325
- catch (reauthError) {
326
- logger.warn(`Foreground reauth failed for bucket ${candidateBucket}:`, reauthError);
327
- this.lastFailoverReasons[candidateBucket] = 'reauth-failed';
328
- this.triedBucketsThisSession.add(candidateBucket);
418
+ finally {
419
+ const current = this.foregroundReauthInFlightByBucket.get(candidateBucket);
420
+ if (current === pass3Promise) {
421
+ this.foregroundReauthInFlightByBucket.delete(candidateBucket);
422
+ }
329
423
  }
330
424
  }
331
425
  // All passes exhausted — failover unsuccessful
@@ -355,7 +449,19 @@ export class BucketFailoverHandlerImpl {
355
449
  if (this.buckets.length <= 1) {
356
450
  return;
357
451
  }
358
- await this.oauthManager.authenticateMultipleBuckets(this.provider, this.buckets);
452
+ if (this.ensureBucketsAuthInFlight) {
453
+ await this.ensureBucketsAuthInFlight;
454
+ return;
455
+ }
456
+ const authPromise = this.oauthManager
457
+ .authenticateMultipleBuckets(this.provider, this.buckets, this.metadata)
458
+ .finally(() => {
459
+ if (this.ensureBucketsAuthInFlight === authPromise) {
460
+ this.ensureBucketsAuthInFlight = null;
461
+ }
462
+ });
463
+ this.ensureBucketsAuthInFlight = authPromise;
464
+ await authPromise;
359
465
  }
360
466
  /**
361
467
  * Reset the session tracking so failover can try buckets again in a new request.
@@ -374,7 +480,7 @@ export class BucketFailoverHandlerImpl {
374
480
  this.currentBucketIndex = 0;
375
481
  this.triedBucketsThisSession.clear();
376
482
  if (this.buckets.length > 0) {
377
- this.oauthManager.setSessionBucket(this.provider, this.buckets[0]);
483
+ this.oauthManager.setSessionBucket(this.provider, this.buckets[0], this.metadata);
378
484
  }
379
485
  logger.debug('Bucket failover handler reset', {
380
486
  provider: this.provider,
@@ -1 +1 @@
1
- {"version":3,"file":"BucketFailoverHandlerImpl.js","sourceRoot":"","sources":["../../../src/auth/BucketFailoverHandlerImpl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BucketFailoverHandlerImpl.js","sourceRoot":"","sources":["../../../src/auth/BucketFailoverHandlerImpl.ts"],"names":[],"mappings":"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"}
@@ -84,6 +84,28 @@ describe('BucketFailoverHandlerImpl', () => {
84
84
  const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
85
85
  expect(handler.getCurrentBucket()).toBe('bucket-b');
86
86
  });
87
+ it('uses scoped session buckets when initialized with request metadata', async () => {
88
+ await tokenStore.saveToken('anthropic', makeToken('t1'), 'bucket-a');
89
+ await tokenStore.saveToken('anthropic', makeToken('t2'), 'bucket-b');
90
+ const metadata = {
91
+ profileId: 'opusthinkingbucketed',
92
+ providerId: 'anthropic',
93
+ runtimeMetadata: {
94
+ source: 'SubagentOrchestrator',
95
+ subagent: 'codeanalyzer',
96
+ },
97
+ };
98
+ oauthManager.setSessionBucket('anthropic', 'bucket-b', metadata);
99
+ const HandlerCtor = BucketFailoverHandlerImpl;
100
+ const handler = new HandlerCtor(['bucket-a', 'bucket-b'], 'anthropic', oauthManager, metadata);
101
+ expect(handler.getCurrentBucket()).toBe('bucket-b');
102
+ expect(oauthManager.getSessionBucket('anthropic', metadata)).toBe('bucket-b');
103
+ expect(oauthManager.getSessionBucket('anthropic')).toBeUndefined();
104
+ handler.reset();
105
+ expect(handler.getCurrentBucket()).toBe('bucket-a');
106
+ expect(oauthManager.getSessionBucket('anthropic', metadata)).toBe('bucket-a');
107
+ expect(oauthManager.getSessionBucket('anthropic')).toBeUndefined();
108
+ });
87
109
  it('skips buckets with missing tokens and updates session bucket on success', async () => {
88
110
  await tokenStore.saveToken('anthropic', makeToken('t1'), 'bucket-a');
89
111
  await tokenStore.saveToken('anthropic', makeToken('t3'), 'bucket-c');
@@ -889,7 +911,29 @@ describe('ensureBucketsAuthenticated', () => {
889
911
  // Act
890
912
  await handler.ensureBucketsAuthenticated();
891
913
  // Assert
892
- expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledWith('anthropic', ['bucket-a', 'bucket-b', 'bucket-c']);
914
+ expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledWith('anthropic', ['bucket-a', 'bucket-b', 'bucket-c'], undefined);
915
+ });
916
+ it('passes request metadata through eager multi-bucket authentication', async () => {
917
+ const tokenStore = new MemoryTokenStore();
918
+ const metadata = {
919
+ profileId: 'opusthinkingbucketed',
920
+ providerId: 'anthropic',
921
+ runtimeMetadata: {
922
+ source: 'SubagentOrchestrator',
923
+ subagent: 'codeanalyzer',
924
+ },
925
+ };
926
+ const oauthManager = {
927
+ getOAuthToken: vi.fn(async () => null),
928
+ getTokenStore: vi.fn(() => tokenStore),
929
+ setSessionBucket: vi.fn(),
930
+ getSessionBucket: vi.fn(() => undefined),
931
+ authenticate: vi.fn(async () => { }),
932
+ authenticateMultipleBuckets: vi.fn(async () => { }),
933
+ };
934
+ const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b', 'bucket-c'], 'anthropic', oauthManager, metadata);
935
+ await handler.ensureBucketsAuthenticated();
936
+ expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledWith('anthropic', ['bucket-a', 'bucket-b', 'bucket-c'], metadata);
893
937
  });
894
938
  it('should be a no-op when handler has only one bucket', async () => {
895
939
  // Arrange
@@ -908,5 +952,161 @@ describe('ensureBucketsAuthenticated', () => {
908
952
  // Assert
909
953
  expect(oauthManager.authenticateMultipleBuckets).not.toHaveBeenCalled();
910
954
  });
955
+ it('coalesces concurrent ensureBucketsAuthenticated calls into one in-flight auth run', async () => {
956
+ // Arrange
957
+ const tokenStore = new MemoryTokenStore();
958
+ let resolveAuthRun;
959
+ const authRunPromise = new Promise((resolve) => {
960
+ resolveAuthRun = resolve;
961
+ });
962
+ const oauthManager = {
963
+ getOAuthToken: vi.fn(async () => null),
964
+ getTokenStore: vi.fn(() => tokenStore),
965
+ setSessionBucket: vi.fn(),
966
+ getSessionBucket: vi.fn(() => undefined),
967
+ authenticate: vi.fn(async () => { }),
968
+ authenticateMultipleBuckets: vi.fn(async () => authRunPromise),
969
+ };
970
+ const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b', 'bucket-c'], 'anthropic', oauthManager);
971
+ // Act
972
+ const first = handler.ensureBucketsAuthenticated();
973
+ const second = handler.ensureBucketsAuthenticated();
974
+ // Assert (before completion): only one underlying auth run started
975
+ expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(1);
976
+ // Complete in-flight run and verify both callers resolve
977
+ resolveAuthRun?.();
978
+ await Promise.all([first, second]);
979
+ expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(1);
980
+ });
981
+ it('clears in-flight state after failure so a later call can retry', async () => {
982
+ // Arrange
983
+ const tokenStore = new MemoryTokenStore();
984
+ const oauthManager = {
985
+ getOAuthToken: vi.fn(async () => null),
986
+ getTokenStore: vi.fn(() => tokenStore),
987
+ setSessionBucket: vi.fn(),
988
+ getSessionBucket: vi.fn(() => undefined),
989
+ authenticate: vi.fn(async () => { }),
990
+ authenticateMultipleBuckets: vi
991
+ .fn()
992
+ .mockRejectedValueOnce(new Error('first auth attempt failed'))
993
+ .mockResolvedValueOnce(undefined),
994
+ };
995
+ const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
996
+ // Act / Assert
997
+ await expect(handler.ensureBucketsAuthenticated()).rejects.toThrow('first auth attempt failed');
998
+ await expect(handler.ensureBucketsAuthenticated()).resolves.toBeUndefined();
999
+ expect(oauthManager.authenticateMultipleBuckets).toHaveBeenCalledTimes(2);
1000
+ });
1001
+ it('reuses token from in-flight eager auth in tryFailover pass 3 without duplicate authenticate call', async () => {
1002
+ // Arrange
1003
+ const tokenStore = new MemoryTokenStore();
1004
+ let releaseEagerAuth;
1005
+ const eagerAuthPromise = new Promise((resolve) => {
1006
+ releaseEagerAuth = resolve;
1007
+ });
1008
+ const oauthManager = {
1009
+ getOAuthToken: vi.fn(async (_provider, bucket) => tokenStore.getToken('anthropic', bucket)),
1010
+ getTokenStore: vi.fn(() => tokenStore),
1011
+ setSessionBucket: vi.fn(),
1012
+ getSessionBucket: vi.fn(() => 'bucket-a'),
1013
+ authenticate: vi.fn(async () => {
1014
+ throw new Error('pass-3 authenticate should not be called');
1015
+ }),
1016
+ authenticateMultipleBuckets: vi.fn(async () => {
1017
+ await eagerAuthPromise;
1018
+ await tokenStore.saveToken('anthropic', makeToken('eager-token'), 'bucket-b');
1019
+ }),
1020
+ };
1021
+ const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
1022
+ // Start eager auth and leave it in-flight while failover starts
1023
+ const ensurePromise = handler.ensureBucketsAuthenticated();
1024
+ const failoverPromise = handler.tryFailover({ triggeringStatus: 401 });
1025
+ releaseEagerAuth?.();
1026
+ await ensurePromise;
1027
+ // Assert
1028
+ await expect(failoverPromise).resolves.toBe(true);
1029
+ expect(handler.getCurrentBucket()).toBe('bucket-b');
1030
+ expect(oauthManager.authenticate).not.toHaveBeenCalled();
1031
+ expect(oauthManager.setSessionBucket).toHaveBeenCalledWith('anthropic', 'bucket-b', undefined);
1032
+ });
1033
+ it('coalesces concurrent pass-3 foreground reauth for the same bucket', async () => {
1034
+ // Arrange
1035
+ const tokenStore = new MemoryTokenStore();
1036
+ // Current bucket starts with no token to force pass-3 foreground auth.
1037
+ let releaseForegroundAuth;
1038
+ const foregroundAuthGate = new Promise((resolve) => {
1039
+ releaseForegroundAuth = resolve;
1040
+ });
1041
+ const oauthManager = {
1042
+ getOAuthToken: vi.fn(async (_provider, bucket) => tokenStore.getToken('anthropic', bucket)),
1043
+ getTokenStore: vi.fn(() => tokenStore),
1044
+ setSessionBucket: vi.fn(),
1045
+ getSessionBucket: vi.fn(() => 'bucket-a'),
1046
+ authenticate: vi.fn(async (_provider, bucket) => {
1047
+ await foregroundAuthGate;
1048
+ await tokenStore.saveToken('anthropic', makeToken('pass3-token'), bucket ?? 'default');
1049
+ }),
1050
+ authenticateMultipleBuckets: vi.fn(async () => undefined),
1051
+ };
1052
+ const handler = new BucketFailoverHandlerImpl(['bucket-a'], 'anthropic', oauthManager);
1053
+ // Act: Launch two failovers concurrently that both need pass-3 reauth.
1054
+ const first = handler.tryFailover({ triggeringStatus: 401 });
1055
+ const second = handler.tryFailover({ triggeringStatus: 401 });
1056
+ // Allow the shared pass-3 authenticate call to complete.
1057
+ releaseForegroundAuth?.();
1058
+ // Assert: both calls succeed but only one foreground authenticate occurs.
1059
+ await expect(first).resolves.toBe(true);
1060
+ await expect(second).resolves.toBe(true);
1061
+ expect(oauthManager.authenticate).toHaveBeenCalledTimes(1);
1062
+ expect(oauthManager.authenticate).toHaveBeenCalledWith('anthropic', 'bucket-a');
1063
+ });
1064
+ it('re-checks late-started eager auth before pass-3 foreground reauth', async () => {
1065
+ // Arrange
1066
+ const tokenStore = new MemoryTokenStore();
1067
+ let releaseFirstGetOAuthToken;
1068
+ const firstGetOAuthTokenGate = new Promise((resolve) => {
1069
+ releaseFirstGetOAuthToken = resolve;
1070
+ });
1071
+ let releaseEagerAuth;
1072
+ const eagerAuthGate = new Promise((resolve) => {
1073
+ releaseEagerAuth = resolve;
1074
+ });
1075
+ let getOAuthTokenCalls = 0;
1076
+ const oauthManager = {
1077
+ getOAuthToken: vi.fn(async (_provider, bucket) => {
1078
+ getOAuthTokenCalls += 1;
1079
+ if (getOAuthTokenCalls === 1) {
1080
+ await firstGetOAuthTokenGate;
1081
+ return null;
1082
+ }
1083
+ return tokenStore.getToken('anthropic', bucket);
1084
+ }),
1085
+ getTokenStore: vi.fn(() => tokenStore),
1086
+ setSessionBucket: vi.fn(),
1087
+ getSessionBucket: vi.fn(() => 'bucket-b'),
1088
+ authenticate: vi.fn(async (_provider, bucket) => {
1089
+ await tokenStore.saveToken('anthropic', makeToken('pass3-token'), bucket ?? 'default');
1090
+ }),
1091
+ authenticateMultipleBuckets: vi.fn(async () => {
1092
+ await eagerAuthGate;
1093
+ await tokenStore.saveToken('anthropic', makeToken('late-eager-token'), 'bucket-a');
1094
+ }),
1095
+ };
1096
+ const handler = new BucketFailoverHandlerImpl(['bucket-a', 'bucket-b'], 'anthropic', oauthManager);
1097
+ const failoverPromise = handler.tryFailover({ triggeringStatus: 401 });
1098
+ // Start eager auth after pass-3 started, while first token check is blocked.
1099
+ const ensurePromise = handler.ensureBucketsAuthenticated();
1100
+ // Allow first check to complete with null so pass-3 executes late in-flight re-check.
1101
+ releaseFirstGetOAuthToken?.();
1102
+ // Keep eager auth in-flight until pass-3 reaches late guard.
1103
+ await Promise.resolve();
1104
+ releaseEagerAuth?.();
1105
+ await ensurePromise;
1106
+ await expect(failoverPromise).resolves.toBe(true);
1107
+ expect(getOAuthTokenCalls).toBe(2);
1108
+ expect(oauthManager.authenticate).not.toHaveBeenCalled();
1109
+ expect(handler.getCurrentBucket()).toBe('bucket-a');
1110
+ });
911
1111
  });
912
1112
  //# sourceMappingURL=BucketFailoverHandlerImpl.spec.js.map