@provos/ironcurtain 0.8.0 → 0.9.1

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 (216) hide show
  1. package/README.md +11 -10
  2. package/dist/auth/auth-command.d.ts +15 -0
  3. package/dist/auth/auth-command.js +424 -0
  4. package/dist/auth/auth-command.js.map +1 -0
  5. package/dist/auth/oauth-flow.d.ts +46 -0
  6. package/dist/auth/oauth-flow.js +279 -0
  7. package/dist/auth/oauth-flow.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +55 -0
  9. package/dist/auth/oauth-provider.js +73 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/oauth-registry.d.ts +34 -0
  12. package/dist/auth/oauth-registry.js +69 -0
  13. package/dist/auth/oauth-registry.js.map +1 -0
  14. package/dist/auth/oauth-token-provider.d.ts +52 -0
  15. package/dist/auth/oauth-token-provider.js +159 -0
  16. package/dist/auth/oauth-token-provider.js.map +1 -0
  17. package/dist/auth/oauth-token-store.d.ts +30 -0
  18. package/dist/auth/oauth-token-store.js +93 -0
  19. package/dist/auth/oauth-token-store.js.map +1 -0
  20. package/dist/auth/providers/google-scopes.d.ts +35 -0
  21. package/dist/auth/providers/google-scopes.js +183 -0
  22. package/dist/auth/providers/google-scopes.js.map +1 -0
  23. package/dist/auth/providers/google.d.ts +2 -0
  24. package/dist/auth/providers/google.js +28 -0
  25. package/dist/auth/providers/google.js.map +1 -0
  26. package/dist/cli.js +6 -0
  27. package/dist/cli.js.map +1 -1
  28. package/dist/config/config-command.js +39 -1
  29. package/dist/config/config-command.js.map +1 -1
  30. package/dist/config/constitution-readonly.md +14 -11
  31. package/dist/config/constitution-user-base.md +15 -0
  32. package/dist/config/generated/test-scenarios.json +1 -1
  33. package/dist/config/generated/tool-annotations.json +10617 -296
  34. package/dist/config/generated-readonly/compiled-policy.json +787 -244
  35. package/dist/config/index.d.ts +2 -2
  36. package/dist/config/index.js +8 -0
  37. package/dist/config/index.js.map +1 -1
  38. package/dist/config/mcp-servers.json +23 -0
  39. package/dist/config/paths.d.ts +15 -0
  40. package/dist/config/paths.js +35 -0
  41. package/dist/config/paths.js.map +1 -1
  42. package/dist/config/types.d.ts +8 -0
  43. package/dist/config/user-config.d.ts +2 -0
  44. package/dist/config/user-config.js +2 -0
  45. package/dist/config/user-config.js.map +1 -1
  46. package/dist/cron/headless-transport.d.ts +4 -0
  47. package/dist/cron/headless-transport.js +1 -1
  48. package/dist/cron/headless-transport.js.map +1 -1
  49. package/dist/daemon/ironcurtain-daemon.js +6 -1
  50. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  51. package/dist/docker/docker-agent-session.d.ts +3 -1
  52. package/dist/docker/docker-agent-session.js +49 -28
  53. package/dist/docker/docker-agent-session.js.map +1 -1
  54. package/dist/docker/docker-infrastructure.js +39 -11
  55. package/dist/docker/docker-infrastructure.js.map +1 -1
  56. package/dist/docker/docker-manager.d.ts +2 -0
  57. package/dist/docker/docker-manager.js +9 -1
  58. package/dist/docker/docker-manager.js.map +1 -1
  59. package/dist/docker/mitm-proxy.d.ts +50 -0
  60. package/dist/docker/mitm-proxy.js +220 -31
  61. package/dist/docker/mitm-proxy.js.map +1 -1
  62. package/dist/docker/oauth-credentials.d.ts +45 -6
  63. package/dist/docker/oauth-credentials.js +151 -24
  64. package/dist/docker/oauth-credentials.js.map +1 -1
  65. package/dist/docker/oauth-token-manager.d.ts +15 -16
  66. package/dist/docker/oauth-token-manager.js +23 -17
  67. package/dist/docker/oauth-token-manager.js.map +1 -1
  68. package/dist/docker/platform.d.ts +6 -6
  69. package/dist/docker/platform.js +8 -6
  70. package/dist/docker/platform.js.map +1 -1
  71. package/dist/docker/proxy-tools.d.ts +80 -0
  72. package/dist/docker/proxy-tools.js +248 -0
  73. package/dist/docker/proxy-tools.js.map +1 -0
  74. package/dist/docker/pty-session.js +48 -29
  75. package/dist/docker/pty-session.js.map +1 -1
  76. package/dist/docker/pty-types.d.ts +4 -0
  77. package/dist/docker/pty-types.js.map +1 -1
  78. package/dist/escalation/escalation-watcher.d.ts +3 -1
  79. package/dist/escalation/escalation-watcher.js +6 -2
  80. package/dist/escalation/escalation-watcher.js.map +1 -1
  81. package/dist/escalation/listener-command.js +24 -10
  82. package/dist/escalation/listener-command.js.map +1 -1
  83. package/dist/escalation/listener-lock.d.ts +5 -0
  84. package/dist/escalation/listener-lock.js +14 -0
  85. package/dist/escalation/listener-lock.js.map +1 -1
  86. package/dist/index.js +6 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/memory/auto-save.d.ts +25 -0
  89. package/dist/memory/auto-save.js +89 -0
  90. package/dist/memory/auto-save.js.map +1 -0
  91. package/dist/mux/mux-app.d.ts +4 -0
  92. package/dist/mux/mux-app.js +186 -21
  93. package/dist/mux/mux-app.js.map +1 -1
  94. package/dist/mux/mux-command.d.ts +2 -2
  95. package/dist/mux/mux-command.js +14 -22
  96. package/dist/mux/mux-command.js.map +1 -1
  97. package/dist/mux/mux-escalation-manager.d.ts +9 -3
  98. package/dist/mux/mux-escalation-manager.js +69 -19
  99. package/dist/mux/mux-escalation-manager.js.map +1 -1
  100. package/dist/mux/mux-input-handler.d.ts +33 -1
  101. package/dist/mux/mux-input-handler.js +112 -29
  102. package/dist/mux/mux-input-handler.js.map +1 -1
  103. package/dist/mux/mux-renderer.d.ts +17 -1
  104. package/dist/mux/mux-renderer.js +288 -7
  105. package/dist/mux/mux-renderer.js.map +1 -1
  106. package/dist/mux/pty-bridge.d.ts +4 -0
  107. package/dist/mux/pty-bridge.js +13 -1
  108. package/dist/mux/pty-bridge.js.map +1 -1
  109. package/dist/mux/types.d.ts +24 -1
  110. package/dist/mux/types.js +10 -1
  111. package/dist/mux/types.js.map +1 -1
  112. package/dist/persona/persona-command.js +0 -5
  113. package/dist/persona/persona-command.js.map +1 -1
  114. package/dist/pipeline/annotate.js +1 -7
  115. package/dist/pipeline/annotate.js.map +1 -1
  116. package/dist/pipeline/compile.d.ts +5 -2
  117. package/dist/pipeline/compile.js +23 -11
  118. package/dist/pipeline/compile.js.map +1 -1
  119. package/dist/pipeline/constitution-compiler.d.ts +302 -3
  120. package/dist/pipeline/constitution-compiler.js +285 -23
  121. package/dist/pipeline/constitution-compiler.js.map +1 -1
  122. package/dist/pipeline/generate-with-repair.d.ts +2 -2
  123. package/dist/pipeline/generate-with-repair.js +2 -2
  124. package/dist/pipeline/handwritten-scenarios.d.ts +20 -7
  125. package/dist/pipeline/handwritten-scenarios.js +20 -41
  126. package/dist/pipeline/handwritten-scenarios.js.map +1 -1
  127. package/dist/pipeline/list-resolver.d.ts +18 -20
  128. package/dist/pipeline/list-resolver.js +28 -36
  129. package/dist/pipeline/list-resolver.js.map +1 -1
  130. package/dist/pipeline/pipeline-runner.d.ts +102 -13
  131. package/dist/pipeline/pipeline-runner.js +497 -237
  132. package/dist/pipeline/pipeline-runner.js.map +1 -1
  133. package/dist/pipeline/pipeline-shared.d.ts +7 -9
  134. package/dist/pipeline/pipeline-shared.js +8 -18
  135. package/dist/pipeline/pipeline-shared.js.map +1 -1
  136. package/dist/pipeline/policy-verifier.d.ts +32 -5
  137. package/dist/pipeline/policy-verifier.js +137 -8
  138. package/dist/pipeline/policy-verifier.js.map +1 -1
  139. package/dist/pipeline/proxy-mcp-connections.d.ts +25 -0
  140. package/dist/pipeline/proxy-mcp-connections.js +121 -0
  141. package/dist/pipeline/proxy-mcp-connections.js.map +1 -0
  142. package/dist/pipeline/refresh-lists.js +21 -13
  143. package/dist/pipeline/refresh-lists.js.map +1 -1
  144. package/dist/pipeline/scenario-generator.d.ts +29 -49
  145. package/dist/pipeline/scenario-generator.js +180 -143
  146. package/dist/pipeline/scenario-generator.js.map +1 -1
  147. package/dist/pipeline/scenario-schema-validator.d.ts +51 -0
  148. package/dist/pipeline/scenario-schema-validator.js +132 -0
  149. package/dist/pipeline/scenario-schema-validator.js.map +1 -0
  150. package/dist/pipeline/tool-annotator.d.ts +9 -8
  151. package/dist/pipeline/tool-annotator.js +48 -95
  152. package/dist/pipeline/tool-annotator.js.map +1 -1
  153. package/dist/pipeline/types.d.ts +31 -24
  154. package/dist/sandbox/index.js +20 -0
  155. package/dist/sandbox/index.js.map +1 -1
  156. package/dist/servers/fetch-server.js +10 -5
  157. package/dist/servers/fetch-server.js.map +1 -1
  158. package/dist/session/agent-session.d.ts +6 -19
  159. package/dist/session/agent-session.js +18 -69
  160. package/dist/session/agent-session.js.map +1 -1
  161. package/dist/session/base-transport.d.ts +17 -1
  162. package/dist/session/base-transport.js +25 -1
  163. package/dist/session/base-transport.js.map +1 -1
  164. package/dist/session/cli-transport.d.ts +5 -0
  165. package/dist/session/cli-transport.js +48 -25
  166. package/dist/session/cli-transport.js.map +1 -1
  167. package/dist/session/preflight.js +15 -16
  168. package/dist/session/preflight.js.map +1 -1
  169. package/dist/session/prompts.js +0 -1
  170. package/dist/session/prompts.js.map +1 -1
  171. package/dist/session/session-manager.d.ts +6 -0
  172. package/dist/session/session-manager.js +12 -0
  173. package/dist/session/session-manager.js.map +1 -1
  174. package/dist/session/types.d.ts +6 -1
  175. package/dist/session/types.js.map +1 -1
  176. package/dist/signal/signal-bot-daemon.js +24 -8
  177. package/dist/signal/signal-bot-daemon.js.map +1 -1
  178. package/dist/signal/signal-transport.d.ts +5 -2
  179. package/dist/signal/signal-transport.js +3 -3
  180. package/dist/signal/signal-transport.js.map +1 -1
  181. package/dist/trusted-process/approval-whitelist.d.ts +117 -0
  182. package/dist/trusted-process/approval-whitelist.js +237 -0
  183. package/dist/trusted-process/approval-whitelist.js.map +1 -0
  184. package/dist/trusted-process/gworkspace-credentials.d.ts +40 -0
  185. package/dist/trusted-process/gworkspace-credentials.js +45 -0
  186. package/dist/trusted-process/gworkspace-credentials.js.map +1 -0
  187. package/dist/trusted-process/index.d.ts +11 -1
  188. package/dist/trusted-process/index.js +63 -27
  189. package/dist/trusted-process/index.js.map +1 -1
  190. package/dist/trusted-process/mcp-proxy-server.d.ts +14 -0
  191. package/dist/trusted-process/mcp-proxy-server.js +325 -64
  192. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  193. package/dist/trusted-process/policy-engine.d.ts +8 -2
  194. package/dist/trusted-process/policy-engine.js +18 -22
  195. package/dist/trusted-process/policy-engine.js.map +1 -1
  196. package/dist/trusted-process/policy-types.d.ts +17 -0
  197. package/dist/trusted-process/sandbox-integration.d.ts +23 -0
  198. package/dist/trusted-process/sandbox-integration.js +115 -3
  199. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  200. package/dist/trusted-process/token-file-refresher.d.ts +69 -0
  201. package/dist/trusted-process/token-file-refresher.js +120 -0
  202. package/dist/trusted-process/token-file-refresher.js.map +1 -0
  203. package/dist/types/argument-roles.d.ts +7 -1
  204. package/dist/types/argument-roles.js +50 -0
  205. package/dist/types/argument-roles.js.map +1 -1
  206. package/dist/types/audit.d.ts +11 -0
  207. package/docker/Dockerfile.claude-code +2 -2
  208. package/docker/entrypoint-claude-code.sh +15 -5
  209. package/package.json +3 -2
  210. package/src/config/constitution-user-base.md +15 -0
  211. package/src/config/generated/test-scenarios.json +1 -1
  212. package/src/config/generated/tool-annotations.json +10617 -296
  213. package/src/config/mcp-servers.json +23 -0
  214. package/dist/pipeline/mcp-connections.d.ts +0 -16
  215. package/dist/pipeline/mcp-connections.js +0 -61
  216. package/dist/pipeline/mcp-connections.js.map +0 -1
