@waiaas/daemon 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/dist/api/error-hints.d.ts +15 -0
  2. package/dist/api/error-hints.d.ts.map +1 -0
  3. package/dist/api/error-hints.js +71 -0
  4. package/dist/api/error-hints.js.map +1 -0
  5. package/dist/api/index.d.ts +11 -0
  6. package/dist/api/index.d.ts.map +1 -0
  7. package/dist/api/index.js +14 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/api/middleware/address-validation.d.ts +38 -0
  10. package/dist/api/middleware/address-validation.d.ts.map +1 -0
  11. package/dist/api/middleware/address-validation.js +134 -0
  12. package/dist/api/middleware/address-validation.js.map +1 -0
  13. package/dist/api/middleware/csp.d.ts +17 -0
  14. package/dist/api/middleware/csp.d.ts.map +1 -0
  15. package/dist/api/middleware/csp.js +31 -0
  16. package/dist/api/middleware/csp.js.map +1 -0
  17. package/dist/api/middleware/error-handler.d.ts +16 -0
  18. package/dist/api/middleware/error-handler.d.ts.map +1 -0
  19. package/dist/api/middleware/error-handler.js +46 -0
  20. package/dist/api/middleware/error-handler.js.map +1 -0
  21. package/dist/api/middleware/host-guard.d.ts +11 -0
  22. package/dist/api/middleware/host-guard.d.ts.map +1 -0
  23. package/dist/api/middleware/host-guard.js +25 -0
  24. package/dist/api/middleware/host-guard.js.map +1 -0
  25. package/dist/api/middleware/index.d.ts +13 -0
  26. package/dist/api/middleware/index.d.ts.map +1 -0
  27. package/dist/api/middleware/index.js +13 -0
  28. package/dist/api/middleware/index.js.map +1 -0
  29. package/dist/api/middleware/kill-switch-guard.d.ts +19 -0
  30. package/dist/api/middleware/kill-switch-guard.d.ts.map +1 -0
  31. package/dist/api/middleware/kill-switch-guard.js +49 -0
  32. package/dist/api/middleware/kill-switch-guard.js.map +1 -0
  33. package/dist/api/middleware/master-auth.d.ts +15 -0
  34. package/dist/api/middleware/master-auth.d.ts.map +1 -0
  35. package/dist/api/middleware/master-auth.js +35 -0
  36. package/dist/api/middleware/master-auth.js.map +1 -0
  37. package/dist/api/middleware/owner-auth.d.ts +30 -0
  38. package/dist/api/middleware/owner-auth.d.ts.map +1 -0
  39. package/dist/api/middleware/owner-auth.js +133 -0
  40. package/dist/api/middleware/owner-auth.js.map +1 -0
  41. package/dist/api/middleware/request-id.d.ts +10 -0
  42. package/dist/api/middleware/request-id.d.ts.map +1 -0
  43. package/dist/api/middleware/request-id.js +18 -0
  44. package/dist/api/middleware/request-id.js.map +1 -0
  45. package/dist/api/middleware/request-logger.d.ts +9 -0
  46. package/dist/api/middleware/request-logger.d.ts.map +1 -0
  47. package/dist/api/middleware/request-logger.js +18 -0
  48. package/dist/api/middleware/request-logger.js.map +1 -0
  49. package/dist/api/middleware/session-auth.d.ts +21 -0
  50. package/dist/api/middleware/session-auth.d.ts.map +1 -0
  51. package/dist/api/middleware/session-auth.js +51 -0
  52. package/dist/api/middleware/session-auth.js.map +1 -0
  53. package/dist/api/middleware/siwe-verify.d.ts +31 -0
  54. package/dist/api/middleware/siwe-verify.d.ts.map +1 -0
  55. package/dist/api/middleware/siwe-verify.js +55 -0
  56. package/dist/api/middleware/siwe-verify.js.map +1 -0
  57. package/dist/api/routes/actions.d.ts +56 -0
  58. package/dist/api/routes/actions.d.ts.map +1 -0
  59. package/dist/api/routes/actions.js +291 -0
  60. package/dist/api/routes/actions.js.map +1 -0
  61. package/dist/api/routes/admin.d.ts +99 -0
  62. package/dist/api/routes/admin.d.ts.map +1 -0
  63. package/dist/api/routes/admin.js +1304 -0
  64. package/dist/api/routes/admin.js.map +1 -0
  65. package/dist/api/routes/display-currency-helper.d.ts +26 -0
  66. package/dist/api/routes/display-currency-helper.d.ts.map +1 -0
  67. package/dist/api/routes/display-currency-helper.js +47 -0
  68. package/dist/api/routes/display-currency-helper.js.map +1 -0
  69. package/dist/api/routes/health.d.ts +14 -0
  70. package/dist/api/routes/health.d.ts.map +1 -0
  71. package/dist/api/routes/health.js +47 -0
  72. package/dist/api/routes/health.js.map +1 -0
  73. package/dist/api/routes/index.d.ts +15 -0
  74. package/dist/api/routes/index.d.ts.map +1 -0
  75. package/dist/api/routes/index.js +15 -0
  76. package/dist/api/routes/index.js.map +1 -0
  77. package/dist/api/routes/mcp.d.ts +30 -0
  78. package/dist/api/routes/mcp.d.ts.map +1 -0
  79. package/dist/api/routes/mcp.js +156 -0
  80. package/dist/api/routes/mcp.js.map +1 -0
  81. package/dist/api/routes/nonce.d.ts +20 -0
  82. package/dist/api/routes/nonce.d.ts.map +1 -0
  83. package/dist/api/routes/nonce.js +48 -0
  84. package/dist/api/routes/nonce.js.map +1 -0
  85. package/dist/api/routes/openapi-schemas.d.ts +2281 -0
  86. package/dist/api/routes/openapi-schemas.d.ts.map +1 -0
  87. package/dist/api/routes/openapi-schemas.js +770 -0
  88. package/dist/api/routes/openapi-schemas.js.map +1 -0
  89. package/dist/api/routes/policies.d.ts +29 -0
  90. package/dist/api/routes/policies.d.ts.map +1 -0
  91. package/dist/api/routes/policies.js +332 -0
  92. package/dist/api/routes/policies.js.map +1 -0
  93. package/dist/api/routes/sessions.d.ts +35 -0
  94. package/dist/api/routes/sessions.d.ts.map +1 -0
  95. package/dist/api/routes/sessions.js +347 -0
  96. package/dist/api/routes/sessions.js.map +1 -0
  97. package/dist/api/routes/skills.d.ts +9 -0
  98. package/dist/api/routes/skills.d.ts.map +1 -0
  99. package/dist/api/routes/skills.js +59 -0
  100. package/dist/api/routes/skills.js.map +1 -0
  101. package/dist/api/routes/tokens.d.ts +25 -0
  102. package/dist/api/routes/tokens.d.ts.map +1 -0
  103. package/dist/api/routes/tokens.js +161 -0
  104. package/dist/api/routes/tokens.js.map +1 -0
  105. package/dist/api/routes/transactions.d.ts +68 -0
  106. package/dist/api/routes/transactions.d.ts.map +1 -0
  107. package/dist/api/routes/transactions.js +576 -0
  108. package/dist/api/routes/transactions.js.map +1 -0
  109. package/dist/api/routes/utils.d.ts +9 -0
  110. package/dist/api/routes/utils.d.ts.map +1 -0
  111. package/dist/api/routes/utils.js +52 -0
  112. package/dist/api/routes/utils.js.map +1 -0
  113. package/dist/api/routes/wallet.d.ts +36 -0
  114. package/dist/api/routes/wallet.d.ts.map +1 -0
  115. package/dist/api/routes/wallet.js +358 -0
  116. package/dist/api/routes/wallet.js.map +1 -0
  117. package/dist/api/routes/wallets.d.ts +43 -0
  118. package/dist/api/routes/wallets.d.ts.map +1 -0
  119. package/dist/api/routes/wallets.js +630 -0
  120. package/dist/api/routes/wallets.js.map +1 -0
  121. package/dist/api/routes/wc.d.ts +46 -0
  122. package/dist/api/routes/wc.d.ts.map +1 -0
  123. package/dist/api/routes/wc.js +354 -0
  124. package/dist/api/routes/wc.js.map +1 -0
  125. package/dist/api/routes/x402.d.ts +61 -0
  126. package/dist/api/routes/x402.d.ts.map +1 -0
  127. package/dist/api/routes/x402.js +493 -0
  128. package/dist/api/routes/x402.js.map +1 -0
  129. package/dist/api/server.d.ts +81 -0
  130. package/dist/api/server.d.ts.map +1 -0
  131. package/dist/api/server.js +406 -0
  132. package/dist/api/server.js.map +1 -0
  133. package/dist/index.d.ts +35 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +43 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/infrastructure/action/action-provider-registry.d.ts +77 -0
  138. package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -0
  139. package/dist/infrastructure/action/action-provider-registry.js +239 -0
  140. package/dist/infrastructure/action/action-provider-registry.js.map +1 -0
  141. package/dist/infrastructure/action/api-key-store.d.ts +60 -0
  142. package/dist/infrastructure/action/api-key-store.d.ts.map +1 -0
  143. package/dist/infrastructure/action/api-key-store.js +130 -0
  144. package/dist/infrastructure/action/api-key-store.js.map +1 -0
  145. package/dist/infrastructure/action/index.d.ts +10 -0
  146. package/dist/infrastructure/action/index.d.ts.map +1 -0
  147. package/dist/infrastructure/action/index.js +9 -0
  148. package/dist/infrastructure/action/index.js.map +1 -0
  149. package/dist/infrastructure/adapter-pool.d.ts +50 -0
  150. package/dist/infrastructure/adapter-pool.d.ts.map +1 -0
  151. package/dist/infrastructure/adapter-pool.js +110 -0
  152. package/dist/infrastructure/adapter-pool.js.map +1 -0
  153. package/dist/infrastructure/backup/backup-service.d.ts +53 -0
  154. package/dist/infrastructure/backup/backup-service.d.ts.map +1 -0
  155. package/dist/infrastructure/backup/backup-service.js +158 -0
  156. package/dist/infrastructure/backup/backup-service.js.map +1 -0
  157. package/dist/infrastructure/backup/index.d.ts +2 -0
  158. package/dist/infrastructure/backup/index.d.ts.map +1 -0
  159. package/dist/infrastructure/backup/index.js +2 -0
  160. package/dist/infrastructure/backup/index.js.map +1 -0
  161. package/dist/infrastructure/config/index.d.ts +8 -0
  162. package/dist/infrastructure/config/index.d.ts.map +1 -0
  163. package/dist/infrastructure/config/index.js +7 -0
  164. package/dist/infrastructure/config/index.js.map +1 -0
  165. package/dist/infrastructure/config/loader.d.ts +555 -0
  166. package/dist/infrastructure/config/loader.d.ts.map +1 -0
  167. package/dist/infrastructure/config/loader.js +311 -0
  168. package/dist/infrastructure/config/loader.js.map +1 -0
  169. package/dist/infrastructure/database/checks.d.ts +19 -0
  170. package/dist/infrastructure/database/checks.d.ts.map +1 -0
  171. package/dist/infrastructure/database/checks.js +27 -0
  172. package/dist/infrastructure/database/checks.js.map +1 -0
  173. package/dist/infrastructure/database/compatibility.d.ts +36 -0
  174. package/dist/infrastructure/database/compatibility.d.ts.map +1 -0
  175. package/dist/infrastructure/database/compatibility.js +75 -0
  176. package/dist/infrastructure/database/compatibility.js.map +1 -0
  177. package/dist/infrastructure/database/connection.d.ts +36 -0
  178. package/dist/infrastructure/database/connection.d.ts.map +1 -0
  179. package/dist/infrastructure/database/connection.js +47 -0
  180. package/dist/infrastructure/database/connection.js.map +1 -0
  181. package/dist/infrastructure/database/id.d.ts +17 -0
  182. package/dist/infrastructure/database/id.d.ts.map +1 -0
  183. package/dist/infrastructure/database/id.js +20 -0
  184. package/dist/infrastructure/database/id.js.map +1 -0
  185. package/dist/infrastructure/database/index.d.ts +15 -0
  186. package/dist/infrastructure/database/index.d.ts.map +1 -0
  187. package/dist/infrastructure/database/index.js +12 -0
  188. package/dist/infrastructure/database/index.js.map +1 -0
  189. package/dist/infrastructure/database/migrate.d.ts +76 -0
  190. package/dist/infrastructure/database/migrate.d.ts.map +1 -0
  191. package/dist/infrastructure/database/migrate.js +1214 -0
  192. package/dist/infrastructure/database/migrate.js.map +1 -0
  193. package/dist/infrastructure/database/schema.d.ts +2352 -0
  194. package/dist/infrastructure/database/schema.d.ts.map +1 -0
  195. package/dist/infrastructure/database/schema.js +288 -0
  196. package/dist/infrastructure/database/schema.js.map +1 -0
  197. package/dist/infrastructure/jwt/index.d.ts +2 -0
  198. package/dist/infrastructure/jwt/index.d.ts.map +1 -0
  199. package/dist/infrastructure/jwt/index.js +2 -0
  200. package/dist/infrastructure/jwt/index.js.map +1 -0
  201. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts +58 -0
  202. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -0
  203. package/dist/infrastructure/jwt/jwt-secret-manager.js +222 -0
  204. package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -0
  205. package/dist/infrastructure/keystore/crypto.d.ts +62 -0
  206. package/dist/infrastructure/keystore/crypto.d.ts.map +1 -0
  207. package/dist/infrastructure/keystore/crypto.js +89 -0
  208. package/dist/infrastructure/keystore/crypto.js.map +1 -0
  209. package/dist/infrastructure/keystore/index.d.ts +4 -0
  210. package/dist/infrastructure/keystore/index.d.ts.map +1 -0
  211. package/dist/infrastructure/keystore/index.js +5 -0
  212. package/dist/infrastructure/keystore/index.js.map +1 -0
  213. package/dist/infrastructure/keystore/keystore.d.ts +115 -0
  214. package/dist/infrastructure/keystore/keystore.d.ts.map +1 -0
  215. package/dist/infrastructure/keystore/keystore.js +327 -0
  216. package/dist/infrastructure/keystore/keystore.js.map +1 -0
  217. package/dist/infrastructure/keystore/memory.d.ts +45 -0
  218. package/dist/infrastructure/keystore/memory.d.ts.map +1 -0
  219. package/dist/infrastructure/keystore/memory.js +105 -0
  220. package/dist/infrastructure/keystore/memory.js.map +1 -0
  221. package/dist/infrastructure/oracle/coingecko-forex.d.ts +35 -0
  222. package/dist/infrastructure/oracle/coingecko-forex.d.ts.map +1 -0
  223. package/dist/infrastructure/oracle/coingecko-forex.js +69 -0
  224. package/dist/infrastructure/oracle/coingecko-forex.js.map +1 -0
  225. package/dist/infrastructure/oracle/coingecko-oracle.d.ts +73 -0
  226. package/dist/infrastructure/oracle/coingecko-oracle.d.ts.map +1 -0
  227. package/dist/infrastructure/oracle/coingecko-oracle.js +199 -0
  228. package/dist/infrastructure/oracle/coingecko-oracle.js.map +1 -0
  229. package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts +32 -0
  230. package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts.map +1 -0
  231. package/dist/infrastructure/oracle/coingecko-platform-ids.js +30 -0
  232. package/dist/infrastructure/oracle/coingecko-platform-ids.js.map +1 -0
  233. package/dist/infrastructure/oracle/forex-currencies.d.ts +36 -0
  234. package/dist/infrastructure/oracle/forex-currencies.d.ts.map +1 -0
  235. package/dist/infrastructure/oracle/forex-currencies.js +71 -0
  236. package/dist/infrastructure/oracle/forex-currencies.js.map +1 -0
  237. package/dist/infrastructure/oracle/forex-rate-service.d.ts +51 -0
  238. package/dist/infrastructure/oracle/forex-rate-service.d.ts.map +1 -0
  239. package/dist/infrastructure/oracle/forex-rate-service.js +149 -0
  240. package/dist/infrastructure/oracle/forex-rate-service.js.map +1 -0
  241. package/dist/infrastructure/oracle/index.d.ts +18 -0
  242. package/dist/infrastructure/oracle/index.d.ts.map +1 -0
  243. package/dist/infrastructure/oracle/index.js +19 -0
  244. package/dist/infrastructure/oracle/index.js.map +1 -0
  245. package/dist/infrastructure/oracle/oracle-chain.d.ts +101 -0
  246. package/dist/infrastructure/oracle/oracle-chain.d.ts.map +1 -0
  247. package/dist/infrastructure/oracle/oracle-chain.js +163 -0
  248. package/dist/infrastructure/oracle/oracle-chain.js.map +1 -0
  249. package/dist/infrastructure/oracle/oracle-errors.d.ts +42 -0
  250. package/dist/infrastructure/oracle/oracle-errors.d.ts.map +1 -0
  251. package/dist/infrastructure/oracle/oracle-errors.js +53 -0
  252. package/dist/infrastructure/oracle/oracle-errors.js.map +1 -0
  253. package/dist/infrastructure/oracle/price-age.d.ts +38 -0
  254. package/dist/infrastructure/oracle/price-age.d.ts.map +1 -0
  255. package/dist/infrastructure/oracle/price-age.js +44 -0
  256. package/dist/infrastructure/oracle/price-age.js.map +1 -0
  257. package/dist/infrastructure/oracle/price-cache.d.ts +99 -0
  258. package/dist/infrastructure/oracle/price-cache.d.ts.map +1 -0
  259. package/dist/infrastructure/oracle/price-cache.js +173 -0
  260. package/dist/infrastructure/oracle/price-cache.js.map +1 -0
  261. package/dist/infrastructure/oracle/pyth-feed-ids.d.ts +31 -0
  262. package/dist/infrastructure/oracle/pyth-feed-ids.d.ts.map +1 -0
  263. package/dist/infrastructure/oracle/pyth-feed-ids.js +44 -0
  264. package/dist/infrastructure/oracle/pyth-feed-ids.js.map +1 -0
  265. package/dist/infrastructure/oracle/pyth-oracle.d.ts +69 -0
  266. package/dist/infrastructure/oracle/pyth-oracle.d.ts.map +1 -0
  267. package/dist/infrastructure/oracle/pyth-oracle.js +149 -0
  268. package/dist/infrastructure/oracle/pyth-oracle.js.map +1 -0
  269. package/dist/infrastructure/settings/hot-reload.d.ts +71 -0
  270. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -0
  271. package/dist/infrastructure/settings/hot-reload.js +315 -0
  272. package/dist/infrastructure/settings/hot-reload.js.map +1 -0
  273. package/dist/infrastructure/settings/index.d.ts +13 -0
  274. package/dist/infrastructure/settings/index.d.ts.map +1 -0
  275. package/dist/infrastructure/settings/index.js +10 -0
  276. package/dist/infrastructure/settings/index.js.map +1 -0
  277. package/dist/infrastructure/settings/setting-keys.d.ts +28 -0
  278. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -0
  279. package/dist/infrastructure/settings/setting-keys.js +105 -0
  280. package/dist/infrastructure/settings/setting-keys.js.map +1 -0
  281. package/dist/infrastructure/settings/settings-crypto.d.ts +39 -0
  282. package/dist/infrastructure/settings/settings-crypto.d.ts.map +1 -0
  283. package/dist/infrastructure/settings/settings-crypto.js +73 -0
  284. package/dist/infrastructure/settings/settings-crypto.js.map +1 -0
  285. package/dist/infrastructure/settings/settings-service.d.ts +82 -0
  286. package/dist/infrastructure/settings/settings-service.d.ts.map +1 -0
  287. package/dist/infrastructure/settings/settings-service.js +267 -0
  288. package/dist/infrastructure/settings/settings-service.js.map +1 -0
  289. package/dist/infrastructure/telegram/index.d.ts +6 -0
  290. package/dist/infrastructure/telegram/index.d.ts.map +1 -0
  291. package/dist/infrastructure/telegram/index.js +5 -0
  292. package/dist/infrastructure/telegram/index.js.map +1 -0
  293. package/dist/infrastructure/telegram/telegram-api.d.ts +35 -0
  294. package/dist/infrastructure/telegram/telegram-api.d.ts.map +1 -0
  295. package/dist/infrastructure/telegram/telegram-api.js +82 -0
  296. package/dist/infrastructure/telegram/telegram-api.js.map +1 -0
  297. package/dist/infrastructure/telegram/telegram-auth.d.ts +57 -0
  298. package/dist/infrastructure/telegram/telegram-auth.d.ts.map +1 -0
  299. package/dist/infrastructure/telegram/telegram-auth.js +88 -0
  300. package/dist/infrastructure/telegram/telegram-auth.js.map +1 -0
  301. package/dist/infrastructure/telegram/telegram-bot-service.d.ts +95 -0
  302. package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -0
  303. package/dist/infrastructure/telegram/telegram-bot-service.js +564 -0
  304. package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -0
  305. package/dist/infrastructure/telegram/telegram-keyboard.d.ts +27 -0
  306. package/dist/infrastructure/telegram/telegram-keyboard.d.ts.map +1 -0
  307. package/dist/infrastructure/telegram/telegram-keyboard.js +52 -0
  308. package/dist/infrastructure/telegram/telegram-keyboard.js.map +1 -0
  309. package/dist/infrastructure/telegram/telegram-types.d.ts +43 -0
  310. package/dist/infrastructure/telegram/telegram-types.d.ts.map +1 -0
  311. package/dist/infrastructure/telegram/telegram-types.js +8 -0
  312. package/dist/infrastructure/telegram/telegram-types.js.map +1 -0
  313. package/dist/infrastructure/token-registry/builtin-tokens.d.ts +39 -0
  314. package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -0
  315. package/dist/infrastructure/token-registry/builtin-tokens.js +135 -0
  316. package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -0
  317. package/dist/infrastructure/token-registry/index.d.ts +8 -0
  318. package/dist/infrastructure/token-registry/index.d.ts.map +1 -0
  319. package/dist/infrastructure/token-registry/index.js +8 -0
  320. package/dist/infrastructure/token-registry/index.js.map +1 -0
  321. package/dist/infrastructure/token-registry/token-registry-service.d.ts +49 -0
  322. package/dist/infrastructure/token-registry/token-registry-service.d.ts.map +1 -0
  323. package/dist/infrastructure/token-registry/token-registry-service.js +93 -0
  324. package/dist/infrastructure/token-registry/token-registry-service.js.map +1 -0
  325. package/dist/infrastructure/version/index.d.ts +5 -0
  326. package/dist/infrastructure/version/index.d.ts.map +1 -0
  327. package/dist/infrastructure/version/index.js +5 -0
  328. package/dist/infrastructure/version/index.js.map +1 -0
  329. package/dist/infrastructure/version/version-check-service.d.ts +35 -0
  330. package/dist/infrastructure/version/version-check-service.d.ts.map +1 -0
  331. package/dist/infrastructure/version/version-check-service.js +92 -0
  332. package/dist/infrastructure/version/version-check-service.js.map +1 -0
  333. package/dist/lifecycle/daemon.d.ts +103 -0
  334. package/dist/lifecycle/daemon.d.ts.map +1 -0
  335. package/dist/lifecycle/daemon.js +934 -0
  336. package/dist/lifecycle/daemon.js.map +1 -0
  337. package/dist/lifecycle/index.d.ts +9 -0
  338. package/dist/lifecycle/index.d.ts.map +1 -0
  339. package/dist/lifecycle/index.js +9 -0
  340. package/dist/lifecycle/index.js.map +1 -0
  341. package/dist/lifecycle/signal-handler.d.ts +18 -0
  342. package/dist/lifecycle/signal-handler.d.ts.map +1 -0
  343. package/dist/lifecycle/signal-handler.js +37 -0
  344. package/dist/lifecycle/signal-handler.js.map +1 -0
  345. package/dist/lifecycle/workers.d.ts +46 -0
  346. package/dist/lifecycle/workers.d.ts.map +1 -0
  347. package/dist/lifecycle/workers.js +101 -0
  348. package/dist/lifecycle/workers.js.map +1 -0
  349. package/dist/notifications/channels/discord.d.ts +10 -0
  350. package/dist/notifications/channels/discord.d.ts.map +1 -0
  351. package/dist/notifications/channels/discord.js +54 -0
  352. package/dist/notifications/channels/discord.js.map +1 -0
  353. package/dist/notifications/channels/ntfy.d.ts +13 -0
  354. package/dist/notifications/channels/ntfy.d.ts.map +1 -0
  355. package/dist/notifications/channels/ntfy.js +58 -0
  356. package/dist/notifications/channels/ntfy.js.map +1 -0
  357. package/dist/notifications/channels/slack.d.ts +10 -0
  358. package/dist/notifications/channels/slack.d.ts.map +1 -0
  359. package/dist/notifications/channels/slack.js +55 -0
  360. package/dist/notifications/channels/slack.js.map +1 -0
  361. package/dist/notifications/channels/telegram.d.ts +10 -0
  362. package/dist/notifications/channels/telegram.d.ts.map +1 -0
  363. package/dist/notifications/channels/telegram.js +40 -0
  364. package/dist/notifications/channels/telegram.js.map +1 -0
  365. package/dist/notifications/index.d.ts +9 -0
  366. package/dist/notifications/index.d.ts.map +1 -0
  367. package/dist/notifications/index.js +7 -0
  368. package/dist/notifications/index.js.map +1 -0
  369. package/dist/notifications/notification-service.d.ts +75 -0
  370. package/dist/notifications/notification-service.d.ts.map +1 -0
  371. package/dist/notifications/notification-service.js +213 -0
  372. package/dist/notifications/notification-service.js.map +1 -0
  373. package/dist/notifications/templates/message-templates.d.ts +12 -0
  374. package/dist/notifications/templates/message-templates.d.ts.map +1 -0
  375. package/dist/notifications/templates/message-templates.js +22 -0
  376. package/dist/notifications/templates/message-templates.js.map +1 -0
  377. package/dist/pipeline/database-policy-engine.d.ts +286 -0
  378. package/dist/pipeline/database-policy-engine.d.ts.map +1 -0
  379. package/dist/pipeline/database-policy-engine.js +992 -0
  380. package/dist/pipeline/database-policy-engine.js.map +1 -0
  381. package/dist/pipeline/default-policy-engine.d.ts +26 -0
  382. package/dist/pipeline/default-policy-engine.d.ts.map +1 -0
  383. package/dist/pipeline/default-policy-engine.js +25 -0
  384. package/dist/pipeline/default-policy-engine.js.map +1 -0
  385. package/dist/pipeline/index.d.ts +9 -0
  386. package/dist/pipeline/index.d.ts.map +1 -0
  387. package/dist/pipeline/index.js +9 -0
  388. package/dist/pipeline/index.js.map +1 -0
  389. package/dist/pipeline/network-resolver.d.ts +22 -0
  390. package/dist/pipeline/network-resolver.d.ts.map +1 -0
  391. package/dist/pipeline/network-resolver.js +32 -0
  392. package/dist/pipeline/network-resolver.js.map +1 -0
  393. package/dist/pipeline/pipeline.d.ts +72 -0
  394. package/dist/pipeline/pipeline.d.ts.map +1 -0
  395. package/dist/pipeline/pipeline.js +87 -0
  396. package/dist/pipeline/pipeline.js.map +1 -0
  397. package/dist/pipeline/resolve-effective-amount-usd.d.ts +41 -0
  398. package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -0
  399. package/dist/pipeline/resolve-effective-amount-usd.js +208 -0
  400. package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -0
  401. package/dist/pipeline/sign-only.d.ts +99 -0
  402. package/dist/pipeline/sign-only.d.ts.map +1 -0
  403. package/dist/pipeline/sign-only.js +267 -0
  404. package/dist/pipeline/sign-only.js.map +1 -0
  405. package/dist/pipeline/sleep.d.ts +6 -0
  406. package/dist/pipeline/sleep.d.ts.map +1 -0
  407. package/dist/pipeline/sleep.js +8 -0
  408. package/dist/pipeline/sleep.js.map +1 -0
  409. package/dist/pipeline/stages.d.ts +82 -0
  410. package/dist/pipeline/stages.d.ts.map +1 -0
  411. package/dist/pipeline/stages.js +784 -0
  412. package/dist/pipeline/stages.js.map +1 -0
  413. package/dist/services/autostop-rules.d.ts +79 -0
  414. package/dist/services/autostop-rules.d.ts.map +1 -0
  415. package/dist/services/autostop-rules.js +174 -0
  416. package/dist/services/autostop-rules.js.map +1 -0
  417. package/dist/services/autostop-service.d.ts +82 -0
  418. package/dist/services/autostop-service.d.ts.map +1 -0
  419. package/dist/services/autostop-service.js +223 -0
  420. package/dist/services/autostop-service.js.map +1 -0
  421. package/dist/services/kill-switch-service.d.ts +118 -0
  422. package/dist/services/kill-switch-service.d.ts.map +1 -0
  423. package/dist/services/kill-switch-service.js +291 -0
  424. package/dist/services/kill-switch-service.js.map +1 -0
  425. package/dist/services/monitoring/balance-monitor-service.d.ts +65 -0
  426. package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -0
  427. package/dist/services/monitoring/balance-monitor-service.js +207 -0
  428. package/dist/services/monitoring/balance-monitor-service.js.map +1 -0
  429. package/dist/services/wc-session-service.d.ts +123 -0
  430. package/dist/services/wc-session-service.d.ts.map +1 -0
  431. package/dist/services/wc-session-service.js +363 -0
  432. package/dist/services/wc-session-service.js.map +1 -0
  433. package/dist/services/wc-signing-bridge.d.ts +60 -0
  434. package/dist/services/wc-signing-bridge.d.ts.map +1 -0
  435. package/dist/services/wc-signing-bridge.js +334 -0
  436. package/dist/services/wc-signing-bridge.js.map +1 -0
  437. package/dist/services/wc-storage.d.ts +32 -0
  438. package/dist/services/wc-storage.d.ts.map +1 -0
  439. package/dist/services/wc-storage.js +64 -0
  440. package/dist/services/wc-storage.js.map +1 -0
  441. package/dist/services/x402/payment-signer.d.ts +88 -0
  442. package/dist/services/x402/payment-signer.d.ts.map +1 -0
  443. package/dist/services/x402/payment-signer.js +311 -0
  444. package/dist/services/x402/payment-signer.js.map +1 -0
  445. package/dist/services/x402/ssrf-guard.d.ts +27 -0
  446. package/dist/services/x402/ssrf-guard.d.ts.map +1 -0
  447. package/dist/services/x402/ssrf-guard.js +236 -0
  448. package/dist/services/x402/ssrf-guard.js.map +1 -0
  449. package/dist/services/x402/x402-domain-policy.d.ts +50 -0
  450. package/dist/services/x402/x402-domain-policy.d.ts.map +1 -0
  451. package/dist/services/x402/x402-domain-policy.js +78 -0
  452. package/dist/services/x402/x402-domain-policy.js.map +1 -0
  453. package/dist/services/x402/x402-handler.d.ts +71 -0
  454. package/dist/services/x402/x402-handler.d.ts.map +1 -0
  455. package/dist/services/x402/x402-handler.js +195 -0
  456. package/dist/services/x402/x402-handler.js.map +1 -0
  457. package/dist/services/x402/x402-usd-resolver.d.ts +26 -0
  458. package/dist/services/x402/x402-usd-resolver.d.ts.map +1 -0
  459. package/dist/services/x402/x402-usd-resolver.js +79 -0
  460. package/dist/services/x402/x402-usd-resolver.js.map +1 -0
  461. package/dist/workflow/approval-workflow.d.ts +103 -0
  462. package/dist/workflow/approval-workflow.d.ts.map +1 -0
  463. package/dist/workflow/approval-workflow.js +202 -0
  464. package/dist/workflow/approval-workflow.js.map +1 -0
  465. package/dist/workflow/delay-queue.d.ts +78 -0
  466. package/dist/workflow/delay-queue.d.ts.map +1 -0
  467. package/dist/workflow/delay-queue.js +174 -0
  468. package/dist/workflow/delay-queue.js.map +1 -0
  469. package/dist/workflow/index.d.ts +11 -0
  470. package/dist/workflow/index.d.ts.map +1 -0
  471. package/dist/workflow/index.js +9 -0
  472. package/dist/workflow/index.js.map +1 -0
  473. package/dist/workflow/owner-state.d.ts +97 -0
  474. package/dist/workflow/owner-state.d.ts.map +1 -0
  475. package/dist/workflow/owner-state.js +168 -0
  476. package/dist/workflow/owner-state.js.map +1 -0
  477. package/package.json +71 -0
  478. package/public/admin/assets/index-BPoUSH8W.css +1 -0
  479. package/public/admin/assets/index-CDi1qoXB.js +1 -0
  480. package/public/admin/index.html +13 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * KillSwitchService: 3-state machine (ACTIVE / SUSPENDED / LOCKED)
