@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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveRoute = resolveRoute;
4
+ exports.sendError = sendError;
5
+ const index_js_1 = require("./providers/index.js");
6
+ const logger_js_1 = require("../utils/logger.js");
7
+ const log = (0, logger_js_1.createLogger)('router');
8
+ function resolveRoute(req, opts) {
9
+ const path = req.url ?? '/';
10
+ const match = (0, index_js_1.getProvider)(path, opts);
11
+ if (!match) {
12
+ log.warn('No provider matched', { path });
13
+ return null;
14
+ }
15
+ const upstreamUrl = match.provider.baseUrl + path;
16
+ return {
17
+ provider: match.provider,
18
+ pathPrefix: match.pathPrefix,
19
+ upstreamUrl,
20
+ };
21
+ }
22
+ function sendError(res, statusCode, message) {
23
+ res.writeHead(statusCode, { 'content-type': 'application/json' });
24
+ res.end(JSON.stringify({ error: { message, type: 'gateway_error' } }));
25
+ }
26
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/proxy/router.ts"],"names":[],"mappings":";;AAYA,oCAeC;AAED,8BAGC;AA/BD,mDAAwE;AACxE,kDAAkD;AAElD,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,QAAQ,CAAC,CAAC;AAQnC,SAAgB,YAAY,CAAC,GAAoB,EAAE,IAAqC;IACtF,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAA,sBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;IAClD,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,GAAmB,EAAE,UAAkB,EAAE,OAAe;IAChF,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Server } from 'node:http';
2
+ import type { ServerResponse, IncomingMessage } from 'node:http';
3
+ /**
4
+ * Five-layer safety net:
5
+ * 1. Health check endpoint
6
+ * 2. Graceful shutdown
7
+ * 3. Uncaught exception handler
8
+ * 4. Unhandled rejection handler
9
+ * 5. Process signal handlers
10
+ */
11
+ export declare function handleHealthCheck(req: IncomingMessage, res: ServerResponse): boolean;
12
+ export declare function setupGracefulShutdown(server: Server, cleanup: () => void): void;
13
+ //# sourceMappingURL=safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/proxy/safety.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAKjE;;;;;;;GAOG;AAEH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAYpF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAkC/E"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleHealthCheck = handleHealthCheck;
4
+ exports.setupGracefulShutdown = setupGracefulShutdown;
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ const log = (0, logger_js_1.createLogger)('safety');
7
+ /**
8
+ * Five-layer safety net:
9
+ * 1. Health check endpoint
10
+ * 2. Graceful shutdown
11
+ * 3. Uncaught exception handler
12
+ * 4. Unhandled rejection handler
13
+ * 5. Process signal handlers
14
+ */
15
+ function handleHealthCheck(req, res) {
16
+ if (req.url === '/health' && req.method === 'GET') {
17
+ res.writeHead(200, { 'content-type': 'application/json' });
18
+ res.end(JSON.stringify({
19
+ status: 'ok',
20
+ uptime: process.uptime(),
21
+ memory: process.memoryUsage().rss,
22
+ pid: process.pid,
23
+ }));
24
+ return true;
25
+ }
26
+ return false;
27
+ }
28
+ function setupGracefulShutdown(server, cleanup) {
29
+ let isShuttingDown = false;
30
+ const shutdown = (signal) => {
31
+ if (isShuttingDown)
32
+ return;
33
+ isShuttingDown = true;
34
+ log.info('Received shutdown signal', { signal });
35
+ server.close(() => {
36
+ log.info('Server closed');
37
+ cleanup();
38
+ process.exit(0);
39
+ });
40
+ // Force exit after 10 seconds
41
+ setTimeout(() => {
42
+ log.error('Forced shutdown after timeout');
43
+ cleanup();
44
+ process.exit(1);
45
+ }, 10000).unref();
46
+ };
47
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
48
+ process.on('SIGINT', () => shutdown('SIGINT'));
49
+ process.on('uncaughtException', (err) => {
50
+ log.error('Uncaught exception', { error: err.message, stack: err.stack });
51
+ // Continue running — fail-open philosophy
52
+ });
53
+ process.on('unhandledRejection', (reason) => {
54
+ log.error('Unhandled rejection', { reason: String(reason) });
55
+ // Continue running — fail-open philosophy
56
+ });
57
+ }
58
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/proxy/safety.ts"],"names":[],"mappings":";;AAeA,8CAYC;AAED,sDAkCC;AA7DD,kDAAkD;AAElD,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,QAAQ,CAAC,CAAC;AAEnC;;;;;;;GAOG;AAEH,SAAgB,iBAAiB,CAAC,GAAoB,EAAE,GAAmB;IACzE,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACrB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;YACxB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG;YACjC,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC,CAAC;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAc,EAAE,OAAmB;IACvE,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;QAClC,IAAI,cAAc;YAAE,OAAO;QAC3B,cAAc,GAAG,IAAI,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC1B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC3C,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,0CAA0C;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,0CAA0C;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type Server } from 'node:http';
2
+ import type Database from 'better-sqlite3';
3
+ import type { BastionConfig } from '../config/schema.js';
4
+ import type { PluginManager } from '../plugins/index.js';
5
+ import type { ConfigManager } from '../config/manager.js';
6
+ export declare function createProxyServer(config: BastionConfig, pluginManager: PluginManager, cleanup: () => void, db?: Database.Database, configManager?: ConfigManager, getPluginState?: (pluginName: string, key: string) => unknown | undefined): Server;
7
+ export declare function startServer(server: Server, config: BastionConfig): Promise<void>;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAa1D,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,MAAM,IAAI,EACnB,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,EACtB,aAAa,CAAC,EAAE,aAAa,EAC7B,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,GACxE,MAAM,CA4GR;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhF"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProxyServer = createProxyServer;
4
+ exports.startServer = startServer;
5
+ const node_http_1 = require("node:http");
6
+ const router_js_1 = require("./router.js");
7
+ const forwarder_js_1 = require("./forwarder.js");
8
+ const passthrough_js_1 = require("./passthrough.js");
9
+ const safety_js_1 = require("./safety.js");
10
+ const page_js_1 = require("../dashboard/page.js");
11
+ const api_routes_js_1 = require("../dashboard/api-routes.js");
12
+ const connect_js_1 = require("./connect.js");
13
+ const logger_js_1 = require("../utils/logger.js");
14
+ const log = (0, logger_js_1.createLogger)('server');
15
+ function createProxyServer(config, pluginManager, cleanup, db, configManager, getPluginState) {
16
+ // Set up API router if we have both db and configManager
17
+ const apiRouter = db && configManager
18
+ ? (0, api_routes_js_1.createApiRouter)(db, configManager, pluginManager, getPluginState)
19
+ : null;
20
+ const server = (0, node_http_1.createServer)(async (req, res) => {
21
+ // Layer 1: Health check
22
+ if ((0, safety_js_1.handleHealthCheck)(req, res))
23
+ return;
24
+ // Dashboard
25
+ const dashPath = (req.url ?? '').split('?')[0];
26
+ if (req.method === 'GET' && (dashPath === '/dashboard' || dashPath === '/dashboard/')) {
27
+ (0, page_js_1.serveDashboard)(res);
28
+ return;
29
+ }
30
+ // Auth check for /api/* routes
31
+ if (req.url?.startsWith('/api/') && configManager) {
32
+ const authCfg = configManager.get().server.auth;
33
+ if (authCfg?.enabled !== false && authCfg?.token) {
34
+ const excluded = (authCfg.excludePaths ?? []).some(p => req.url.startsWith(p));
35
+ if (!excluded) {
36
+ const authHeader = req.headers['authorization'];
37
+ const token = authHeader?.startsWith('Bearer ') ? authHeader.slice(7) : null;
38
+ if (token !== authCfg.token) {
39
+ res.writeHead(401, { 'content-type': 'application/json' });
40
+ res.end(JSON.stringify({ error: 'Unauthorized' }));
41
+ return;
42
+ }
43
+ }
44
+ }
45
+ }
46
+ // API routes (GET, PUT)
47
+ if (apiRouter && (req.url?.startsWith('/api/') ?? false)) {
48
+ if (apiRouter(req, res))
49
+ return;
50
+ }
51
+ // Route to known provider path (exclude messaging providers in direct HTTP mode)
52
+ const route = (0, router_js_1.resolveRoute)(req, { excludeMessaging: true });
53
+ // If scanMethods is configured and non-empty, only scan listed methods
54
+ const scanMethods = config.server.scanMethods ?? [];
55
+ if (scanMethods.length > 0 && !scanMethods.includes(req.method ?? '')) {
56
+ (0, passthrough_js_1.passthroughRequest)(req, res, config.timeouts.upstream);
57
+ return;
58
+ }
59
+ // For direct HTTP mode, read session from X-Bastion-Session header
60
+ const sessionId = req.headers['x-bastion-session'];
61
+ // Determine provider and upstream URL — use route if matched,
62
+ // otherwise create fallback provider so unmatched paths (e.g. GET /v1/models)
63
+ // still go through the plugin pipeline for audit/DLP scanning
64
+ let provider;
65
+ let upstreamUrl;
66
+ if (route) {
67
+ provider = route.provider;
68
+ upstreamUrl = route.upstreamUrl;
69
+ }
70
+ else {
71
+ const upstream = (0, passthrough_js_1.detectUpstream)(req.headers);
72
+ upstreamUrl = upstream + (req.url ?? '/');
73
+ const hostname = new URL(upstream).hostname;
74
+ provider = {
75
+ name: hostname.replace(/\./g, '-'),
76
+ baseUrl: upstream,
77
+ authHeader: '',
78
+ transformHeaders(headers) {
79
+ const result = {};
80
+ for (const [key, value] of Object.entries(headers)) {
81
+ const lower = key.toLowerCase();
82
+ if (lower !== 'host' && lower !== 'connection' && lower !== 'transfer-encoding') {
83
+ result[key] = value;
84
+ }
85
+ }
86
+ return result;
87
+ },
88
+ extractModel() { return hostname; },
89
+ extractUsage() {
90
+ return { inputTokens: 0, outputTokens: 0 };
91
+ },
92
+ };
93
+ }
94
+ try {
95
+ await (0, forwarder_js_1.forwardRequest)(req, res, {
96
+ provider,
97
+ upstreamUrl,
98
+ upstreamTimeout: config.timeouts.upstream,
99
+ pluginManager,
100
+ sessionId,
101
+ });
102
+ }
103
+ catch (err) {
104
+ log.error('Request handling failed', { error: err.message });
105
+ if (!res.headersSent) {
106
+ (0, router_js_1.sendError)(res, 500, 'Internal gateway error');
107
+ }
108
+ }
109
+ });
110
+ (0, safety_js_1.setupGracefulShutdown)(server, cleanup);
111
+ // Enable HTTPS_PROXY mode (CONNECT handler for MITM on API domains)
112
+ (0, connect_js_1.setupConnectHandler)(server, config, pluginManager);
113
+ return server;
114
+ }
115
+ function startServer(server, config) {
116
+ return new Promise((resolve) => {
117
+ server.listen(config.server.port, config.server.host, () => {
118
+ log.info('Bastion AI Gateway started', {
119
+ host: config.server.host,
120
+ port: config.server.port,
121
+ });
122
+ resolve();
123
+ });
124
+ });
125
+ }
126
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SSE parser — inspects streaming events for metrics/DLP without modifying the stream.
3
+ * Raw bytes are always forwarded unmodified to clients.
4
+ */
5
+ export interface SSEEvent {
6
+ event?: string;
7
+ data: string;
8
+ }
9
+ export type SSEEventHandler = (event: SSEEvent) => void;
10
+ export declare class SSEParser {
11
+ private buffer;
12
+ private currentEvent;
13
+ private currentData;
14
+ private onEvent;
15
+ constructor(onEvent: SSEEventHandler);
16
+ feed(chunk: string): void;
17
+ flush(): void;
18
+ }
19
+ /** Extract JSON data from an SSE event, returns null if not valid JSON */
20
+ export declare function parseSSEData(event: SSEEvent): Record<string, unknown> | null;
21
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/proxy/streaming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,OAAO,CAAkB;gBAErB,OAAO,EAAE,eAAe;IAIpC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAwBzB,KAAK,IAAI,IAAI;CAiBd;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAO5E"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * SSE parser — inspects streaming events for metrics/DLP without modifying the stream.
4
+ * Raw bytes are always forwarded unmodified to clients.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SSEParser = void 0;
8
+ exports.parseSSEData = parseSSEData;
9
+ class SSEParser {
10
+ buffer = '';
11
+ currentEvent;
12
+ currentData = [];
13
+ onEvent;
14
+ constructor(onEvent) {
15
+ this.onEvent = onEvent;
16
+ }
17
+ feed(chunk) {
18
+ this.buffer += chunk;
19
+ const lines = this.buffer.split('\n');
20
+ // Keep the last incomplete line in the buffer
21
+ this.buffer = lines.pop() ?? '';
22
+ for (const rawLine of lines) {
23
+ // Strip trailing \r to handle both \n and \r\n line endings
24
+ const line = rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine;
25
+ if (line.startsWith('event: ')) {
26
+ this.currentEvent = line.slice(7).trim();
27
+ }
28
+ else if (line.startsWith('data: ')) {
29
+ this.currentData.push(line.slice(6));
30
+ }
31
+ else if (line === '') {
32
+ // Empty line = end of event
33
+ if (this.currentData.length > 0) {
34
+ this.onEvent({ event: this.currentEvent, data: this.currentData.join('\n') });
35
+ }
36
+ this.currentEvent = undefined;
37
+ this.currentData = [];
38
+ }
39
+ }
40
+ }
41
+ flush() {
42
+ // Emit any pending event
43
+ if (this.currentData.length > 0) {
44
+ this.onEvent({ event: this.currentEvent, data: this.currentData.join('\n') });
45
+ this.currentEvent = undefined;
46
+ this.currentData = [];
47
+ }
48
+ // Check remaining buffer for a final data line
49
+ if (this.buffer.trim()) {
50
+ const line = this.buffer.trim();
51
+ if (line.startsWith('data: ')) {
52
+ this.onEvent({ event: undefined, data: line.slice(6) });
53
+ }
54
+ }
55
+ this.buffer = '';
56
+ }
57
+ }
58
+ exports.SSEParser = SSEParser;
59
+ /** Extract JSON data from an SSE event, returns null if not valid JSON */
60
+ function parseSSEData(event) {
61
+ if (event.data === '[DONE]')
62
+ return null;
63
+ try {
64
+ return JSON.parse(event.data);
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/proxy/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function getDatabase(dbPath?: string): Database.Database;
3
+ export declare function closeDatabase(): void;
4
+ /** Create an in-memory database for testing */
5
+ export declare function createTestDatabase(): Database.Database;
6
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAWtC,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAe9D;AAED,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAMtD"}
@@ -0,0 +1,44 @@
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.getDatabase = getDatabase;
7
+ exports.closeDatabase = closeDatabase;
8
+ exports.createTestDatabase = createTestDatabase;
9
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
10
+ const node_fs_1 = require("node:fs");
11
+ const node_path_1 = require("node:path");
12
+ const paths_js_1 = require("../config/paths.js");
13
+ const logger_js_1 = require("../utils/logger.js");
14
+ const migrations_js_1 = require("./migrations.js");
15
+ const log = (0, logger_js_1.createLogger)('database');
16
+ let db = null;
17
+ function getDatabase(dbPath) {
18
+ if (db)
19
+ return db;
20
+ const resolvedPath = dbPath ?? paths_js_1.paths.databaseFile;
21
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(resolvedPath), { recursive: true });
22
+ db = new better_sqlite3_1.default(resolvedPath);
23
+ db.pragma('journal_mode = WAL');
24
+ db.pragma('foreign_keys = ON');
25
+ db.pragma('busy_timeout = 5000');
26
+ (0, migrations_js_1.runMigrations)(db);
27
+ log.info('Database initialized', { path: resolvedPath });
28
+ return db;
29
+ }
30
+ function closeDatabase() {
31
+ if (db) {
32
+ db.close();
33
+ db = null;
34
+ }
35
+ }
36
+ /** Create an in-memory database for testing */
37
+ function createTestDatabase() {
38
+ const testDb = new better_sqlite3_1.default(':memory:');
39
+ testDb.pragma('journal_mode = WAL');
40
+ testDb.pragma('foreign_keys = ON');
41
+ (0, migrations_js_1.runMigrations)(testDb);
42
+ return testDb;
43
+ }
44
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/storage/database.ts"],"names":[],"mappings":";;;;;AAWA,kCAeC;AAED,sCAKC;AAGD,gDAMC;AA1CD,oEAAsC;AACtC,qCAAoC;AACpC,yCAAoC;AACpC,iDAA2C;AAC3C,kDAAkD;AAClD,mDAAgD;AAEhD,MAAM,GAAG,GAAG,IAAA,wBAAY,EAAC,UAAU,CAAC,CAAC;AAErC,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC,SAAgB,WAAW,CAAC,MAAe;IACzC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,YAAY,GAAG,MAAM,IAAI,gBAAK,CAAC,YAAY,CAAC;IAClD,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,EAAE,GAAG,IAAI,wBAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjC,IAAA,6BAAa,EAAC,EAAE,CAAC,CAAC;IAClB,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAEzD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,aAAa;IAC3B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,IAAI,wBAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACnC,IAAA,6BAAa,EAAC,MAAM,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function getEncryptionKey(keyPath?: string): Buffer;
2
+ export interface EncryptedData {
3
+ encrypted: Buffer;
4
+ iv: Buffer;
5
+ authTag: Buffer;
6
+ }
7
+ export declare function encrypt(plaintext: string, key?: Buffer): EncryptedData;
8
+ export declare function decrypt(data: EncryptedData, key?: Buffer): string;
9
+ /** Reset the cached key (for testing) */
10
+ export declare function resetEncryptionKey(): void;
11
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/storage/encryption.ts"],"names":[],"mappings":"AAWA,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAczD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa,CAStE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEncryptionKey = getEncryptionKey;
4
+ exports.encrypt = encrypt;
5
+ exports.decrypt = decrypt;
6
+ exports.resetEncryptionKey = resetEncryptionKey;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const paths_js_1 = require("../config/paths.js");
11
+ const ALGORITHM = 'aes-256-gcm';
12
+ const IV_LENGTH = 12;
13
+ const AUTH_TAG_LENGTH = 16;
14
+ let encryptionKey = null;
15
+ function getEncryptionKey(keyPath) {
16
+ if (encryptionKey)
17
+ return encryptionKey;
18
+ const resolvedPath = keyPath ?? paths_js_1.paths.encryptionKeyFile;
19
+ if ((0, node_fs_1.existsSync)(resolvedPath)) {
20
+ encryptionKey = (0, node_fs_1.readFileSync)(resolvedPath);
21
+ }
22
+ else {
23
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(resolvedPath), { recursive: true });
24
+ encryptionKey = (0, node_crypto_1.randomBytes)(32);
25
+ (0, node_fs_1.writeFileSync)(resolvedPath, encryptionKey, { mode: 0o600 });
26
+ }
27
+ return encryptionKey;
28
+ }
29
+ function encrypt(plaintext, key) {
30
+ const k = key ?? getEncryptionKey();
31
+ const iv = (0, node_crypto_1.randomBytes)(IV_LENGTH);
32
+ const cipher = (0, node_crypto_1.createCipheriv)(ALGORITHM, k, iv, { authTagLength: AUTH_TAG_LENGTH });
33
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);
34
+ const authTag = cipher.getAuthTag();
35
+ return { encrypted, iv, authTag };
36
+ }
37
+ function decrypt(data, key) {
38
+ const k = key ?? getEncryptionKey();
39
+ const decipher = (0, node_crypto_1.createDecipheriv)(ALGORITHM, k, data.iv, { authTagLength: AUTH_TAG_LENGTH });
40
+ decipher.setAuthTag(data.authTag);
41
+ return decipher.update(data.encrypted) + decipher.final('utf-8');
42
+ }
43
+ /** Reset the cached key (for testing) */
44
+ function resetEncryptionKey() {
45
+ encryptionKey = null;
46
+ }
47
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/storage/encryption.ts"],"names":[],"mappings":";;AAWA,4CAcC;AAQD,0BASC;AAED,0BAMC;AAGD,gDAEC;AAvDD,6CAA4E;AAC5E,qCAA6E;AAC7E,yCAAoC;AACpC,iDAA2C;AAE3C,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,MAAM,YAAY,GAAG,OAAO,IAAI,gBAAK,CAAC,iBAAiB,CAAC;IAExD,IAAI,IAAA,oBAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,IAAA,sBAAY,EAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,aAAa,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC;QAChC,IAAA,uBAAa,EAAC,YAAY,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAQD,SAAgB,OAAO,CAAC,SAAiB,EAAE,GAAY;IACrD,MAAM,CAAC,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,IAAA,yBAAW,EAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAA,4BAAc,EAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,OAAO,CAAC,IAAmB,EAAE,GAAY;IACvD,MAAM,CAAC,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAA,8BAAgB,EAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;IAC7F,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC;AAED,yCAAyC;AACzC,SAAgB,kBAAkB;IAChC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type Database from 'better-sqlite3';
2
+ export declare function runMigrations(db: Database.Database): void;
3
+ //# sourceMappingURL=migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/storage/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkP3C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAqCzD"}