@@ -20,6 +20,7 @@ import forge from 'node-forge';
20
20
  import { randomSerialNumber } from './ca.js';
21
21
  import { isEndpointAllowed, shouldRewriteBody, } from './provider-config.js';
22
22
  import { DENY_ALL_VALIDATOR } from './package-validator.js';
23
+ import { validateDomain } from './proxy-tools.js';
23
24
  import * as logger from '../logger.js';
24
25
  /** Connection reset errors are routine during proxy shutdown or client disconnect. */
25
26
  function isConnectionReset(err) {
@@ -59,6 +60,8 @@ export function createMitmProxy(options) {
59
60
  for (const mapping of options.providers) {
60
61
  providersByHost.set(mapping.config.host, mapping);
61
62
  }
63
+ // Dynamically added passthrough hosts (no key swap, no endpoint filtering)
64
+ const passthroughHosts = new Set();
62
65
  // Certificate cache: hostname → { ctx, expiresAt }
63
66
  const certCache = new Map();
64
67
  // Renew leaf certs 1 hour before they expire
@@ -170,9 +173,15 @@ export function createMitmProxy(options) {
170
173
  clientRes.end('Internal error: unknown connection');
171
174
  return;
172
175
  }
176
+ const { host: targetHost, port: targetPort } = meta;
173
177
  // Dispatch: registry connections are handled separately from provider connections
174
178
  if (meta.registry) {
175
- dispatchRegistryRequest(meta.registry, clientReq, clientRes, meta.host, meta.port);
179
+ dispatchRegistryRequest(meta.registry, clientReq, clientRes, targetHost, targetPort);
180
+ return;
181
+ }
182
+ // Passthrough connections: forward as-is, no key swap, no endpoint filtering
183
+ if (meta.passthrough) {
184
+ forwardPassthrough(clientReq, clientRes, targetHost, targetPort);
176
185
  return;
177
186
  }
178
187
  if (!meta.provider) {
@@ -181,8 +190,6 @@ export function createMitmProxy(options) {
181
190
  return;
182
191
  }
183
192
  const provider = meta.provider;
184
- const targetHost = meta.host;
185
- const targetPort = meta.port;
186
193
  const { method, url: path, headers } = clientReq;
187
194
  // 1. Endpoint filtering
188
195
  if (!isEndpointAllowed(provider.config, method, path)) {
@@ -194,18 +201,13 @@ export function createMitmProxy(options) {
194
201
  // 2. Fake key validation + swap
195
202
  const modifiedHeaders = { ...headers };
196
203
  const keyResult = validateAndSwapApiKey(modifiedHeaders, provider);
197
- if (!keyResult.valid) {
198
- logger.info(`[mitm-proxy] REJECTED ${method} ${targetHost}${path} - invalid API key`);
199
- clientRes.writeHead(403, { 'Content-Type': 'text/plain' });
200
- clientRes.end('Rejected: API key does not match expected sentinel.');
201
- return;
202
- }
203
204
  modifiedHeaders.host = targetHost;
204
205
  // 3. Forward to real API - either direct pipe or buffer+rewrite.
205
206
  // Only enable 401 retry if the request actually carried the fake key —
206
207
  // unauthenticated requests should not have credentials injected on retry.
207
208
  const needsRewrite = shouldRewriteBody(provider.config, method, path);
208
- const canRetryAuth = keyResult.hadKey && !!provider.tokenManager;
209
+ // 401 retry only makes sense when we swapped our own managed credential
210
+ const canRetryAuth = keyResult.swapped && !!provider.tokenManager;
209
211
  // Only buffer for retry when the body is small enough (known Content-Length
210
212
  // under 1MB). Large or chunked bodies stream through without retry support
211
213
  // to avoid memory overhead and 413 rejections on large payloads.
@@ -404,16 +406,17 @@ export function createMitmProxy(options) {
404
406
  // Track raw client socket for cleanup during stop()
405
407
  activeClientSockets.add(clientSocket);
406
408
  clientSocket.on('close', () => activeClientSockets.delete(clientSocket));
407
- // 1. Check allowlist (providers and registries)
409
+ // 1. Check allowlist (providers, registries, and dynamic passthrough)
408
410
  const provider = providersByHost.get(host);
409
411
  const registry = registriesByHost.get(host);
410
- if (!provider && !registry) {
412
+ const isPassthrough = !provider && !registry && passthroughHosts.has(host);
413
+ if (!provider && !registry && !isPassthrough) {
411
414
  logger.info(`[mitm-proxy] #${connId} DENIED CONNECT ${host}:${port}`);
412
415
  clientSocket.write('HTTP/1.1 403 Forbidden\r\n\r\n');
413
416
  clientSocket.destroy();
414
417
  return;
415
418
  }
416
- const connType = provider ? 'provider' : 'registry';
419
+ const connType = provider ? 'provider' : registry ? 'registry' : 'passthrough';
417
420
  logger.info(`[mitm-proxy] #${connId} CONNECT ${host}:${port} → MITM (${connType})`);
418
421
  // 2. Acknowledge the CONNECT
419
422
  clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
@@ -438,7 +441,13 @@ export function createMitmProxy(options) {
438
441
  tlsSocket.once('secure', () => clearTimeout(handshakeTimeout));
439
442
  // 6. Track the connection
440
443
  activeTlsSockets.add(tlsSocket);
441
- socketMetadata.set(tlsSocket, { provider, registry, host, port });
444
+ socketMetadata.set(tlsSocket, {
445
+ provider: provider ?? undefined,
446
+ registry,
447
+ passthrough: isPassthrough,
448
+ host,
449
+ port,
450
+ });
442
451
  tlsSocket.on('error', (err) => {
443
452
  const log = isConnectionReset(err) ? logger.debug : logger.info;
444
453
  log(`[mitm-proxy] #${connId} TLS error: ${err.message}`);
@@ -451,11 +460,172 @@ export function createMitmProxy(options) {
451
460
  // 7. Emit into shared inner HTTP server
452
461
  innerServer.emit('connection', tlsSocket);
453
462
  });
463
+ // ── Passthrough request forwarding ──────────────────────────────────
464
+ // For dynamically added domains: forward requests as-is with no
465
+ // credential replacement or endpoint filtering.
466
+ function forwardPassthrough(clientReq, clientRes, host, port) {
467
+ const { method, url: path, headers } = clientReq;
468
+ logger.info(`[mitm-proxy] ${method} ${host}${path} -> PASSTHROUGH`);
469
+ const forwardHeaders = { ...headers, host };
470
+ const upstreamReq = https.request({ hostname: host, port, method, path, headers: forwardHeaders }, (upstreamRes) => {
471
+ upstreamRes.on('error', (err) => {
472
+ const log = isConnectionReset(err) ? logger.debug : logger.info;
473
+ log(`[mitm-proxy] upstream response error (passthrough): ${err.message}`);
474
+ if (!clientRes.headersSent) {
475
+ clientRes.writeHead(502, { 'Content-Type': 'text/plain' });
476
+ clientRes.end(`Upstream response error: ${err.message}`);
477
+ }
478
+ else {
479
+ clientRes.socket?.destroy();
480
+ }
481
+ });
482
+ clientRes.writeHead(upstreamRes.statusCode ?? 502, upstreamRes.headers);
483
+ clientRes.flushHeaders();
484
+ clientRes.socket?.setNoDelay(true);
485
+ upstreamRes.pipe(clientRes);
486
+ });
487
+ activeUpstreamRequests.add(upstreamReq);
488
+ upstreamReq.on('close', () => activeUpstreamRequests.delete(upstreamReq));
489
+ upstreamReq.on('error', (err) => {
490
+ const log = isConnectionReset(err) ? logger.debug : logger.info;
491
+ log(`[mitm-proxy] upstream error (passthrough): ${err.message}`);
492
+ activeUpstreamRequests.delete(upstreamReq);
493
+ if (!clientRes.headersSent) {
494
+ clientRes.writeHead(502, { 'Content-Type': 'text/plain' });
495
+ clientRes.end(`Upstream error: ${err.message}`);
496
+ }
497
+ else {
498
+ clientRes.socket?.destroy();
499
+ }
500
+ });
501
+ clientRes.on('close', () => {
502
+ if (!upstreamReq.destroyed) {
503
+ upstreamReq.destroy();
504
+ }
505
+ });
506
+ clientReq.on('error', (err) => {
507
+ const log = isConnectionReset(err) ? logger.debug : logger.info;
508
+ log(`[mitm-proxy] client request error (passthrough): ${err.message}`);
509
+ upstreamReq.destroy();
510
+ });
511
+ clientReq.pipe(upstreamReq);
512
+ }
513
+ // ── DynamicHostController ─────────────────────────────────────────
514
+ const hostController = {
515
+ addHost(domain) {
516
+ validateDomain(domain);
517
+ if (providersByHost.has(domain))
518
+ return false;
519
+ if (passthroughHosts.has(domain))
520
+ return false;
521
+ passthroughHosts.add(domain);
522
+ // Pre-warm cert cache for the new domain
523
+ getOrCreateSecureContext(domain);
524
+ return true;
525
+ },
526
+ removeHost(domain) {
527
+ return passthroughHosts.delete(domain);
528
+ },
529
+ listHosts() {
530
+ return {
531
+ providers: [...providersByHost.keys()],
532
+ dynamic: [...passthroughHosts],
533
+ };
534
+ },
535
+ };
536
+ // ── HTTP Control API server ───────────────────────────────────────
537
+ // Runs on a separate socket, NOT mounted into the container.
538
+ const controlServer = http.createServer((req, res) => {
539
+ const url = req.url ?? '';
540
+ if (url === '/__ironcurtain/domains' && req.method === 'GET') {
541
+ const listing = hostController.listHosts();
542
+ res.writeHead(200, { 'Content-Type': 'application/json' });
543
+ res.end(JSON.stringify(listing));
544
+ return;
545
+ }
546
+ if (url === '/__ironcurtain/domains/add' && req.method === 'POST') {
547
+ bufferRequestBody(req, 4096)
548
+ .then((body) => {
549
+ const { domain } = JSON.parse(body.toString());
550
+ if (typeof domain !== 'string' || !domain) {
551
+ res.writeHead(400, { 'Content-Type': 'application/json' });
552
+ res.end(JSON.stringify({ error: 'Missing required field: domain' }));
553
+ return;
554
+ }
555
+ try {
556
+ const added = hostController.addHost(domain);
557
+ res.writeHead(200, { 'Content-Type': 'application/json' });
558
+ res.end(JSON.stringify({ added }));
559
+ }
560
+ catch (err) {
561
+ res.writeHead(400, { 'Content-Type': 'application/json' });
562
+ res.end(JSON.stringify({ error: err instanceof Error ? err.message : String(err) }));
563
+ }
564
+ })
565
+ .catch((err) => {
566
+ res.writeHead(400, { 'Content-Type': 'text/plain' });
567
+ res.end(err instanceof Error ? err.message : String(err));
568
+ });
569
+ return;
570
+ }
571
+ if (url === '/__ironcurtain/domains/remove' && req.method === 'POST') {
572
+ bufferRequestBody(req, 4096)
573
+ .then((body) => {
574
+ const { domain } = JSON.parse(body.toString());
575
+ if (typeof domain !== 'string' || !domain) {
576
+ res.writeHead(400, { 'Content-Type': 'application/json' });
577
+ res.end(JSON.stringify({ error: 'Missing required field: domain' }));
578
+ return;
579
+ }
580
+ const removed = hostController.removeHost(domain);
581
+ res.writeHead(200, { 'Content-Type': 'application/json' });
582
+ res.end(JSON.stringify({ removed }));
583
+ })
584
+ .catch((err) => {
585
+ res.writeHead(400, { 'Content-Type': 'text/plain' });
586
+ res.end(err instanceof Error ? err.message : String(err));
587
+ });
588
+ return;
589
+ }
590
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
591
+ res.end('Not Found');
592
+ });
454
593
  const useTcp = options.listenPort !== undefined;
455
594
  if (!useTcp && !options.socketPath) {
456
595
  throw new Error('MitmProxyOptions: either socketPath or listenPort must be provided');
457
596
  }
597
+ /** Starts the control API server and returns its address info. */
598
+ async function startControlServer() {
599
+ if (useTcp && options.controlPort !== undefined) {
600
+ return new Promise((resolve, reject) => {
601
+ const onError = reject;
602
+ controlServer.listen(options.controlPort, '127.0.0.1', () => {
603
+ controlServer.removeListener('error', onError);
604
+ const addr = controlServer.address();
605
+ const port = addr && typeof addr === 'object' ? addr.port : (options.controlPort ?? 0);
606
+ resolve({ controlPort: port });
607
+ });
608
+ controlServer.once('error', onError);
609
+ });
610
+ }
611
+ if (options.controlSocketPath) {
612
+ if (existsSync(options.controlSocketPath)) {
613
+ unlinkSync(options.controlSocketPath);
614
+ }
615
+ return new Promise((resolve, reject) => {
616
+ const onError = reject;
617
+ controlServer.listen(options.controlSocketPath, () => {
618
+ controlServer.removeListener('error', onError);
619
+ resolve({ controlSocketPath: options.controlSocketPath });
620
+ });
621
+ controlServer.once('error', onError);
622
+ });
623
+ }
624
+ // No control socket configured -- return empty
625
+ return {};
626
+ }
458
627
  return {
628
+ hosts: hostController,
459
629
  async start() {
460
630
  // Pre-warm cert cache for all configured providers and registries
461
631
  for (const mapping of options.providers) {
@@ -464,6 +634,7 @@ export function createMitmProxy(options) {
464
634
  for (const host of registriesByHost.keys()) {
465
635
  getOrCreateSecureContext(host);
466
636
  }
637
+ const controlResult = await startControlServer();
467
638
  if (useTcp) {
468
639
  // TCP mode: listen on host:port
469
640
  return new Promise((resolve, reject) => {
@@ -472,7 +643,7 @@ export function createMitmProxy(options) {
472
643
  outerServer.removeListener('error', onError);
473
644
  const addr = outerServer.address();
474
645
  const port = addr && typeof addr === 'object' ? addr.port : (options.listenPort ?? 0);
475
- resolve({ port });
646
+ resolve({ port, ...controlResult });
476
647
  });
477
648
  outerServer.once('error', onError);
478
649
  });
@@ -486,7 +657,7 @@ export function createMitmProxy(options) {
486
657
  const onError = reject;
487
658
  outerServer.listen(socketPath, () => {
488
659
  outerServer.removeListener('error', onError);
489
- resolve({ socketPath });
660
+ resolve({ socketPath, ...controlResult });
490
661
  });
491
662
  outerServer.once('error', onError);
492
663
  });
@@ -518,7 +689,12 @@ export function createMitmProxy(options) {
518
689
  // 4. Close the inner HTTP server.
519
690
  innerServer.closeAllConnections();
520
691
  innerServer.close();
521
- // 5. Clean up socket file (UDS mode only)
692
+ // 5. Close the control API server.
693
+ controlServer.closeAllConnections();
694
+ await new Promise((resolve) => {
695
+ controlServer.close(() => resolve());
696
+ });
697
+ // 6. Clean up socket files (UDS mode only)
522
698
  if (!useTcp && options.socketPath) {
523
699
  try {
524
700
  if (existsSync(options.socketPath)) {
@@ -529,6 +705,16 @@ export function createMitmProxy(options) {
529
705
  // Ignore cleanup errors
530
706
  }
531
707
  }
708
+ if (options.controlSocketPath) {
709
+ try {
710
+ if (existsSync(options.controlSocketPath)) {
711
+ unlinkSync(options.controlSocketPath);
712
+ }
713
+ }
714
+ catch {
715
+ // Ignore cleanup errors
716
+ }
717
+ }
532
718
  },
533
719
  };
534
720
  }
@@ -574,10 +760,9 @@ function retryWithRefreshedToken(tokenManager, provider, headers, body, clientRe
574
760
  });
575
761
  }
576
762
  /**
577
- * Validates that the request carries the expected fake key, then replaces
578
- * it with the real key. Returns validation result including whether the
579
- * request actually carried an API key (used to gate 401 retry — requests
580
- * without a key should not have credentials injected on retry).
763
+ * Validates the request's API key header. If the sentinel fake key is
764
+ * present, swaps it for the real key. Non-sentinel keys (the agent's
765
+ * own credentials) are passed through unchanged.
581
766
  */
582
767
  function validateAndSwapApiKey(headers, provider) {
583
768
  const { keyInjection } = provider.config;
@@ -586,20 +771,24 @@ function validateAndSwapApiKey(headers, provider) {
586
771
  const headerName = keyInjection.headerName.toLowerCase();
587
772
  const currentValue = headers[headerName];
588
773
  if (currentValue === undefined)
589
- return { valid: true, hadKey: false };
590
- if (currentValue !== provider.fakeKey)
591
- return { valid: false, hadKey: false };
592
- headers[headerName] = provider.realKey;
593
- return { valid: true, hadKey: true };
774
+ return { hadKey: false, swapped: false };
775
+ if (currentValue === provider.fakeKey) {
776
+ headers[headerName] = provider.realKey;
777
+ return { hadKey: true, swapped: true };
778
+ }
779
+ // Non-sentinel key present -- agent's own credential, pass through
780
+ return { hadKey: true, swapped: false };
594
781
  }
595
782
  case 'bearer': {
596
783
  const authHeader = headers['authorization'];
597
784
  if (authHeader === undefined)
598
- return { valid: true, hadKey: false };
599
- if (authHeader !== `Bearer ${provider.fakeKey}`)
600
- return { valid: false, hadKey: false };
601
- headers['authorization'] = `Bearer ${provider.realKey}`;
602
- return { valid: true, hadKey: true };
785
+ return { hadKey: false, swapped: false };
786
+ if (authHeader === `Bearer ${provider.fakeKey}`) {
787
+ headers['authorization'] = `Bearer ${provider.realKey}`;
788
+ return { hadKey: true, swapped: true };
789
+ }
790
+ // Non-sentinel bearer token -- agent's own credential, pass through
791
+ return { hadKey: true, swapped: false };
603
792
  }
604
793
  }
605
794
  }
@@ -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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"}
@@ -20,11 +20,21 @@ export interface OAuthCredentials {
20
20
  }
21
21
  /** Where OAuth credentials were loaded from. */
22
22
  export type OAuthCredentialSource = 'file' | 'keychain';
23
+ /** Keychain lookup result that preserves the service name for write-back. */
24
+ export interface KeychainResult {
25
+ readonly credentials: OAuthCredentials;
26
+ readonly serviceName: string;
27
+ }
23
28
  /** Authentication method detected on the host. */
24
29
  export type AuthMethod = {
25
30
  readonly kind: 'oauth';
26
31
  readonly credentials: OAuthCredentials;
27
- readonly source: OAuthCredentialSource;
32
+ readonly source: 'file';
33
+ } | {
34
+ readonly kind: 'oauth';
35
+ readonly credentials: OAuthCredentials;
36
+ readonly source: 'keychain';
37
+ readonly keychainServiceName: string;
28
38
  } | {
29
39
  readonly kind: 'apikey';
30
40
  readonly key: string;
@@ -56,14 +66,30 @@ export declare function loadCredentialsFromFile(filePath: string): OAuthCredenti
56
66
  */
57
67
  export declare function parseCredentialsJson(json: string): OAuthCredentials | null;
58
68
  /**
59
- * Attempts to extract OAuth credentials from the macOS Keychain.
69
+ * Attempts to extract OAuth credentials from the macOS Keychain,
70
+ * also returning which service name succeeded (needed for write-back).
60
71
  * Returns null on non-macOS platforms, Keychain access failure, or
61
72
  * when no valid credentials are found.
62
73
  *
63
74
  * Tries both service names because Claude Code has a known bug where
64
75
  * the write and read service names differ.
65
76
  */
77
+ export declare function extractFromKeychainWithService(): KeychainResult | null;
78
+ /**
79
+ * Attempts to extract OAuth credentials from the macOS Keychain.
80
+ * Returns null on non-macOS platforms, Keychain access failure, or
81
+ * when no valid credentials are found.
82
+ *
83
+ * Delegates to extractFromKeychainWithService() and strips the service name.
84
+ */
66
85
  export declare function extractFromKeychain(): OAuthCredentials | null;
86
+ /**
87
+ * Writes updated OAuth credentials back to the macOS Keychain.
88
+ * Preserves existing fields in the Keychain entry (e.g., scopes, subscriptionType).
89
+ *
90
+ * No-op on non-macOS platforms.
91
+ */
92
+ export declare function writeToKeychain(credentials: OAuthCredentials, serviceName: string): void;
67
93
  /**
68
94
  * Refreshes an OAuth access token using a refresh token grant.
69
95
  *
@@ -76,19 +102,32 @@ export declare function refreshOAuthToken(refreshToken: string): Promise<OAuthCr
76
102
  * preserving other fields in the file (e.g., scopes, subscriptionType).
77
103
  */
78
104
  export declare function saveOAuthCredentials(credentials: OAuthCredentials, filePath?: string): void;
79
- /** Injectable credential sources for testability. */
105
+ /**
106
+ * Injectable credential sources for testability.
107
+ *
108
+ * The optional refresh/save/keychain-write functions enable token refresh
109
+ * and persistence in detectAuthMethod(). When these functions are omitted,
110
+ * expired tokens are not refreshed or written back; the caller only receives
111
+ * the detection result (and any existing, possibly stale, credentials).
112
+ */
80
113
  export interface CredentialSources {
81
114
  loadFromFile: () => OAuthCredentials | null;
82
115
  loadFromKeychain: () => OAuthCredentials | null;
116
+ refreshToken?: (refreshToken: string) => Promise<OAuthCredentials | null>;
117
+ saveToFile?: (credentials: OAuthCredentials) => void;
118
+ loadFromKeychainWithService?: () => KeychainResult | null;
119
+ writeToKeychain?: (credentials: OAuthCredentials, serviceName: string) => void;
83
120
  }
84
121
  /**
85
122
  * Detects the best authentication method available on the host.
123
+ * When refresh functions are provided in sources, attempts to refresh
124
+ * expired OAuth tokens before falling back to API key auth.
86
125
  *
87
126
  * Priority:
88
127
  * 1. IRONCURTAIN_DOCKER_AUTH=apikey env var forces API key mode
89
- * 2. OAuth credentials from ~/.claude/.credentials.json (if not expired)
90
- * 3. OAuth credentials from macOS Keychain (if credentials file missing)
128
+ * 2. OAuth credentials from ~/.claude/.credentials.json (valid or refreshable)
129
+ * 3. OAuth credentials from macOS Keychain (valid or refreshable)
91
130
  * 4. API key from config
92
131
  * 5. None
93
132
  */
94
- export declare function detectAuthMethod(config: IronCurtainConfig, sources?: CredentialSources): AuthMethod;
133
+ export declare function detectAuthMethod(config: IronCurtainConfig, sources?: CredentialSources): Promise<AuthMethod>;