@provos/ironcurtain 0.7.2 → 0.9.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 (259) hide show
  1. package/README.md +29 -100
  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/first-start.js +4 -1
  33. package/dist/config/first-start.js.map +1 -1
  34. package/dist/config/generated/test-scenarios.json +1 -1
  35. package/dist/config/generated/tool-annotations.json +10617 -296
  36. package/dist/config/generated-readonly/compiled-policy.json +787 -244
  37. package/dist/config/index.d.ts +2 -2
  38. package/dist/config/index.js +8 -0
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/mcp-servers.json +31 -2
  41. package/dist/config/paths.d.ts +20 -0
  42. package/dist/config/paths.js +43 -0
  43. package/dist/config/paths.js.map +1 -1
  44. package/dist/config/types.d.ts +8 -0
  45. package/dist/config/user-config.d.ts +29 -0
  46. package/dist/config/user-config.js +30 -0
  47. package/dist/config/user-config.js.map +1 -1
  48. package/dist/cron/constitution-generator.d.ts +2 -1
  49. package/dist/cron/constitution-generator.js +35 -36
  50. package/dist/cron/constitution-generator.js.map +1 -1
  51. package/dist/cron/headless-transport.d.ts +4 -0
  52. package/dist/cron/headless-transport.js +1 -1
  53. package/dist/cron/headless-transport.js.map +1 -1
  54. package/dist/daemon/ironcurtain-daemon.js +7 -1
  55. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  56. package/dist/docker/adapters/claude-code.js +32 -5
  57. package/dist/docker/adapters/claude-code.js.map +1 -1
  58. package/dist/docker/agent-adapter.d.ts +40 -0
  59. package/dist/docker/claude-md-seed.d.ts +27 -0
  60. package/dist/docker/claude-md-seed.js +42 -0
  61. package/dist/docker/claude-md-seed.js.map +1 -0
  62. package/dist/docker/docker-agent-session.d.ts +3 -1
  63. package/dist/docker/docker-agent-session.js +51 -28
  64. package/dist/docker/docker-agent-session.js.map +1 -1
  65. package/dist/docker/docker-infrastructure.d.ts +15 -1
  66. package/dist/docker/docker-infrastructure.js +105 -9
  67. package/dist/docker/docker-infrastructure.js.map +1 -1
  68. package/dist/docker/docker-manager.d.ts +2 -0
  69. package/dist/docker/docker-manager.js +9 -1
  70. package/dist/docker/docker-manager.js.map +1 -1
  71. package/dist/docker/mitm-proxy.d.ts +65 -0
  72. package/dist/docker/mitm-proxy.js +288 -31
  73. package/dist/docker/mitm-proxy.js.map +1 -1
  74. package/dist/docker/package-types.d.ts +127 -0
  75. package/dist/docker/package-types.js +8 -0
  76. package/dist/docker/package-types.js.map +1 -0
  77. package/dist/docker/package-validator.d.ts +41 -0
  78. package/dist/docker/package-validator.js +90 -0
  79. package/dist/docker/package-validator.js.map +1 -0
  80. package/dist/docker/platform.d.ts +6 -6
  81. package/dist/docker/platform.js +8 -6
  82. package/dist/docker/platform.js.map +1 -1
  83. package/dist/docker/proxy-tools.d.ts +80 -0
  84. package/dist/docker/proxy-tools.js +248 -0
  85. package/dist/docker/proxy-tools.js.map +1 -0
  86. package/dist/docker/pty-session.d.ts +15 -0
  87. package/dist/docker/pty-session.js +253 -73
  88. package/dist/docker/pty-session.js.map +1 -1
  89. package/dist/docker/pty-types.d.ts +28 -0
  90. package/dist/docker/pty-types.js +2 -0
  91. package/dist/docker/pty-types.js.map +1 -1
  92. package/dist/docker/registry-proxy.d.ts +142 -0
  93. package/dist/docker/registry-proxy.js +856 -0
  94. package/dist/docker/registry-proxy.js.map +1 -0
  95. package/dist/escalation/escalation-watcher.d.ts +3 -1
  96. package/dist/escalation/escalation-watcher.js +6 -2
  97. package/dist/escalation/escalation-watcher.js.map +1 -1
  98. package/dist/escalation/listener-command.js +24 -10
  99. package/dist/escalation/listener-command.js.map +1 -1
  100. package/dist/escalation/listener-lock.d.ts +5 -0
  101. package/dist/escalation/listener-lock.js +14 -0
  102. package/dist/escalation/listener-lock.js.map +1 -1
  103. package/dist/index.js +16 -3
  104. package/dist/index.js.map +1 -1
  105. package/dist/memory/auto-save.d.ts +25 -0
  106. package/dist/memory/auto-save.js +89 -0
  107. package/dist/memory/auto-save.js.map +1 -0
  108. package/dist/memory/memory-annotations.d.ts +47 -0
  109. package/dist/memory/memory-annotations.js +87 -0
  110. package/dist/memory/memory-annotations.js.map +1 -0
  111. package/dist/memory/memory-prompt.d.ts +12 -0
  112. package/dist/memory/memory-prompt.js +20 -0
  113. package/dist/memory/memory-prompt.js.map +1 -0
  114. package/dist/memory/resolve-memory-path.d.ts +20 -0
  115. package/dist/memory/resolve-memory-path.js +30 -0
  116. package/dist/memory/resolve-memory-path.js.map +1 -0
  117. package/dist/mux/mux-app.d.ts +4 -0
  118. package/dist/mux/mux-app.js +246 -28
  119. package/dist/mux/mux-app.js.map +1 -1
  120. package/dist/mux/mux-command.d.ts +2 -2
  121. package/dist/mux/mux-command.js +14 -22
  122. package/dist/mux/mux-command.js.map +1 -1
  123. package/dist/mux/mux-escalation-manager.d.ts +9 -3
  124. package/dist/mux/mux-escalation-manager.js +69 -19
  125. package/dist/mux/mux-escalation-manager.js.map +1 -1
  126. package/dist/mux/mux-input-handler.d.ts +59 -3
  127. package/dist/mux/mux-input-handler.js +270 -32
  128. package/dist/mux/mux-input-handler.js.map +1 -1
  129. package/dist/mux/mux-renderer.d.ts +19 -1
  130. package/dist/mux/mux-renderer.js +466 -11
  131. package/dist/mux/mux-renderer.js.map +1 -1
  132. package/dist/mux/persona-scanner.d.ts +19 -0
  133. package/dist/mux/persona-scanner.js +53 -0
  134. package/dist/mux/persona-scanner.js.map +1 -0
  135. package/dist/mux/pty-bridge.d.ts +8 -0
  136. package/dist/mux/pty-bridge.js +19 -1
  137. package/dist/mux/pty-bridge.js.map +1 -1
  138. package/dist/mux/session-scanner.d.ts +18 -0
  139. package/dist/mux/session-scanner.js +65 -0
  140. package/dist/mux/session-scanner.js.map +1 -0
  141. package/dist/mux/types.d.ts +36 -1
  142. package/dist/mux/types.js +14 -1
  143. package/dist/mux/types.js.map +1 -1
  144. package/dist/persona/persona-command.js +130 -93
  145. package/dist/persona/persona-command.js.map +1 -1
  146. package/dist/persona/persona-prompt.d.ts +7 -7
  147. package/dist/persona/persona-prompt.js +14 -29
  148. package/dist/persona/persona-prompt.js.map +1 -1
  149. package/dist/persona/resolve.js +5 -2
  150. package/dist/persona/resolve.js.map +1 -1
  151. package/dist/pipeline/annotate.js +1 -7
  152. package/dist/pipeline/annotate.js.map +1 -1
  153. package/dist/pipeline/compile.d.ts +5 -2
  154. package/dist/pipeline/compile.js +23 -11
  155. package/dist/pipeline/compile.js.map +1 -1
  156. package/dist/pipeline/constitution-compiler.d.ts +302 -3
  157. package/dist/pipeline/constitution-compiler.js +285 -23
  158. package/dist/pipeline/constitution-compiler.js.map +1 -1
  159. package/dist/pipeline/generate-with-repair.d.ts +2 -2
  160. package/dist/pipeline/generate-with-repair.js +2 -2
  161. package/dist/pipeline/handwritten-scenarios.d.ts +20 -7
  162. package/dist/pipeline/handwritten-scenarios.js +20 -41
  163. package/dist/pipeline/handwritten-scenarios.js.map +1 -1
  164. package/dist/pipeline/list-resolver.d.ts +18 -20
  165. package/dist/pipeline/list-resolver.js +28 -36
  166. package/dist/pipeline/list-resolver.js.map +1 -1
  167. package/dist/pipeline/pipeline-runner.d.ts +102 -13
  168. package/dist/pipeline/pipeline-runner.js +497 -237
  169. package/dist/pipeline/pipeline-runner.js.map +1 -1
  170. package/dist/pipeline/pipeline-shared.d.ts +7 -9
  171. package/dist/pipeline/pipeline-shared.js +8 -18
  172. package/dist/pipeline/pipeline-shared.js.map +1 -1
  173. package/dist/pipeline/policy-verifier.d.ts +32 -5
  174. package/dist/pipeline/policy-verifier.js +137 -8
  175. package/dist/pipeline/policy-verifier.js.map +1 -1
  176. package/dist/pipeline/proxy-mcp-connections.d.ts +25 -0
  177. package/dist/pipeline/proxy-mcp-connections.js +121 -0
  178. package/dist/pipeline/proxy-mcp-connections.js.map +1 -0
  179. package/dist/pipeline/refresh-lists.js +21 -13
  180. package/dist/pipeline/refresh-lists.js.map +1 -1
  181. package/dist/pipeline/scenario-generator.d.ts +29 -49
  182. package/dist/pipeline/scenario-generator.js +180 -143
  183. package/dist/pipeline/scenario-generator.js.map +1 -1
  184. package/dist/pipeline/scenario-schema-validator.d.ts +51 -0
  185. package/dist/pipeline/scenario-schema-validator.js +132 -0
  186. package/dist/pipeline/scenario-schema-validator.js.map +1 -0
  187. package/dist/pipeline/tool-annotator.d.ts +9 -8
  188. package/dist/pipeline/tool-annotator.js +48 -95
  189. package/dist/pipeline/tool-annotator.js.map +1 -1
  190. package/dist/pipeline/types.d.ts +31 -24
  191. package/dist/sandbox/index.d.ts +26 -10
  192. package/dist/sandbox/index.js +151 -40
  193. package/dist/sandbox/index.js.map +1 -1
  194. package/dist/servers/fetch-server.js +10 -5
  195. package/dist/servers/fetch-server.js.map +1 -1
  196. package/dist/session/agent-session.d.ts +8 -20
  197. package/dist/session/agent-session.js +22 -70
  198. package/dist/session/agent-session.js.map +1 -1
  199. package/dist/session/base-transport.d.ts +17 -1
  200. package/dist/session/base-transport.js +25 -1
  201. package/dist/session/base-transport.js.map +1 -1
  202. package/dist/session/cli-transport.d.ts +5 -0
  203. package/dist/session/cli-transport.js +48 -25
  204. package/dist/session/cli-transport.js.map +1 -1
  205. package/dist/session/index.d.ts +25 -1
  206. package/dist/session/index.js +57 -8
  207. package/dist/session/index.js.map +1 -1
  208. package/dist/session/prompts.js +8 -9
  209. package/dist/session/prompts.js.map +1 -1
  210. package/dist/session/session-manager.d.ts +6 -0
  211. package/dist/session/session-manager.js +12 -0
  212. package/dist/session/session-manager.js.map +1 -1
  213. package/dist/session/types.d.ts +11 -1
  214. package/dist/session/types.js.map +1 -1
  215. package/dist/session/workspace-validation.js +37 -6
  216. package/dist/session/workspace-validation.js.map +1 -1
  217. package/dist/signal/signal-bot-daemon.js +24 -8
  218. package/dist/signal/signal-bot-daemon.js.map +1 -1
  219. package/dist/signal/signal-transport.d.ts +5 -2
  220. package/dist/signal/signal-transport.js +3 -3
  221. package/dist/signal/signal-transport.js.map +1 -1
  222. package/dist/trusted-process/approval-whitelist.d.ts +117 -0
  223. package/dist/trusted-process/approval-whitelist.js +237 -0
  224. package/dist/trusted-process/approval-whitelist.js.map +1 -0
  225. package/dist/trusted-process/gworkspace-credentials.d.ts +40 -0
  226. package/dist/trusted-process/gworkspace-credentials.js +45 -0
  227. package/dist/trusted-process/gworkspace-credentials.js.map +1 -0
  228. package/dist/trusted-process/index.d.ts +11 -1
  229. package/dist/trusted-process/index.js +83 -53
  230. package/dist/trusted-process/index.js.map +1 -1
  231. package/dist/trusted-process/mcp-proxy-server.d.ts +23 -0
  232. package/dist/trusted-process/mcp-proxy-server.js +409 -94
  233. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  234. package/dist/trusted-process/policy-engine.d.ts +12 -3
  235. package/dist/trusted-process/policy-engine.js +33 -23
  236. package/dist/trusted-process/policy-engine.js.map +1 -1
  237. package/dist/trusted-process/policy-types.d.ts +17 -0
  238. package/dist/trusted-process/sandbox-integration.d.ts +23 -0
  239. package/dist/trusted-process/sandbox-integration.js +115 -3
  240. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  241. package/dist/trusted-process/token-file-refresher.d.ts +69 -0
  242. package/dist/trusted-process/token-file-refresher.js +120 -0
  243. package/dist/trusted-process/token-file-refresher.js.map +1 -0
  244. package/dist/types/argument-roles.d.ts +7 -1
  245. package/dist/types/argument-roles.js +50 -0
  246. package/dist/types/argument-roles.js.map +1 -1
  247. package/dist/types/audit.d.ts +11 -0
  248. package/docker/Dockerfile.base +22 -0
  249. package/docker/Dockerfile.base.arm64 +44 -4
  250. package/docker/Dockerfile.claude-code +2 -2
  251. package/docker/entrypoint-claude-code.sh +24 -6
  252. package/package.json +8 -2
  253. package/src/config/constitution-user-base.md +15 -0
  254. package/src/config/generated/test-scenarios.json +1 -1
  255. package/src/config/generated/tool-annotations.json +10617 -296
  256. package/src/config/mcp-servers.json +31 -2
  257. package/dist/pipeline/mcp-connections.d.ts +0 -16
  258. package/dist/pipeline/mcp-connections.js +0 -61
  259. package/dist/pipeline/mcp-connections.js.map +0 -1