3
+ * with CAS (Compare-And-Swap) ACID pattern for atomic state transitions
4
+ * and 6-step cascade execution.
5
+ *
6
+ * State machine:
7
+ * ACTIVE <---> SUSPENDED ---> LOCKED
8
+ * LOCKED ----> ACTIVE
9
+ *
10
+ * Valid transitions:
11
+ * ACTIVE -> SUSPENDED (activate / suspend)
12
+ * SUSPENDED -> LOCKED (escalate)
13
+ * SUSPENDED -> ACTIVE (recover from suspended)
14
+ * LOCKED -> ACTIVE (recover from locked)
15
+ *
16
+ * Invalid transitions (rejected with 409):
17
+ * ACTIVE -> LOCKED (must escalate through SUSPENDED)
18
+ * LOCKED -> SUSPENDED (must recover to ACTIVE first)
19
+ *
20
+ * 6-step cascade (on activation):
21
+ * 1. Revoke all active sessions
22
+ * 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
23
+ * 3. Suspend all ACTIVE wallets
24
+ * 4. API 503 (handled by kill-switch-guard middleware)
25
+ * 5. Send notification (KILL_SWITCH_ACTIVATED)
26
+ * 6. Insert audit log entry (severity: critical)
27
+ *
28
+ * CAS ACID pattern:
29
+ * 1. BEGIN IMMEDIATE (acquire exclusive lock)
30
+ * 2. UPDATE ... WHERE value = expectedState (CAS check)
31
+ * 3. If changes === 0 -> ROLLBACK (CAS failure)
32
+ * 4. UPSERT metadata (activated_at, activated_by)
33
+ * 5. COMMIT
34
+ *
35
+ * @see docs/36-killswitch-evm-freeze.md
36
+ */
37
+ import type { Database } from 'better-sqlite3';
38
+ import type { NotificationService } from '../notifications/notification-service.js';
39
+ import type { EventBus } from '@waiaas/core';
40
+ export interface KillSwitchStateInfo {
41
+ state: string;
42
+ activatedAt: number | null;
43
+ activatedBy: string | null;
44
+ }
45
+ export interface CascadeResult {
46
+ success: boolean;
47
+ error?: string;
48
+ }
49
+ export declare class KillSwitchService {
50
+ private sqlite;
51
+ private notificationService?;
52
+ private eventBus?;
53
+ constructor(opts: {
54
+ sqlite: Database;
55
+ notificationService?: NotificationService;
56
+ eventBus?: EventBus;
57
+ });
58
+ /** Get current kill switch state from key_value_store. */
59
+ getState(): KillSwitchStateInfo;
60
+ /**
61
+ * ACTIVE -> SUSPENDED transition (kill switch activation).
62
+ * Returns true on success, false on CAS failure (state was not ACTIVE).
63
+ */
64
+ activate(activatedBy: string): boolean;
65
+ /**
66
+ * SUSPENDED -> LOCKED transition (severity escalation).
67
+ * Returns true on success, false on CAS failure (state was not SUSPENDED).
68
+ */
69
+ escalate(escalatedBy: string): boolean;
70
+ /**
71
+ * SUSPENDED -> ACTIVE transition (recovery from suspended).
72
+ * Returns true on success, false on CAS failure (state was not SUSPENDED).
73
+ */
74
+ recoverFromSuspended(): boolean;
75
+ /**
76
+ * LOCKED -> ACTIVE transition (recovery from locked).
77
+ * Returns true on success, false on CAS failure (state was not LOCKED).
78
+ */
79
+ recoverFromLocked(): boolean;
80
+ /**
81
+ * Ensure kill_switch_state key exists in key_value_store.
82
+ * Sets to ACTIVE if not present. Safe to call on every startup.
83
+ */
84
+ ensureInitialized(): void;
85
+ /**
86
+ * Activate kill switch with 6-step cascade.
87
+ * CAS activate() + executeCascade() on success.
88
+ */
89
+ activateWithCascade(activatedBy: string): CascadeResult;
90
+ /**
91
+ * Escalate kill switch with notification + audit log.
92
+ * CAS escalate() + notification/audit on success.
93
+ */
94
+ escalateWithCascade(escalatedBy: string): CascadeResult;
95
+ /**
96
+ * Execute the 6-step cascade after kill switch activation.
97
+ *
98
+ * Steps:
99
+ * 1. Revoke all active sessions (SET revoked_at)
100
+ * 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
101
+ * 3. Suspend all ACTIVE wallets
102
+ * 4. API 503 -- handled by middleware (no action needed here)
103
+ * 5. Send notification (KILL_SWITCH_ACTIVATED)
104
+ * 6. Insert audit log entry
105
+ */
106
+ executeCascade(activatedBy: string): Promise<void>;
107
+ /**
108
+ * CAS transition with metadata set (for activate/escalate).
109
+ * Sets activated_at and activated_by on success.
110
+ */
111
+ private casTransition;
112
+ /**
113
+ * CAS transition with metadata clear (for recovery).
114
+ * Clears activated_at and activated_by on success.
115
+ */
116
+ private casTransitionWithClear;
117
+ }
118
+ //# sourceMappingURL=kill-switch-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-switch-service.d.ts","sourceRoot":"","sources":["../../src/services/kill-switch-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,IAAI,EAAE;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB;IAMD,0DAA0D;IAC1D,QAAQ,IAAI,mBAAmB;IAoB/B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAazB;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IAgBvD;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IA8CvD;;;;;;;;;;OAUG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ExD;;;OAGG;IACH,OAAO,CAAC,aAAa;IA+CrB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAoC/B"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * KillSwitchService: 3-state machine (ACTIVE / SUSPENDED / LOCKED)
3
+ * with CAS (Compare-And-Swap) ACID pattern for atomic state transitions
4
+ * and 6-step cascade execution.
5
+ *
6
+ * State machine:
7
+ * ACTIVE <---> SUSPENDED ---> LOCKED
8
+ * LOCKED ----> ACTIVE
9
+ *
10
+ * Valid transitions:
11
+ * ACTIVE -> SUSPENDED (activate / suspend)
12
+ * SUSPENDED -> LOCKED (escalate)
13
+ * SUSPENDED -> ACTIVE (recover from suspended)
14
+ * LOCKED -> ACTIVE (recover from locked)
15
+ *
16
+ * Invalid transitions (rejected with 409):
17
+ * ACTIVE -> LOCKED (must escalate through SUSPENDED)
18
+ * LOCKED -> SUSPENDED (must recover to ACTIVE first)
19
+ *
20
+ * 6-step cascade (on activation):
21
+ * 1. Revoke all active sessions
22
+ * 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
23
+ * 3. Suspend all ACTIVE wallets
24
+ * 4. API 503 (handled by kill-switch-guard middleware)
25
+ * 5. Send notification (KILL_SWITCH_ACTIVATED)
26
+ * 6. Insert audit log entry (severity: critical)
27
+ *
28
+ * CAS ACID pattern:
29
+ * 1. BEGIN IMMEDIATE (acquire exclusive lock)
30
+ * 2. UPDATE ... WHERE value = expectedState (CAS check)
31
+ * 3. If changes === 0 -> ROLLBACK (CAS failure)
32
+ * 4. UPSERT metadata (activated_at, activated_by)
33
+ * 5. COMMIT
34
+ *
35
+ * @see docs/36-killswitch-evm-freeze.md
36
+ */
37
+ const KV_KEY_STATE = 'kill_switch_state';
38
+ const KV_KEY_ACTIVATED_AT = 'kill_switch_activated_at';
39
+ const KV_KEY_ACTIVATED_BY = 'kill_switch_activated_by';
40
+ export class KillSwitchService {
41
+ sqlite;
42
+ notificationService;
43
+ eventBus;
44
+ constructor(opts) {
45
+ this.sqlite = opts.sqlite;
46
+ this.notificationService = opts.notificationService;
47
+ this.eventBus = opts.eventBus;
48
+ }
49
+ /** Get current kill switch state from key_value_store. */
50
+ getState() {
51
+ const stateRow = this.sqlite
52
+ .prepare('SELECT value FROM key_value_store WHERE key = ?')
53
+ .get(KV_KEY_STATE);
54
+ const atRow = this.sqlite
55
+ .prepare('SELECT value FROM key_value_store WHERE key = ?')
56
+ .get(KV_KEY_ACTIVATED_AT);
57
+ const byRow = this.sqlite
58
+ .prepare('SELECT value FROM key_value_store WHERE key = ?')
59
+ .get(KV_KEY_ACTIVATED_BY);
60
+ return {
61
+ state: stateRow?.value ?? 'ACTIVE',
62
+ activatedAt: atRow?.value ? parseInt(atRow.value, 10) : null,
63
+ activatedBy: byRow?.value ?? null,
64
+ };
65
+ }
66
+ /**
67
+ * ACTIVE -> SUSPENDED transition (kill switch activation).
68
+ * Returns true on success, false on CAS failure (state was not ACTIVE).
69
+ */
70
+ activate(activatedBy) {
71
+ return this.casTransition('ACTIVE', 'SUSPENDED', activatedBy);
72
+ }
73
+ /**
74
+ * SUSPENDED -> LOCKED transition (severity escalation).
75
+ * Returns true on success, false on CAS failure (state was not SUSPENDED).
76
+ */
77
+ escalate(escalatedBy) {
78
+ return this.casTransition('SUSPENDED', 'LOCKED', escalatedBy);
79
+ }
80
+ /**
81
+ * SUSPENDED -> ACTIVE transition (recovery from suspended).
82
+ * Returns true on success, false on CAS failure (state was not SUSPENDED).
83
+ */
84
+ recoverFromSuspended() {
85
+ return this.casTransitionWithClear('SUSPENDED', 'ACTIVE');
86
+ }
87
+ /**
88
+ * LOCKED -> ACTIVE transition (recovery from locked).
89
+ * Returns true on success, false on CAS failure (state was not LOCKED).
90
+ */
91
+ recoverFromLocked() {
92
+ return this.casTransitionWithClear('LOCKED', 'ACTIVE');
93
+ }
94
+ /**
95
+ * Ensure kill_switch_state key exists in key_value_store.
96
+ * Sets to ACTIVE if not present. Safe to call on every startup.
97
+ */
98
+ ensureInitialized() {
99
+ const now = Math.floor(Date.now() / 1000);
100
+ this.sqlite
101
+ .prepare('INSERT OR IGNORE INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?)')
102
+ .run(KV_KEY_STATE, 'ACTIVE', now);
103
+ }
104
+ // -----------------------------------------------------------------------
105
+ // Cascade methods
106
+ // -----------------------------------------------------------------------
107
+ /**
108
+ * Activate kill switch with 6-step cascade.
109
+ * CAS activate() + executeCascade() on success.
110
+ */
111
+ activateWithCascade(activatedBy) {
112
+ const success = this.activate(activatedBy);
113
+ if (!success) {
114
+ const current = this.getState();
115
+ return {
116
+ success: false,
117
+ error: `Kill switch is already ${current.state}`,
118
+ };
119
+ }
120
+ // Execute cascade (fire-and-forget for async parts like notifications)
121
+ void this.executeCascade(activatedBy);
122
+ return { success: true };
123
+ }
124
+ /**
125
+ * Escalate kill switch with notification + audit log.
126
+ * CAS escalate() + notification/audit on success.
127
+ */
128
+ escalateWithCascade(escalatedBy) {
129
+ const success = this.escalate(escalatedBy);
130
+ if (!success) {
131
+ const current = this.getState();
132
+ return {
133
+ success: false,
134
+ error: `Cannot escalate from ${current.state} (must be SUSPENDED)`,
135
+ };
136
+ }
137
+ // Step: Send escalation notification
138
+ void this.notificationService?.notify('KILL_SWITCH_ESCALATED', 'system', { escalatedBy });
139
+ // Step: Audit log
140
+ const now = Math.floor(Date.now() / 1000);
141
+ try {
142
+ this.sqlite
143
+ .prepare('INSERT INTO audit_log (timestamp, event_type, actor, details, severity) VALUES (?, ?, ?, ?, ?)')
144
+ .run(now, 'KILL_SWITCH_ESCALATED', escalatedBy, JSON.stringify({ action: 'kill_switch_escalated', escalatedBy }), 'critical');
145
+ }
146
+ catch {
147
+ // Best-effort audit logging
148
+ }
149
+ // EventBus emit
150
+ this.eventBus?.emit('kill-switch:state-changed', {
151
+ state: 'LOCKED',
152
+ previousState: 'SUSPENDED',
153
+ activatedBy: escalatedBy,
154
+ timestamp: now,
155
+ });
156
+ return { success: true };
157
+ }
158
+ /**
159
+ * Execute the 6-step cascade after kill switch activation.
160
+ *
161
+ * Steps:
162
+ * 1. Revoke all active sessions (SET revoked_at)
163
+ * 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
164
+ * 3. Suspend all ACTIVE wallets
165
+ * 4. API 503 -- handled by middleware (no action needed here)
166
+ * 5. Send notification (KILL_SWITCH_ACTIVATED)
167
+ * 6. Insert audit log entry
168
+ */
169
+ async executeCascade(activatedBy) {
170
+ const now = Math.floor(Date.now() / 1000);
171
+ // Step 1: Revoke all active sessions
172
+ try {
173
+ this.sqlite
174
+ .prepare('UPDATE sessions SET revoked_at = ? WHERE revoked_at IS NULL')
175
+ .run(now);
176
+ }
177
+ catch {
178
+ // Best-effort: continue cascade even if step fails
179
+ }
180
+ // Step 2: Cancel in-flight transactions
181
+ try {
182
+ this.sqlite
183
+ .prepare("UPDATE transactions SET status = 'CANCELLED', error = 'Kill switch activated' WHERE status IN ('PENDING', 'QUEUED', 'EXECUTING')")
184
+ .run();
185
+ }
186
+ catch {
187
+ // Best-effort
188
+ }
189
+ // Step 3: Suspend all ACTIVE wallets
190
+ try {
191
+ this.sqlite
192
+ .prepare("UPDATE wallets SET status = 'SUSPENDED', suspended_at = ?, suspension_reason = 'Kill switch activated' WHERE status = 'ACTIVE'")
193
+ .run(now);
194
+ }
195
+ catch {
196
+ // Best-effort
197
+ }
198
+ // Step 4: API 503 is handled by killSwitchGuard middleware
199
+ // (KillSwitchService state is SUSPENDED/LOCKED -> middleware blocks)
200
+ // Step 5: Send notification
201
+ void this.notificationService?.notify('KILL_SWITCH_ACTIVATED', 'system', { activatedBy });
202
+ // Step 6: Audit log
203
+ try {
204
+ this.sqlite
205
+ .prepare('INSERT INTO audit_log (timestamp, event_type, actor, details, severity) VALUES (?, ?, ?, ?, ?)')
206
+ .run(now, 'KILL_SWITCH_ACTIVATED', activatedBy, JSON.stringify({ action: 'kill_switch_activated', activatedBy }), 'critical');
207
+ }
208
+ catch {
209
+ // Best-effort audit logging
210
+ }
211
+ // EventBus emit
212
+ this.eventBus?.emit('kill-switch:state-changed', {
213
+ state: 'SUSPENDED',
214
+ previousState: 'ACTIVE',
215
+ activatedBy,
216
+ timestamp: now,
217
+ });
218
+ }
219
+ // -----------------------------------------------------------------------
220
+ // CAS transition internals
221
+ // -----------------------------------------------------------------------
222
+ /**
223
+ * CAS transition with metadata set (for activate/escalate).
224
+ * Sets activated_at and activated_by on success.
225
+ */
226
+ casTransition(expectedState, newState, actorName) {
227
+ const now = Math.floor(Date.now() / 1000);
228
+ try {
229
+ this.sqlite.exec('BEGIN IMMEDIATE');
230
+ const result = this.sqlite
231
+ .prepare('UPDATE key_value_store SET value = ?, updated_at = ? WHERE key = ? AND value = ?')
232
+ .run(newState, now, KV_KEY_STATE, expectedState);
233
+ if (result.changes === 0) {
234
+ this.sqlite.exec('ROLLBACK');
235
+ return false;
236
+ }
237
+ // UPSERT activated_at
238
+ this.sqlite
239
+ .prepare('INSERT INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at')
240
+ .run(KV_KEY_ACTIVATED_AT, String(now), now);
241
+ // UPSERT activated_by
242
+ this.sqlite
243
+ .prepare('INSERT INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at')
244
+ .run(KV_KEY_ACTIVATED_BY, actorName, now);
245
+ this.sqlite.exec('COMMIT');
246
+ return true;
247
+ }
248
+ catch (err) {
249
+ try {
250
+ this.sqlite.exec('ROLLBACK');
251
+ }
252
+ catch {
253
+ /* best effort */
254
+ }
255
+ throw err;
256
+ }
257
+ }
258
+ /**
259
+ * CAS transition with metadata clear (for recovery).
260
+ * Clears activated_at and activated_by on success.
261
+ */
262
+ casTransitionWithClear(expectedState, newState) {
263
+ const now = Math.floor(Date.now() / 1000);
264
+ try {
265
+ this.sqlite.exec('BEGIN IMMEDIATE');
266
+ const result = this.sqlite
267
+ .prepare('UPDATE key_value_store SET value = ?, updated_at = ? WHERE key = ? AND value = ?')
268
+ .run(newState, now, KV_KEY_STATE, expectedState);
269
+ if (result.changes === 0) {
270
+ this.sqlite.exec('ROLLBACK');
271
+ return false;
272
+ }
273
+ // Clear activated_at and activated_by
274
+ this.sqlite
275
+ .prepare('DELETE FROM key_value_store WHERE key IN (?, ?)')
276
+ .run(KV_KEY_ACTIVATED_AT, KV_KEY_ACTIVATED_BY);
277
+ this.sqlite.exec('COMMIT');
278
+ return true;
279
+ }
280
+ catch (err) {
281
+ try {
282
+ this.sqlite.exec('ROLLBACK');
283
+ }
284
+ catch {
285
+ /* best effort */
286
+ }
287
+ throw err;
288
+ }
289
+ }
290
+ }
291
+ //# sourceMappingURL=kill-switch-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-switch-service.js","sourceRoot":"","sources":["../../src/services/kill-switch-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * BalanceMonitorService: periodic native-token balance check for all active wallets.
3
+ *
4
+ * Checks all ACTIVE wallets at a configurable interval (default 5 minutes).
5
+ * When a wallet's native balance drops below the chain-specific threshold,
6
+ * a LOW_BALANCE notification is sent via NotificationService.
7
+ *
8
+ * Features:
9
+ * - Chain-specific thresholds (SOL 0.01, ETH 0.005)
10
+ * - 24-hour cooldown to prevent duplicate alerts (BMON-03)
11
+ * - Recovery detection: re-alert if balance recovers then drops again (BMON-04)
12
+ * - Per-wallet error isolation: one wallet failure does not block others
13
+ * - Runtime configuration updates (updateConfig)
14
+ *
15
+ * @see BMON-01, BMON-02, BMON-03, BMON-04, BMON-05, BMON-06 requirements
16
+ */
17
+ import type { Database } from 'better-sqlite3';
18
+ import type { AdapterPool } from '../../infrastructure/adapter-pool.js';
19
+ import type { NotificationService } from '../../notifications/notification-service.js';
20
+ export interface BalanceMonitorConfig {
21
+ checkIntervalSec: number;
22
+ lowBalanceThresholdSol: number;
23
+ lowBalanceThresholdEth: number;
24
+ cooldownHours: number;
25
+ enabled: boolean;
26
+ }
27
+ export declare const DEFAULT_BALANCE_MONITOR_CONFIG: BalanceMonitorConfig;
28
+ export declare class BalanceMonitorService {
29
+ private sqlite;
30
+ private adapterPool;
31
+ private rpcConfig;
32
+ private notificationService?;
33
+ private config;
34
+ private lastNotified;
35
+ private checkTimer;
36
+ constructor(opts: {
37
+ sqlite: Database;
38
+ adapterPool: AdapterPool;
39
+ config: {
40
+ rpc: Record<string, string>;
41
+ };
42
+ notificationService?: NotificationService;
43
+ monitorConfig?: Partial<BalanceMonitorConfig>;
44
+ });
45
+ /** Start periodic balance checking. */
46
+ start(): void;
47
+ /** Stop periodic balance checking. */
48
+ stop(): void;
49
+ /** Check balances of all ACTIVE wallets. */
50
+ checkAllWallets(): Promise<void>;
51
+ private checkWallet;
52
+ private getThreshold;
53
+ private shouldNotify;
54
+ private notifyLowBalance;
55
+ private markRecovered;
56
+ /** Update configuration at runtime (e.g., from Admin Settings). */
57
+ updateConfig(config: Partial<BalanceMonitorConfig>): void;
58
+ /** Get current monitoring status for debugging. */
59
+ getStatus(): {
60
+ enabled: boolean;
61
+ config: BalanceMonitorConfig;
62
+ trackedWallets: number;
63
+ };
64
+ }
65
+ //# sourceMappingURL=balance-monitor-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance-monitor-service.d.ts","sourceRoot":"","sources":["../../../src/services/monitoring/balance-monitor-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAMvF,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAM5C,CAAC;AAuBF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,MAAM,CAAuB;IAGrC,OAAO,CAAC,YAAY,CAAkC;IAGtD,OAAO,CAAC,UAAU,CAA+C;gBAErD,IAAI,EAAE;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,WAAW,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;QACxC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;KAC/C;IAYD,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAQb,sCAAsC;IACtC,IAAI,IAAI,IAAI;IAWZ,4CAA4C;IACtC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBxB,WAAW;IAsCzB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAarB,mEAAmE;IACnE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IA6BzD,mDAAmD;IACnD,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,oBAAoB,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}