@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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/anthropic-prompt.txt +166 -0
  4. package/dist/betas.d.ts +9 -0
  5. package/dist/betas.d.ts.map +1 -0
  6. package/dist/betas.js +102 -0
  7. package/dist/betas.js.map +1 -0
  8. package/dist/credentials.d.ts +29 -0
  9. package/dist/credentials.d.ts.map +1 -0
  10. package/dist/credentials.js +313 -0
  11. package/dist/credentials.js.map +1 -0
  12. package/dist/index.d.ts +14 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +495 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/keychain.d.ts +23 -0
  17. package/dist/keychain.d.ts.map +1 -0
  18. package/dist/keychain.js +365 -0
  19. package/dist/keychain.js.map +1 -0
  20. package/dist/logger.d.ts +8 -0
  21. package/dist/logger.d.ts.map +1 -0
  22. package/dist/logger.js +74 -0
  23. package/dist/logger.js.map +1 -0
  24. package/dist/model-config.d.ts +22 -0
  25. package/dist/model-config.d.ts.map +1 -0
  26. package/dist/model-config.js +44 -0
  27. package/dist/model-config.js.map +1 -0
  28. package/dist/oauth.d.ts +31 -0
  29. package/dist/oauth.d.ts.map +1 -0
  30. package/dist/oauth.js +158 -0
  31. package/dist/oauth.js.map +1 -0
  32. package/dist/pkce.d.ts +6 -0
  33. package/dist/pkce.d.ts.map +1 -0
  34. package/dist/pkce.js +23 -0
  35. package/dist/pkce.js.map +1 -0
  36. package/dist/plugin-config.d.ts +45 -0
  37. package/dist/plugin-config.d.ts.map +1 -0
  38. package/dist/plugin-config.js +66 -0
  39. package/dist/plugin-config.js.map +1 -0
  40. package/dist/signing.d.ts +31 -0
  41. package/dist/signing.d.ts.map +1 -0
  42. package/dist/signing.js +55 -0
  43. package/dist/signing.js.map +1 -0
  44. package/dist/transforms.d.ts +14 -0
  45. package/dist/transforms.d.ts.map +1 -0
  46. package/dist/transforms.js +271 -0
  47. package/dist/transforms.js.map +1 -0
  48. package/installation.md +98 -0
  49. package/opencode-claude-auth.js +2 -0
  50. package/package.json +79 -0
