@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,564 @@
1
+ /**
2
+ * TelegramBotService: Long Polling bot with 2-Tier auth + 9 commands.
3
+ *
4
+ * Uses better-sqlite3 directly for DB access (same pattern as KillSwitchService).
5
+ * Long Polling with exponential backoff (1s -> 2s -> 4s -> ... -> 30s max).
6
+ * MarkdownV2 escape for all user-facing text.
7
+ *
8
+ * Commands:
9
+ * /start - Register chat_id as PENDING user (public)
10
+ * /help - Show available commands (public)
11
+ * /status - Show daemon status, wallet count, session count (readonly+)
12
+ * /wallets - List all wallets (readonly+)
13
+ * /pending - List pending approval transactions (admin)
14
+ * /approve - Approve a pending transaction (admin)
15
+ * /reject - Reject a pending transaction (admin)
16
+ * /killswitch - Activate kill switch with confirmation (admin)
17
+ * /newsession - Create a new session for a wallet (admin)
18
+ *
19
+ * Auth: TelegramAuth 2-Tier (PUBLIC / READONLY / ADMIN)
20
+ * Callback queries: inline keyboard buttons for approve/reject/killswitch/newsession
21
+ *
22
+ * @see packages/daemon/src/services/kill-switch-service.ts (SQLite direct pattern)
23
+ * @see packages/daemon/src/services/autostop-service.ts (service start/stop pattern)
24
+ */
25
+ import { createHash } from 'node:crypto';
26
+ import { getMessages } from '@waiaas/core';
27
+ import { TelegramAuth } from './telegram-auth.js';
28
+ import { buildConfirmKeyboard, buildWalletSelectKeyboard, buildApprovalKeyboard } from './telegram-keyboard.js';
29
+ // ---------------------------------------------------------------------------
30
+ // MarkdownV2 escape utility
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Escape special characters for Telegram MarkdownV2 parse mode.
34
+ * @see https://core.telegram.org/bots/api#markdownv2-style
35
+ */
36
+ export const escapeMarkdownV2 = (s) => s.replace(/([_*[\]()~`>#+\-=|{}.!\\])/g, '\\$1');
37
+ // ---------------------------------------------------------------------------
38
+ // TelegramBotService
39
+ // ---------------------------------------------------------------------------
40
+ export class TelegramBotService {
41
+ sqlite;
42
+ api;
43
+ locale;
44
+ killSwitchService;
45
+ jwtSecretManager;
46
+ sessionTtl;
47
+ auth;
48
+ running = false;
49
+ offset = 0;
50
+ backoffMs = 1000;
51
+ retryCount = 0;
52
+ static MAX_BACKOFF_MS = 30_000;
53
+ static POLL_TIMEOUT_SEC = 30;
54
+ constructor(opts) {
55
+ this.sqlite = opts.sqlite;
56
+ this.api = opts.api;
57
+ this.locale = opts.locale ?? 'en';
58
+ this.killSwitchService = opts.killSwitchService;
59
+ this.jwtSecretManager = opts.jwtSecretManager;
60
+ this.sessionTtl = opts.sessionTtl ?? 3600; // default 1 hour
61
+ this.auth = new TelegramAuth(opts.sqlite);
62
+ }
63
+ /**
64
+ * Start the Long Polling loop (fire-and-forget, runs in background).
65
+ * Does NOT block -- returns immediately after starting the async loop.
66
+ */
67
+ start() {
68
+ if (this.running)
69
+ return;
70
+ this.running = true;
71
+ this.backoffMs = 1000;
72
+ this.retryCount = 0;
73
+ void this.pollLoop();
74
+ }
75
+ /**
76
+ * Stop the Long Polling loop. The loop exits on next iteration.
77
+ */
78
+ stop() {
79
+ this.running = false;
80
+ }
81
+ /** Whether the bot service is currently running. */
82
+ get isRunning() {
83
+ return this.running;
84
+ }
85
+ /** Current backoff interval in ms (for testing). */
86
+ get currentBackoffMs() {
87
+ return this.backoffMs;
88
+ }
89
+ /** Current consecutive failure count (for testing). */
90
+ get consecutiveFailures() {
91
+ return this.retryCount;
92
+ }
93
+ // -----------------------------------------------------------------------
94
+ // Long Polling loop
95
+ // -----------------------------------------------------------------------
96
+ async pollLoop() {
97
+ while (this.running) {
98
+ try {
99
+ const updates = await this.api.getUpdates(this.offset, TelegramBotService.POLL_TIMEOUT_SEC);
100
+ // Success -- reset backoff and retry counter
101
+ this.backoffMs = 1000;
102
+ this.retryCount = 0;
103
+ for (const update of updates) {
104
+ this.offset = update.update_id + 1;
105
+ await this.handleUpdate(update);
106
+ }
107
+ }
108
+ catch (err) {
109
+ // Check if Telegram API returned 401/409 -- do not retry, stop
110
+ if (err instanceof Error && /Telegram API error: (401|409)/.test(err.message)) {
111
+ console.error(`Telegram Bot: fatal API error, stopping polling: ${err.message}`);
112
+ this.running = false;
113
+ return;
114
+ }
115
+ // Exponential backoff on network errors
116
+ if (this.running) {
117
+ this.retryCount++;
118
+ // Log warning every 3 consecutive failures
119
+ if (this.retryCount % 3 === 0) {
120
+ console.warn(`Telegram Bot: ${this.retryCount} consecutive failures, retrying in ${this.backoffMs}ms`);
121
+ }
122
+ await this.sleep(this.backoffMs);
123
+ this.backoffMs = Math.min(this.backoffMs * 2, TelegramBotService.MAX_BACKOFF_MS);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ // -----------------------------------------------------------------------
129
+ // Update router
130
+ // -----------------------------------------------------------------------
131
+ async handleUpdate(update) {
132
+ if (update.callback_query) {
133
+ await this.handleCallbackQuery(update);
134
+ return;
135
+ }
136
+ if (update.message?.text) {
137
+ await this.handleMessage(update.message);
138
+ }
139
+ }
140
+ async handleMessage(message) {
141
+ const text = message.text?.trim() ?? '';
142
+ if (!text.startsWith('/'))
143
+ return;
144
+ const parts = text.split(/\s+/);
145
+ const command = parts[0].toLowerCase().split('@')[0]; // strip @botname suffix
146
+ const chatId = message.chat.id;
147
+ const username = message.from?.username;
148
+ const msgs = getMessages(this.locale);
149
+ // 2-Tier auth check
150
+ const perm = this.auth.checkPermission(chatId, command);
151
+ if (!perm.allowed) {
152
+ switch (perm.reason) {
153
+ case 'not_registered':
154
+ await this.api.sendMessage(chatId, msgs.telegram.bot_unauthorized);
155
+ return;
156
+ case 'pending_approval':
157
+ await this.api.sendMessage(chatId, msgs.telegram.bot_pending_approval);
158
+ return;
159
+ case 'admin_only':
160
+ await this.api.sendMessage(chatId, msgs.telegram.bot_admin_only);
161
+ return;
162
+ }
163
+ return;
164
+ }
165
+ try {
166
+ switch (command) {
167
+ case '/start':
168
+ await this.handleStart(chatId, username);
169
+ break;
170
+ case '/help':
171
+ await this.handleHelp(chatId);
172
+ break;
173
+ case '/status':
174
+ await this.handleStatus(chatId);
175
+ break;
176
+ case '/wallets':
177
+ await this.handleWallets(chatId);
178
+ break;
179
+ case '/pending':
180
+ await this.handlePending(chatId);
181
+ break;
182
+ case '/approve':
183
+ await this.handleApprove(chatId, parts[1]);
184
+ break;
185
+ case '/reject':
186
+ await this.handleReject(chatId, parts[1]);
187
+ break;
188
+ case '/killswitch':
189
+ await this.handleKillswitch(chatId);
190
+ break;
191
+ case '/newsession':
192
+ await this.handleNewSession(chatId);
193
+ break;
194
+ default:
195
+ // Unknown command -- ignore silently
196
+ break;
197
+ }
198
+ }
199
+ catch {
200
+ // Swallow handler errors to keep polling alive
201
+ }
202
+ }
203
+ // -----------------------------------------------------------------------
204
+ // Callback query handler (inline keyboard)
205
+ // -----------------------------------------------------------------------
206
+ async handleCallbackQuery(update) {
207
+ const cbq = update.callback_query;
208
+ const chatId = cbq.from.id;
209
+ const data = cbq.data;
210
+ if (!data)
211
+ return;
212
+ // Determine which command the callback maps to for auth check
213
+ let command = null;
214
+ if (data.startsWith('approve:'))
215
+ command = '/approve';
216
+ else if (data.startsWith('reject:'))
217
+ command = '/reject';
218
+ else if (data.startsWith('killswitch:'))
219
+ command = '/killswitch';
220
+ else if (data.startsWith('newsession:'))
221
+ command = '/newsession';
222
+ if (!command)
223
+ return;
224
+ // Auth check for callback queries
225
+ const perm = this.auth.checkPermission(chatId, command);
226
+ if (!perm.allowed) {
227
+ const msgs = getMessages(this.locale);
228
+ const reason = perm.reason === 'admin_only'
229
+ ? msgs.telegram.bot_admin_only
230
+ : perm.reason === 'pending_approval'
231
+ ? msgs.telegram.bot_pending_approval
232
+ : msgs.telegram.bot_unauthorized;
233
+ await this.api.answerCallbackQuery(cbq.id, reason);
234
+ return;
235
+ }
236
+ const msgs = getMessages(this.locale);
237
+ try {
238
+ if (data === 'killswitch:confirm') {
239
+ await this.executeKillswitchConfirm(chatId);
240
+ await this.api.answerCallbackQuery(cbq.id, msgs.telegram.keyboard_yes);
241
+ return;
242
+ }
243
+ if (data === 'killswitch:cancel') {
244
+ await this.api.sendMessage(chatId, msgs.telegram.bot_killswitch_cancelled);
245
+ await this.api.answerCallbackQuery(cbq.id, msgs.telegram.keyboard_no);
246
+ return;
247
+ }
248
+ if (data.startsWith('newsession:')) {
249
+ const walletId = data.slice('newsession:'.length);
250
+ await this.executeNewSession(chatId, walletId);
251
+ await this.api.answerCallbackQuery(cbq.id);
252
+ return;
253
+ }
254
+ if (data.startsWith('approve:')) {
255
+ const txId = data.split(':')[1];
256
+ if (txId)
257
+ await this.handleApprove(chatId, txId);
258
+ await this.api.answerCallbackQuery(cbq.id, msgs.telegram.keyboard_approve);
259
+ return;
260
+ }
261
+ if (data.startsWith('reject:')) {
262
+ const txId = data.split(':')[1];
263
+ if (txId)
264
+ await this.handleReject(chatId, txId);
265
+ await this.api.answerCallbackQuery(cbq.id, msgs.telegram.keyboard_reject);
266
+ return;
267
+ }
268
+ }
269
+ catch {
270
+ // Swallow errors, acknowledge callback
271
+ await this.api.answerCallbackQuery(cbq.id);
272
+ }
273
+ }
274
+ // -----------------------------------------------------------------------
275
+ // Command handlers
276
+ // -----------------------------------------------------------------------
277
+ async handleStart(chatId, username) {
278
+ const messages = getMessages(this.locale);
279
+ const now = Math.floor(Date.now() / 1000);
280
+ // INSERT OR IGNORE -- PK conflict means already registered
281
+ const result = this.sqlite
282
+ .prepare('INSERT OR IGNORE INTO telegram_users (chat_id, username, role, registered_at) VALUES (?, ?, ?, ?)')
283
+ .run(chatId, username ?? null, 'PENDING', now);
284
+ if (result.changes > 0) {
285
+ // New registration
286
+ await this.api.sendMessage(chatId, messages.telegram.bot_welcome);
287
+ await this.api.sendMessage(chatId, messages.telegram.bot_pending_approval);
288
+ }
289
+ else {
290
+ // Already registered
291
+ await this.api.sendMessage(chatId, messages.telegram.bot_already_registered);
292
+ }
293
+ }
294
+ async handleHelp(chatId) {
295
+ const messages = getMessages(this.locale);
296
+ await this.api.sendMessage(chatId, messages.telegram.bot_help);
297
+ }
298
+ async handleStatus(chatId) {
299
+ const messages = getMessages(this.locale);
300
+ // Gather status data
301
+ const uptimeSeconds = Math.floor(process.uptime());
302
+ const uptimeStr = this.formatUptime(uptimeSeconds);
303
+ // Kill Switch state
304
+ let killSwitchState = 'ACTIVE';
305
+ try {
306
+ if (this.killSwitchService) {
307
+ killSwitchState = this.killSwitchService.getState().state;
308
+ }
309
+ }
310
+ catch {
311
+ killSwitchState = 'UNKNOWN';
312
+ }
313
+ // Wallet counts
314
+ const walletRow = this.sqlite
315
+ .prepare('SELECT COUNT(*) AS total FROM wallets')
316
+ .get();
317
+ const activeWalletRow = this.sqlite
318
+ .prepare("SELECT COUNT(*) AS active FROM wallets WHERE status = 'ACTIVE'")
319
+ .get();
320
+ // Active sessions
321
+ const sessionRow = this.sqlite
322
+ .prepare('SELECT COUNT(*) AS active FROM sessions WHERE revoked_at IS NULL AND expires_at > unixepoch()')
323
+ .get();
324
+ // Build status message from template
325
+ const statusBody = messages.telegram.bot_status_body
326
+ .replace('{uptime}', escapeMarkdownV2(uptimeStr))
327
+ .replace('{killSwitch}', escapeMarkdownV2(killSwitchState))
328
+ .replace('{walletCount}', escapeMarkdownV2(String(walletRow.total)))
329
+ .replace('{activeCount}', escapeMarkdownV2(String(activeWalletRow.active)))
330
+ .replace('{sessionCount}', escapeMarkdownV2(String(sessionRow.active)));
331
+ const header = `*${escapeMarkdownV2(messages.telegram.bot_status_header)}*`;
332
+ await this.api.sendMessage(chatId, `${header}\n\n${statusBody}`);
333
+ }
334
+ // -----------------------------------------------------------------------
335
+ // /wallets -- list all wallets
336
+ // -----------------------------------------------------------------------
337
+ async handleWallets(chatId) {
338
+ const messages = getMessages(this.locale);
339
+ const rows = this.sqlite
340
+ .prepare('SELECT id, name, chain, environment, status FROM wallets ORDER BY created_at DESC')
341
+ .all();
342
+ if (rows.length === 0) {
343
+ await this.api.sendMessage(chatId, messages.telegram.bot_wallets_empty);
344
+ return;
345
+ }
346
+ const lines = rows.map((w) => `\\- ${escapeMarkdownV2(w.name)} \\(${escapeMarkdownV2(w.chain)}/${escapeMarkdownV2(w.environment)}\\) \\[${escapeMarkdownV2(w.status)}\\]`);
347
+ const header = `*${escapeMarkdownV2(messages.telegram.bot_wallets_header)}*`;
348
+ await this.api.sendMessage(chatId, `${header}\n\n${lines.join('\n')}`);
349
+ }
350
+ // -----------------------------------------------------------------------
351
+ // /pending -- list pending approval transactions
352
+ // -----------------------------------------------------------------------
353
+ async handlePending(chatId) {
354
+ const messages = getMessages(this.locale);
355
+ const rows = this.sqlite
356
+ .prepare(`SELECT t.id, t.type, t.amount, t.to_address, t.chain, pa.expires_at
357
+ FROM transactions t
358
+ JOIN pending_approvals pa ON t.id = pa.tx_id
359
+ WHERE t.status = 'QUEUED'
360
+ AND pa.approved_at IS NULL
361
+ AND pa.rejected_at IS NULL
362
+ AND pa.expires_at > unixepoch()
363
+ ORDER BY pa.created_at ASC`)
364
+ .all();
365
+ if (rows.length === 0) {
366
+ await this.api.sendMessage(chatId, messages.telegram.bot_pending_empty);
367
+ return;
368
+ }
369
+ const header = `*${escapeMarkdownV2(messages.telegram.bot_pending_list_header)}*`;
370
+ for (const tx of rows) {
371
+ const amountStr = tx.amount ? escapeMarkdownV2(tx.amount) : '\\-';
372
+ const toStr = tx.to_address
373
+ ? escapeMarkdownV2(tx.to_address.slice(0, 8) + '...' + tx.to_address.slice(-4))
374
+ : '\\-';
375
+ const line = `${escapeMarkdownV2(tx.type)} | ${amountStr} | ${toStr} | ${escapeMarkdownV2(tx.chain)}`;
376
+ const txIdDisplay = escapeMarkdownV2(tx.id.slice(0, 8) + '...');
377
+ const keyboard = buildApprovalKeyboard(tx.id, messages.telegram);
378
+ await this.api.sendMessage(chatId, `${header}\n\n${txIdDisplay}\n${line}`, keyboard);
379
+ }
380
+ }
381
+ // -----------------------------------------------------------------------
382
+ // /approve {txId} -- approve a pending transaction
383
+ // -----------------------------------------------------------------------
384
+ async handleApprove(chatId, txId) {
385
+ const messages = getMessages(this.locale);
386
+ if (!txId) {
387
+ await this.api.sendMessage(chatId, messages.telegram.bot_tx_not_found);
388
+ return;
389
+ }
390
+ // Verify the transaction exists and is pending approval
391
+ const pending = this.sqlite
392
+ .prepare(`SELECT pa.tx_id FROM pending_approvals pa
393
+ JOIN transactions t ON t.id = pa.tx_id
394
+ WHERE pa.tx_id = ? AND t.status = 'QUEUED'
395
+ AND pa.approved_at IS NULL AND pa.rejected_at IS NULL`)
396
+ .get(txId);
397
+ if (!pending) {
398
+ await this.api.sendMessage(chatId, messages.telegram.bot_tx_not_found);
399
+ return;
400
+ }
401
+ // Approve: update pending_approvals and transactions
402
+ this.sqlite
403
+ .prepare("UPDATE pending_approvals SET approved_at = unixepoch(), approval_channel = 'telegram' WHERE tx_id = ? AND approved_at IS NULL AND rejected_at IS NULL")
404
+ .run(txId);
405
+ this.sqlite
406
+ .prepare("UPDATE transactions SET status = 'EXECUTING' WHERE id = ? AND status = 'QUEUED'")
407
+ .run(txId);
408
+ // Audit log
409
+ const now = Math.floor(Date.now() / 1000);
410
+ this.sqlite
411
+ .prepare('INSERT INTO audit_log (timestamp, event_type, actor, tx_id, details, severity) VALUES (?, ?, ?, ?, ?, ?)')
412
+ .run(now, 'TX_APPROVED_VIA_TELEGRAM', `telegram:${chatId}`, txId, JSON.stringify({ chatId, action: 'approve' }), 'info');
413
+ await this.api.sendMessage(chatId, messages.telegram.bot_approve_success);
414
+ }
415
+ // -----------------------------------------------------------------------
416
+ // /reject {txId} -- reject a pending transaction
417
+ // -----------------------------------------------------------------------
418
+ async handleReject(chatId, txId) {
419
+ const messages = getMessages(this.locale);
420
+ if (!txId) {
421
+ await this.api.sendMessage(chatId, messages.telegram.bot_tx_not_found);
422
+ return;
423
+ }
424
+ // Verify the transaction exists and is pending approval
425
+ const pending = this.sqlite
426
+ .prepare(`SELECT pa.tx_id FROM pending_approvals pa
427
+ JOIN transactions t ON t.id = pa.tx_id
428
+ WHERE pa.tx_id = ? AND t.status = 'QUEUED'
429
+ AND pa.approved_at IS NULL AND pa.rejected_at IS NULL`)
430
+ .get(txId);
431
+ if (!pending) {
432
+ await this.api.sendMessage(chatId, messages.telegram.bot_tx_not_found);
433
+ return;
434
+ }
435
+ // Reject: update pending_approvals and transactions
436
+ this.sqlite
437
+ .prepare("UPDATE pending_approvals SET rejected_at = unixepoch(), approval_channel = 'telegram' WHERE tx_id = ? AND approved_at IS NULL AND rejected_at IS NULL")
438
+ .run(txId);
439
+ this.sqlite
440
+ .prepare("UPDATE transactions SET status = 'CANCELLED', error = 'Rejected via Telegram' WHERE id = ? AND status = 'QUEUED'")
441
+ .run(txId);
442
+ // Audit log
443
+ const now = Math.floor(Date.now() / 1000);
444
+ this.sqlite
445
+ .prepare('INSERT INTO audit_log (timestamp, event_type, actor, tx_id, details, severity) VALUES (?, ?, ?, ?, ?, ?)')
446
+ .run(now, 'TX_REJECTED_VIA_TELEGRAM', `telegram:${chatId}`, txId, JSON.stringify({ chatId, action: 'reject' }), 'info');
447
+ await this.api.sendMessage(chatId, messages.telegram.bot_reject_success);
448
+ }
449
+ // -----------------------------------------------------------------------
450
+ // /killswitch -- confirm dialog then activate
451
+ // -----------------------------------------------------------------------
452
+ async handleKillswitch(chatId) {
453
+ const msgs = getMessages(this.locale);
454
+ // Check current kill switch state
455
+ if (this.killSwitchService) {
456
+ const state = this.killSwitchService.getState();
457
+ if (state.state !== 'ACTIVE') {
458
+ const msg = msgs.telegram.bot_killswitch_already_active.replace('{state}', escapeMarkdownV2(state.state));
459
+ await this.api.sendMessage(chatId, msg);
460
+ return;
461
+ }
462
+ }
463
+ // Send confirmation dialog with Yes/No inline keyboard
464
+ await this.api.sendMessage(chatId, msgs.telegram.bot_killswitch_confirm, buildConfirmKeyboard(msgs.telegram));
465
+ }
466
+ async executeKillswitchConfirm(chatId) {
467
+ const msgs = getMessages(this.locale);
468
+ if (!this.killSwitchService) {
469
+ await this.api.sendMessage(chatId, msgs.telegram.bot_killswitch_cancelled);
470
+ return;
471
+ }
472
+ const result = this.killSwitchService.activateWithCascade(`telegram:${chatId}`);
473
+ if (result.success) {
474
+ await this.api.sendMessage(chatId, msgs.telegram.bot_killswitch_success);
475
+ }
476
+ else {
477
+ // Already activated between confirm dialog and button press
478
+ const state = this.killSwitchService.getState();
479
+ const msg = msgs.telegram.bot_killswitch_already_active.replace('{state}', escapeMarkdownV2(state.state));
480
+ await this.api.sendMessage(chatId, msg);
481
+ }
482
+ }
483
+ // -----------------------------------------------------------------------
484
+ // /newsession -- wallet select then issue JWT
485
+ // -----------------------------------------------------------------------
486
+ async handleNewSession(chatId) {
487
+ const msgs = getMessages(this.locale);
488
+ // Query ACTIVE wallets
489
+ const wallets = this.sqlite
490
+ .prepare("SELECT id, name FROM wallets WHERE status = 'ACTIVE' ORDER BY created_at DESC")
491
+ .all();
492
+ if (wallets.length === 0) {
493
+ await this.api.sendMessage(chatId, msgs.telegram.bot_wallets_empty);
494
+ return;
495
+ }
496
+ // Send wallet selection keyboard
497
+ await this.api.sendMessage(chatId, msgs.telegram.bot_newsession_select, buildWalletSelectKeyboard(wallets));
498
+ }
499
+ async executeNewSession(chatId, walletId) {
500
+ const msgs = getMessages(this.locale);
501
+ // Verify wallet exists and is ACTIVE
502
+ const wallet = this.sqlite
503
+ .prepare("SELECT id, name FROM wallets WHERE id = ? AND status = 'ACTIVE'")
504
+ .get(walletId);
505
+ if (!wallet) {
506
+ await this.api.sendMessage(chatId, msgs.telegram.bot_newsession_wallet_not_found);
507
+ return;
508
+ }
509
+ if (!this.jwtSecretManager) {
510
+ await this.api.sendMessage(chatId, msgs.telegram.bot_newsession_wallet_not_found);
511
+ return;
512
+ }
513
+ const nowSec = Math.floor(Date.now() / 1000);
514
+ const expiresAt = nowSec + this.sessionTtl;
515
+ const absoluteExpiresAt = nowSec + 30 * 86400; // 30 days
516
+ // Generate session ID (UUID v7 via uuidv7 package)
517
+ const { uuidv7 } = await import('uuidv7');
518
+ const sessionId = uuidv7();
519
+ // Create JWT payload and sign token
520
+ const jwtPayload = {
521
+ sub: sessionId,
522
+ wlt: walletId,
523
+ iat: nowSec,
524
+ exp: expiresAt,
525
+ };
526
+ const token = await this.jwtSecretManager.signToken(jwtPayload);
527
+ // Compute token hash for storage
528
+ const tokenHash = createHash('sha256').update(token).digest('hex');
529
+ // Insert session into DB (direct SQL, same pattern as KillSwitchService)
530
+ this.sqlite
531
+ .prepare(`INSERT INTO sessions (id, wallet_id, token_hash, expires_at, constraints, usage_stats, revoked_at, renewal_count, max_renewals, last_renewed_at, absolute_expires_at, created_at)
532
+ VALUES (?, ?, ?, ?, NULL, NULL, NULL, 0, 30, NULL, ?, ?)`)
533
+ .run(sessionId, walletId, tokenHash, expiresAt, absoluteExpiresAt, nowSec);
534
+ // Audit log
535
+ this.sqlite
536
+ .prepare('INSERT INTO audit_log (timestamp, event_type, actor, details, severity) VALUES (?, ?, ?, ?, ?)')
537
+ .run(nowSec, 'SESSION_ISSUED_VIA_TELEGRAM', `telegram:${chatId}`, JSON.stringify({ chatId, walletId, sessionId }), 'info');
538
+ // Send token to user (monospace in MarkdownV2)
539
+ const msg = msgs.telegram.bot_newsession_created.replace('{token}', token);
540
+ await this.api.sendMessage(chatId, msg);
541
+ }
542
+ // -----------------------------------------------------------------------
543
+ // Utilities
544
+ // -----------------------------------------------------------------------
545
+ formatUptime(seconds) {
546
+ const d = Math.floor(seconds / 86400);
547
+ const h = Math.floor((seconds % 86400) / 3600);
548
+ const m = Math.floor((seconds % 3600) / 60);
549
+ const s = seconds % 60;
550
+ const parts = [];
551
+ if (d > 0)
552
+ parts.push(`${d}d`);
553
+ if (h > 0)
554
+ parts.push(`${h}h`);
555
+ if (m > 0)
556
+ parts.push(`${m}m`);
557
+ parts.push(`${s}s`);
558
+ return parts.join(' ');
559
+ }
560
+ sleep(ms) {
561
+ return new Promise((resolve) => setTimeout(resolve, ms));
562
+ }
563
+ }
564
+ //# sourceMappingURL=telegram-bot-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-bot-service.js","sourceRoot":"","sources":["../../../src/infrastructure/telegram/telegram-bot-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Inline keyboard builder utilities for Telegram Bot.
3
+ *
4
+ * Provides reusable keyboard construction for:
5
+ * - Kill Switch confirm/cancel (Yes/No)
6
+ * - Wallet selection (dynamic wallet list)
7
+ * - Transaction approval/rejection (Approve/Reject per tx)
8
+ *
9
+ * Callback data prefixes:
10
+ * - killswitch:confirm / killswitch:cancel
11
+ * - newsession:{walletId}
12
+ * - approve:{txId} / reject:{txId}
13
+ *
14
+ * @see packages/daemon/src/infrastructure/telegram/telegram-bot-service.ts
15
+ */
16
+ import type { TelegramInlineKeyboardMarkup } from './telegram-types.js';
17
+ import type { Messages } from '@waiaas/core';
18
+ /** Kill Switch confirmation keyboard (Yes/No buttons). */
19
+ export declare function buildConfirmKeyboard(msgs: Messages['telegram']): TelegramInlineKeyboardMarkup;
20
+ /** Wallet selection keyboard (one button per wallet). */
21
+ export declare function buildWalletSelectKeyboard(wallets: Array<{
22
+ id: string;
23
+ name: string;
24
+ }>): TelegramInlineKeyboardMarkup;
25
+ /** Transaction approval/rejection keyboard (Approve + Reject buttons). */
26
+ export declare function buildApprovalKeyboard(txId: string, msgs: Messages['telegram']): TelegramInlineKeyboardMarkup;
27
+ //# sourceMappingURL=telegram-keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram-keyboard.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/telegram/telegram-keyboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,0DAA0D;AAC1D,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GACzB,4BAA4B,CAS9B;AAED,yDAAyD;AACzD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC3C,4BAA4B,CAM9B;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,GACzB,4BAA4B,CAe9B"}