@hypeitnow/opencode-claude-auth 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/dist/anthropic-prompt.txt +166 -0
- package/dist/betas.d.ts +9 -0
- package/dist/betas.d.ts.map +1 -0
- package/dist/betas.js +102 -0
- package/dist/betas.js.map +1 -0
- package/dist/credentials.d.ts +29 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +313 -0
- package/dist/credentials.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +495 -0
- package/dist/index.js.map +1 -0
- package/dist/keychain.d.ts +23 -0
- package/dist/keychain.d.ts.map +1 -0
- package/dist/keychain.js +365 -0
- package/dist/keychain.js.map +1 -0
- package/dist/logger.d.ts +8 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +74 -0
- package/dist/logger.js.map +1 -0
- package/dist/model-config.d.ts +22 -0
- package/dist/model-config.d.ts.map +1 -0
- package/dist/model-config.js +44 -0
- package/dist/model-config.js.map +1 -0
- package/dist/oauth.d.ts +31 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +158 -0
- package/dist/oauth.js.map +1 -0
- package/dist/pkce.d.ts +6 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +23 -0
- package/dist/pkce.js.map +1 -0
- package/dist/plugin-config.d.ts +45 -0
- package/dist/plugin-config.d.ts.map +1 -0
- package/dist/plugin-config.js +66 -0
- package/dist/plugin-config.js.map +1 -0
- package/dist/signing.d.ts +31 -0
- package/dist/signing.d.ts.map +1 -0
- package/dist/signing.js +55 -0
- package/dist/signing.js.map +1 -0
- package/dist/transforms.d.ts +14 -0
- package/dist/transforms.d.ts.map +1 -0
- package/dist/transforms.js +271 -0
- package/dist/transforms.js.map +1 -0
- package/installation.md +98 -0
- package/opencode-claude-auth.js +2 -0
- package/package.json +79 -0
package/dist/keychain.js
ADDED
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { execFileSync, execSync } from "node:child_process";
|
|
2
|
+
import { chmodSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { log } from "./logger.js";
|
|
6
|
+
const PRIMARY_SERVICE = "Claude Code-credentials";
|
|
7
|
+
const RAW_KEY_SERVICE = "Claude Code";
|
|
8
|
+
// Long-lived credentials synthesised from a raw `sk-ant-api03-...` API key in the
|
|
9
|
+
// macOS Keychain have no embedded expiry or refresh token. We treat them as
|
|
10
|
+
// valid for 1 year from first read, which matches the observed lifetime of
|
|
11
|
+
// Anthropic-issued console API keys. The token is only rotated by the user
|
|
12
|
+
// re-running `claude` (or manually editing the Keychain entry), so the next
|
|
13
|
+
// keychain read will pick up the new value.
|
|
14
|
+
const RAW_KEY_DEFAULT_TTL_MS = 365 * 24 * 60 * 60 * 1000;
|
|
15
|
+
function parseRawApiKey(raw) {
|
|
16
|
+
const trimmed = raw.trim();
|
|
17
|
+
if (!trimmed)
|
|
18
|
+
return null;
|
|
19
|
+
if (!trimmed.startsWith("sk-ant-"))
|
|
20
|
+
return null;
|
|
21
|
+
return {
|
|
22
|
+
accessToken: trimmed,
|
|
23
|
+
refreshToken: "",
|
|
24
|
+
expiresAt: Date.now() + RAW_KEY_DEFAULT_TTL_MS,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function parseCredentials(raw) {
|
|
28
|
+
let parsed;
|
|
29
|
+
let parsedAsJson = true;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(raw);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
parsedAsJson = false;
|
|
35
|
+
parsed = null;
|
|
36
|
+
}
|
|
37
|
+
// Raw API keys in the `Claude Code` Keychain service are not wrapped in JSON.
|
|
38
|
+
// They are issued by the Anthropic console and are long-lived (no refresh
|
|
39
|
+
// token, no expiry). See `parseRawApiKey` for the exact format.
|
|
40
|
+
if (!parsedAsJson) {
|
|
41
|
+
const rawKey = parseRawApiKey(raw);
|
|
42
|
+
if (rawKey) {
|
|
43
|
+
log("credentials_parsed", {
|
|
44
|
+
format: "raw_api_key",
|
|
45
|
+
hasAccessToken: true,
|
|
46
|
+
hasRefreshToken: false,
|
|
47
|
+
hasExpiry: true,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
log("credentials_parsed", {
|
|
52
|
+
format: "unrecognised",
|
|
53
|
+
hasAccessToken: false,
|
|
54
|
+
hasRefreshToken: false,
|
|
55
|
+
hasExpiry: false,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return rawKey;
|
|
59
|
+
}
|
|
60
|
+
const data = parsed.claudeAiOauth ?? parsed;
|
|
61
|
+
const creds = data;
|
|
62
|
+
// Entries that only contain mcpOAuth are MCP server credentials, not user accounts
|
|
63
|
+
if (parsed.mcpOAuth && !creds.accessToken) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (typeof creds.accessToken !== "string" ||
|
|
67
|
+
typeof creds.refreshToken !== "string" ||
|
|
68
|
+
typeof creds.expiresAt !== "number") {
|
|
69
|
+
log("credentials_parsed", {
|
|
70
|
+
hasAccessToken: typeof creds.accessToken === "string",
|
|
71
|
+
hasRefreshToken: typeof creds.refreshToken === "string",
|
|
72
|
+
hasExpiry: typeof creds.expiresAt === "number",
|
|
73
|
+
isMcpOnly: false,
|
|
74
|
+
});
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
log("credentials_parsed", {
|
|
78
|
+
hasAccessToken: true,
|
|
79
|
+
hasRefreshToken: true,
|
|
80
|
+
hasExpiry: true,
|
|
81
|
+
isMcpOnly: false,
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
accessToken: creds.accessToken,
|
|
85
|
+
refreshToken: creds.refreshToken,
|
|
86
|
+
expiresAt: creds.expiresAt,
|
|
87
|
+
subscriptionType: typeof creds.subscriptionType === "string"
|
|
88
|
+
? creds.subscriptionType
|
|
89
|
+
: undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function readKeychainService(serviceName) {
|
|
93
|
+
try {
|
|
94
|
+
const result = execSync(`security find-generic-password -s "${serviceName}" -w`, {
|
|
95
|
+
timeout: 2000,
|
|
96
|
+
encoding: "utf-8",
|
|
97
|
+
}).trim();
|
|
98
|
+
log("keychain_read", { service: serviceName, success: true });
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
const error = err;
|
|
103
|
+
if (error.killed || error.code === "ETIMEDOUT") {
|
|
104
|
+
log("keychain_read_error", {
|
|
105
|
+
service: serviceName,
|
|
106
|
+
errorType: "timeout",
|
|
107
|
+
});
|
|
108
|
+
throw new Error("Keychain read timed out. This can happen on macOS Tahoe. Try restarting Keychain Access.", { cause: err });
|
|
109
|
+
}
|
|
110
|
+
if (error.status === 36) {
|
|
111
|
+
log("keychain_read_error", {
|
|
112
|
+
service: serviceName,
|
|
113
|
+
errorType: "locked",
|
|
114
|
+
});
|
|
115
|
+
throw new Error("macOS Keychain is locked. Please unlock it or run: security unlock-keychain ~/Library/Keychains/login.keychain-db", { cause: err });
|
|
116
|
+
}
|
|
117
|
+
if (error.status === 128) {
|
|
118
|
+
log("keychain_read_error", {
|
|
119
|
+
service: serviceName,
|
|
120
|
+
errorType: "denied",
|
|
121
|
+
});
|
|
122
|
+
throw new Error("Keychain access was denied. Please grant access when prompted by macOS.", { cause: err });
|
|
123
|
+
}
|
|
124
|
+
if (error.status === 44) {
|
|
125
|
+
log("keychain_read_error", {
|
|
126
|
+
service: serviceName,
|
|
127
|
+
errorType: "not_found",
|
|
128
|
+
});
|
|
129
|
+
return null; // item not found
|
|
130
|
+
}
|
|
131
|
+
log("keychain_read_error", {
|
|
132
|
+
service: serviceName,
|
|
133
|
+
errorType: `exit_${error.status ?? "unknown"}`,
|
|
134
|
+
});
|
|
135
|
+
throw new Error(`Failed to read Keychain entry "${serviceName}" (exit ${error.status ?? "unknown"}). Try re-authenticating with Claude Code.`, { cause: err });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function listClaudeKeychainServices() {
|
|
139
|
+
try {
|
|
140
|
+
const dump = execSync("security dump-keychain", {
|
|
141
|
+
timeout: 5000,
|
|
142
|
+
maxBuffer: 1024 * 1024 * 10, // 10 MB
|
|
143
|
+
encoding: "utf-8",
|
|
144
|
+
});
|
|
145
|
+
const services = [];
|
|
146
|
+
const seen = new Set();
|
|
147
|
+
// OAuth credentials live under `Claude Code-credentials` (with optional
|
|
148
|
+
// hex suffix for multi-account setups). Match exact and suffixed names
|
|
149
|
+
// only — uppercase hex or word suffixes are intentionally rejected.
|
|
150
|
+
const oauthRe = /"Claude Code-credentials(?:-[0-9a-f]+)?"/g;
|
|
151
|
+
let m = oauthRe.exec(dump);
|
|
152
|
+
while (m !== null) {
|
|
153
|
+
const svc = m[0].slice(1, -1);
|
|
154
|
+
if (!seen.has(svc)) {
|
|
155
|
+
seen.add(svc);
|
|
156
|
+
services.push(svc);
|
|
157
|
+
}
|
|
158
|
+
m = oauthRe.exec(dump);
|
|
159
|
+
}
|
|
160
|
+
// Raw API keys (e.g. `sk-ant-api03-...`) issued by `claude` live under
|
|
161
|
+
// the bare `Claude Code` service. Some claude CLI versions also stash
|
|
162
|
+
// additional metadata here, so we attempt to parse it on the read path.
|
|
163
|
+
if (!seen.has(RAW_KEY_SERVICE)) {
|
|
164
|
+
const rawKeyRe = new RegExp(`"${RAW_KEY_SERVICE}"`, "g");
|
|
165
|
+
if (rawKeyRe.test(dump)) {
|
|
166
|
+
seen.add(RAW_KEY_SERVICE);
|
|
167
|
+
services.push(RAW_KEY_SERVICE);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const ordered = [];
|
|
171
|
+
if (seen.has(PRIMARY_SERVICE))
|
|
172
|
+
ordered.push(PRIMARY_SERVICE);
|
|
173
|
+
for (const svc of services) {
|
|
174
|
+
if (svc !== PRIMARY_SERVICE)
|
|
175
|
+
ordered.push(svc);
|
|
176
|
+
}
|
|
177
|
+
log("keychain_list", { servicesFound: ordered });
|
|
178
|
+
return ordered;
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
log("keychain_list", {
|
|
182
|
+
error: "Failed to list keychain services",
|
|
183
|
+
message: err instanceof Error ? err.message : String(err),
|
|
184
|
+
});
|
|
185
|
+
return [PRIMARY_SERVICE, RAW_KEY_SERVICE];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function readCredentialsFile() {
|
|
189
|
+
try {
|
|
190
|
+
const credPath = join(homedir(), ".claude", ".credentials.json");
|
|
191
|
+
const raw = readFileSync(credPath, "utf-8");
|
|
192
|
+
const creds = parseCredentials(raw);
|
|
193
|
+
log("credentials_file_read", { success: creds !== null });
|
|
194
|
+
return creds;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
log("credentials_file_read", { success: false });
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export function buildAccountLabels(credsList) {
|
|
202
|
+
const baseLabels = credsList.map((c) => {
|
|
203
|
+
if (c.subscriptionType) {
|
|
204
|
+
const tier = c.subscriptionType.charAt(0).toUpperCase() + c.subscriptionType.slice(1);
|
|
205
|
+
return `Claude ${tier}`;
|
|
206
|
+
}
|
|
207
|
+
return "Claude";
|
|
208
|
+
});
|
|
209
|
+
const counts = new Map();
|
|
210
|
+
for (const l of baseLabels)
|
|
211
|
+
counts.set(l, (counts.get(l) ?? 0) + 1);
|
|
212
|
+
const seen = new Map();
|
|
213
|
+
return baseLabels.map((base) => {
|
|
214
|
+
if ((counts.get(base) ?? 0) <= 1)
|
|
215
|
+
return base;
|
|
216
|
+
const n = (seen.get(base) ?? 0) + 1;
|
|
217
|
+
seen.set(base, n);
|
|
218
|
+
return `${base} ${n}`;
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
export function readAllClaudeAccounts() {
|
|
222
|
+
if (process.platform !== "darwin") {
|
|
223
|
+
const creds = readCredentialsFile();
|
|
224
|
+
if (!creds)
|
|
225
|
+
return [];
|
|
226
|
+
const [label] = buildAccountLabels([creds]);
|
|
227
|
+
return [{ label, source: "file", credentials: creds }];
|
|
228
|
+
}
|
|
229
|
+
const services = listClaudeKeychainServices();
|
|
230
|
+
const rawAccounts = [];
|
|
231
|
+
for (const svc of services) {
|
|
232
|
+
const raw = readKeychainService(svc);
|
|
233
|
+
if (!raw)
|
|
234
|
+
continue;
|
|
235
|
+
const creds = parseCredentials(raw);
|
|
236
|
+
if (!creds)
|
|
237
|
+
continue;
|
|
238
|
+
rawAccounts.push({ source: svc, credentials: creds });
|
|
239
|
+
}
|
|
240
|
+
if (rawAccounts.length === 0) {
|
|
241
|
+
const creds = readCredentialsFile();
|
|
242
|
+
if (creds)
|
|
243
|
+
rawAccounts.push({ source: "file", credentials: creds });
|
|
244
|
+
}
|
|
245
|
+
const labels = buildAccountLabels(rawAccounts.map((a) => a.credentials));
|
|
246
|
+
return rawAccounts.map((a, i) => ({
|
|
247
|
+
label: labels[i],
|
|
248
|
+
source: a.source,
|
|
249
|
+
credentials: a.credentials,
|
|
250
|
+
}));
|
|
251
|
+
}
|
|
252
|
+
export function updateCredentialBlob(existingJson, newCreds) {
|
|
253
|
+
let parsed;
|
|
254
|
+
try {
|
|
255
|
+
parsed = JSON.parse(existingJson);
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
const wrapper = parsed.claudeAiOauth;
|
|
261
|
+
const target = wrapper ?? parsed;
|
|
262
|
+
target.accessToken = newCreds.accessToken;
|
|
263
|
+
target.refreshToken = newCreds.refreshToken;
|
|
264
|
+
target.expiresAt = newCreds.expiresAt;
|
|
265
|
+
return JSON.stringify(parsed);
|
|
266
|
+
}
|
|
267
|
+
function getKeychainAccountName(serviceName) {
|
|
268
|
+
try {
|
|
269
|
+
const output = execFileSync("/usr/bin/security", ["find-generic-password", "-s", serviceName], { timeout: 2000, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
270
|
+
const match = /"acct"<blob>="([^"]*)"/.exec(output);
|
|
271
|
+
if (match) {
|
|
272
|
+
log("keychain_account_name", {
|
|
273
|
+
service: serviceName,
|
|
274
|
+
account: match[1],
|
|
275
|
+
});
|
|
276
|
+
return match[1];
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
export function writeBackCredentials(source, creds) {
|
|
285
|
+
const newCreds = {
|
|
286
|
+
accessToken: creds.accessToken,
|
|
287
|
+
refreshToken: creds.refreshToken,
|
|
288
|
+
expiresAt: creds.expiresAt,
|
|
289
|
+
};
|
|
290
|
+
// The `Claude Code` Keychain service stores a raw `sk-ant-api03-...` API
|
|
291
|
+
// key, not a JSON OAuth blob. There is no refresh-token rotation to
|
|
292
|
+
// perform — the user has to regenerate the key out-of-band via `claude` or
|
|
293
|
+
// the Anthropic console — so writeback is intentionally a no-op for this
|
|
294
|
+
// source. A future `security add-generic-password` call would silently
|
|
295
|
+
// overwrite the user's real key with a JSON blob and break auth.
|
|
296
|
+
if (source === RAW_KEY_SERVICE) {
|
|
297
|
+
log("writeback_skipped", { source, reason: "raw_api_key" });
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
if (source === "file") {
|
|
301
|
+
try {
|
|
302
|
+
const credPath = join(homedir(), ".claude", ".credentials.json");
|
|
303
|
+
const raw = readFileSync(credPath, "utf-8");
|
|
304
|
+
const updated = updateCredentialBlob(raw, newCreds);
|
|
305
|
+
if (!updated)
|
|
306
|
+
return false;
|
|
307
|
+
writeFileSync(credPath, updated, { encoding: "utf-8", mode: 0o600 });
|
|
308
|
+
if (process.platform !== "win32") {
|
|
309
|
+
chmodSync(credPath, 0o600);
|
|
310
|
+
}
|
|
311
|
+
log("writeback_success", { source });
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
log("writeback_failed", { source });
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (process.platform === "darwin") {
|
|
320
|
+
try {
|
|
321
|
+
const raw = readKeychainService(source);
|
|
322
|
+
if (!raw)
|
|
323
|
+
return false;
|
|
324
|
+
const updated = updateCredentialBlob(raw, newCreds);
|
|
325
|
+
if (!updated)
|
|
326
|
+
return false;
|
|
327
|
+
// Discover the actual account name from the existing Keychain entry.
|
|
328
|
+
// Claude CLI uses the macOS username (e.g. "gmartin"), not the service name.
|
|
329
|
+
// Using the wrong account name creates a duplicate entry instead of updating.
|
|
330
|
+
const accountName = getKeychainAccountName(source) ?? source;
|
|
331
|
+
execFileSync("/usr/bin/security", [
|
|
332
|
+
"add-generic-password",
|
|
333
|
+
"-s",
|
|
334
|
+
source,
|
|
335
|
+
"-a",
|
|
336
|
+
accountName,
|
|
337
|
+
"-w",
|
|
338
|
+
updated,
|
|
339
|
+
"-U",
|
|
340
|
+
], { timeout: 2000, stdio: "ignore" });
|
|
341
|
+
log("writeback_success", { source, accountName });
|
|
342
|
+
return true;
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
log("writeback_failed", { source });
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
export function refreshAccount(source) {
|
|
352
|
+
if (source === "file") {
|
|
353
|
+
return readCredentialsFile();
|
|
354
|
+
}
|
|
355
|
+
const raw = readKeychainService(source);
|
|
356
|
+
if (!raw)
|
|
357
|
+
return null;
|
|
358
|
+
return parseCredentials(raw);
|
|
359
|
+
}
|
|
360
|
+
/** @deprecated Use readAllClaudeAccounts() instead */
|
|
361
|
+
export function readClaudeCredentials() {
|
|
362
|
+
const accounts = readAllClaudeAccounts();
|
|
363
|
+
return accounts.length > 0 ? accounts[0].credentials : null;
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=keychain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Writable } from "node:stream";
|
|
2
|
+
export declare function initLogger(options?: {
|
|
3
|
+
stream?: Writable;
|
|
4
|
+
}): void;
|
|
5
|
+
export declare function log(event: string, data?: Record<string, unknown>): void;
|
|
6
|
+
export declare function closeLogger(): void;
|
|
7
|
+
export declare function redact(data: Record<string, unknown>): Record<string, unknown>;
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAc3C,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,CAAA;CAAE,GAAG,IAAI,CAuBhE;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAevE;AAED,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAqBD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM7E"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
const JWT_PATTERN = /^eyJ[A-Za-z0-9_-]{10,}/;
|
|
5
|
+
let mode = "disabled";
|
|
6
|
+
let logFilePath = null;
|
|
7
|
+
let logStream = null;
|
|
8
|
+
function getDefaultLogPath() {
|
|
9
|
+
return join(homedir(), ".local", "share", "opencode", "claude-auth-debug.log");
|
|
10
|
+
}
|
|
11
|
+
export function initLogger(options) {
|
|
12
|
+
closeLogger();
|
|
13
|
+
if (options?.stream) {
|
|
14
|
+
mode = "stream";
|
|
15
|
+
logStream = options.stream;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const envVal = process.env.CLAUDE_AUTH_DEBUG;
|
|
19
|
+
if (!envVal) {
|
|
20
|
+
mode = "disabled";
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
mode = "file";
|
|
24
|
+
logFilePath = envVal === "1" ? getDefaultLogPath() : envVal;
|
|
25
|
+
const dir = dirname(logFilePath);
|
|
26
|
+
if (!existsSync(dir)) {
|
|
27
|
+
mkdirSync(dir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
writeFileSync(logFilePath, "", "utf-8");
|
|
30
|
+
}
|
|
31
|
+
export function log(event, data) {
|
|
32
|
+
if (mode === "disabled")
|
|
33
|
+
return;
|
|
34
|
+
const entry = {
|
|
35
|
+
ts: new Date().toISOString(),
|
|
36
|
+
event,
|
|
37
|
+
...redact(data ?? {}),
|
|
38
|
+
};
|
|
39
|
+
const line = JSON.stringify(entry) + "\n";
|
|
40
|
+
if (mode === "file" && logFilePath) {
|
|
41
|
+
appendFileSync(logFilePath, line, "utf-8");
|
|
42
|
+
}
|
|
43
|
+
else if (mode === "stream" && logStream) {
|
|
44
|
+
logStream.write(line);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function closeLogger() {
|
|
48
|
+
mode = "disabled";
|
|
49
|
+
logFilePath = null;
|
|
50
|
+
logStream = null;
|
|
51
|
+
}
|
|
52
|
+
function redactValue(key, value) {
|
|
53
|
+
if (typeof value !== "string")
|
|
54
|
+
return value;
|
|
55
|
+
if (key === "refreshToken" || key === "x-api-key") {
|
|
56
|
+
return "REDACTED";
|
|
57
|
+
}
|
|
58
|
+
if (key === "accessToken") {
|
|
59
|
+
const prefix = value.slice(0, 8);
|
|
60
|
+
return `${prefix}...REDACTED`;
|
|
61
|
+
}
|
|
62
|
+
if (JWT_PATTERN.test(value)) {
|
|
63
|
+
return `${value.slice(0, 8)}...REDACTED`;
|
|
64
|
+
}
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
export function redact(data) {
|
|
68
|
+
const result = {};
|
|
69
|
+
for (const [key, value] of Object.entries(data)) {
|
|
70
|
+
result[key] = redactValue(key, value);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ModelOverride {
|
|
2
|
+
exclude?: string[];
|
|
3
|
+
add?: string[];
|
|
4
|
+
disableEffort?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ModelConfig {
|
|
7
|
+
ccVersion: string;
|
|
8
|
+
baseBetas: string[];
|
|
9
|
+
longContextBetas: string[];
|
|
10
|
+
modelOverrides: Record<string, ModelOverride>;
|
|
11
|
+
}
|
|
12
|
+
export declare const config: ModelConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Find the override entry matching a model ID.
|
|
15
|
+
* Keys are matched via includes() against the lowercased model ID.
|
|
16
|
+
*
|
|
17
|
+
* First-match-wins: if multiple keys match, only the first (by insertion
|
|
18
|
+
* order) is returned. List more specific keys before broader ones
|
|
19
|
+
* (e.g. "opus-4-6" before "opus") so they take priority.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getModelOverride(modelId: string): ModelOverride | null;
|
|
22
|
+
//# sourceMappingURL=model-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-config.d.ts","sourceRoot":"","sources":["../src/model-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CAC9C;AAED,eAAO,MAAM,MAAM,EAAE,WA0BpB,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMtE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const config = {
|
|
2
|
+
ccVersion: "2.1.112",
|
|
3
|
+
baseBetas: [
|
|
4
|
+
"claude-code-20250219",
|
|
5
|
+
"oauth-2025-04-20",
|
|
6
|
+
"interleaved-thinking-2025-05-14",
|
|
7
|
+
"prompt-caching-scope-2026-01-05",
|
|
8
|
+
"context-management-2025-06-27",
|
|
9
|
+
"advisor-tool-2026-03-01",
|
|
10
|
+
],
|
|
11
|
+
longContextBetas: [
|
|
12
|
+
"context-1m-2025-08-07",
|
|
13
|
+
"interleaved-thinking-2025-05-14",
|
|
14
|
+
],
|
|
15
|
+
modelOverrides: {
|
|
16
|
+
haiku: {
|
|
17
|
+
exclude: ["interleaved-thinking-2025-05-14"],
|
|
18
|
+
disableEffort: true,
|
|
19
|
+
},
|
|
20
|
+
"4-6": {
|
|
21
|
+
add: ["effort-2025-11-24"],
|
|
22
|
+
},
|
|
23
|
+
"4-7": {
|
|
24
|
+
add: ["effort-2025-11-24"],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Find the override entry matching a model ID.
|
|
30
|
+
* Keys are matched via includes() against the lowercased model ID.
|
|
31
|
+
*
|
|
32
|
+
* First-match-wins: if multiple keys match, only the first (by insertion
|
|
33
|
+
* order) is returned. List more specific keys before broader ones
|
|
34
|
+
* (e.g. "opus-4-6" before "opus") so they take priority.
|
|
35
|
+
*/
|
|
36
|
+
export function getModelOverride(modelId) {
|
|
37
|
+
const lower = modelId.toLowerCase();
|
|
38
|
+
for (const [pattern, override] of Object.entries(config.modelOverrides)) {
|
|
39
|
+
if (lower.includes(pattern))
|
|
40
|
+
return override;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=model-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-config.js","sourceRoot":"","sources":["../src/model-config.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,MAAM,GAAgB;IACjC,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE;QACT,sBAAsB;QACtB,kBAAkB;QAClB,iCAAiC;QACjC,iCAAiC;QACjC,+BAA+B;QAC/B,yBAAyB;KAC1B;IACD,gBAAgB,EAAE;QAChB,uBAAuB;QACvB,iCAAiC;KAClC;IACD,cAAc,EAAE;QACd,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,iCAAiC,CAAC;YAC5C,aAAa,EAAE,IAAI;SACpB;QACD,KAAK,EAAE;YACL,GAAG,EAAE,CAAC,mBAAmB,CAAC;SAC3B;QACD,KAAK,EAAE;YACL,GAAG,EAAE,CAAC,mBAAmB,CAAC;SAC3B;KACF;CACF,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,QAAQ,CAAA;IAC9C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
2
|
+
declare const AUTHORIZE_URLS: {
|
|
3
|
+
readonly console: "https://platform.claude.com/oauth/authorize";
|
|
4
|
+
readonly max: "https://claude.ai/oauth/authorize";
|
|
5
|
+
};
|
|
6
|
+
export type AuthorizeMode = keyof typeof AUTHORIZE_URLS;
|
|
7
|
+
export type AuthResult = {
|
|
8
|
+
type: "success";
|
|
9
|
+
access: string;
|
|
10
|
+
refresh: string;
|
|
11
|
+
expires: number;
|
|
12
|
+
} | {
|
|
13
|
+
type: "failed";
|
|
14
|
+
};
|
|
15
|
+
export declare function exchangeCode(callback: {
|
|
16
|
+
code: string;
|
|
17
|
+
state: string;
|
|
18
|
+
}, verifier: string, redirectUri: string, expectedState?: string): Promise<AuthResult>;
|
|
19
|
+
export declare function refreshTokens(refresh: string): Promise<AuthResult>;
|
|
20
|
+
export declare function buildAuthorizationUrl(mode?: AuthorizeMode): Promise<{
|
|
21
|
+
url: string;
|
|
22
|
+
verifier: string;
|
|
23
|
+
state: string;
|
|
24
|
+
redirectUri: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare function parseCallback(input: string): {
|
|
27
|
+
code: string;
|
|
28
|
+
state: string;
|
|
29
|
+
} | null;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,SAAS,yCAAyC,CAAA;AAC/D,QAAA,MAAM,cAAc;;;CAGV,CAAA;AAYV,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,cAAc,CAAA;AACvD,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AA2BtB,wBAAsB,YAAY,CAChC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACzC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,UAAU,CAAC,CA4CrB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqCxE;AAED,wBAAsB,qBAAqB,CACzC,IAAI,GAAE,aAAyB,GAC9B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBhF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEnF"}
|