@@ -19,6 +19,8 @@ import { existsSync, unlinkSync } from 'node:fs';
19
19
  import forge from 'node-forge';
20
20
  import { randomSerialNumber } from './ca.js';
21
21
  import { isEndpointAllowed, shouldRewriteBody, } from './provider-config.js';
22
+ import { DENY_ALL_VALIDATOR } from './package-validator.js';
23
+ import { validateDomain } from './proxy-tools.js';
22
24
  import * as logger from '../logger.js';
23
25
  /** Connection reset errors are routine during proxy shutdown or client disconnect. */
24
26
  function isConnectionReset(err) {
@@ -58,6 +60,8 @@ export function createMitmProxy(options) {
58
60
  for (const mapping of options.providers) {
59
61
  providersByHost.set(mapping.config.host, mapping);
60
62
  }
63
+ // Dynamically added passthrough hosts (no key swap, no endpoint filtering)
64
+ const passthroughHosts = new Set();
61
65
  // Certificate cache: hostname → { ctx, expiresAt }
62
66
  const certCache = new Map();
63
67
  // Renew leaf certs 1 hour before they expire
@@ -95,7 +99,20 @@ export function createMitmProxy(options) {
95
99
  certCache.set(hostname, { ctx, expiresAt });
96
100
  return ctx;
97
101
  }
98
- // Connection tracking
102
+ // Build host → registry lookup (including mirror hosts)
103
+ const registriesByHost = new Map();
104
+ if (options.registries) {
105
+ for (const reg of options.registries) {
106
+ registriesByHost.set(reg.host, reg);
107
+ if (reg.mirrorHosts) {
108
+ for (const mirror of reg.mirrorHosts) {
109
+ registriesByHost.set(mirror, reg);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ // AllowedVersionCache for tarball backstop
115
+ const allowedVersionCache = new Map();
99
116
  const activeClientSockets = new Set();
100
117
  const activeTlsSockets = new Set();
101
118
  const activeUpstreamRequests = new Set();
@@ -111,6 +128,43 @@ export function createMitmProxy(options) {
111
128
  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
112
129
  }
113
130
  });
131
+ // Lazy-loaded registry handler to avoid circular imports.
132
+ // Cached after first import so subsequent calls are synchronous.
133
+ let registryHandlerModule;
134
+ function dispatchRegistryRequest(registry, clientReq, clientRes, host, port) {
135
+ const doDispatch = (mod) => {
136
+ mod
137
+ .handleRegistryRequest(registry, clientReq, clientRes, host, port, {
138
+ validator: options.packageValidation?.validator ?? DENY_ALL_VALIDATOR,
139
+ cache: allowedVersionCache,
140
+ auditLogPath: options.packageValidation?.auditLogPath,
141
+ })
142
+ .catch((err) => {
143
+ logger.info(`[mitm-proxy] registry request error: ${err instanceof Error ? err.message : String(err)}`);
144
+ if (!clientRes.headersSent) {
145
+ clientRes.writeHead(500, { 'Content-Type': 'text/plain' });
146
+ clientRes.end('Internal proxy error');
147
+ }
148
+ });
149
+ };
150
+ if (registryHandlerModule) {
151
+ doDispatch(registryHandlerModule);
152
+ }
153
+ else {
154
+ import('./registry-proxy.js')
155
+ .then((mod) => {
156
+ registryHandlerModule = mod;
157
+ doDispatch(mod);
158
+ })
159
+ .catch((err) => {
160
+ logger.info(`[mitm-proxy] failed to load registry-proxy: ${err instanceof Error ? err.message : String(err)}`);
161
+ if (!clientRes.headersSent) {
162
+ clientRes.writeHead(500, { 'Content-Type': 'text/plain' });
163
+ clientRes.end('Internal proxy error');
164
+ }
165
+ });
166
+ }
167
+ }
114
168
  innerServer.on('request', (clientReq, clientRes) => {
115
169
  const tlsSock = clientReq.socket;
116
170
  const meta = socketMetadata.get(tlsSock);
@@ -119,7 +173,23 @@ export function createMitmProxy(options) {
119
173
  clientRes.end('Internal error: unknown connection');
120
174
  return;
121
175
  }
122
- const { provider, host: targetHost, port: targetPort } = meta;
176
+ const { host: targetHost, port: targetPort } = meta;
177
+ // Dispatch: registry connections are handled separately from provider connections
178
+ if (meta.registry) {
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);
185
+ return;
186
+ }
187
+ if (!meta.provider) {
188
+ clientRes.writeHead(500);
189
+ clientRes.end('Internal error: no provider or registry for connection');
190
+ return;
191
+ }
192
+ const provider = meta.provider;
123
193
  const { method, url: path, headers } = clientReq;
124
194
  // 1. Endpoint filtering
125
195
  if (!isEndpointAllowed(provider.config, method, path)) {
@@ -131,18 +201,13 @@ export function createMitmProxy(options) {
131
201
  // 2. Fake key validation + swap
132
202
  const modifiedHeaders = { ...headers };
133
203
  const keyResult = validateAndSwapApiKey(modifiedHeaders, provider);
134
- if (!keyResult.valid) {
135
- logger.info(`[mitm-proxy] REJECTED ${method} ${targetHost}${path} - invalid API key`);
136
- clientRes.writeHead(403, { 'Content-Type': 'text/plain' });
137
- clientRes.end('Rejected: API key does not match expected sentinel.');
138
- return;
139
- }
140
204
  modifiedHeaders.host = targetHost;
141
205
  // 3. Forward to real API - either direct pipe or buffer+rewrite.
142
206
  // Only enable 401 retry if the request actually carried the fake key —
143
207
  // unauthenticated requests should not have credentials injected on retry.
144
208
  const needsRewrite = shouldRewriteBody(provider.config, method, path);
145
- 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;
146
211
  // Only buffer for retry when the body is small enough (known Content-Length
147
212
  // under 1MB). Large or chunked bodies stream through without retry support
148
213
  // to avoid memory overhead and 413 rejections on large payloads.
@@ -341,15 +406,18 @@ export function createMitmProxy(options) {
341
406
  // Track raw client socket for cleanup during stop()
342
407
  activeClientSockets.add(clientSocket);
343
408
  clientSocket.on('close', () => activeClientSockets.delete(clientSocket));
344
- // 1. Check allowlist
409
+ // 1. Check allowlist (providers, registries, and dynamic passthrough)
345
410
  const provider = providersByHost.get(host);
346
- if (!provider) {
411
+ const registry = registriesByHost.get(host);
412
+ const isPassthrough = !provider && !registry && passthroughHosts.has(host);
413
+ if (!provider && !registry && !isPassthrough) {
347
414
  logger.info(`[mitm-proxy] #${connId} DENIED CONNECT ${host}:${port}`);
348
415
  clientSocket.write('HTTP/1.1 403 Forbidden\r\n\r\n');
349
416
  clientSocket.destroy();
350
417
  return;
351
418
  }
352
- logger.info(`[mitm-proxy] #${connId} CONNECT ${host}:${port} MITM`);
419
+ const connType = provider ? 'provider' : registry ? 'registry' : 'passthrough';
420
+ logger.info(`[mitm-proxy] #${connId} CONNECT ${host}:${port} → MITM (${connType})`);
353
421
  // 2. Acknowledge the CONNECT
354
422
  clientSocket.write('HTTP/1.1 200 Connection Established\r\n\r\n');
355
423
  // 3. Push back any bytes that arrived after the CONNECT request line
@@ -373,7 +441,13 @@ export function createMitmProxy(options) {
373
441
  tlsSocket.once('secure', () => clearTimeout(handshakeTimeout));
374
442
  // 6. Track the connection
375
443
  activeTlsSockets.add(tlsSocket);
376
- socketMetadata.set(tlsSocket, { provider, host, port });
444
+ socketMetadata.set(tlsSocket, {
445
+ provider: provider ?? undefined,
446
+ registry,
447
+ passthrough: isPassthrough,
448
+ host,
449
+ port,
450
+ });
377
451
  tlsSocket.on('error', (err) => {
378
452
  const log = isConnectionReset(err) ? logger.debug : logger.info;
379
453
  log(`[mitm-proxy] #${connId} TLS error: ${err.message}`);
@@ -386,16 +460,181 @@ export function createMitmProxy(options) {
386
460
  // 7. Emit into shared inner HTTP server
387
461
  innerServer.emit('connection', tlsSocket);
388
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
+ });
389
593
  const useTcp = options.listenPort !== undefined;
390
594
  if (!useTcp && !options.socketPath) {
391
595
  throw new Error('MitmProxyOptions: either socketPath or listenPort must be provided');
392
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
+ }
393
627
  return {
628
+ hosts: hostController,
394
629
  async start() {
395
- // Pre-warm cert cache for all configured providers
630
+ // Pre-warm cert cache for all configured providers and registries
396
631
  for (const mapping of options.providers) {
397
632
  getOrCreateSecureContext(mapping.config.host);
398
633
  }
634
+ for (const host of registriesByHost.keys()) {
635
+ getOrCreateSecureContext(host);
636
+ }
637
+ const controlResult = await startControlServer();
399
638
  if (useTcp) {
400
639
  // TCP mode: listen on host:port
401
640
  return new Promise((resolve, reject) => {
@@ -404,7 +643,7 @@ export function createMitmProxy(options) {
404
643
  outerServer.removeListener('error', onError);
405
644
  const addr = outerServer.address();
406
645
  const port = addr && typeof addr === 'object' ? addr.port : (options.listenPort ?? 0);
407
- resolve({ port });
646
+ resolve({ port, ...controlResult });
408
647
  });
409
648
  outerServer.once('error', onError);
410
649
  });
@@ -418,7 +657,7 @@ export function createMitmProxy(options) {
418
657
  const onError = reject;
419
658
  outerServer.listen(socketPath, () => {
420
659
  outerServer.removeListener('error', onError);
421
- resolve({ socketPath });
660
+ resolve({ socketPath, ...controlResult });
422
661
  });
423
662
  outerServer.once('error', onError);
424
663
  });
@@ -450,7 +689,12 @@ export function createMitmProxy(options) {
450
689
  // 4. Close the inner HTTP server.
451
690
  innerServer.closeAllConnections();
452
691
  innerServer.close();
453
- // 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)
454
698
  if (!useTcp && options.socketPath) {
455
699
  try {
456
700
  if (existsSync(options.socketPath)) {
@@ -461,6 +705,16 @@ export function createMitmProxy(options) {
461
705
  // Ignore cleanup errors
462
706
  }
463
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
+ }
464
718
  },
465
719
  };
466
720
  }
@@ -506,10 +760,9 @@ function retryWithRefreshedToken(tokenManager, provider, headers, body, clientRe
506
760
  });
507
761
  }
508
762
  /**
509
- * Validates that the request carries the expected fake key, then replaces
510
- * it with the real key. Returns validation result including whether the
511
- * request actually carried an API key (used to gate 401 retry — requests
512
- * 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.
513
766
  */
514
767
  function validateAndSwapApiKey(headers, provider) {
515
768
  const { keyInjection } = provider.config;
@@ -518,20 +771,24 @@ function validateAndSwapApiKey(headers, provider) {
518
771
  const headerName = keyInjection.headerName.toLowerCase();
519
772
  const currentValue = headers[headerName];
520
773
  if (currentValue === undefined)
521
- return { valid: true, hadKey: false };
522
- if (currentValue !== provider.fakeKey)
523
- return { valid: false, hadKey: false };
524
- headers[headerName] = provider.realKey;
525
- 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 };
526
781
  }
527
782
  case 'bearer': {
528
783
  const authHeader = headers['authorization'];
529
784
  if (authHeader === undefined)
530
- return { valid: true, hadKey: false };
531
- if (authHeader !== `Bearer ${provider.fakeKey}`)
532
- return { valid: false, hadKey: false };
533
- headers['authorization'] = `Bearer ${provider.realKey}`;
534
- 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 };
535
792
  }
536
793
  }
537
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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"}