opencode-claude-auth 2.1.4 → 2.1.5
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/README.md +7 -2
- package/dist/credentials.d.ts +25 -7
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +269 -52
- package/dist/credentials.js.map +1 -1
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +74 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +152 -67
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts +20 -1
- package/dist/keychain.d.ts.map +1 -1
- package/dist/keychain.js +66 -1
- package/dist/keychain.js.map +1 -1
- package/package.json +1 -1
package/dist/http.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { log } from "./logger.js";
|
|
2
|
+
// Maximum delay before we give up retrying and surface the error.
|
|
3
|
+
// A retry-after longer than this signals a quota/usage-limit reset (hours away)
|
|
4
|
+
// rather than a transient rate limit — retrying would hang indefinitely.
|
|
5
|
+
// Override with OPENCODE_CLAUDE_AUTH_MAX_RETRY_MS for longer retry windows.
|
|
6
|
+
const DEFAULT_MAX_RETRY_DELAY_MS = 30_000;
|
|
7
|
+
function getMaxRetryDelayMs() {
|
|
8
|
+
const env = process.env.OPENCODE_CLAUDE_AUTH_MAX_RETRY_MS;
|
|
9
|
+
if (env) {
|
|
10
|
+
const parsed = parseInt(env, 10);
|
|
11
|
+
if (!Number.isNaN(parsed) && parsed > 0)
|
|
12
|
+
return parsed;
|
|
13
|
+
}
|
|
14
|
+
return DEFAULT_MAX_RETRY_DELAY_MS;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Waits `ms`, or resolves early if the caller's signal aborts. A plain
|
|
18
|
+
* setTimeout would let a capped backoff outlast the timeout the caller
|
|
19
|
+
* bounded the whole request with.
|
|
20
|
+
*/
|
|
21
|
+
function sleepUnlessAborted(ms, signal) {
|
|
22
|
+
return new Promise((resolve) => {
|
|
23
|
+
if (signal?.aborted) {
|
|
24
|
+
resolve();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const finish = () => {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
signal?.removeEventListener("abort", finish);
|
|
30
|
+
resolve();
|
|
31
|
+
};
|
|
32
|
+
const timer = setTimeout(finish, ms);
|
|
33
|
+
signal?.addEventListener("abort", finish, { once: true });
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export async function fetchWithRetry(input, init, retries = 3, fetchImpl = fetch) {
|
|
37
|
+
for (let i = 0; i < retries; i++) {
|
|
38
|
+
const res = await fetchImpl(input, init);
|
|
39
|
+
if ((res.status === 429 || res.status === 529) && i < retries - 1) {
|
|
40
|
+
const retryAfter = res.headers.get("retry-after");
|
|
41
|
+
const parsed = retryAfter ? parseInt(retryAfter, 10) : NaN;
|
|
42
|
+
const delay = Number.isNaN(parsed) ? (i + 1) * 2000 : parsed * 1000;
|
|
43
|
+
// If delay exceeds the cap, the server is signalling a quota/usage-limit
|
|
44
|
+
// reset far in the future. Return immediately so the error surfaces to
|
|
45
|
+
// the user rather than silently hanging until the reset time.
|
|
46
|
+
if (delay > getMaxRetryDelayMs()) {
|
|
47
|
+
log("fetch_rate_limited_quota", {
|
|
48
|
+
status: res.status,
|
|
49
|
+
retryAfter: retryAfter ?? "none",
|
|
50
|
+
delayMs: delay,
|
|
51
|
+
});
|
|
52
|
+
return res;
|
|
53
|
+
}
|
|
54
|
+
log("fetch_rate_limited", {
|
|
55
|
+
status: res.status,
|
|
56
|
+
attempt: i + 1,
|
|
57
|
+
retryAfter: retryAfter ?? "none",
|
|
58
|
+
delayMs: delay,
|
|
59
|
+
});
|
|
60
|
+
await sleepUnlessAborted(delay, init?.signal);
|
|
61
|
+
if (init?.signal?.aborted) {
|
|
62
|
+
// The caller's deadline passed while we were backing off. Surface the
|
|
63
|
+
// rate-limit response rather than issuing a request that can only fail.
|
|
64
|
+
log("fetch_retry_aborted", { status: res.status });
|
|
65
|
+
return res;
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
return res;
|
|
70
|
+
}
|
|
71
|
+
// Only reachable when retries < 1; still issue the request once.
|
|
72
|
+
return fetchImpl(input, init);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
2
|
export { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.ts";
|
|
3
3
|
export { resetExcludedBetas } from "./betas.ts";
|
|
4
|
+
export { fetchWithRetry, type FetchFn } from "./http.ts";
|
|
4
5
|
export { stripToolPrefix, SYSTEM_IDENTITY, transformBody, transformResponseStream, } from "./transforms.ts";
|
|
5
6
|
export { getCachedCredentials, syncAuthJson, refreshAccountsList, type ClaudeCredentials, } from "./credentials.ts";
|
|
6
7
|
export { buildBillingHeaderValue, computeCch, computeVersionSuffix, extractFirstUserMessageText, } from "./signing.ts";
|
|
7
|
-
type FetchFn = typeof fetch;
|
|
8
|
-
export declare function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit, retries?: number, fetchImpl?: FetchFn): Promise<Response>;
|
|
9
8
|
export declare function buildRequestHeaders(input: RequestInfo | URL, init: RequestInit, accessToken: string, modelId?: string, excludedBetas?: Set<string>): Headers;
|
|
10
9
|
declare const plugin: Plugin;
|
|
11
10
|
export declare const ClaudeAuthPlugin: Plugin;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAkCjD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAA;AACxD,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,cAAc,CAAA;AA8CrB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,EAAE,WAAW,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,SAAY,EACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,OAAO,CAqDT;AAKD,QAAA,MAAM,MAAM,EAAE,MAyfb,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,eAAe,MAAM,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,11 +2,13 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import { config } from "./model-config.js";
|
|
3
3
|
import { readAllClaudeAccounts } from "./keychain.js";
|
|
4
4
|
import { initLogger, log } from "./logger.js";
|
|
5
|
+
import { fetchWithRetry } from "./http.js";
|
|
5
6
|
import { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.js";
|
|
6
7
|
import { SYSTEM_IDENTITY, transformBody, transformResponseStream, } from "./transforms.js";
|
|
7
|
-
import { getCachedCredentials, reloadCredentialsFromSource, getActiveAccount, syncAuthJson, initAccounts, setActiveAccountSource, loadPersistedAccountSource, saveAccountSource, refreshAccountsList, refreshIfNeeded, } from "./credentials.js";
|
|
8
|
+
import { getCachedCredentials, reloadCredentialsFromSource, forceRefreshActiveAccount, getActiveAccount, syncAuthJson, initAccounts, setActiveAccountSource, loadPersistedAccountSource, saveAccountSource, refreshAccountsList, refreshIfNeeded, } from "./credentials.js";
|
|
8
9
|
export { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.js";
|
|
9
10
|
export { resetExcludedBetas } from "./betas.js";
|
|
11
|
+
export { fetchWithRetry } from "./http.js";
|
|
10
12
|
export { stripToolPrefix, SYSTEM_IDENTITY, transformBody, transformResponseStream, } from "./transforms.js";
|
|
11
13
|
export { getCachedCredentials, syncAuthJson, refreshAccountsList, } from "./credentials.js";
|
|
12
14
|
export { buildBillingHeaderValue, computeCch, computeVersionSuffix, extractFirstUserMessageText, } from "./signing.js";
|
|
@@ -43,51 +45,6 @@ function buildRequestUrl(input) {
|
|
|
43
45
|
}
|
|
44
46
|
// Stable per-process session ID, matching Claude Code's X-Claude-Code-Session-Id
|
|
45
47
|
const sessionId = crypto.randomUUID();
|
|
46
|
-
// Maximum delay before we give up retrying and surface the error.
|
|
47
|
-
// A retry-after longer than this signals a quota/usage-limit reset (hours away)
|
|
48
|
-
// rather than a transient rate limit — retrying would hang indefinitely.
|
|
49
|
-
// Override with OPENCODE_CLAUDE_AUTH_MAX_RETRY_MS for longer retry windows.
|
|
50
|
-
const DEFAULT_MAX_RETRY_DELAY_MS = 30_000;
|
|
51
|
-
function getMaxRetryDelayMs() {
|
|
52
|
-
const env = process.env.OPENCODE_CLAUDE_AUTH_MAX_RETRY_MS;
|
|
53
|
-
if (env) {
|
|
54
|
-
const parsed = parseInt(env, 10);
|
|
55
|
-
if (!Number.isNaN(parsed) && parsed > 0)
|
|
56
|
-
return parsed;
|
|
57
|
-
}
|
|
58
|
-
return DEFAULT_MAX_RETRY_DELAY_MS;
|
|
59
|
-
}
|
|
60
|
-
export async function fetchWithRetry(input, init, retries = 3, fetchImpl = fetch) {
|
|
61
|
-
for (let i = 0; i < retries; i++) {
|
|
62
|
-
const res = await fetchImpl(input, init);
|
|
63
|
-
if ((res.status === 429 || res.status === 529) && i < retries - 1) {
|
|
64
|
-
const retryAfter = res.headers.get("retry-after");
|
|
65
|
-
const parsed = retryAfter ? parseInt(retryAfter, 10) : NaN;
|
|
66
|
-
const delay = Number.isNaN(parsed) ? (i + 1) * 2000 : parsed * 1000;
|
|
67
|
-
// If delay exceeds the cap, the server is signalling a quota/usage-limit
|
|
68
|
-
// reset far in the future. Return immediately so the error surfaces to
|
|
69
|
-
// the user rather than silently hanging until the reset time.
|
|
70
|
-
if (delay > getMaxRetryDelayMs()) {
|
|
71
|
-
log("fetch_rate_limited_quota", {
|
|
72
|
-
status: res.status,
|
|
73
|
-
retryAfter: retryAfter ?? "none",
|
|
74
|
-
delayMs: delay,
|
|
75
|
-
});
|
|
76
|
-
return res;
|
|
77
|
-
}
|
|
78
|
-
log("fetch_rate_limited", {
|
|
79
|
-
status: res.status,
|
|
80
|
-
attempt: i + 1,
|
|
81
|
-
retryAfter: retryAfter ?? "none",
|
|
82
|
-
delayMs: delay,
|
|
83
|
-
});
|
|
84
|
-
await new Promise((r) => setTimeout(r, delay));
|
|
85
|
-
continue;
|
|
86
|
-
}
|
|
87
|
-
return res;
|
|
88
|
-
}
|
|
89
|
-
return fetchImpl(input, init);
|
|
90
|
-
}
|
|
91
48
|
export function buildRequestHeaders(input, init, accessToken, modelId = "unknown", excludedBetas) {
|
|
92
49
|
const headers = new Headers();
|
|
93
50
|
if (input instanceof Request) {
|
|
@@ -166,7 +123,7 @@ const plugin = async () => {
|
|
|
166
123
|
sources: accounts.map((a) => a.source),
|
|
167
124
|
activeSource: defaultAccount.source,
|
|
168
125
|
});
|
|
169
|
-
const initialCreds = getCachedCredentials();
|
|
126
|
+
const initialCreds = await getCachedCredentials();
|
|
170
127
|
if (initialCreds) {
|
|
171
128
|
syncAuthJson(initialCreds);
|
|
172
129
|
}
|
|
@@ -183,7 +140,7 @@ const plugin = async () => {
|
|
|
183
140
|
// This prevents the "run `claude` to re-authenticate" message from
|
|
184
141
|
// appearing mid-session when the token silently expires.
|
|
185
142
|
let proactiveRefreshWarned = false;
|
|
186
|
-
const syncTimer = setInterval(() => {
|
|
143
|
+
const syncTimer = setInterval(async () => {
|
|
187
144
|
try {
|
|
188
145
|
const account = getActiveAccount();
|
|
189
146
|
log("proactive_refresh_check", {
|
|
@@ -191,7 +148,7 @@ const plugin = async () => {
|
|
|
191
148
|
expiresAt: account?.credentials?.expiresAt ?? null,
|
|
192
149
|
thresholdMs: PROACTIVE_REFRESH_THRESHOLD_MS,
|
|
193
150
|
});
|
|
194
|
-
const creds = refreshIfNeeded(undefined, PROACTIVE_REFRESH_THRESHOLD_MS);
|
|
151
|
+
const creds = await refreshIfNeeded(undefined, PROACTIVE_REFRESH_THRESHOLD_MS);
|
|
195
152
|
if (creds) {
|
|
196
153
|
syncAuthJson(creds);
|
|
197
154
|
if (proactiveRefreshWarned) {
|
|
@@ -255,7 +212,7 @@ const plugin = async () => {
|
|
|
255
212
|
apiKey: "",
|
|
256
213
|
baseURL: "https://api.anthropic.com/v1",
|
|
257
214
|
async fetch(input, init) {
|
|
258
|
-
const latest = getCachedCredentials();
|
|
215
|
+
const latest = await getCachedCredentials();
|
|
259
216
|
if (!latest) {
|
|
260
217
|
log("fetch_no_credentials", { modelId: "unknown" });
|
|
261
218
|
throw new Error("Claude Code credentials are unavailable or expired. Run `claude` to refresh them.");
|
|
@@ -300,25 +257,148 @@ const plugin = async () => {
|
|
|
300
257
|
modelId,
|
|
301
258
|
retryAttempt: 0,
|
|
302
259
|
});
|
|
303
|
-
//
|
|
304
|
-
//
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
260
|
+
// Recover from a rejected token: first by adopting credentials
|
|
261
|
+
// rotated externally (cswap switching accounts, the claude CLI,
|
|
262
|
+
// another OpenCode instance), then by forcing an OAuth refresh
|
|
263
|
+
// when the store still holds the token that was just rejected.
|
|
264
|
+
//
|
|
265
|
+
// Most cases resolve on the first attempt: a cold or unreadable
|
|
266
|
+
// store yields null from the reload (reloadCredentialsFromSource
|
|
267
|
+
// rejects anything expiring within 60s), so the force refresh runs
|
|
268
|
+
// immediately. The second attempt covers the narrower race where
|
|
269
|
+
// the reload returns a valid-looking token that a concurrent
|
|
270
|
+
// writer has itself just rotated again.
|
|
271
|
+
//
|
|
272
|
+
// The cap is the real bound. Against a store being rotated on
|
|
273
|
+
// every read, every candidate differs from tokenInUse, so the
|
|
274
|
+
// no-progress break never fires and the cap alone stops the loop.
|
|
275
|
+
// The break is the fast path out of the common cases, not the
|
|
276
|
+
// guarantee of termination.
|
|
277
|
+
//
|
|
278
|
+
// tokenInUse deliberately tracks only the last token tried rather
|
|
279
|
+
// than the set of all of them: a store cycling A->B->A wastes one
|
|
280
|
+
// request on the second attempt, which is a better trade than
|
|
281
|
+
// threading extra state through a loop whose whole virtue is a
|
|
282
|
+
// hard ceiling of three API calls.
|
|
283
|
+
const MAX_AUTH_RECOVERY_ATTEMPTS = 2;
|
|
284
|
+
let tokenInUse = latest.accessToken;
|
|
285
|
+
for (let attempt = 0; response.status === 401 && attempt < MAX_AUTH_RECOVERY_ATTEMPTS; attempt++) {
|
|
286
|
+
let candidate = null;
|
|
287
|
+
// reloadCredentialsFromSource already catches its own source
|
|
288
|
+
// read and returns null, so this is unreachable today. It stays
|
|
289
|
+
// because the guarantee worth keeping is that no reload failure
|
|
290
|
+
// turns a well-formed 401 into an exception thrown out of
|
|
291
|
+
// fetch() — degrading to the original response beats crashing
|
|
292
|
+
// the request. It logs so a future reload that does throw is
|
|
293
|
+
// diagnosable rather than silently null-coalesced.
|
|
308
294
|
try {
|
|
309
|
-
|
|
295
|
+
candidate = reloadCredentialsFromSource();
|
|
310
296
|
}
|
|
311
|
-
catch {
|
|
312
|
-
|
|
313
|
-
|
|
297
|
+
catch (err) {
|
|
298
|
+
log("auth_recovery_reload_threw", {
|
|
299
|
+
modelId,
|
|
300
|
+
attempt: attempt + 1,
|
|
301
|
+
error: err instanceof Error ? err.message : String(err),
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
if (!candidate || candidate.accessToken === tokenInUse) {
|
|
305
|
+
try {
|
|
306
|
+
candidate = await forceRefreshActiveAccount();
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
// A rejected refresh and a refresh that returned null are
|
|
310
|
+
// different operator-facing diagnoses; auth_recovery_
|
|
311
|
+
// exhausted below collapses them, so record this one here.
|
|
312
|
+
log("auth_recovery_force_refresh_threw", {
|
|
313
|
+
modelId,
|
|
314
|
+
attempt: attempt + 1,
|
|
315
|
+
error: err instanceof Error ? err.message : String(err),
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Re-checked, not copy-pasted: the guard above decides whether
|
|
320
|
+
// to force a refresh, this one decides whether that refresh
|
|
321
|
+
// actually produced a token worth retrying with.
|
|
322
|
+
if (!candidate || candidate.accessToken === tokenInUse) {
|
|
323
|
+
log("auth_recovery_exhausted", {
|
|
324
|
+
modelId,
|
|
325
|
+
attempt: attempt + 1,
|
|
326
|
+
});
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
tokenInUse = candidate.accessToken;
|
|
330
|
+
log("auth_recovery_retry", { modelId, attempt: attempt + 1 });
|
|
331
|
+
response = await fetchWithRetry(requestUrl, {
|
|
332
|
+
...requestInit,
|
|
333
|
+
body,
|
|
334
|
+
headers: buildRequestHeaders(input, requestInit, tokenInUse, modelId, excluded),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
// An external switch — cswap rotating off an exhausted account —
|
|
338
|
+
// leaves this session on the old token until the 30s credential
|
|
339
|
+
// cache expires. Re-read once so a rate limit that has already
|
|
340
|
+
// been resolved elsewhere is not surfaced. A changed token is the
|
|
341
|
+
// signal that a switch happened; when nothing changed this costs
|
|
342
|
+
// one source read and no retry.
|
|
343
|
+
//
|
|
344
|
+
// Ordered AFTER the 401 recovery loop, and that is a real
|
|
345
|
+
// dependency, not incidental sequencing: it must compare against
|
|
346
|
+
// the token the loop last tried, so a 401 recovered into a 429 is
|
|
347
|
+
// measured against the recovered token rather than the rejected
|
|
348
|
+
// one. Only half of this is compiler-enforced — hoisting the block
|
|
349
|
+
// above `let tokenInUse` is a TDZ error, but moving it between
|
|
350
|
+
// that declaration and the loop still compiles and still passes,
|
|
351
|
+
// while silently comparing against a stale token on the
|
|
352
|
+
// 401 -> retry -> 429 path.
|
|
353
|
+
//
|
|
354
|
+
// Ordered before the long-context beta loop deliberately. A
|
|
355
|
+
// long-context 429 is a header problem, not an account one, so it
|
|
356
|
+
// rotates no token and falls through here untouched. In the rare
|
|
357
|
+
// case a switch lands on the same 429, this spends one retry that
|
|
358
|
+
// comes back with the same long-context error and the beta loop
|
|
359
|
+
// then handles it off the fresh response — one wasted request,
|
|
360
|
+
// same outcome.
|
|
361
|
+
if (response.status === 429) {
|
|
362
|
+
let rotated = null;
|
|
363
|
+
// Unreachable today for the same reason as the 401 loop's
|
|
364
|
+
// reload catch: reloadCredentialsFromSource swallows its own
|
|
365
|
+
// source read and returns null. Kept, and logged, on the same
|
|
366
|
+
// grounds — no reload failure should turn a readable 429 into
|
|
367
|
+
// an exception thrown out of fetch(), and a future reload that
|
|
368
|
+
// does throw should be diagnosable rather than silently
|
|
369
|
+
// coalesced to "nothing rotated".
|
|
370
|
+
try {
|
|
371
|
+
rotated = reloadCredentialsFromSource();
|
|
372
|
+
}
|
|
373
|
+
catch (err) {
|
|
374
|
+
log("rate_limit_reload_threw", {
|
|
375
|
+
modelId,
|
|
376
|
+
error: err instanceof Error ? err.message : String(err),
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
if (rotated && rotated.accessToken !== tokenInUse) {
|
|
380
|
+
// Named for what was observed, not for what it implies. A
|
|
381
|
+
// changed token is not proof of an account switch: a routine
|
|
382
|
+
// refresh of this same exhausted account by another instance
|
|
383
|
+
// or the claude CLI changes the token too, and that retry hits
|
|
384
|
+
// the same quota. Accepted cost — one request — but the log
|
|
385
|
+
// must not tell a quota investigation "we switched accounts"
|
|
386
|
+
// when all it saw was a different token.
|
|
387
|
+
log("rate_limit_token_changed", { modelId });
|
|
388
|
+
tokenInUse = rotated.accessToken;
|
|
314
389
|
response = await fetchWithRetry(requestUrl, {
|
|
315
390
|
...requestInit,
|
|
316
391
|
body,
|
|
317
|
-
headers:
|
|
392
|
+
headers: buildRequestHeaders(input, requestInit, tokenInUse, modelId, excluded),
|
|
393
|
+
});
|
|
394
|
+
// Whether rotating resolved the limit is the question this
|
|
395
|
+
// whole block exists to answer, so record it outright rather
|
|
396
|
+
// than leaving success to be inferred from the absence of a
|
|
397
|
+
// fetch_error_response line.
|
|
398
|
+
log("rate_limit_retry_response", {
|
|
399
|
+
modelId,
|
|
400
|
+
status: response.status,
|
|
318
401
|
});
|
|
319
|
-
}
|
|
320
|
-
else {
|
|
321
|
-
preserveResponseUnchanged = true;
|
|
322
402
|
}
|
|
323
403
|
}
|
|
324
404
|
// Check for long-context beta errors and retry with betas excluded
|
|
@@ -342,8 +422,10 @@ const plugin = async () => {
|
|
|
342
422
|
excludedBeta: betaToExclude,
|
|
343
423
|
});
|
|
344
424
|
// Rebuild headers without the excluded beta and retry
|
|
345
|
-
|
|
346
|
-
|
|
425
|
+
// Falls back to tokenInUse, not latest: after a 401 recovery the
|
|
426
|
+
// latter is the token the API already rejected.
|
|
427
|
+
const currentCreds = await getCachedCredentials();
|
|
428
|
+
const retryToken = currentCreds?.accessToken ?? tokenInUse;
|
|
347
429
|
const newExcluded = getExcludedBetas(modelId);
|
|
348
430
|
const newHeaders = buildRequestHeaders(input, requestInit, retryToken, modelId, newExcluded);
|
|
349
431
|
response = await fetchWithRetry(requestUrl, {
|
|
@@ -370,7 +452,10 @@ const plugin = async () => {
|
|
|
370
452
|
})
|
|
371
453
|
.catch(() => { });
|
|
372
454
|
}
|
|
373
|
-
|
|
455
|
+
// A 401 that survived recovery carries an error body, not an SSE
|
|
456
|
+
// stream. Deciding here rather than from a flag set mid-flight
|
|
457
|
+
// makes the retried and non-retried paths behave identically.
|
|
458
|
+
return response.status === 401
|
|
374
459
|
? response
|
|
375
460
|
: transformResponseStream(response);
|
|
376
461
|
},
|
|
@@ -406,7 +491,7 @@ const plugin = async () => {
|
|
|
406
491
|
latestAccounts[0] ??
|
|
407
492
|
accounts[0];
|
|
408
493
|
setActiveAccountSource(chosen.source);
|
|
409
|
-
const creds = getCachedCredentials() ?? chosen.credentials;
|
|
494
|
+
const creds = (await getCachedCredentials()) ?? chosen.credentials;
|
|
410
495
|
syncAuthJson(creds);
|
|
411
496
|
saveAccountSource(chosen.source);
|
|
412
497
|
const sourceDescription = chosen.source === "file"
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/keychain.d.ts
CHANGED
|
@@ -22,6 +22,25 @@ export declare function updateCredentialBlob(existingJson: string, newCreds: {
|
|
|
22
22
|
refreshToken: string;
|
|
23
23
|
expiresAt: number;
|
|
24
24
|
}): string | null;
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Whether a stored credential blob still carries the access token we expect.
|
|
27
|
+
*
|
|
28
|
+
* Guards write-back against an external switch landing between the read that
|
|
29
|
+
* produced the token being refreshed and the write of its replacement. An
|
|
30
|
+
* unparseable blob returns false: a write into state we cannot identify is
|
|
31
|
+
* exactly what this is meant to prevent.
|
|
32
|
+
*
|
|
33
|
+
* Deliberately stricter than the write it guards: this validates through
|
|
34
|
+
* parseCredentials (field types, mcpOAuth-only rejection) while
|
|
35
|
+
* updateCredentialBlob rewrites anything JSON.parse accepts. So a blob the
|
|
36
|
+
* write path would happily update can still be refused here. That gap is
|
|
37
|
+
* intentional — reaching this guard means an earlier parseCredentials
|
|
38
|
+
* succeeded, so a blob that no longer parses changed shape after we read it
|
|
39
|
+
* (a truncated non-atomic external write, or a hand edit), and declining to
|
|
40
|
+
* write over it is correct. Anyone tightening parseCredentials should know it
|
|
41
|
+
* narrows write-back too, not just reads.
|
|
42
|
+
*/
|
|
43
|
+
export declare function credentialBlobMatches(raw: string, expectedAccessToken: string): boolean;
|
|
44
|
+
export declare function writeBackCredentials(source: string, creds: ClaudeCredentials, configDir?: string, expectedPriorAccessToken?: string): boolean;
|
|
26
45
|
export declare function refreshAccount(source: string, configDir?: string): ClaudeCredentials | null;
|
|
27
46
|
//# sourceMappingURL=keychain.d.ts.map
|
package/dist/keychain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,iBAAiB,CAAA;CAC/B;AAED,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAExD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAmDtE;AAkID,wBAAgB,mBAAmB,CACjC,SAAS,SAA8D,GACtE,iBAAiB,GAAG,IAAI,CAW1B;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAwCD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAcD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iBAAiB,EAAE,EAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC1B,MAAM,EAAE,CA4BV;AAED,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAgFvD;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,GAAG,IAAI,CAgBf;
|
|
1
|
+
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,iBAAiB,CAAA;CAC/B;AAED,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAExD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAmDtE;AAkID,wBAAgB,mBAAmB,CACjC,SAAS,SAA8D,GACtE,iBAAiB,GAAG,IAAI,CAW1B;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAwCD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAcD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,iBAAiB,EAAE,EAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAC1B,MAAM,EAAE,CA4BV;AAED,wBAAgB,qBAAqB,IAAI,aAAa,EAAE,CAgFvD;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,GAAG,IAAI,CAgBf;AAgCD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAGT;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,iBAAiB,EACxB,SAAS,CAAC,EAAE,MAAM,EAClB,wBAAwB,CAAC,EAAE,MAAM,GAChC,OAAO,CA8FT;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,iBAAiB,GAAG,IAAI,CAO1B"}
|
package/dist/keychain.js
CHANGED
|
@@ -340,7 +340,37 @@ function getKeychainAccountName(serviceName) {
|
|
|
340
340
|
return null;
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
|
-
|
|
343
|
+
/**
|
|
344
|
+
* A short, non-reversible tag for an access token, so write-back decisions
|
|
345
|
+
* can be correlated across log lines (and against another account's) without
|
|
346
|
+
* putting token material in the log.
|
|
347
|
+
*/
|
|
348
|
+
function tokenFingerprint(token) {
|
|
349
|
+
return createHash("sha256").update(token).digest("hex").slice(0, 8);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Whether a stored credential blob still carries the access token we expect.
|
|
353
|
+
*
|
|
354
|
+
* Guards write-back against an external switch landing between the read that
|
|
355
|
+
* produced the token being refreshed and the write of its replacement. An
|
|
356
|
+
* unparseable blob returns false: a write into state we cannot identify is
|
|
357
|
+
* exactly what this is meant to prevent.
|
|
358
|
+
*
|
|
359
|
+
* Deliberately stricter than the write it guards: this validates through
|
|
360
|
+
* parseCredentials (field types, mcpOAuth-only rejection) while
|
|
361
|
+
* updateCredentialBlob rewrites anything JSON.parse accepts. So a blob the
|
|
362
|
+
* write path would happily update can still be refused here. That gap is
|
|
363
|
+
* intentional — reaching this guard means an earlier parseCredentials
|
|
364
|
+
* succeeded, so a blob that no longer parses changed shape after we read it
|
|
365
|
+
* (a truncated non-atomic external write, or a hand edit), and declining to
|
|
366
|
+
* write over it is correct. Anyone tightening parseCredentials should know it
|
|
367
|
+
* narrows write-back too, not just reads.
|
|
368
|
+
*/
|
|
369
|
+
export function credentialBlobMatches(raw, expectedAccessToken) {
|
|
370
|
+
const parsed = parseCredentials(raw);
|
|
371
|
+
return parsed?.accessToken === expectedAccessToken;
|
|
372
|
+
}
|
|
373
|
+
export function writeBackCredentials(source, creds, configDir, expectedPriorAccessToken) {
|
|
344
374
|
const newCreds = {
|
|
345
375
|
accessToken: creds.accessToken,
|
|
346
376
|
refreshToken: creds.refreshToken,
|
|
@@ -351,6 +381,25 @@ export function writeBackCredentials(source, creds, configDir) {
|
|
|
351
381
|
const dir = configDir ?? process.env.CLAUDE_CONFIG_DIR ?? join(homedir(), ".claude");
|
|
352
382
|
const credPath = join(dir, ".credentials.json");
|
|
353
383
|
const raw = readFileSync(credPath, "utf-8");
|
|
384
|
+
if (expectedPriorAccessToken !== undefined &&
|
|
385
|
+
!credentialBlobMatches(raw, expectedPriorAccessToken)) {
|
|
386
|
+
// Two operationally opposite causes: another account legitimately
|
|
387
|
+
// holds the slot (benign, no action) versus a blob we cannot read at
|
|
388
|
+
// all (corruption, needs a human). Same refusal, different events.
|
|
389
|
+
const stored = parseCredentials(raw);
|
|
390
|
+
if (stored === null) {
|
|
391
|
+
log("writeback_skipped_unparseable", { source, configDir: dir });
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
log("writeback_skipped_stale", {
|
|
395
|
+
source,
|
|
396
|
+
configDir: dir,
|
|
397
|
+
expected: tokenFingerprint(expectedPriorAccessToken),
|
|
398
|
+
stored: tokenFingerprint(stored.accessToken),
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return false;
|
|
402
|
+
}
|
|
354
403
|
const updated = updateCredentialBlob(raw, newCreds);
|
|
355
404
|
if (!updated)
|
|
356
405
|
return false;
|
|
@@ -371,6 +420,22 @@ export function writeBackCredentials(source, creds, configDir) {
|
|
|
371
420
|
const raw = readKeychainService(source);
|
|
372
421
|
if (!raw)
|
|
373
422
|
return false;
|
|
423
|
+
if (expectedPriorAccessToken !== undefined &&
|
|
424
|
+
!credentialBlobMatches(raw, expectedPriorAccessToken)) {
|
|
425
|
+
// See the file branch: a mismatch is expected, an unreadable blob is not.
|
|
426
|
+
const stored = parseCredentials(raw);
|
|
427
|
+
if (stored === null) {
|
|
428
|
+
log("writeback_skipped_unparseable", { source });
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
log("writeback_skipped_stale", {
|
|
432
|
+
source,
|
|
433
|
+
expected: tokenFingerprint(expectedPriorAccessToken),
|
|
434
|
+
stored: tokenFingerprint(stored.accessToken),
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
return false;
|
|
438
|
+
}
|
|
374
439
|
const updated = updateCredentialBlob(raw, newCreds);
|
|
375
440
|
if (!updated)
|
|
376
441
|
return false;
|