@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,78 @@
1
+ /**
2
+ * X402_ALLOWED_DOMAINS domain policy evaluation.
3
+ *
4
+ * Evaluates whether a target domain is allowed for x402 payments based on
5
+ * the X402_ALLOWED_DOMAINS policy in the policies table.
6
+ *
7
+ * Design principle: Default deny -- if no X402_ALLOWED_DOMAINS policy is
8
+ * configured, x402 payments are disabled entirely.
9
+ *
10
+ * This module is separate from DatabasePolicyEngine because X402_ALLOWED_DOMAINS
11
+ * is a domain-level policy, not a transaction-level policy. The evaluate() method
12
+ * in DatabasePolicyEngine operates on TransactionParam which has no URL/domain field.
13
+ *
14
+ * @see Research Pitfall 1: X402_ALLOWED_DOMAINS evaluation location
15
+ */
16
+ // ---------------------------------------------------------------------------
17
+ // matchDomain
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Match a domain pattern against a target domain.
21
+ *
22
+ * Rules:
23
+ * - "api.example.com" -> exact match only
24
+ * - "*.example.com" -> matches sub.example.com, a.b.example.com
25
+ * does NOT match example.com (dot-boundary)
26
+ * - Case-insensitive comparison
27
+ *
28
+ * @param pattern - Domain pattern (exact or wildcard like "*.example.com")
29
+ * @param target - Target domain to match against
30
+ * @returns true if pattern matches target
31
+ */
32
+ export function matchDomain(pattern, target) {
33
+ const p = pattern.toLowerCase();
34
+ const t = target.toLowerCase();
35
+ // Exact match
36
+ if (p === t)
37
+ return true;
38
+ // Wildcard match: *.example.com
39
+ if (p.startsWith('*.')) {
40
+ const suffix = p.slice(1); // ".example.com"
41
+ // target must end with suffix AND be longer (dot-boundary: excludes root domain)
42
+ return t.endsWith(suffix) && t.length > suffix.length;
43
+ }
44
+ return false;
45
+ }
46
+ // ---------------------------------------------------------------------------
47
+ // evaluateX402Domain
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Evaluate X402_ALLOWED_DOMAINS policy against a target domain.
51
+ *
52
+ * @param resolved - Resolved policy rows (after override resolution)
53
+ * @param targetDomain - The domain to evaluate (e.g., "api.example.com")
54
+ * @returns PolicyEvaluation with allowed=false if denied, null if allowed (continue to next evaluation)
55
+ */
56
+ export function evaluateX402Domain(resolved, targetDomain) {
57
+ const policy = resolved.find((p) => p.type === 'X402_ALLOWED_DOMAINS');
58
+ // No policy -> default deny (same pattern as ALLOWED_TOKENS)
59
+ if (!policy) {
60
+ return {
61
+ allowed: false,
62
+ tier: 'INSTANT',
63
+ reason: 'x402 payments disabled: no X402_ALLOWED_DOMAINS policy configured',
64
+ };
65
+ }
66
+ const rules = JSON.parse(policy.rules);
67
+ // Check if domain is in allowed list
68
+ const isAllowed = rules.domains.some((domainPattern) => matchDomain(domainPattern, targetDomain));
69
+ if (!isAllowed) {
70
+ return {
71
+ allowed: false,
72
+ tier: 'INSTANT',
73
+ reason: `Domain '${targetDomain}' not in allowed x402 domains list`,
74
+ };
75
+ }
76
+ return null; // Domain allowed, continue to next evaluation
77
+ }
78
+ //# sourceMappingURL=x402-domain-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-domain-policy.js","sourceRoot":"","sources":["../../../src/services/x402/x402-domain-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAE/B,cAAc;IACd,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,gCAAgC;IAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB;QAC5C,iFAAiF;QACjF,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAqB,EACrB,YAAoB;IAEpB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,sBAAsB,CAAC,CAAC;IAEvE,6DAA6D;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAuB;YAC7B,MAAM,EAAE,mEAAmE;SAC5E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAA4B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhE,qCAAqC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CACrD,WAAW,CAAC,aAAa,EAAE,YAAY,CAAC,CACzC,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAuB;YAC7B,MAAM,EAAE,WAAW,YAAY,oCAAoC;SACpE,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,8CAA8C;AAC7D,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * x402 Handler -- orchestrates SSRF guard + payment signing + 402 response handling.
3
+ *
4
+ * Independent pipeline (does NOT extend 6-stage pipeline):
5
+ * 1. SSRF guard (validateUrlSafety)
6
+ * 2. HTTP request (safeFetchWithRedirects)
7
+ * 3. Non-402 passthrough
8
+ * 4. 402 response parsing (PAYMENT-REQUIRED header -> PaymentRequired V2)
9
+ * 5. (scheme, network) auto-selection from accepts array
10
+ * 6. Payment signing (signPayment)
11
+ * 7. Re-request with PAYMENT-SIGNATURE header
12
+ * 8. Retry limit: 1 retry after payment, then X402_PAYMENT_REJECTED
13
+ *
14
+ * @module x402-handler
15
+ */
16
+ import type { X402FetchRequest, X402FetchResponse, PaymentRequirements } from '@waiaas/core';
17
+ /** Dependencies injected into the x402 handler. */
18
+ export interface X402HandlerDeps {
19
+ keyStore: {
20
+ decryptPrivateKey(walletId: string, masterPassword: string): Promise<Uint8Array>;
21
+ releaseKey(key: Uint8Array): void;
22
+ };
23
+ walletId: string;
24
+ walletAddress: string;
25
+ masterPassword: string;
26
+ supportedNetworks: Set<string>;
27
+ }
28
+ /**
29
+ * Fetch a URL with x402 payment handling.
30
+ *
31
+ * Flow:
32
+ * 1. Validate URL safety (SSRF guard)
33
+ * 2. Make initial request
34
+ * 3. If non-402: return passthrough response
35
+ * 4. If 402: parse payment requirements, select best option, sign, re-request
36
+ * 5. If re-request returns 402: throw X402_PAYMENT_REJECTED (1 retry max)
37
+ * 6. If re-request returns non-ok: throw X402_SERVER_ERROR
38
+ * 7. If re-request returns ok: return payment response
39
+ */
40
+ export declare function handleX402Fetch(request: X402FetchRequest, deps: X402HandlerDeps): Promise<X402FetchResponse>;
41
+ /** Parsed PaymentRequired V2 structure. */
42
+ interface ParsedPaymentRequired {
43
+ x402Version: number;
44
+ accepts: PaymentRequirements[];
45
+ resource: {
46
+ url: string;
47
+ };
48
+ }
49
+ /**
50
+ * Parse a 402 response into PaymentRequired V2 structure.
51
+ *
52
+ * Attempts to parse from:
53
+ * 1. PAYMENT-REQUIRED header (base64-encoded JSON)
54
+ * 2. Response body (JSON)
55
+ *
56
+ * Validates against PaymentRequiredV2Schema (Zod).
57
+ */
58
+ export declare function parse402Response(response: Response): Promise<ParsedPaymentRequired>;
59
+ /**
60
+ * Select the best PaymentRequirements from an accepts array.
61
+ *
62
+ * Criteria:
63
+ * 1. scheme must be 'exact' (streaming/other schemes not supported)
64
+ * 2. network must be in supportedNetworks AND resolvable via resolveX402Network
65
+ * 3. Among matching items, select the one with lowest amount
66
+ *
67
+ * @throws WAIaaSError('X402_UNSUPPORTED_SCHEME') if no matching requirement found
68
+ */
69
+ export declare function selectPaymentRequirement(accepts: PaymentRequirements[], supportedNetworks: Set<string>): PaymentRequirements;
70
+ export {};
71
+ //# sourceMappingURL=x402-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-handler.d.ts","sourceRoot":"","sources":["../../../src/services/x402/x402-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAEjB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAQtB,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QACR,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACjF,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC;AA4BD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAmE5B;AAMD,2CAA2C;AAC3C,UAAU,qBAAqB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,qBAAqB,CAAC,CAoBhC;AAMD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC7B,mBAAmB,CA6BrB"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * x402 Handler -- orchestrates SSRF guard + payment signing + 402 response handling.
3
+ *
4
+ * Independent pipeline (does NOT extend 6-stage pipeline):
5
+ * 1. SSRF guard (validateUrlSafety)
6
+ * 2. HTTP request (safeFetchWithRedirects)
7
+ * 3. Non-402 passthrough
8
+ * 4. 402 response parsing (PAYMENT-REQUIRED header -> PaymentRequired V2)
9
+ * 5. (scheme, network) auto-selection from accepts array
10
+ * 6. Payment signing (signPayment)
11
+ * 7. Re-request with PAYMENT-SIGNATURE header
12
+ * 8. Retry limit: 1 retry after payment, then X402_PAYMENT_REJECTED
13
+ *
14
+ * @module x402-handler
15
+ */
16
+ import { WAIaaSError, PaymentRequiredV2Schema, resolveX402Network, } from '@waiaas/core';
17
+ import { validateUrlSafety, safeFetchWithRedirects } from './ssrf-guard.js';
18
+ import { signPayment } from './payment-signer.js';
19
+ // ---------------------------------------------------------------------------
20
+ // Base64 JSON encode/decode (equivalent to @x402/core/http helpers)
21
+ // ---------------------------------------------------------------------------
22
+ /**
23
+ * Encode a PaymentPayload as a base64 header value.
24
+ * Equivalent to @x402/core/http encodePaymentSignatureHeader.
25
+ */
26
+ function encodePaymentSignatureHeader(paymentPayload) {
27
+ const json = JSON.stringify(paymentPayload);
28
+ return Buffer.from(json, 'utf-8').toString('base64');
29
+ }
30
+ /**
31
+ * Decode a base64 PAYMENT-REQUIRED header into a PaymentRequired object.
32
+ * Equivalent to @x402/core/http decodePaymentRequiredHeader.
33
+ */
34
+ function decodePaymentRequiredHeader(headerValue) {
35
+ const decoded = Buffer.from(headerValue, 'base64').toString('utf-8');
36
+ return JSON.parse(decoded);
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // handleX402Fetch -- main entry point
40
+ // ---------------------------------------------------------------------------
41
+ /**
42
+ * Fetch a URL with x402 payment handling.
43
+ *
44
+ * Flow:
45
+ * 1. Validate URL safety (SSRF guard)
46
+ * 2. Make initial request
47
+ * 3. If non-402: return passthrough response
48
+ * 4. If 402: parse payment requirements, select best option, sign, re-request
49
+ * 5. If re-request returns 402: throw X402_PAYMENT_REJECTED (1 retry max)
50
+ * 6. If re-request returns non-ok: throw X402_SERVER_ERROR
51
+ * 7. If re-request returns ok: return payment response
52
+ */
53
+ export async function handleX402Fetch(request, deps) {
54
+ // Step 1: SSRF guard
55
+ const validatedUrl = await validateUrlSafety(request.url);
56
+ // Step 2: Initial request
57
+ const response = await safeFetchWithRedirects(validatedUrl, request.method ?? 'GET', request.headers, request.body);
58
+ // Step 3: Non-402 passthrough
59
+ if (response.status !== 402) {
60
+ return buildPassthroughResponse(response);
61
+ }
62
+ // Step 4: Parse 402 response
63
+ const paymentRequired = await parse402Response(response);
64
+ // Step 5: Select best (scheme, network) from accepts
65
+ const selected = selectPaymentRequirement(paymentRequired.accepts, deps.supportedNetworks);
66
+ // Step 6: Sign payment
67
+ const paymentPayload = await signPayment(selected, deps.keyStore, deps.walletId, deps.walletAddress, deps.masterPassword);
68
+ // Fill resource.url in the payment payload
69
+ paymentPayload.resource = { url: request.url };
70
+ // Step 7: Encode and re-request with PAYMENT-SIGNATURE header
71
+ const encodedSignature = encodePaymentSignatureHeader(paymentPayload);
72
+ const retryHeaders = {
73
+ ...(request.headers ?? {}),
74
+ 'PAYMENT-SIGNATURE': encodedSignature,
75
+ };
76
+ const retryResponse = await safeFetchWithRedirects(validatedUrl, request.method ?? 'GET', retryHeaders, request.body);
77
+ // Step 8: Handle retry response
78
+ if (retryResponse.status === 402) {
79
+ throw new WAIaaSError('X402_PAYMENT_REJECTED', {
80
+ message: 'Payment was rejected by the resource server after retry',
81
+ });
82
+ }
83
+ if (!retryResponse.ok) {
84
+ throw new WAIaaSError('X402_SERVER_ERROR', {
85
+ message: `Resource server returned ${retryResponse.status} after payment`,
86
+ });
87
+ }
88
+ // Step 9: Build success response with payment info
89
+ return buildPaymentResponse(retryResponse, selected);
90
+ }
91
+ /**
92
+ * Parse a 402 response into PaymentRequired V2 structure.
93
+ *
94
+ * Attempts to parse from:
95
+ * 1. PAYMENT-REQUIRED header (base64-encoded JSON)
96
+ * 2. Response body (JSON)
97
+ *
98
+ * Validates against PaymentRequiredV2Schema (Zod).
99
+ */
100
+ export async function parse402Response(response) {
101
+ let raw;
102
+ // Try header first
103
+ const headerValue = response.headers.get('payment-required');
104
+ if (headerValue) {
105
+ raw = decodePaymentRequiredHeader(headerValue);
106
+ }
107
+ else {
108
+ // Fallback: JSON body
109
+ raw = await response.json();
110
+ }
111
+ // Validate with Zod
112
+ const parsed = PaymentRequiredV2Schema.parse(raw);
113
+ return {
114
+ x402Version: parsed.x402Version,
115
+ accepts: parsed.accepts,
116
+ resource: parsed.resource,
117
+ };
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // selectPaymentRequirement
121
+ // ---------------------------------------------------------------------------
122
+ /**
123
+ * Select the best PaymentRequirements from an accepts array.
124
+ *
125
+ * Criteria:
126
+ * 1. scheme must be 'exact' (streaming/other schemes not supported)
127
+ * 2. network must be in supportedNetworks AND resolvable via resolveX402Network
128
+ * 3. Among matching items, select the one with lowest amount
129
+ *
130
+ * @throws WAIaaSError('X402_UNSUPPORTED_SCHEME') if no matching requirement found
131
+ */
132
+ export function selectPaymentRequirement(accepts, supportedNetworks) {
133
+ // Filter for exact scheme + supported network
134
+ const candidates = accepts.filter((req) => {
135
+ if (req.scheme !== 'exact')
136
+ return false;
137
+ if (!supportedNetworks.has(req.network))
138
+ return false;
139
+ // Verify network is known to WAIaaS
140
+ try {
141
+ resolveX402Network(req.network);
142
+ return true;
143
+ }
144
+ catch {
145
+ return false;
146
+ }
147
+ });
148
+ if (candidates.length === 0) {
149
+ throw new WAIaaSError('X402_UNSUPPORTED_SCHEME', {
150
+ message: 'No supported (scheme=exact, network) pair found in accepts',
151
+ details: {
152
+ available: accepts.map((a) => ({ scheme: a.scheme, network: a.network })),
153
+ supported: [...supportedNetworks],
154
+ },
155
+ });
156
+ }
157
+ // Select lowest amount
158
+ return candidates.reduce((min, req) => BigInt(req.amount) < BigInt(min.amount) ? req : min);
159
+ }
160
+ // ---------------------------------------------------------------------------
161
+ // Response builders
162
+ // ---------------------------------------------------------------------------
163
+ /**
164
+ * Build a passthrough X402FetchResponse from a non-402 response.
165
+ */
166
+ async function buildPassthroughResponse(response) {
167
+ const body = await response.text();
168
+ const headers = {};
169
+ response.headers.forEach((value, key) => {
170
+ headers[key] = value;
171
+ });
172
+ return {
173
+ status: response.status,
174
+ headers,
175
+ body,
176
+ };
177
+ }
178
+ /**
179
+ * Build a payment X402FetchResponse from a successful retry response.
180
+ */
181
+ async function buildPaymentResponse(response, requirement) {
182
+ const base = await buildPassthroughResponse(response);
183
+ const payment = {
184
+ amount: requirement.amount,
185
+ asset: requirement.asset,
186
+ network: requirement.network,
187
+ payTo: requirement.payTo,
188
+ txId: '', // Not yet available -- facilitator settles asynchronously
189
+ };
190
+ return {
191
+ ...base,
192
+ payment,
193
+ };
194
+ }
195
+ //# sourceMappingURL=x402-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-handler.js","sourceRoot":"","sources":["../../../src/services/x402/x402-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * x402 payment amount USD resolution.
3
+ *
4
+ * Converts x402 PaymentRequirements amounts to USD for SPENDING_LIMIT policy evaluation.
5
+ *
6
+ * Strategy:
7
+ * - USDC (6 decimals, $1 peg): Direct conversion without oracle call.
8
+ * USDC addresses come from USDC_DOMAINS (EVM) and SOLANA_USDC_ADDRESSES (Solana).
9
+ * - Non-USDC tokens: IPriceOracle.getPrice() with chain-appropriate default decimals.
10
+ * - No oracle / oracle error: Returns 0 (safe fallback, allows INSTANT tier pass).
11
+ *
12
+ * @see packages/daemon/src/pipeline/resolve-effective-amount-usd.ts (5-type pattern)
13
+ * @see packages/daemon/src/services/x402/payment-signer.ts (USDC_DOMAINS)
14
+ */
15
+ import type { IPriceOracle } from '@waiaas/core';
16
+ /**
17
+ * Resolve x402 payment amount to USD value.
18
+ *
19
+ * @param amount - Raw token amount (string, integer units)
20
+ * @param asset - Token contract/mint address
21
+ * @param caip2Network - CAIP-2 network identifier (e.g., "eip155:8453", "solana:5eykt4...")
22
+ * @param priceOracle - Optional IPriceOracle for non-USDC tokens
23
+ * @returns USD amount (number). Returns 0 if price cannot be determined (safe fallback).
24
+ */
25
+ export declare function resolveX402UsdAmount(amount: string, asset: string, caip2Network: string, priceOracle?: IPriceOracle): Promise<number>;
26
+ //# sourceMappingURL=x402-usd-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-usd-resolver.d.ts","sourceRoot":"","sources":["../../../src/services/x402/x402-usd-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAwBjD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * x402 payment amount USD resolution.
3
+ *
4
+ * Converts x402 PaymentRequirements amounts to USD for SPENDING_LIMIT policy evaluation.
5
+ *
6
+ * Strategy:
7
+ * - USDC (6 decimals, $1 peg): Direct conversion without oracle call.
8
+ * USDC addresses come from USDC_DOMAINS (EVM) and SOLANA_USDC_ADDRESSES (Solana).
9
+ * - Non-USDC tokens: IPriceOracle.getPrice() with chain-appropriate default decimals.
10
+ * - No oracle / oracle error: Returns 0 (safe fallback, allows INSTANT tier pass).
11
+ *
12
+ * @see packages/daemon/src/pipeline/resolve-effective-amount-usd.ts (5-type pattern)
13
+ * @see packages/daemon/src/services/x402/payment-signer.ts (USDC_DOMAINS)
14
+ */
15
+ import { USDC_DOMAINS } from './payment-signer.js';
16
+ import { parseCaip2 } from '@waiaas/core';
17
+ // ---------------------------------------------------------------------------
18
+ // Solana USDC addresses (not in USDC_DOMAINS which is EVM-only EIP-712)
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Known Solana USDC token mint addresses by CAIP-2 network.
22
+ *
23
+ * Circle native USDC on Solana uses SPL Token, not EIP-3009,
24
+ * so these are separate from USDC_DOMAINS (which stores EIP-712 domain separators).
25
+ */
26
+ const SOLANA_USDC_ADDRESSES = {
27
+ // Solana Mainnet (Circle native USDC)
28
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
29
+ // Solana Devnet (Circle USDC devnet)
30
+ 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1': '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',
31
+ };
32
+ // ---------------------------------------------------------------------------
33
+ // resolveX402UsdAmount
34
+ // ---------------------------------------------------------------------------
35
+ /**
36
+ * Resolve x402 payment amount to USD value.
37
+ *
38
+ * @param amount - Raw token amount (string, integer units)
39
+ * @param asset - Token contract/mint address
40
+ * @param caip2Network - CAIP-2 network identifier (e.g., "eip155:8453", "solana:5eykt4...")
41
+ * @param priceOracle - Optional IPriceOracle for non-USDC tokens
42
+ * @returns USD amount (number). Returns 0 if price cannot be determined (safe fallback).
43
+ */
44
+ export async function resolveX402UsdAmount(amount, asset, caip2Network, priceOracle) {
45
+ // 1. Check EVM USDC (USDC_DOMAINS has verifyingContract for 7 EVM chains)
46
+ const usdcDomain = USDC_DOMAINS[caip2Network];
47
+ if (usdcDomain && usdcDomain.verifyingContract.toLowerCase() === asset.toLowerCase()) {
48
+ // USDC: 6 decimals, $1 direct conversion
49
+ return Number(amount) / 1_000_000;
50
+ }
51
+ // 2. Check Solana USDC (separate address table, case-sensitive for base58)
52
+ const solanaUsdcAddress = SOLANA_USDC_ADDRESSES[caip2Network];
53
+ if (solanaUsdcAddress && solanaUsdcAddress === asset) {
54
+ // Solana USDC: 6 decimals, $1 direct conversion
55
+ return Number(amount) / 1_000_000;
56
+ }
57
+ // 3. Non-USDC: use IPriceOracle (if available)
58
+ if (!priceOracle)
59
+ return 0;
60
+ const { namespace } = parseCaip2(caip2Network);
61
+ const chain = namespace === 'eip155' ? 'ethereum' : 'solana';
62
+ try {
63
+ // x402 PaymentRequirements does not include decimals, use chain defaults
64
+ // EVM: 18 (most common), Solana: 9 (most common)
65
+ const decimals = chain === 'ethereum' ? 18 : 9;
66
+ const priceInfo = await priceOracle.getPrice({
67
+ address: asset,
68
+ decimals,
69
+ chain: chain,
70
+ });
71
+ const humanAmount = Number(amount) / Math.pow(10, decimals);
72
+ return humanAmount * priceInfo.usdPrice;
73
+ }
74
+ catch {
75
+ // Safe fallback: unknown price -> 0 (INSTANT tier pass)
76
+ return 0;
77
+ }
78
+ }
79
+ //# sourceMappingURL=x402-usd-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-usd-resolver.js","sourceRoot":"","sources":["../../../src/services/x402/x402-usd-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,qBAAqB,GAA2B;IACpD,sCAAsC;IACtC,yCAAyC,EAAE,8CAA8C;IACzF,qCAAqC;IACrC,yCAAyC,EAAE,8CAA8C;CAC1F,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,KAAa,EACb,YAAoB,EACpB,WAA0B;IAE1B,0EAA0E;IAC1E,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,UAAU,IAAI,UAAU,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACrF,yCAAyC;QACzC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,2EAA2E;IAC3E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,iBAAiB,IAAI,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACrD,gDAAgD;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC;IAE3B,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE7D,IAAI,CAAC;QACH,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,QAAQ,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;YAC3C,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,KAAK,EAAE,KAA8B;SACtC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC5D,OAAO,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * ApprovalWorkflow - APPROVAL tier owner sign-off management.
3
+ *
4
+ * Manages APPROVAL tier transactions through their approval lifecycle:
5
+ * - requestApproval: creates pending_approvals record, sets tx QUEUED
6
+ * - approve: owner signs off, sets tx EXECUTING
7
+ * - reject: owner rejects, sets tx CANCELLED
8
+ * - processExpiredApprovals: batch-expire timed-out approvals
9
+ *
10
+ * Timeout resolution follows 3-level priority:
11
+ * 1. Policy-specific approval_timeout (from rules)
12
+ * 2. Config policy_defaults_approval_timeout (global config)
13
+ * 3. 3600s hardcoded fallback
14
+ *
15
+ * Uses BEGIN IMMEDIATE for atomic approve/reject/expire to prevent
16
+ * concurrent race conditions.
17
+ *
18
+ * @see docs/33-time-lock-approval-mechanism.md
19
+ */
20
+ import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
21
+ import type { Database as SQLiteDatabase } from 'better-sqlite3';
22
+ import type * as schema from '../infrastructure/database/schema.js';
23
+ interface ApprovalWorkflowDeps {
24
+ db: BetterSQLite3Database<typeof schema>;
25
+ sqlite: SQLiteDatabase;
26
+ config: {
27
+ policy_defaults_approval_timeout: number;
28
+ };
29
+ }
30
+ interface RequestApprovalOptions {
31
+ policyTimeoutSeconds?: number;
32
+ }
33
+ interface RequestApprovalResult {
34
+ approvalId: string;
35
+ expiresAt: number;
36
+ }
37
+ interface ApproveResult {
38
+ txId: string;
39
+ approvedAt: number;
40
+ }
41
+ interface RejectResult {
42
+ txId: string;
43
+ rejectedAt: number;
44
+ }
45
+ export declare class ApprovalWorkflow {
46
+ private readonly sqlite;
47
+ private readonly configTimeout;
48
+ constructor(deps: ApprovalWorkflowDeps);
49
+ /**
50
+ * Create a pending approval for an APPROVAL tier transaction.
51
+ *
52
+ * Sets the transaction status to QUEUED and creates a pending_approvals
53
+ * record with an expiration time based on the 3-level timeout priority.
54
+ *
55
+ * @param txId - The transaction ID
56
+ * @param options - Optional policy-specific timeout
57
+ * @returns The approval ID and expiration timestamp
58
+ */
59
+ requestApproval(txId: string, options?: RequestApprovalOptions): RequestApprovalResult;
60
+ /**
61
+ * Approve a pending APPROVAL transaction with owner signature.
62
+ *
63
+ * Atomically validates the approval, sets approvedAt + ownerSignature,
64
+ * transitions the transaction to EXECUTING, and clears reserved_amount.
65
+ *
66
+ * @param txId - The transaction ID
67
+ * @param ownerSignature - The owner's cryptographic signature
68
+ * @returns The transaction ID and approval timestamp
69
+ * @throws WAIaaSError APPROVAL_NOT_FOUND if no pending approval exists
70
+ * @throws WAIaaSError APPROVAL_TIMEOUT if the approval has expired
71
+ */
72
+ approve(txId: string, ownerSignature: string): ApproveResult;
73
+ /**
74
+ * Reject a pending APPROVAL transaction.
75
+ *
76
+ * Atomically sets rejectedAt, transitions the transaction to CANCELLED,
77
+ * and clears reserved_amount.
78
+ *
79
+ * @param txId - The transaction ID
80
+ * @returns The transaction ID and rejection timestamp
81
+ * @throws WAIaaSError APPROVAL_NOT_FOUND if no pending approval exists
82
+ */
83
+ reject(txId: string): RejectResult;
84
+ /**
85
+ * Batch-expire pending approvals that have exceeded their timeout.
86
+ *
87
+ * For each expired approval: sets the transaction status to EXPIRED and
88
+ * clears reserved_amount. Does NOT set rejectedAt (expired != rejected).
89
+ *
90
+ * @param now - Current Unix epoch seconds
91
+ * @returns Count of expired approvals
92
+ */
93
+ processExpiredApprovals(now: number): number;
94
+ /**
95
+ * Resolve approval timeout with 3-level priority:
96
+ * 1. Policy-specific timeout (from options)
97
+ * 2. Config timeout (policy_defaults_approval_timeout)
98
+ * 3. 3600 hardcoded fallback
99
+ */
100
+ private resolveTimeout;
101
+ }
102
+ export {};
103
+ //# sourceMappingURL=approval-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-workflow.d.ts","sourceRoot":"","sources":["../../src/workflow/approval-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,KAAK,MAAM,MAAM,sCAAsC,CAAC;AAapE,UAAU,oBAAoB;IAC5B,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE;QACN,gCAAgC,EAAE,MAAM,CAAC;KAC1C,CAAC;CACH;AAED,UAAU,sBAAsB;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,UAAU,qBAAqB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAcD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,IAAI,EAAE,oBAAoB;IAStC;;;;;;;;;OASG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,qBAAqB;IA8BtF;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa;IA6C5D;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAuClC;;;;;;;;OAQG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAqC5C;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CASvB"}