@@ -0,0 +1,313 @@
1
+ import { execFileSync, execSync } from "node:child_process";
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
3
+ import { homedir, tmpdir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { readAllClaudeAccounts, refreshAccount, writeBackCredentials, } from "./keychain.js";
6
+ import { resetExcludedBetas } from "./betas.js";
7
+ import { log } from "./logger.js";
8
+ const CREDENTIAL_CACHE_TTL_MS = 30_000;
9
+ const accountCacheMap = new Map();
10
+ let activeAccountSource = null;
11
+ let allAccounts = [];
12
+ export function initAccounts(accounts) {
13
+ allAccounts = accounts;
14
+ }
15
+ export function getAccounts() {
16
+ return allAccounts;
17
+ }
18
+ export function setActiveAccountSource(source) {
19
+ const previous = activeAccountSource;
20
+ activeAccountSource = source;
21
+ accountCacheMap.delete(source);
22
+ resetExcludedBetas();
23
+ if (previous && previous !== source) {
24
+ log("account_switch", { newSource: source, previousSource: previous });
25
+ }
26
+ }
27
+ export function refreshAccountsList() {
28
+ allAccounts = readAllClaudeAccounts();
29
+ return allAccounts;
30
+ }
31
+ function getActiveAccount() {
32
+ if (allAccounts.length === 0)
33
+ return null;
34
+ if (activeAccountSource) {
35
+ const found = allAccounts.find((a) => a.source === activeAccountSource);
36
+ if (found)
37
+ return found;
38
+ }
39
+ return allAccounts[0];
40
+ }
41
+ function getAccountStateFile() {
42
+ return join(homedir(), ".local", "share", "opencode", "claude-account-source.txt");
43
+ }
44
+ export function loadPersistedAccountSource() {
45
+ try {
46
+ const path = getAccountStateFile();
47
+ if (existsSync(path)) {
48
+ return readFileSync(path, "utf-8").trim() || null;
49
+ }
50
+ }
51
+ catch {
52
+ // ignore
53
+ }
54
+ return null;
55
+ }
56
+ export function saveAccountSource(source) {
57
+ try {
58
+ const path = getAccountStateFile();
59
+ const dir = dirname(path);
60
+ if (!existsSync(dir))
61
+ mkdirSync(dir, { recursive: true });
62
+ writeFileSync(path, source, "utf-8");
63
+ }
64
+ catch {
65
+ // Non-fatal
66
+ }
67
+ }
68
+ function getAuthJsonPaths() {
69
+ const xdgPath = join(homedir(), ".local", "share", "opencode", "auth.json");
70
+ if (process.platform === "win32") {
71
+ const appData = process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local");
72
+ const localAppDataPath = join(appData, "opencode", "auth.json");
73
+ return [xdgPath, localAppDataPath];
74
+ }
75
+ return [xdgPath];
76
+ }
77
+ function syncToPath(authPath, creds) {
78
+ let auth = {};
79
+ if (existsSync(authPath)) {
80
+ const raw = readFileSync(authPath, "utf-8").trim();
81
+ if (raw) {
82
+ try {
83
+ auth = JSON.parse(raw);
84
+ }
85
+ catch {
86
+ // Malformed file, start fresh
87
+ }
88
+ }
89
+ }
90
+ auth.anthropic = {
91
+ type: "oauth",
92
+ access: creds.accessToken,
93
+ refresh: creds.refreshToken,
94
+ expires: creds.expiresAt,
95
+ };
96
+ const dir = dirname(authPath);
97
+ if (!existsSync(dir)) {
98
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
99
+ }
100
+ writeFileSync(authPath, JSON.stringify(auth, null, 2), {
101
+ encoding: "utf-8",
102
+ mode: 0o600,
103
+ });
104
+ if (process.platform !== "win32") {
105
+ chmodSync(authPath, 0o600);
106
+ }
107
+ }
108
+ export function syncAuthJson(creds) {
109
+ for (const authPath of getAuthJsonPaths()) {
110
+ try {
111
+ syncToPath(authPath, creds);
112
+ log("sync_auth_json", { path: authPath, success: true });
113
+ }
114
+ catch (err) {
115
+ log("sync_auth_json", {
116
+ path: authPath,
117
+ success: false,
118
+ error: err instanceof Error ? err.message : String(err),
119
+ });
120
+ throw err;
121
+ }
122
+ }
123
+ }
124
+ export const OAUTH_TOKEN_URL = "https://claude.ai/v1/oauth/token";
125
+ export const OAUTH_CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
126
+ /**
127
+ * Parse a raw OAuth token response into ClaudeCredentials.
128
+ * Returns null if the response is missing a valid access_token.
129
+ * Defaults expires_in to 36000s (10h) to match observed Claude token lifetime.
130
+ */
131
+ export function parseOAuthResponse(raw, currentRefreshToken, now = Date.now()) {
132
+ let data;
133
+ try {
134
+ data = JSON.parse(raw);
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ if (!data.access_token)
140
+ return null;
141
+ return {
142
+ accessToken: data.access_token,
143
+ refreshToken: data.refresh_token ?? currentRefreshToken,
144
+ expiresAt: now + (data.expires_in ?? 36_000) * 1000,
145
+ };
146
+ }
147
+ export function refreshViaOAuth(refreshToken) {
148
+ // Use a Node subprocess to perform the HTTP request synchronously.
149
+ // The refresh token is passed via stdin to avoid exposure in process args.
150
+ const script = `
151
+ process.stdin.resume();
152
+ let input = '';
153
+ process.stdin.on('data', c => input += c);
154
+ process.stdin.on('end', () => {
155
+ const body = new URLSearchParams({
156
+ grant_type: 'refresh_token',
157
+ client_id: '${OAUTH_CLIENT_ID}',
158
+ refresh_token: input.trim()
159
+ });
160
+ fetch('${OAUTH_TOKEN_URL}', {
161
+ method: 'POST',
162
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
163
+ body: body.toString()
164
+ })
165
+ .then(r => { if (!r.ok) throw new Error(String(r.status)); return r.json(); })
166
+ .then(d => { process.stdout.write(JSON.stringify(d)); })
167
+ .catch(e => { process.stdout.write(JSON.stringify({ error: String(e) })); process.exit(1); });
168
+ });
169
+ `;
170
+ try {
171
+ log("refresh_started", { source: "oauth" });
172
+ const result = execFileSync(process.execPath, ["-e", script], {
173
+ input: refreshToken,
174
+ timeout: 15_000,
175
+ encoding: "utf-8",
176
+ stdio: ["pipe", "pipe", "ignore"],
177
+ });
178
+ const creds = parseOAuthResponse(result, refreshToken);
179
+ if (!creds) {
180
+ log("refresh_failed", {
181
+ source: "oauth",
182
+ error: "no access_token in response",
183
+ });
184
+ return null;
185
+ }
186
+ log("refresh_success", { source: "oauth" });
187
+ return creds;
188
+ }
189
+ catch (err) {
190
+ log("refresh_failed", {
191
+ source: "oauth",
192
+ error: err instanceof Error ? err.message : String(err),
193
+ });
194
+ return null;
195
+ }
196
+ }
197
+ function refreshViaCli() {
198
+ const maxAttempts = 2;
199
+ for (let i = 0; i < maxAttempts; i++) {
200
+ log("refresh_started", { source: "cli", attempt: i + 1 });
201
+ try {
202
+ execSync("claude -p . --model haiku", {
203
+ timeout: 60_000,
204
+ encoding: "utf-8",
205
+ env: { ...process.env, TERM: "dumb" },
206
+ stdio: "ignore",
207
+ cwd: tmpdir(),
208
+ });
209
+ log("refresh_success", { source: "cli" });
210
+ return;
211
+ }
212
+ catch (err) {
213
+ log("refresh_failed", {
214
+ source: "cli",
215
+ attempt: i + 1,
216
+ error: err instanceof Error ? err.message : String(err),
217
+ });
218
+ // Non-fatal: retry once, then give up
219
+ }
220
+ }
221
+ }
222
+ export function refreshIfNeeded(account) {
223
+ const target = account ?? getActiveAccount();
224
+ if (!target)
225
+ return null;
226
+ // Pick up external updates to .credentials.json (e.g. switch_claude_account
227
+ // on Windows). Bounded by getCachedCredentials's 30s TTL: fires at most
228
+ // ~2x/min under load. macOS keychain sources stay on the in-memory path;
229
+ // their state is mutated only by our own writeBackCredentials, so no
230
+ // external-update vector exists for them.
231
+ if (target.source === "file") {
232
+ const onDisk = refreshAccount(target.source);
233
+ if (onDisk)
234
+ target.credentials = onDisk;
235
+ }
236
+ const creds = target.credentials;
237
+ if (creds.expiresAt > Date.now() + 60_000)
238
+ return creds;
239
+ log("refresh_needed", {
240
+ source: target.source,
241
+ expiresAt: creds.expiresAt,
242
+ expiresIn: creds.expiresAt - Date.now(),
243
+ });
244
+ // Try direct OAuth refresh first (zero LLM tokens consumed)
245
+ if (creds.refreshToken) {
246
+ const oauthCreds = refreshViaOAuth(creds.refreshToken);
247
+ if (oauthCreds && oauthCreds.expiresAt > Date.now() + 60_000) {
248
+ target.credentials = oauthCreds;
249
+ writeBackCredentials(target.source, oauthCreds);
250
+ return oauthCreds;
251
+ }
252
+ }
253
+ // Fall back to CLI-based refresh (consumes Haiku tokens)
254
+ log("refresh_fallback_cli", { source: target.source });
255
+ refreshViaCli();
256
+ const refreshed = refreshAccount(target.source);
257
+ if (refreshed && refreshed.expiresAt > Date.now() + 60_000) {
258
+ target.credentials = refreshed;
259
+ return refreshed;
260
+ }
261
+ log("refresh_exhausted", {
262
+ source: target.source,
263
+ hadCredentials: !!refreshed,
264
+ expiresAt: refreshed?.expiresAt,
265
+ });
266
+ return null;
267
+ }
268
+ /**
269
+ * Returns the active account's credentials for auth.json sync purposes.
270
+ * Unlike getCachedCredentials(), this does NOT trigger a refresh.
271
+ * It returns the account's current in-memory credentials if they're still valid.
272
+ * Returns null if no account or credentials are expired.
273
+ */
274
+ export function getCredentialsForSync() {
275
+ const account = getActiveAccount();
276
+ if (!account)
277
+ return null;
278
+ const creds = account.credentials;
279
+ if (creds.expiresAt > Date.now() + 60_000) {
280
+ return creds;
281
+ }
282
+ // Credentials are near expiry -- don't refresh here, let the per-request path handle it
283
+ return null;
284
+ }
285
+ export function getCachedCredentials() {
286
+ const account = getActiveAccount();
287
+ if (!account)
288
+ return null;
289
+ const now = Date.now();
290
+ const cached = accountCacheMap.get(account.source);
291
+ if (cached &&
292
+ now - cached.cachedAt < CREDENTIAL_CACHE_TTL_MS &&
293
+ cached.creds.expiresAt > now + 60_000) {
294
+ log("cache_hit", {
295
+ source: account.source,
296
+ ttlRemaining: CREDENTIAL_CACHE_TTL_MS - (now - cached.cachedAt),
297
+ });
298
+ return cached.creds;
299
+ }
300
+ log("cache_miss", {
301
+ source: account.source,
302
+ reason: cached ? "stale or expiring" : "empty",
303
+ });
304
+ const fresh = refreshIfNeeded(account);
305
+ if (!fresh) {
306
+ log("credentials_unavailable", { source: account.source });
307
+ accountCacheMap.delete(account.source);
308
+ return null;
309
+ }
310
+ accountCacheMap.set(account.source, { creds: fresh, cachedAt: now });
311
+ return fresh;
312
+ }
313
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Plugin } from "@opencode-ai/plugin";
2
+ export { addExcludedBeta, getExcludedBetas, getModelBetas, getNextBetaToExclude, isLongContextError, LONG_CONTEXT_BETAS, } from "./betas.ts";
3
+ export { resetExcludedBetas } from "./betas.ts";
4
+ export { stripToolPrefix, transformBody, transformResponseStream, } from "./transforms.ts";
5
+ export { getCachedCredentials, syncAuthJson, refreshAccountsList, type ClaudeCredentials, } from "./credentials.ts";
6
+ export { isEnable1mContext, type PluginSettings } from "./plugin-config.ts";
7
+ export { buildBillingHeaderValue, computeCch, computeVersionSuffix, extractFirstUserMessageText, } from "./signing.ts";
8
+ type FetchFn = typeof fetch;
9
+ export declare function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit, retries?: number, fetchImpl?: FetchFn): Promise<Response>;
10
+ export declare function buildRequestHeaders(input: RequestInfo | URL, init: RequestInit, accessToken: string, modelId?: string, excludedBetas?: Set<string>): Headers;
11
+ declare const plugin: Plugin;
12
+ export declare const ClaudeAuthPlugin: Plugin;
13
+ export default plugin;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AA4BjD,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,EACL,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,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EACL,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,cAAc,CAAA;AAiDrB,KAAK,OAAO,GAAG,OAAO,KAAK,CAAA;AAiB3B,wBAAsB,cAAc,CAClC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,SAAI,EACX,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,QAAQ,CAAC,CA8BnB;AAED,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;AAID,QAAA,MAAM,MAAM,EAAE,MAibb,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAS,CAAA;AACtC,eAAe,MAAM,CAAA"}