@aion0/bastion 0.1.7

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +183 -0
  3. package/README.zh.md +468 -0
  4. package/config/default.yaml +73 -0
  5. package/dist/cli/commands/config.d.ts +3 -0
  6. package/dist/cli/commands/config.d.ts.map +1 -0
  7. package/dist/cli/commands/config.js +31 -0
  8. package/dist/cli/commands/config.js.map +1 -0
  9. package/dist/cli/commands/env.d.ts +3 -0
  10. package/dist/cli/commands/env.d.ts.map +1 -0
  11. package/dist/cli/commands/env.js +83 -0
  12. package/dist/cli/commands/env.js.map +1 -0
  13. package/dist/cli/commands/health.d.ts +3 -0
  14. package/dist/cli/commands/health.d.ts.map +1 -0
  15. package/dist/cli/commands/health.js +45 -0
  16. package/dist/cli/commands/health.js.map +1 -0
  17. package/dist/cli/commands/openclaw.d.ts +3 -0
  18. package/dist/cli/commands/openclaw.d.ts.map +1 -0
  19. package/dist/cli/commands/openclaw.js +1062 -0
  20. package/dist/cli/commands/openclaw.js.map +1 -0
  21. package/dist/cli/commands/proxy.d.ts +8 -0
  22. package/dist/cli/commands/proxy.d.ts.map +1 -0
  23. package/dist/cli/commands/proxy.js +433 -0
  24. package/dist/cli/commands/proxy.js.map +1 -0
  25. package/dist/cli/commands/start.d.ts +3 -0
  26. package/dist/cli/commands/start.d.ts.map +1 -0
  27. package/dist/cli/commands/start.js +62 -0
  28. package/dist/cli/commands/start.js.map +1 -0
  29. package/dist/cli/commands/stats.d.ts +3 -0
  30. package/dist/cli/commands/stats.d.ts.map +1 -0
  31. package/dist/cli/commands/stats.js +32 -0
  32. package/dist/cli/commands/stats.js.map +1 -0
  33. package/dist/cli/commands/stop.d.ts +3 -0
  34. package/dist/cli/commands/stop.d.ts.map +1 -0
  35. package/dist/cli/commands/stop.js +28 -0
  36. package/dist/cli/commands/stop.js.map +1 -0
  37. package/dist/cli/commands/token.d.ts +3 -0
  38. package/dist/cli/commands/token.d.ts.map +1 -0
  39. package/dist/cli/commands/token.js +32 -0
  40. package/dist/cli/commands/token.js.map +1 -0
  41. package/dist/cli/commands/trust-ca.d.ts +3 -0
  42. package/dist/cli/commands/trust-ca.d.ts.map +1 -0
  43. package/dist/cli/commands/trust-ca.js +44 -0
  44. package/dist/cli/commands/trust-ca.js.map +1 -0
  45. package/dist/cli/commands/wrap.d.ts +3 -0
  46. package/dist/cli/commands/wrap.d.ts.map +1 -0
  47. package/dist/cli/commands/wrap.js +70 -0
  48. package/dist/cli/commands/wrap.js.map +1 -0
  49. package/dist/cli/daemon.d.ts +11 -0
  50. package/dist/cli/daemon.d.ts.map +1 -0
  51. package/dist/cli/daemon.js +82 -0
  52. package/dist/cli/daemon.js.map +1 -0
  53. package/dist/cli/index.d.ts +3 -0
  54. package/dist/cli/index.d.ts.map +1 -0
  55. package/dist/cli/index.js +35 -0
  56. package/dist/cli/index.js.map +1 -0
  57. package/dist/config/index.d.ts +3 -0
  58. package/dist/config/index.d.ts.map +1 -0
  59. package/dist/config/index.js +60 -0
  60. package/dist/config/index.js.map +1 -0
  61. package/dist/config/manager.d.ts +12 -0
  62. package/dist/config/manager.d.ts.map +1 -0
  63. package/dist/config/manager.js +73 -0
  64. package/dist/config/manager.js.map +1 -0
  65. package/dist/config/paths.d.ts +10 -0
  66. package/dist/config/paths.d.ts.map +1 -0
  67. package/dist/config/paths.js +16 -0
  68. package/dist/config/paths.js.map +1 -0
  69. package/dist/config/schema.d.ts +85 -0
  70. package/dist/config/schema.d.ts.map +1 -0
  71. package/dist/config/schema.js +3 -0
  72. package/dist/config/schema.js.map +1 -0
  73. package/dist/dashboard/api-routes.d.ts +6 -0
  74. package/dist/dashboard/api-routes.d.ts.map +1 -0
  75. package/dist/dashboard/api-routes.js +671 -0
  76. package/dist/dashboard/api-routes.js.map +1 -0
  77. package/dist/dashboard/api.d.ts +4 -0
  78. package/dist/dashboard/api.d.ts.map +1 -0
  79. package/dist/dashboard/api.js +25 -0
  80. package/dist/dashboard/api.js.map +1 -0
  81. package/dist/dashboard/page.d.ts +3 -0
  82. package/dist/dashboard/page.d.ts.map +1 -0
  83. package/dist/dashboard/page.js +1622 -0
  84. package/dist/dashboard/page.js.map +1 -0
  85. package/dist/dlp/actions.d.ts +13 -0
  86. package/dist/dlp/actions.d.ts.map +1 -0
  87. package/dist/dlp/actions.js +3 -0
  88. package/dist/dlp/actions.js.map +1 -0
  89. package/dist/dlp/ai-validator.d.ts +28 -0
  90. package/dist/dlp/ai-validator.d.ts.map +1 -0
  91. package/dist/dlp/ai-validator.js +214 -0
  92. package/dist/dlp/ai-validator.js.map +1 -0
  93. package/dist/dlp/engine.d.ts +34 -0
  94. package/dist/dlp/engine.d.ts.map +1 -0
  95. package/dist/dlp/engine.js +342 -0
  96. package/dist/dlp/engine.js.map +1 -0
  97. package/dist/dlp/entropy.d.ts +22 -0
  98. package/dist/dlp/entropy.d.ts.map +1 -0
  99. package/dist/dlp/entropy.js +43 -0
  100. package/dist/dlp/entropy.js.map +1 -0
  101. package/dist/dlp/message-cache.d.ts +45 -0
  102. package/dist/dlp/message-cache.d.ts.map +1 -0
  103. package/dist/dlp/message-cache.js +251 -0
  104. package/dist/dlp/message-cache.js.map +1 -0
  105. package/dist/dlp/patterns/context-aware.d.ts +4 -0
  106. package/dist/dlp/patterns/context-aware.d.ts.map +1 -0
  107. package/dist/dlp/patterns/context-aware.js +45 -0
  108. package/dist/dlp/patterns/context-aware.js.map +1 -0
  109. package/dist/dlp/patterns/high-confidence.d.ts +4 -0
  110. package/dist/dlp/patterns/high-confidence.d.ts.map +1 -0
  111. package/dist/dlp/patterns/high-confidence.js +140 -0
  112. package/dist/dlp/patterns/high-confidence.js.map +1 -0
  113. package/dist/dlp/patterns/prompt-injection.d.ts +4 -0
  114. package/dist/dlp/patterns/prompt-injection.d.ts.map +1 -0
  115. package/dist/dlp/patterns/prompt-injection.js +244 -0
  116. package/dist/dlp/patterns/prompt-injection.js.map +1 -0
  117. package/dist/dlp/patterns/validated.d.ts +4 -0
  118. package/dist/dlp/patterns/validated.d.ts.map +1 -0
  119. package/dist/dlp/patterns/validated.js +21 -0
  120. package/dist/dlp/patterns/validated.js.map +1 -0
  121. package/dist/dlp/remote-sync.d.ts +47 -0
  122. package/dist/dlp/remote-sync.d.ts.map +1 -0
  123. package/dist/dlp/remote-sync.js +252 -0
  124. package/dist/dlp/remote-sync.js.map +1 -0
  125. package/dist/dlp/semantics.d.ts +27 -0
  126. package/dist/dlp/semantics.d.ts.map +1 -0
  127. package/dist/dlp/semantics.js +93 -0
  128. package/dist/dlp/semantics.js.map +1 -0
  129. package/dist/dlp/structure.d.ts +25 -0
  130. package/dist/dlp/structure.d.ts.map +1 -0
  131. package/dist/dlp/structure.js +86 -0
  132. package/dist/dlp/structure.js.map +1 -0
  133. package/dist/dlp/validators.d.ts +6 -0
  134. package/dist/dlp/validators.d.ts.map +1 -0
  135. package/dist/dlp/validators.js +46 -0
  136. package/dist/dlp/validators.js.map +1 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +200 -0
  140. package/dist/index.js.map +1 -0
  141. package/dist/license/verify.d.ts +18 -0
  142. package/dist/license/verify.d.ts.map +1 -0
  143. package/dist/license/verify.js +71 -0
  144. package/dist/license/verify.js.map +1 -0
  145. package/dist/metrics/collector.d.ts +11 -0
  146. package/dist/metrics/collector.d.ts.map +1 -0
  147. package/dist/metrics/collector.js +17 -0
  148. package/dist/metrics/collector.js.map +1 -0
  149. package/dist/metrics/dashboard.d.ts +6 -0
  150. package/dist/metrics/dashboard.d.ts.map +1 -0
  151. package/dist/metrics/dashboard.js +66 -0
  152. package/dist/metrics/dashboard.js.map +1 -0
  153. package/dist/metrics/pricing.d.ts +10 -0
  154. package/dist/metrics/pricing.d.ts.map +1 -0
  155. package/dist/metrics/pricing.js +62 -0
  156. package/dist/metrics/pricing.js.map +1 -0
  157. package/dist/optimizer/cache.d.ts +14 -0
  158. package/dist/optimizer/cache.d.ts.map +1 -0
  159. package/dist/optimizer/cache.js +58 -0
  160. package/dist/optimizer/cache.js.map +1 -0
  161. package/dist/optimizer/estimator.d.ts +6 -0
  162. package/dist/optimizer/estimator.d.ts.map +1 -0
  163. package/dist/optimizer/estimator.js +12 -0
  164. package/dist/optimizer/estimator.js.map +1 -0
  165. package/dist/optimizer/reorder.d.ts +9 -0
  166. package/dist/optimizer/reorder.d.ts.map +1 -0
  167. package/dist/optimizer/reorder.js +27 -0
  168. package/dist/optimizer/reorder.js.map +1 -0
  169. package/dist/optimizer/trimmer.d.ts +9 -0
  170. package/dist/optimizer/trimmer.d.ts.map +1 -0
  171. package/dist/optimizer/trimmer.js +47 -0
  172. package/dist/optimizer/trimmer.js.map +1 -0
  173. package/dist/plugin-api/index.d.ts +3 -0
  174. package/dist/plugin-api/index.d.ts.map +1 -0
  175. package/dist/plugin-api/index.js +6 -0
  176. package/dist/plugin-api/index.js.map +1 -0
  177. package/dist/plugin-api/types.d.ts +77 -0
  178. package/dist/plugin-api/types.d.ts.map +1 -0
  179. package/dist/plugin-api/types.js +6 -0
  180. package/dist/plugin-api/types.js.map +1 -0
  181. package/dist/plugins/adapter.d.ts +12 -0
  182. package/dist/plugins/adapter.d.ts.map +1 -0
  183. package/dist/plugins/adapter.js +116 -0
  184. package/dist/plugins/adapter.js.map +1 -0
  185. package/dist/plugins/builtin/audit-logger.d.ts +9 -0
  186. package/dist/plugins/builtin/audit-logger.d.ts.map +1 -0
  187. package/dist/plugins/builtin/audit-logger.js +53 -0
  188. package/dist/plugins/builtin/audit-logger.js.map +1 -0
  189. package/dist/plugins/builtin/dlp-scanner.d.ts +19 -0
  190. package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -0
  191. package/dist/plugins/builtin/dlp-scanner.js +284 -0
  192. package/dist/plugins/builtin/dlp-scanner.js.map +1 -0
  193. package/dist/plugins/builtin/metrics-collector.d.ts +4 -0
  194. package/dist/plugins/builtin/metrics-collector.d.ts.map +1 -0
  195. package/dist/plugins/builtin/metrics-collector.js +111 -0
  196. package/dist/plugins/builtin/metrics-collector.js.map +1 -0
  197. package/dist/plugins/builtin/token-optimizer.d.ts +10 -0
  198. package/dist/plugins/builtin/token-optimizer.d.ts.map +1 -0
  199. package/dist/plugins/builtin/token-optimizer.js +120 -0
  200. package/dist/plugins/builtin/token-optimizer.js.map +1 -0
  201. package/dist/plugins/builtin/tool-guard.d.ts +20 -0
  202. package/dist/plugins/builtin/tool-guard.d.ts.map +1 -0
  203. package/dist/plugins/builtin/tool-guard.js +259 -0
  204. package/dist/plugins/builtin/tool-guard.js.map +1 -0
  205. package/dist/plugins/context.d.ts +8 -0
  206. package/dist/plugins/context.d.ts.map +1 -0
  207. package/dist/plugins/context.js +33 -0
  208. package/dist/plugins/context.js.map +1 -0
  209. package/dist/plugins/event-bus.d.ts +9 -0
  210. package/dist/plugins/event-bus.d.ts.map +1 -0
  211. package/dist/plugins/event-bus.js +25 -0
  212. package/dist/plugins/event-bus.js.map +1 -0
  213. package/dist/plugins/index.d.ts +18 -0
  214. package/dist/plugins/index.d.ts.map +1 -0
  215. package/dist/plugins/index.js +148 -0
  216. package/dist/plugins/index.js.map +1 -0
  217. package/dist/plugins/loader.d.ts +14 -0
  218. package/dist/plugins/loader.d.ts.map +1 -0
  219. package/dist/plugins/loader.js +98 -0
  220. package/dist/plugins/loader.js.map +1 -0
  221. package/dist/plugins/types.d.ts +91 -0
  222. package/dist/plugins/types.d.ts.map +1 -0
  223. package/dist/plugins/types.js +3 -0
  224. package/dist/plugins/types.js.map +1 -0
  225. package/dist/proxy/certs.d.ts +10 -0
  226. package/dist/proxy/certs.d.ts.map +1 -0
  227. package/dist/proxy/certs.js +110 -0
  228. package/dist/proxy/certs.js.map +1 -0
  229. package/dist/proxy/connect.d.ts +11 -0
  230. package/dist/proxy/connect.d.ts.map +1 -0
  231. package/dist/proxy/connect.js +298 -0
  232. package/dist/proxy/connect.js.map +1 -0
  233. package/dist/proxy/forwarder.d.ts +14 -0
  234. package/dist/proxy/forwarder.d.ts.map +1 -0
  235. package/dist/proxy/forwarder.js +342 -0
  236. package/dist/proxy/forwarder.js.map +1 -0
  237. package/dist/proxy/passthrough.d.ts +4 -0
  238. package/dist/proxy/passthrough.d.ts.map +1 -0
  239. package/dist/proxy/passthrough.js +68 -0
  240. package/dist/proxy/passthrough.js.map +1 -0
  241. package/dist/proxy/providers/anthropic.d.ts +4 -0
  242. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  243. package/dist/proxy/providers/anthropic.js +46 -0
  244. package/dist/proxy/providers/anthropic.js.map +1 -0
  245. package/dist/proxy/providers/classify.d.ts +14 -0
  246. package/dist/proxy/providers/classify.d.ts.map +1 -0
  247. package/dist/proxy/providers/classify.js +37 -0
  248. package/dist/proxy/providers/classify.js.map +1 -0
  249. package/dist/proxy/providers/claude-web.d.ts +8 -0
  250. package/dist/proxy/providers/claude-web.d.ts.map +1 -0
  251. package/dist/proxy/providers/claude-web.js +50 -0
  252. package/dist/proxy/providers/claude-web.js.map +1 -0
  253. package/dist/proxy/providers/gemini.d.ts +4 -0
  254. package/dist/proxy/providers/gemini.d.ts.map +1 -0
  255. package/dist/proxy/providers/gemini.js +38 -0
  256. package/dist/proxy/providers/gemini.js.map +1 -0
  257. package/dist/proxy/providers/index.d.ts +27 -0
  258. package/dist/proxy/providers/index.d.ts.map +1 -0
  259. package/dist/proxy/providers/index.js +32 -0
  260. package/dist/proxy/providers/index.js.map +1 -0
  261. package/dist/proxy/providers/messaging.d.ts +2 -0
  262. package/dist/proxy/providers/messaging.d.ts.map +1 -0
  263. package/dist/proxy/providers/messaging.js +53 -0
  264. package/dist/proxy/providers/messaging.js.map +1 -0
  265. package/dist/proxy/providers/openai.d.ts +4 -0
  266. package/dist/proxy/providers/openai.d.ts.map +1 -0
  267. package/dist/proxy/providers/openai.js +38 -0
  268. package/dist/proxy/providers/openai.js.map +1 -0
  269. package/dist/proxy/providers/telegram.d.ts +8 -0
  270. package/dist/proxy/providers/telegram.d.ts.map +1 -0
  271. package/dist/proxy/providers/telegram.js +35 -0
  272. package/dist/proxy/providers/telegram.js.map +1 -0
  273. package/dist/proxy/router.d.ts +12 -0
  274. package/dist/proxy/router.d.ts.map +1 -0
  275. package/dist/proxy/router.js +26 -0
  276. package/dist/proxy/router.js.map +1 -0
  277. package/dist/proxy/safety.d.ts +13 -0
  278. package/dist/proxy/safety.d.ts.map +1 -0
  279. package/dist/proxy/safety.js +58 -0
  280. package/dist/proxy/safety.js.map +1 -0
  281. package/dist/proxy/server.d.ts +8 -0
  282. package/dist/proxy/server.d.ts.map +1 -0
  283. package/dist/proxy/server.js +126 -0
  284. package/dist/proxy/server.js.map +1 -0
  285. package/dist/proxy/streaming.d.ts +21 -0
  286. package/dist/proxy/streaming.d.ts.map +1 -0
  287. package/dist/proxy/streaming.js +70 -0
  288. package/dist/proxy/streaming.js.map +1 -0
  289. package/dist/storage/database.d.ts +6 -0
  290. package/dist/storage/database.d.ts.map +1 -0
  291. package/dist/storage/database.js +44 -0
  292. package/dist/storage/database.js.map +1 -0
  293. package/dist/storage/encryption.d.ts +11 -0
  294. package/dist/storage/encryption.d.ts.map +1 -0
  295. package/dist/storage/encryption.js +47 -0
  296. package/dist/storage/encryption.js.map +1 -0
  297. package/dist/storage/migrations.d.ts +3 -0
  298. package/dist/storage/migrations.d.ts.map +1 -0
  299. package/dist/storage/migrations.js +265 -0
  300. package/dist/storage/migrations.js.map +1 -0
  301. package/dist/storage/repositories/audit-log.d.ts +115 -0
  302. package/dist/storage/repositories/audit-log.d.ts.map +1 -0
  303. package/dist/storage/repositories/audit-log.js +586 -0
  304. package/dist/storage/repositories/audit-log.js.map +1 -0
  305. package/dist/storage/repositories/cache.d.ts +26 -0
  306. package/dist/storage/repositories/cache.d.ts.map +1 -0
  307. package/dist/storage/repositories/cache.js +44 -0
  308. package/dist/storage/repositories/cache.js.map +1 -0
  309. package/dist/storage/repositories/dlp-config-history.d.ts +17 -0
  310. package/dist/storage/repositories/dlp-config-history.d.ts.map +1 -0
  311. package/dist/storage/repositories/dlp-config-history.js +30 -0
  312. package/dist/storage/repositories/dlp-config-history.js.map +1 -0
  313. package/dist/storage/repositories/dlp-events.d.ts +35 -0
  314. package/dist/storage/repositories/dlp-events.d.ts.map +1 -0
  315. package/dist/storage/repositories/dlp-events.js +57 -0
  316. package/dist/storage/repositories/dlp-events.js.map +1 -0
  317. package/dist/storage/repositories/dlp-patterns.d.ts +70 -0
  318. package/dist/storage/repositories/dlp-patterns.d.ts.map +1 -0
  319. package/dist/storage/repositories/dlp-patterns.js +187 -0
  320. package/dist/storage/repositories/dlp-patterns.js.map +1 -0
  321. package/dist/storage/repositories/optimizer-events.d.ts +28 -0
  322. package/dist/storage/repositories/optimizer-events.d.ts.map +1 -0
  323. package/dist/storage/repositories/optimizer-events.js +49 -0
  324. package/dist/storage/repositories/optimizer-events.js.map +1 -0
  325. package/dist/storage/repositories/plugin-events.d.ts +34 -0
  326. package/dist/storage/repositories/plugin-events.d.ts.map +1 -0
  327. package/dist/storage/repositories/plugin-events.js +64 -0
  328. package/dist/storage/repositories/plugin-events.js.map +1 -0
  329. package/dist/storage/repositories/requests.d.ts +68 -0
  330. package/dist/storage/repositories/requests.d.ts.map +1 -0
  331. package/dist/storage/repositories/requests.js +113 -0
  332. package/dist/storage/repositories/requests.js.map +1 -0
  333. package/dist/storage/repositories/sessions.d.ts +23 -0
  334. package/dist/storage/repositories/sessions.d.ts.map +1 -0
  335. package/dist/storage/repositories/sessions.js +42 -0
  336. package/dist/storage/repositories/sessions.js.map +1 -0
  337. package/dist/storage/repositories/tool-calls.d.ts +49 -0
  338. package/dist/storage/repositories/tool-calls.d.ts.map +1 -0
  339. package/dist/storage/repositories/tool-calls.js +61 -0
  340. package/dist/storage/repositories/tool-calls.js.map +1 -0
  341. package/dist/storage/repositories/tool-guard-rules.d.ts +50 -0
  342. package/dist/storage/repositories/tool-guard-rules.d.ts.map +1 -0
  343. package/dist/storage/repositories/tool-guard-rules.js +120 -0
  344. package/dist/storage/repositories/tool-guard-rules.js.map +1 -0
  345. package/dist/tool-guard/alert.d.ts +30 -0
  346. package/dist/tool-guard/alert.d.ts.map +1 -0
  347. package/dist/tool-guard/alert.js +113 -0
  348. package/dist/tool-guard/alert.js.map +1 -0
  349. package/dist/tool-guard/extractor.d.ts +10 -0
  350. package/dist/tool-guard/extractor.d.ts.map +1 -0
  351. package/dist/tool-guard/extractor.js +309 -0
  352. package/dist/tool-guard/extractor.js.map +1 -0
  353. package/dist/tool-guard/rules.d.ts +18 -0
  354. package/dist/tool-guard/rules.d.ts.map +1 -0
  355. package/dist/tool-guard/rules.js +255 -0
  356. package/dist/tool-guard/rules.js.map +1 -0
  357. package/dist/tool-guard/streaming-guard.d.ts +57 -0
  358. package/dist/tool-guard/streaming-guard.d.ts.map +1 -0
  359. package/dist/tool-guard/streaming-guard.js +389 -0
  360. package/dist/tool-guard/streaming-guard.js.map +1 -0
  361. package/dist/utils/hash.d.ts +2 -0
  362. package/dist/utils/hash.d.ts.map +1 -0
  363. package/dist/utils/hash.js +8 -0
  364. package/dist/utils/hash.js.map +1 -0
  365. package/dist/utils/logger.d.ts +11 -0
  366. package/dist/utils/logger.d.ts.map +1 -0
  367. package/dist/utils/logger.js +54 -0
  368. package/dist/utils/logger.js.map +1 -0
  369. package/dist/utils/timeout.d.ts +5 -0
  370. package/dist/utils/timeout.d.ts.map +1 -0
  371. package/dist/utils/timeout.js +26 -0
  372. package/dist/utils/timeout.js.map +1 -0
  373. package/dist/version.d.ts +5 -0
  374. package/dist/version.d.ts.map +1 -0
  375. package/dist/version.js +23 -0
  376. package/dist/version.js.map +1 -0
  377. package/package.json +67 -0
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PluginManager = void 0;
4
+ const timeout_js_1 = require("../utils/timeout.js");
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ const log = (0, logger_js_1.createLogger)('plugins');
7
+ class PluginManager {
8
+ plugins = [];
9
+ disabledPlugins = new Set();
10
+ timeoutMs;
11
+ failMode;
12
+ constructor(timeoutMs = 50, failMode = 'open') {
13
+ this.timeoutMs = timeoutMs;
14
+ this.failMode = failMode;
15
+ }
16
+ setFailMode(mode) {
17
+ this.failMode = mode;
18
+ log.info('Fail mode updated', { failMode: mode });
19
+ }
20
+ register(plugin) {
21
+ this.plugins.push(plugin);
22
+ this.plugins.sort((a, b) => a.priority - b.priority);
23
+ log.info('Plugin registered', { name: plugin.name, priority: plugin.priority });
24
+ }
25
+ getPlugins() {
26
+ return [...this.plugins];
27
+ }
28
+ disable(name) {
29
+ const plugin = this.plugins.find((p) => p.name === name);
30
+ if (!plugin)
31
+ return false;
32
+ this.disabledPlugins.add(name);
33
+ log.info('Plugin disabled', { name });
34
+ return true;
35
+ }
36
+ enable(name) {
37
+ const existed = this.disabledPlugins.delete(name);
38
+ if (existed) {
39
+ log.info('Plugin enabled', { name });
40
+ }
41
+ return existed;
42
+ }
43
+ isDisabled(name) {
44
+ return this.disabledPlugins.has(name);
45
+ }
46
+ async runOnRequest(context) {
47
+ const result = {};
48
+ for (const plugin of this.plugins) {
49
+ if (!plugin.onRequest || this.disabledPlugins.has(plugin.name))
50
+ continue;
51
+ try {
52
+ const pluginResult = await (0, timeout_js_1.withTimeout)(plugin.onRequest(context), this.timeoutMs);
53
+ if (pluginResult) {
54
+ // Short-circuit takes priority
55
+ if (pluginResult.shortCircuit) {
56
+ log.info('Plugin short-circuited request', { plugin: plugin.name });
57
+ return pluginResult;
58
+ }
59
+ // Block takes second priority
60
+ if (pluginResult.blocked) {
61
+ log.info('Plugin blocked request', { plugin: plugin.name, reason: pluginResult.blocked.reason });
62
+ return pluginResult;
63
+ }
64
+ // Accumulate body modifications
65
+ if (pluginResult.modifiedBody) {
66
+ result.modifiedBody = pluginResult.modifiedBody;
67
+ // Update context body for next plugin
68
+ context.body = pluginResult.modifiedBody;
69
+ }
70
+ }
71
+ }
72
+ catch (err) {
73
+ const reason = err instanceof timeout_js_1.TimeoutError
74
+ ? 'timeout'
75
+ : err.message;
76
+ if (this.failMode === 'closed') {
77
+ log.error('Plugin failed in fail-closed mode, rejecting request', { plugin: plugin.name, reason });
78
+ return { pluginError: { pluginName: plugin.name, reason } };
79
+ }
80
+ if (err instanceof timeout_js_1.TimeoutError) {
81
+ log.warn('Plugin timed out, skipping', { plugin: plugin.name });
82
+ }
83
+ else {
84
+ log.warn('Plugin error, skipping', { plugin: plugin.name, error: reason });
85
+ }
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ async runOnResponse(context) {
91
+ const result = {};
92
+ for (const plugin of this.plugins) {
93
+ if (!plugin.onResponse || this.disabledPlugins.has(plugin.name))
94
+ continue;
95
+ try {
96
+ const pluginResult = await (0, timeout_js_1.withTimeout)(plugin.onResponse(context), this.timeoutMs * 100);
97
+ if (pluginResult) {
98
+ if (pluginResult.blocked) {
99
+ log.info('Plugin blocked response', { plugin: plugin.name, reason: pluginResult.blocked.reason });
100
+ return pluginResult;
101
+ }
102
+ if (pluginResult.modifiedBody) {
103
+ result.modifiedBody = pluginResult.modifiedBody;
104
+ context.body = pluginResult.modifiedBody;
105
+ }
106
+ }
107
+ }
108
+ catch (err) {
109
+ const reason = err instanceof timeout_js_1.TimeoutError
110
+ ? 'timeout'
111
+ : err.message;
112
+ if (this.failMode === 'closed') {
113
+ log.error('Plugin onResponse failed in fail-closed mode, rejecting', { plugin: plugin.name, reason });
114
+ return { pluginError: { pluginName: plugin.name, reason } };
115
+ }
116
+ if (err instanceof timeout_js_1.TimeoutError) {
117
+ log.warn('Plugin onResponse timed out, skipping', { plugin: plugin.name });
118
+ }
119
+ else {
120
+ log.warn('Plugin onResponse error, skipping', { plugin: plugin.name, error: reason });
121
+ }
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ async runOnResponseComplete(context) {
127
+ for (const plugin of this.plugins) {
128
+ if (!plugin.onResponseComplete || this.disabledPlugins.has(plugin.name))
129
+ continue;
130
+ try {
131
+ await (0, timeout_js_1.withTimeout)(plugin.onResponseComplete(context), this.timeoutMs * 10);
132
+ }
133
+ catch (err) {
134
+ if (err instanceof timeout_js_1.TimeoutError) {
135
+ log.warn('Plugin onResponseComplete timed out, skipping', { plugin: plugin.name });
136
+ }
137
+ else {
138
+ log.warn('Plugin onResponseComplete error, skipping', {
139
+ plugin: plugin.name,
140
+ error: err.message,
141
+ });
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ exports.PluginManager = PluginManager;
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { Plugin } from './types.js';
3
+ import type { PluginEventBus } from './event-bus.js';
4
+ export interface ExternalPluginConfig {
5
+ package: string;
6
+ enabled: boolean;
7
+ config?: Record<string, unknown>;
8
+ }
9
+ export declare function loadExternalPlugins(externalConfigs: ExternalPluginConfig[], db: Database.Database, eventBus: PluginEventBus): Promise<{
10
+ plugins: Plugin[];
11
+ destroyCallbacks: Array<() => Promise<void>>;
12
+ getPluginState: (pluginName: string, key: string) => unknown | undefined;
13
+ }>;
14
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQrD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAsB,mBAAmB,CACvC,eAAe,EAAE,oBAAoB,EAAE,EACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAA;CAAE,CAAC,CAwGxJ"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadExternalPlugins = loadExternalPlugins;
4
+ const index_js_1 = require("../plugin-api/index.js");
5
+ const plugin_events_js_1 = require("../storage/repositories/plugin-events.js");
6
+ const context_js_1 = require("./context.js");
7
+ const adapter_js_1 = require("./adapter.js");
8
+ const logger_js_1 = require("../utils/logger.js");
9
+ const log = (0, logger_js_1.createLogger)('plugin-loader');
10
+ async function loadExternalPlugins(externalConfigs, db, eventBus) {
11
+ const plugins = [];
12
+ const destroyCallbacks = [];
13
+ const contextMap = new Map();
14
+ const repo = new plugin_events_js_1.PluginEventsRepository(db);
15
+ let priorityCounter = 50;
16
+ for (const cfg of externalConfigs) {
17
+ if (cfg.enabled === false) {
18
+ log.info('External plugin disabled, skipping', { package: cfg.package });
19
+ continue;
20
+ }
21
+ // Dynamic import
22
+ let mod;
23
+ try {
24
+ mod = await import(cfg.package);
25
+ }
26
+ catch (err) {
27
+ log.warn('Failed to import external plugin package', {
28
+ package: cfg.package,
29
+ error: err.message,
30
+ });
31
+ continue;
32
+ }
33
+ // Find register() export (ESM default or CJS)
34
+ const registerFn = (mod.register ?? mod.default?.register);
35
+ if (typeof registerFn !== 'function') {
36
+ log.warn('External plugin package has no register() export', { package: cfg.package });
37
+ continue;
38
+ }
39
+ // Call register()
40
+ let manifest;
41
+ try {
42
+ manifest = registerFn();
43
+ }
44
+ catch (err) {
45
+ log.warn('External plugin register() threw', {
46
+ package: cfg.package,
47
+ error: err.message,
48
+ });
49
+ continue;
50
+ }
51
+ // Process each plugin from the manifest
52
+ for (const externalPlugin of manifest.plugins) {
53
+ // Validate apiVersion
54
+ if (externalPlugin.apiVersion !== index_js_1.PLUGIN_API_VERSION) {
55
+ log.warn('External plugin apiVersion mismatch, skipping', {
56
+ plugin: externalPlugin.name,
57
+ expected: index_js_1.PLUGIN_API_VERSION,
58
+ got: externalPlugin.apiVersion,
59
+ });
60
+ continue;
61
+ }
62
+ // Create context and call onInit
63
+ const context = (0, context_js_1.createPluginContext)(externalPlugin.name, cfg.config ?? {}, repo, eventBus);
64
+ contextMap.set(externalPlugin.name, context);
65
+ try {
66
+ if (externalPlugin.onInit) {
67
+ await externalPlugin.onInit(context);
68
+ }
69
+ }
70
+ catch (err) {
71
+ log.warn('External plugin onInit failed, skipping', {
72
+ plugin: externalPlugin.name,
73
+ error: err.message,
74
+ });
75
+ continue;
76
+ }
77
+ // Adapt to internal Plugin interface
78
+ const adapted = (0, adapter_js_1.adaptPlugin)(externalPlugin, priorityCounter, repo, cfg.package);
79
+ priorityCounter += 1;
80
+ plugins.push(adapted);
81
+ // Collect destroy callbacks
82
+ if (externalPlugin.onDestroy) {
83
+ destroyCallbacks.push(externalPlugin.onDestroy.bind(externalPlugin));
84
+ }
85
+ log.info('External plugin loaded', {
86
+ plugin: externalPlugin.name,
87
+ version: externalPlugin.version,
88
+ priority: adapted.priority,
89
+ });
90
+ }
91
+ }
92
+ function getPluginState(pluginName, key) {
93
+ const ctx = contextMap.get(pluginName);
94
+ return ctx ? ctx._getState(key) : undefined;
95
+ }
96
+ return { plugins, destroyCallbacks, getPluginState };
97
+ }
98
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ export interface RequestContext {
2
+ id: string;
3
+ provider: string;
4
+ model: string;
5
+ method: string;
6
+ path: string;
7
+ headers: Record<string, string>;
8
+ body: string;
9
+ parsedBody: Record<string, unknown>;
10
+ isStreaming: boolean;
11
+ startTime: number;
12
+ sessionId?: string;
13
+ sessionSource?: string;
14
+ apiKeyHash?: string;
15
+ /** Set by DLP scanner during onRequest/onResponse for downstream plugins */
16
+ dlpHit?: boolean;
17
+ dlpAction?: string;
18
+ dlpFindings?: number;
19
+ /** Set by tool-guard plugin during onResponseComplete */
20
+ toolGuardHit?: boolean;
21
+ toolGuardFindings?: number;
22
+ /** Internal: set by tool-guard onResponse to skip duplicate recording in onResponseComplete */
23
+ _toolGuardRecorded?: boolean;
24
+ /** Internal: set by tool-guard onRequest to enable streaming interception in forwarder.
25
+ * Value is the blockMinSeverity threshold. */
26
+ _toolGuardStreamBlock?: string;
27
+ /** Internal: DB-loaded rules for streaming guard (set by tool-guard onRequest) */
28
+ _toolGuardRules?: import('../tool-guard/rules.js').ToolGuardRule[];
29
+ }
30
+ export interface ResponseCompleteContext {
31
+ request: RequestContext;
32
+ statusCode: number;
33
+ body: string;
34
+ parsedBody: Record<string, unknown> | null;
35
+ usage: {
36
+ inputTokens: number;
37
+ outputTokens: number;
38
+ cacheCreationTokens: number;
39
+ cacheReadTokens: number;
40
+ };
41
+ latencyMs: number;
42
+ isStreaming: boolean;
43
+ /** Pre-parsed SSE events from streaming responses (avoids re-parsing body) */
44
+ sseEvents?: Record<string, unknown>[];
45
+ }
46
+ export interface ShortCircuitResponse {
47
+ statusCode: number;
48
+ headers: Record<string, string>;
49
+ body: string;
50
+ }
51
+ export interface PluginRequestResult {
52
+ shortCircuit?: ShortCircuitResponse;
53
+ blocked?: {
54
+ reason: string;
55
+ };
56
+ pluginError?: {
57
+ pluginName: string;
58
+ reason: string;
59
+ };
60
+ modifiedBody?: string;
61
+ }
62
+ export interface ResponseInterceptContext {
63
+ request: RequestContext;
64
+ statusCode: number;
65
+ headers: Record<string, string>;
66
+ body: string;
67
+ parsedBody: Record<string, unknown> | null;
68
+ isStreaming: boolean;
69
+ }
70
+ export interface PluginResponseResult {
71
+ blocked?: {
72
+ reason: string;
73
+ };
74
+ pluginError?: {
75
+ pluginName: string;
76
+ reason: string;
77
+ };
78
+ modifiedBody?: string;
79
+ }
80
+ export interface Plugin {
81
+ name: string;
82
+ priority: number;
83
+ version?: string;
84
+ apiVersion?: number;
85
+ source?: 'builtin' | 'external';
86
+ packageName?: string;
87
+ onRequest?(context: RequestContext): Promise<PluginRequestResult | void>;
88
+ onResponse?(context: ResponseInterceptContext): Promise<PluginResponseResult | void>;
89
+ onResponseComplete?(context: ResponseCompleteContext): Promise<void>;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export declare function getCACertPath(): string;
2
+ export declare function ensureCA(): {
3
+ key: string;
4
+ cert: string;
5
+ };
6
+ export declare function getHostCert(hostname: string): {
7
+ key: string;
8
+ cert: string;
9
+ };
10
+ //# sourceMappingURL=certs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certs.d.ts","sourceRoot":"","sources":["../../src/proxy/certs.ts"],"names":[],"mappings":"AAeA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,QAAQ,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAqDxD;AAKD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAkD3E"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCACertPath = getCACertPath;
7
+ exports.ensureCA = ensureCA;
8
+ exports.getHostCert = getHostCert;
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = require("node:path");
12
+ const node_os_1 = require("node:os");
13
+ const node_forge_1 = __importDefault(require("node-forge"));
14
+ const paths_js_1 = require("../config/paths.js");
15
+ const logger_js_1 = require("../utils/logger.js");
16
+ const log = (0, logger_js_1.createLogger)('certs');
17
+ const CA_KEY_PATH = (0, node_path_1.join)(paths_js_1.paths.bastionDir, 'ca.key');
18
+ const CA_CERT_PATH = (0, node_path_1.join)(paths_js_1.paths.bastionDir, 'ca.crt');
19
+ const CERTS_DIR = (0, node_path_1.join)(paths_js_1.paths.bastionDir, 'certs');
20
+ const IS_WIN = (0, node_os_1.platform)() === 'win32';
21
+ function getCACertPath() {
22
+ return CA_CERT_PATH;
23
+ }
24
+ function ensureCA() {
25
+ (0, node_fs_1.mkdirSync)(paths_js_1.paths.bastionDir, { recursive: true });
26
+ if ((0, node_fs_1.existsSync)(CA_KEY_PATH) && (0, node_fs_1.existsSync)(CA_CERT_PATH)) {
27
+ return {
28
+ key: (0, node_fs_1.readFileSync)(CA_KEY_PATH, 'utf-8'),
29
+ cert: (0, node_fs_1.readFileSync)(CA_CERT_PATH, 'utf-8'),
30
+ };
31
+ }
32
+ log.info('Generating local CA certificate');
33
+ // Use Node's native crypto for fast RSA key generation
34
+ const { privateKey: keyPem, publicKey: pubPem } = (0, node_crypto_1.generateKeyPairSync)('rsa', {
35
+ modulusLength: 2048,
36
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
37
+ privateKeyEncoding: { type: 'pkcs1', format: 'pem' },
38
+ });
39
+ // Use node-forge to create the X.509 CA certificate
40
+ const privateKey = node_forge_1.default.pki.privateKeyFromPem(keyPem);
41
+ const publicKey = node_forge_1.default.pki.publicKeyFromPem(pubPem);
42
+ const cert = node_forge_1.default.pki.createCertificate();
43
+ cert.publicKey = publicKey;
44
+ cert.serialNumber = (0, node_crypto_1.randomBytes)(16).toString('hex');
45
+ cert.validity.notBefore = new Date();
46
+ cert.validity.notAfter = new Date();
47
+ cert.validity.notAfter.setDate(cert.validity.notAfter.getDate() + 825);
48
+ const attrs = [
49
+ { name: 'commonName', value: 'Bastion Local CA' },
50
+ { name: 'organizationName', value: 'Bastion AI Gateway' },
51
+ ];
52
+ cert.setSubject(attrs);
53
+ cert.setIssuer(attrs);
54
+ cert.setExtensions([
55
+ { name: 'basicConstraints', cA: true },
56
+ { name: 'keyUsage', keyCertSign: true, digitalSignature: true, cRLSign: true },
57
+ ]);
58
+ cert.sign(privateKey, node_forge_1.default.md.sha256.create());
59
+ const certPem = node_forge_1.default.pki.certificateToPem(cert);
60
+ (0, node_fs_1.writeFileSync)(CA_KEY_PATH, keyPem);
61
+ if (!IS_WIN)
62
+ (0, node_fs_1.chmodSync)(CA_KEY_PATH, 0o600);
63
+ (0, node_fs_1.writeFileSync)(CA_CERT_PATH, certPem);
64
+ log.info('CA certificate created', { path: CA_CERT_PATH });
65
+ return { key: keyPem, cert: certPem };
66
+ }
67
+ // In-memory cache for generated host certs
68
+ const certCache = new Map();
69
+ function getHostCert(hostname) {
70
+ const cached = certCache.get(hostname);
71
+ if (cached)
72
+ return cached;
73
+ (0, node_fs_1.mkdirSync)(CERTS_DIR, { recursive: true });
74
+ // Generate host key pair (native crypto — fast)
75
+ const { privateKey: hostKeyPem, publicKey: hostPubPem } = (0, node_crypto_1.generateKeyPairSync)('rsa', {
76
+ modulusLength: 2048,
77
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
78
+ privateKeyEncoding: { type: 'pkcs1', format: 'pem' },
79
+ });
80
+ // Load CA key + cert
81
+ const caKey = node_forge_1.default.pki.privateKeyFromPem((0, node_fs_1.readFileSync)(CA_KEY_PATH, 'utf-8'));
82
+ const caCert = node_forge_1.default.pki.certificateFromPem((0, node_fs_1.readFileSync)(CA_CERT_PATH, 'utf-8'));
83
+ // Create host certificate signed by CA
84
+ const hostKey = node_forge_1.default.pki.publicKeyFromPem(hostPubPem);
85
+ const cert = node_forge_1.default.pki.createCertificate();
86
+ cert.publicKey = hostKey;
87
+ cert.serialNumber = (0, node_crypto_1.randomBytes)(16).toString('hex');
88
+ cert.validity.notBefore = new Date();
89
+ cert.validity.notAfter = new Date();
90
+ cert.validity.notAfter.setDate(cert.validity.notAfter.getDate() + 825);
91
+ cert.setSubject([{ name: 'commonName', value: hostname }]);
92
+ cert.setIssuer(caCert.subject.attributes);
93
+ cert.setExtensions([
94
+ { name: 'subjectAltName', altNames: [{ type: 2, value: hostname }] },
95
+ ]);
96
+ cert.sign(caKey, node_forge_1.default.md.sha256.create());
97
+ const result = {
98
+ key: hostKeyPem,
99
+ cert: node_forge_1.default.pki.certificateToPem(cert),
100
+ };
101
+ // Optionally cache to disk (for debugging), always cache in memory
102
+ const keyPath = (0, node_path_1.join)(CERTS_DIR, `${hostname}.key`);
103
+ const certPath = (0, node_path_1.join)(CERTS_DIR, `${hostname}.crt`);
104
+ (0, node_fs_1.writeFileSync)(keyPath, result.key);
105
+ (0, node_fs_1.writeFileSync)(certPath, result.cert);
106
+ certCache.set(hostname, result);
107
+ log.debug('Generated host certificate', { hostname });
108
+ return result;
109
+ }
110
+ //# sourceMappingURL=certs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certs.js","sourceRoot":"","sources":["../../src/proxy/certs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as net from 'node:net';
2
+ import type { PluginManager } from '../plugins/index.js';
3
+ import type { BastionConfig } from '../config/schema.js';
4
+ export declare function getSessionForSocket(socket: net.Socket): string | undefined;
5
+ /**
6
+ * Attach CONNECT handler to an existing HTTP server.
7
+ * - API hosts: MITM decrypt → plugin pipeline → forward to real upstream
8
+ * - All other hosts: plain TCP tunnel (no inspection)
9
+ */
10
+ export declare function setupConnectHandler(server: net.Server, config: BastionConfig, pluginManager: PluginManager): void;
11
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/proxy/connect.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAgCzD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E;AA4BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,aAAa,GAC3B,IAAI,CAmCN"}