@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.
- package/dist/package.json +3 -3
- package/dist/src/auth/BucketFailoverHandlerImpl.d.ts +6 -2
- package/dist/src/auth/BucketFailoverHandlerImpl.js +128 -22
- package/dist/src/auth/BucketFailoverHandlerImpl.js.map +1 -1
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js +201 -1
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js.map +1 -1
- package/dist/src/auth/__tests__/oauth-manager.getToken-bucket-peek.spec.js +2 -1
- package/dist/src/auth/__tests__/oauth-manager.getToken-bucket-peek.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.auth-lock.spec.js +6 -1
- package/dist/src/auth/oauth-manager.auth-lock.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.d.ts +10 -9
- package/dist/src/auth/oauth-manager.failover-wiring.spec.js +74 -1
- package/dist/src/auth/oauth-manager.failover-wiring.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.issue1468.spec.js +527 -2
- package/dist/src/auth/oauth-manager.issue1468.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.js +184 -67
- package/dist/src/auth/oauth-manager.js.map +1 -1
- package/dist/src/auth/oauth-manager.logout.spec.js +137 -0
- package/dist/src/auth/oauth-manager.logout.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.spec.js +58 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -1
- package/dist/src/config/config.js +4 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/providers/aliases/chutes-ai.config +1 -1
- package/dist/src/providers/aliases/codex.config +1 -0
- package/dist/src/providers/aliases/deepseek.config +9 -0
- package/dist/src/providers/aliases/fireworks.config +1 -1
- package/dist/src/providers/aliases/gemini.config +1 -1
- package/dist/src/providers/aliases/openai.config +1 -1
- package/dist/src/providers/aliases/openrouter.config +1 -1
- package/dist/src/providers/aliases/synthetic.config +1 -1
- package/dist/src/providers/aliases/xai.config +1 -1
- package/dist/src/providers/aliases/zai.config +9 -0
- package/dist/src/providers/providerAliases.codex.test.js +2 -2
- package/dist/src/providers/providerAliases.codex.test.js.map +1 -1
- package/dist/src/providers/providerAliases.defaultModels.test.d.ts +6 -0
- package/dist/src/providers/providerAliases.defaultModels.test.js +57 -0
- package/dist/src/providers/providerAliases.defaultModels.test.js.map +1 -0
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +1 -1
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
- package/dist/src/ui/AppContainer.js +1 -1
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.js +16 -7
- package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
- package/dist/src/ui/commands/diagnosticsCommand.spec.js +68 -0
- package/dist/src/ui/commands/diagnosticsCommand.spec.js.map +1 -1
- package/dist/src/ui/commands/statsCommand.js +63 -4
- package/dist/src/ui/commands/statsCommand.js.map +1 -1
- package/dist/src/ui/components/AuthDialog.js +1 -1
- package/dist/src/ui/components/AuthDialog.js.map +1 -1
- package/dist/src/ui/utils/terminalCapabilityManager.d.ts +1 -0
- package/dist/src/ui/utils/terminalCapabilityManager.js +25 -1
- package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
- package/dist/src/ui/utils/terminalCapabilityManager.test.js +34 -1
- package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -1
- package/dist/src/ui/utils/terminalProtocolCleanup.js +1 -1
- package/dist/src/ui/utils/terminalProtocolCleanup.js.map +1 -1
- package/dist/src/ui/utils/terminalProtocolCleanup.test.js +2 -2
- package/dist/src/ui/utils/terminalProtocolCleanup.test.js.map +1 -1
- package/dist/src/utils/sandbox.d.ts +13 -0
- package/dist/src/utils/sandbox.js +163 -7
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- 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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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
|
-
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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
|
-
|
|
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
|