@provos/ironcurtain 0.5.1 → 0.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/README.md +66 -66
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/types.d.ts +6 -0
- package/dist/docker/adapters/claude-code.js +1 -1
- package/dist/docker/adapters/claude-code.js.map +1 -1
- package/dist/docker/docker-infrastructure.js +10 -3
- package/dist/docker/docker-infrastructure.js.map +1 -1
- package/dist/docker/mitm-proxy.d.ts +5 -2
- package/dist/docker/mitm-proxy.js +169 -46
- package/dist/docker/mitm-proxy.js.map +1 -1
- package/dist/docker/oauth-credentials.d.ts +15 -2
- package/dist/docker/oauth-credentials.js +92 -8
- package/dist/docker/oauth-credentials.js.map +1 -1
- package/dist/docker/oauth-token-manager.d.ts +80 -0
- package/dist/docker/oauth-token-manager.js +133 -0
- package/dist/docker/oauth-token-manager.js.map +1 -0
- package/dist/docker/pty-session.d.ts +2 -0
- package/dist/docker/pty-session.js +10 -4
- package/dist/docker/pty-session.js.map +1 -1
- package/dist/escalation/escalation-watcher.js +2 -0
- package/dist/escalation/escalation-watcher.js.map +1 -1
- package/dist/escalation/listener-command.js +9 -58
- package/dist/escalation/listener-command.js.map +1 -1
- package/dist/escalation/listener-lock.d.ts +20 -0
- package/dist/escalation/listener-lock.js +69 -0
- package/dist/escalation/listener-lock.js.map +1 -0
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/dist/mux/mux-app.d.ts +24 -0
- package/dist/mux/mux-app.js +445 -0
- package/dist/mux/mux-app.js.map +1 -0
- package/dist/mux/mux-command.d.ts +7 -0
- package/dist/mux/mux-command.js +93 -0
- package/dist/mux/mux-command.js.map +1 -0
- package/dist/mux/mux-escalation-manager.d.ts +48 -0
- package/dist/mux/mux-escalation-manager.js +162 -0
- package/dist/mux/mux-escalation-manager.js.map +1 -0
- package/dist/mux/mux-input-handler.d.ts +49 -0
- package/dist/mux/mux-input-handler.js +457 -0
- package/dist/mux/mux-input-handler.js.map +1 -0
- package/dist/mux/mux-renderer.d.ts +86 -0
- package/dist/mux/mux-renderer.js +758 -0
- package/dist/mux/mux-renderer.js.map +1 -0
- package/dist/mux/mux-splash.d.ts +17 -0
- package/dist/mux/mux-splash.js +322 -0
- package/dist/mux/mux-splash.js.map +1 -0
- package/dist/mux/pty-bridge.d.ts +79 -0
- package/dist/mux/pty-bridge.js +151 -0
- package/dist/mux/pty-bridge.js.map +1 -0
- package/dist/mux/trusted-input.d.ts +27 -0
- package/dist/mux/trusted-input.js +27 -0
- package/dist/mux/trusted-input.js.map +1 -0
- package/dist/mux/types.d.ts +92 -0
- package/dist/mux/types.js +45 -0
- package/dist/mux/types.js.map +1 -0
- package/dist/sandbox/index.js +4 -0
- package/dist/sandbox/index.js.map +1 -1
- package/dist/session/agent-session.js +3 -0
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/index.js +14 -7
- package/dist/session/index.js.map +1 -1
- package/dist/session/types.d.ts +6 -0
- package/dist/session/workspace-validation.d.ts +17 -0
- package/dist/session/workspace-validation.js +65 -0
- package/dist/session/workspace-validation.js.map +1 -0
- package/dist/trusted-process/auto-approver.d.ts +13 -4
- package/dist/trusted-process/auto-approver.js +12 -5
- package/dist/trusted-process/auto-approver.js.map +1 -1
- package/dist/trusted-process/escalation.js +5 -0
- package/dist/trusted-process/escalation.js.map +1 -1
- package/dist/trusted-process/mcp-proxy-server.js +39 -16
- package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
- package/package.json +6 -1
|
@@ -25,6 +25,8 @@ function isConnectionReset(err) {
|
|
|
25
25
|
return err.code === 'ECONNRESET' || err.code === 'EPIPE';
|
|
26
26
|
}
|
|
27
27
|
const MAX_REWRITE_BODY_BYTES = 10 * 1024 * 1024; // 10 MB
|
|
28
|
+
/** Max Content-Length for which we buffer solely for 401 retry (1 MB). */
|
|
29
|
+
const MAX_RETRY_BODY_BYTES = 1 * 1024 * 1024;
|
|
28
30
|
/**
|
|
29
31
|
* Buffers the entire request body into a single Buffer.
|
|
30
32
|
* Rejects if the body exceeds maxBytes.
|
|
@@ -123,20 +125,39 @@ export function createMitmProxy(options) {
|
|
|
123
125
|
}
|
|
124
126
|
// 2. Fake key validation + swap
|
|
125
127
|
const modifiedHeaders = { ...headers };
|
|
126
|
-
|
|
128
|
+
const keyResult = validateAndSwapApiKey(modifiedHeaders, provider);
|
|
129
|
+
if (!keyResult.valid) {
|
|
127
130
|
logger.info(`[mitm-proxy] REJECTED ${method} ${targetHost}${path} - invalid API key`);
|
|
128
131
|
clientRes.writeHead(403, { 'Content-Type': 'text/plain' });
|
|
129
132
|
clientRes.end('Rejected: API key does not match expected sentinel.');
|
|
130
133
|
return;
|
|
131
134
|
}
|
|
132
135
|
modifiedHeaders.host = targetHost;
|
|
133
|
-
// 3. Forward to real API - either direct pipe or buffer+rewrite
|
|
136
|
+
// 3. Forward to real API - either direct pipe or buffer+rewrite.
|
|
137
|
+
// Only enable 401 retry if the request actually carried the fake key —
|
|
138
|
+
// unauthenticated requests should not have credentials injected on retry.
|
|
134
139
|
const needsRewrite = shouldRewriteBody(provider.config, method, path);
|
|
135
|
-
|
|
136
|
-
|
|
140
|
+
const canRetryAuth = keyResult.hadKey && !!provider.tokenManager;
|
|
141
|
+
// Only buffer for retry when the body is small enough (known Content-Length
|
|
142
|
+
// under 1MB). Large or chunked bodies stream through without retry support
|
|
143
|
+
// to avoid memory overhead and 413 rejections on large payloads.
|
|
144
|
+
const contentLength = parseInt(clientReq.headers['content-length'] ?? '', 10);
|
|
145
|
+
const retryBufferOk = canRetryAuth && Number.isFinite(contentLength) && contentLength <= MAX_RETRY_BODY_BYTES;
|
|
146
|
+
const needsBuffer = needsRewrite || retryBufferOk;
|
|
147
|
+
/**
|
|
148
|
+
* Sends the request upstream with optional body override and 401 retry.
|
|
149
|
+
* When a tokenManager is present and the upstream returns 401, it consumes
|
|
150
|
+
* the error response, refreshes the token, and retries once.
|
|
151
|
+
*/
|
|
152
|
+
function forwardRequest(bodyOverride, isRetry) {
|
|
153
|
+
logger.info(`[mitm-proxy] ${method} ${targetHost}${path} → FORWARDED${isRetry ? ' (retry)' : ''}`);
|
|
137
154
|
const finalHeaders = { ...modifiedHeaders };
|
|
138
155
|
if (bodyOverride) {
|
|
156
|
+
// When we've buffered the body, set the definitive content-length and
|
|
157
|
+
// remove transfer-encoding to avoid sending both (which is an invalid
|
|
158
|
+
// HTTP request and a request-smuggling vector per RFC 7230 §3.3.3).
|
|
139
159
|
finalHeaders['content-length'] = bodyOverride.length.toString();
|
|
160
|
+
delete finalHeaders['transfer-encoding'];
|
|
140
161
|
}
|
|
141
162
|
const upstreamReq = https.request({
|
|
142
163
|
hostname: targetHost,
|
|
@@ -156,6 +177,34 @@ export function createMitmProxy(options) {
|
|
|
156
177
|
clientRes.socket?.destroy();
|
|
157
178
|
}
|
|
158
179
|
});
|
|
180
|
+
// 401 retry: requires a buffered body (bodyOverride), an authenticated
|
|
181
|
+
// request (canRetryAuth), and not already a retry.
|
|
182
|
+
const { tokenManager } = provider;
|
|
183
|
+
if (upstreamRes.statusCode === 401 && tokenManager && canRetryAuth && bodyOverride && !isRetry) {
|
|
184
|
+
// Consume the 401 response body to free the connection, then retry.
|
|
185
|
+
// Guard against the upstream closing/aborting before 'end' fires —
|
|
186
|
+
// without this the client request would hang indefinitely.
|
|
187
|
+
let handled = false;
|
|
188
|
+
const onDrained = () => {
|
|
189
|
+
if (handled)
|
|
190
|
+
return;
|
|
191
|
+
handled = true;
|
|
192
|
+
retryWithRefreshedToken(tokenManager, provider, modifiedHeaders, bodyOverride, clientRes, forwardRequest);
|
|
193
|
+
};
|
|
194
|
+
const onAborted = () => {
|
|
195
|
+
if (handled)
|
|
196
|
+
return;
|
|
197
|
+
handled = true;
|
|
198
|
+
if (!clientRes.headersSent) {
|
|
199
|
+
clientRes.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
200
|
+
clientRes.end('Upstream connection closed during auth retry.');
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
upstreamRes.resume();
|
|
204
|
+
upstreamRes.on('end', onDrained);
|
|
205
|
+
upstreamRes.on('close', onAborted);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
159
208
|
clientRes.writeHead(upstreamRes.statusCode ?? 502, upstreamRes.headers);
|
|
160
209
|
clientRes.flushHeaders();
|
|
161
210
|
clientRes.socket?.setNoDelay(true);
|
|
@@ -192,48 +241,79 @@ export function createMitmProxy(options) {
|
|
|
192
241
|
clientReq.pipe(upstreamReq);
|
|
193
242
|
}
|
|
194
243
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
244
|
+
/**
|
|
245
|
+
* Handles proactive token refresh, body buffering/rewriting, and forwarding.
|
|
246
|
+
* Async to support the token manager's getValidAccessToken() call.
|
|
247
|
+
*/
|
|
248
|
+
async function processRequest() {
|
|
249
|
+
// Proactive token refresh: ensure the real key is fresh before forwarding.
|
|
250
|
+
// Only update headers if the request actually carried the fake key.
|
|
251
|
+
if (provider.tokenManager) {
|
|
252
|
+
try {
|
|
253
|
+
const freshToken = await provider.tokenManager.getValidAccessToken();
|
|
254
|
+
if (freshToken !== provider.realKey) {
|
|
255
|
+
provider.realKey = freshToken;
|
|
256
|
+
if (keyResult.hadKey) {
|
|
257
|
+
injectRealKey(modifiedHeaders, provider);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
logger.warn(`[mitm-proxy] Proactive token refresh failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
263
|
+
// Continue with existing token — it may still work
|
|
264
|
+
}
|
|
205
265
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
266
|
+
if (needsBuffer) {
|
|
267
|
+
// Reject requests with content-encoding we cannot parse (e.g. gzip).
|
|
268
|
+
const contentEncoding = clientReq.headers['content-encoding']?.toLowerCase();
|
|
269
|
+
if (needsRewrite && contentEncoding && contentEncoding !== 'identity') {
|
|
270
|
+
logger.info(`[mitm-proxy] REJECTED ${method} ${targetHost}${path} - unsupported Content-Encoding: ${contentEncoding}`);
|
|
271
|
+
clientRes.writeHead(415, { 'Content-Type': 'text/plain' });
|
|
272
|
+
clientRes.end(`Unsupported Content-Encoding for this endpoint: ${contentEncoding}`);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
let rawBody;
|
|
213
276
|
try {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
277
|
+
rawBody = await bufferRequestBody(clientReq, MAX_REWRITE_BODY_BYTES);
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
const message = err instanceof Error ? err.message : 'Request body too large';
|
|
281
|
+
if (!clientRes.headersSent) {
|
|
282
|
+
clientRes.writeHead(413, { 'Content-Type': 'text/plain' });
|
|
283
|
+
clientRes.end(message);
|
|
219
284
|
}
|
|
285
|
+
return;
|
|
220
286
|
}
|
|
221
|
-
|
|
222
|
-
|
|
287
|
+
let finalBody = rawBody;
|
|
288
|
+
if (needsRewrite) {
|
|
289
|
+
const rewriter = provider.config.requestRewriter;
|
|
290
|
+
const reqMethod = method;
|
|
291
|
+
const reqPath = path;
|
|
292
|
+
try {
|
|
293
|
+
const parsed = JSON.parse(rawBody.toString());
|
|
294
|
+
const result = rewriter(parsed, { method: reqMethod, path: reqPath });
|
|
295
|
+
if (result) {
|
|
296
|
+
finalBody = Buffer.from(JSON.stringify(result.modified));
|
|
297
|
+
logger.info(`[mitm-proxy] POST ${targetHost}${path} - stripped server-side tools: ${result.stripped.join(', ')}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
logger.info(`[mitm-proxy] POST ${targetHost}${path} - failed to parse request body, forwarding as-is`);
|
|
302
|
+
}
|
|
223
303
|
}
|
|
224
304
|
forwardRequest(finalBody);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
clientRes.writeHead(413, { 'Content-Type': 'text/plain' });
|
|
230
|
-
clientRes.end(message);
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
forwardRequest();
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
forwardRequest();
|
|
308
|
+
}
|
|
236
309
|
}
|
|
310
|
+
processRequest().catch((err) => {
|
|
311
|
+
logger.info(`[mitm-proxy] request processing error: ${err instanceof Error ? err.message : String(err)}`);
|
|
312
|
+
if (!clientRes.headersSent) {
|
|
313
|
+
clientRes.writeHead(500, { 'Content-Type': 'text/plain' });
|
|
314
|
+
clientRes.end('Internal proxy error');
|
|
315
|
+
}
|
|
316
|
+
});
|
|
237
317
|
});
|
|
238
318
|
// Outer server - UDS listener, handles CONNECT
|
|
239
319
|
const outerServer = http.createServer((_req, res) => {
|
|
@@ -379,9 +459,52 @@ export function createMitmProxy(options) {
|
|
|
379
459
|
},
|
|
380
460
|
};
|
|
381
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Injects the real key into already-validated headers.
|
|
464
|
+
* Used after a token refresh to update the Authorization/API-key header
|
|
465
|
+
* with the new real key before a retry.
|
|
466
|
+
*/
|
|
467
|
+
function injectRealKey(headers, provider) {
|
|
468
|
+
const { keyInjection } = provider.config;
|
|
469
|
+
switch (keyInjection.type) {
|
|
470
|
+
case 'header':
|
|
471
|
+
headers[keyInjection.headerName.toLowerCase()] = provider.realKey;
|
|
472
|
+
break;
|
|
473
|
+
case 'bearer':
|
|
474
|
+
headers['authorization'] = `Bearer ${provider.realKey}`;
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Attempts to refresh the OAuth token and retry the request.
|
|
480
|
+
* Called when upstream returns 401 and a token manager is available.
|
|
481
|
+
*/
|
|
482
|
+
function retryWithRefreshedToken(tokenManager, provider, headers, body, clientRes, forwardRequest) {
|
|
483
|
+
tokenManager
|
|
484
|
+
.handleAuthFailure()
|
|
485
|
+
.then((newToken) => {
|
|
486
|
+
if (newToken) {
|
|
487
|
+
provider.realKey = newToken;
|
|
488
|
+
injectRealKey(headers, provider);
|
|
489
|
+
forwardRequest(body, true);
|
|
490
|
+
}
|
|
491
|
+
else if (!clientRes.headersSent) {
|
|
492
|
+
clientRes.writeHead(401, { 'Content-Type': 'text/plain' });
|
|
493
|
+
clientRes.end('Authentication failed: unable to refresh OAuth token.');
|
|
494
|
+
}
|
|
495
|
+
})
|
|
496
|
+
.catch(() => {
|
|
497
|
+
if (!clientRes.headersSent) {
|
|
498
|
+
clientRes.writeHead(401, { 'Content-Type': 'text/plain' });
|
|
499
|
+
clientRes.end('Authentication failed: token refresh error.');
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
}
|
|
382
503
|
/**
|
|
383
504
|
* Validates that the request carries the expected fake key, then replaces
|
|
384
|
-
* it with the real key. Returns
|
|
505
|
+
* it with the real key. Returns validation result including whether the
|
|
506
|
+
* request actually carried an API key (used to gate 401 retry — requests
|
|
507
|
+
* without a key should not have credentials injected on retry).
|
|
385
508
|
*/
|
|
386
509
|
function validateAndSwapApiKey(headers, provider) {
|
|
387
510
|
const { keyInjection } = provider.config;
|
|
@@ -390,20 +513,20 @@ function validateAndSwapApiKey(headers, provider) {
|
|
|
390
513
|
const headerName = keyInjection.headerName.toLowerCase();
|
|
391
514
|
const currentValue = headers[headerName];
|
|
392
515
|
if (currentValue === undefined)
|
|
393
|
-
return
|
|
516
|
+
return { valid: true, hadKey: false };
|
|
394
517
|
if (currentValue !== provider.fakeKey)
|
|
395
|
-
return false;
|
|
518
|
+
return { valid: false, hadKey: false };
|
|
396
519
|
headers[headerName] = provider.realKey;
|
|
397
|
-
return true;
|
|
520
|
+
return { valid: true, hadKey: true };
|
|
398
521
|
}
|
|
399
522
|
case 'bearer': {
|
|
400
523
|
const authHeader = headers['authorization'];
|
|
401
524
|
if (authHeader === undefined)
|
|
402
|
-
return
|
|
525
|
+
return { valid: true, hadKey: false };
|
|
403
526
|
if (authHeader !== `Bearer ${provider.fakeKey}`)
|
|
404
|
-
return false;
|
|
527
|
+
return { valid: false, hadKey: false };
|
|
405
528
|
headers['authorization'] = `Bearer ${provider.realKey}`;
|
|
406
|
-
return true;
|
|
529
|
+
return { valid: true, hadKey: true };
|
|
407
530
|
}
|
|
408
531
|
}
|
|
409
532
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mitm-proxy.js","sourceRoot":"","sources":["../../src/docker/mitm-proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mitm-proxy.js","sourceRoot":"","sources":["../../src/docker/mitm-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,13 @@ export interface OAuthCredentials {
|
|
|
18
18
|
readonly refreshToken: string;
|
|
19
19
|
readonly expiresAt: number;
|
|
20
20
|
}
|
|
21
|
+
/** Where OAuth credentials were loaded from. */
|
|
22
|
+
export type OAuthCredentialSource = 'file' | 'keychain';
|
|
21
23
|
/** Authentication method detected on the host. */
|
|
22
24
|
export type AuthMethod = {
|
|
23
25
|
readonly kind: 'oauth';
|
|
24
26
|
readonly credentials: OAuthCredentials;
|
|
27
|
+
readonly source: OAuthCredentialSource;
|
|
25
28
|
} | {
|
|
26
29
|
readonly kind: 'apikey';
|
|
27
30
|
readonly key: string;
|
|
@@ -61,6 +64,18 @@ export declare function parseCredentialsJson(json: string): OAuthCredentials | n
|
|
|
61
64
|
* the write and read service names differ.
|
|
62
65
|
*/
|
|
63
66
|
export declare function extractFromKeychain(): OAuthCredentials | null;
|
|
67
|
+
/**
|
|
68
|
+
* Refreshes an OAuth access token using a refresh token grant.
|
|
69
|
+
*
|
|
70
|
+
* Returns new credentials on success, or null on failure (expired refresh
|
|
71
|
+
* token, network error, etc.).
|
|
72
|
+
*/
|
|
73
|
+
export declare function refreshOAuthToken(refreshToken: string): Promise<OAuthCredentials | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Writes updated OAuth credentials back to ~/.claude/.credentials.json,
|
|
76
|
+
* preserving other fields in the file (e.g., scopes, subscriptionType).
|
|
77
|
+
*/
|
|
78
|
+
export declare function saveOAuthCredentials(credentials: OAuthCredentials, filePath?: string): void;
|
|
64
79
|
/** Injectable credential sources for testability. */
|
|
65
80
|
export interface CredentialSources {
|
|
66
81
|
loadFromFile: () => OAuthCredentials | null;
|
|
@@ -75,7 +90,5 @@ export interface CredentialSources {
|
|
|
75
90
|
* 3. OAuth credentials from macOS Keychain (if credentials file missing)
|
|
76
91
|
* 4. API key from config
|
|
77
92
|
* 5. None
|
|
78
|
-
*
|
|
79
|
-
* @param sources - Injectable credential loaders (for testing)
|
|
80
93
|
*/
|
|
81
94
|
export declare function detectAuthMethod(config: IronCurtainConfig, sources?: CredentialSources): AuthMethod;
|
|
@@ -11,13 +11,19 @@
|
|
|
11
11
|
* 2. macOS Keychain (if credentials file missing)
|
|
12
12
|
* 3. Fall back to API key from config
|
|
13
13
|
*/
|
|
14
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
14
|
+
import { existsSync, readFileSync, writeFileSync, chmodSync } from 'node:fs';
|
|
15
15
|
import { homedir, platform, userInfo } from 'node:os';
|
|
16
16
|
import { resolve } from 'node:path';
|
|
17
17
|
import { execFileSync } from 'node:child_process';
|
|
18
18
|
import * as logger from '../logger.js';
|
|
19
19
|
/** Minimum remaining token lifetime (5 minutes) to consider a token usable. */
|
|
20
20
|
const TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000;
|
|
21
|
+
function isNonEmptyString(value) {
|
|
22
|
+
return typeof value === 'string' && value.length > 0;
|
|
23
|
+
}
|
|
24
|
+
function isPositiveFiniteNumber(value) {
|
|
25
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
26
|
+
}
|
|
21
27
|
/** Service names used by Claude Code in macOS Keychain. */
|
|
22
28
|
const KEYCHAIN_SERVICE_NAMES = ['Claude Code-credentials', 'Claude Code'];
|
|
23
29
|
/**
|
|
@@ -71,11 +77,11 @@ export function parseCredentialsJson(json) {
|
|
|
71
77
|
if (typeof oauth !== 'object' || oauth === null)
|
|
72
78
|
return null;
|
|
73
79
|
const creds = oauth;
|
|
74
|
-
if (
|
|
80
|
+
if (!isNonEmptyString(creds.accessToken))
|
|
75
81
|
return null;
|
|
76
|
-
if (
|
|
82
|
+
if (!isNonEmptyString(creds.refreshToken))
|
|
77
83
|
return null;
|
|
78
|
-
if (
|
|
84
|
+
if (!isPositiveFiniteNumber(creds.expiresAt))
|
|
79
85
|
return null;
|
|
80
86
|
return {
|
|
81
87
|
accessToken: creds.accessToken,
|
|
@@ -119,6 +125,86 @@ export function extractFromKeychain() {
|
|
|
119
125
|
}
|
|
120
126
|
return null;
|
|
121
127
|
}
|
|
128
|
+
/** Claude Code's public OAuth client ID. */
|
|
129
|
+
const OAUTH_CLIENT_ID = '9d1c250a-e61b-44d9-88ed-5944d1962f5e';
|
|
130
|
+
/** Anthropic's OAuth token endpoint. */
|
|
131
|
+
const OAUTH_TOKEN_URL = 'https://console.anthropic.com/api/oauth/token';
|
|
132
|
+
/**
|
|
133
|
+
* Refreshes an OAuth access token using a refresh token grant.
|
|
134
|
+
*
|
|
135
|
+
* Returns new credentials on success, or null on failure (expired refresh
|
|
136
|
+
* token, network error, etc.).
|
|
137
|
+
*/
|
|
138
|
+
export async function refreshOAuthToken(refreshToken) {
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(OAUTH_TOKEN_URL, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
headers: { 'Content-Type': 'application/json' },
|
|
143
|
+
body: JSON.stringify({
|
|
144
|
+
grant_type: 'refresh_token',
|
|
145
|
+
refresh_token: refreshToken,
|
|
146
|
+
client_id: OAUTH_CLIENT_ID,
|
|
147
|
+
}),
|
|
148
|
+
});
|
|
149
|
+
if (!response.ok) {
|
|
150
|
+
logger.warn(`OAuth token refresh failed: HTTP ${response.status}`);
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
const data = (await response.json());
|
|
154
|
+
return parseTokenResponse(data);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
logger.warn(`OAuth token refresh error: ${err instanceof Error ? err.message : String(err)}`);
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Validates and extracts credentials from an OAuth token endpoint response.
|
|
163
|
+
* Returns null if any required field is missing or invalid.
|
|
164
|
+
*/
|
|
165
|
+
function parseTokenResponse(data) {
|
|
166
|
+
const { access_token: accessToken, refresh_token: refreshToken, expires_in: expiresIn } = data;
|
|
167
|
+
if (!isNonEmptyString(accessToken))
|
|
168
|
+
return null;
|
|
169
|
+
if (!isNonEmptyString(refreshToken))
|
|
170
|
+
return null;
|
|
171
|
+
if (!isPositiveFiniteNumber(expiresIn))
|
|
172
|
+
return null;
|
|
173
|
+
return {
|
|
174
|
+
accessToken,
|
|
175
|
+
refreshToken,
|
|
176
|
+
expiresAt: Date.now() + expiresIn * 1000,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Writes updated OAuth credentials back to ~/.claude/.credentials.json,
|
|
181
|
+
* preserving other fields in the file (e.g., scopes, subscriptionType).
|
|
182
|
+
*/
|
|
183
|
+
export function saveOAuthCredentials(credentials, filePath) {
|
|
184
|
+
const credPath = filePath ?? getCredentialsFilePath();
|
|
185
|
+
let existing = {};
|
|
186
|
+
try {
|
|
187
|
+
if (existsSync(credPath)) {
|
|
188
|
+
existing = JSON.parse(readFileSync(credPath, 'utf-8'));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Start fresh if file is unreadable
|
|
193
|
+
}
|
|
194
|
+
const existingOauth = typeof existing.claudeAiOauth === 'object' && existing.claudeAiOauth !== null
|
|
195
|
+
? existing.claudeAiOauth
|
|
196
|
+
: {};
|
|
197
|
+
existing.claudeAiOauth = {
|
|
198
|
+
...existingOauth,
|
|
199
|
+
accessToken: credentials.accessToken,
|
|
200
|
+
refreshToken: credentials.refreshToken,
|
|
201
|
+
expiresAt: credentials.expiresAt,
|
|
202
|
+
};
|
|
203
|
+
writeFileSync(credPath, JSON.stringify(existing, null, 2) + '\n', { mode: 0o600 });
|
|
204
|
+
// chmod after write — writeFileSync's mode only applies when creating new files;
|
|
205
|
+
// existing files with broader permissions need an explicit chmod.
|
|
206
|
+
chmodSync(credPath, 0o600);
|
|
207
|
+
}
|
|
122
208
|
const defaultSources = {
|
|
123
209
|
loadFromFile: loadOAuthCredentials,
|
|
124
210
|
loadFromKeychain: extractFromKeychain,
|
|
@@ -132,8 +218,6 @@ const defaultSources = {
|
|
|
132
218
|
* 3. OAuth credentials from macOS Keychain (if credentials file missing)
|
|
133
219
|
* 4. API key from config
|
|
134
220
|
* 5. None
|
|
135
|
-
*
|
|
136
|
-
* @param sources - Injectable credential loaders (for testing)
|
|
137
221
|
*/
|
|
138
222
|
export function detectAuthMethod(config, sources) {
|
|
139
223
|
const { loadFromFile, loadFromKeychain } = sources ?? defaultSources;
|
|
@@ -147,7 +231,7 @@ export function detectAuthMethod(config, sources) {
|
|
|
147
231
|
if (fileCreds) {
|
|
148
232
|
if (!isTokenExpired(fileCreds)) {
|
|
149
233
|
logger.info('Detected OAuth credentials from ~/.claude/.credentials.json');
|
|
150
|
-
return { kind: 'oauth', credentials: fileCreds };
|
|
234
|
+
return { kind: 'oauth', credentials: fileCreds, source: 'file' };
|
|
151
235
|
}
|
|
152
236
|
logger.warn('OAuth token from credentials file is expired');
|
|
153
237
|
}
|
|
@@ -156,7 +240,7 @@ export function detectAuthMethod(config, sources) {
|
|
|
156
240
|
const keychainCreds = loadFromKeychain();
|
|
157
241
|
if (keychainCreds) {
|
|
158
242
|
if (!isTokenExpired(keychainCreds)) {
|
|
159
|
-
return { kind: 'oauth', credentials: keychainCreds };
|
|
243
|
+
return { kind: 'oauth', credentials: keychainCreds, source: 'keychain' };
|
|
160
244
|
}
|
|
161
245
|
logger.warn('OAuth token from macOS Keychain is expired');
|
|
162
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-credentials.js","sourceRoot":"","sources":["../../src/docker/oauth-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth-credentials.js","sourceRoot":"","sources":["../../src/docker/oauth-credentials.ts"],"names":[],"mappings":"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"}
|