@waiaas/daemon 2.11.0-rc.7 → 2.11.0

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 (430) hide show
  1. package/README.md +5 -5
  2. package/dist/api/middleware/address-validation.d.ts +6 -33
  3. package/dist/api/middleware/address-validation.d.ts.map +1 -1
  4. package/dist/api/middleware/address-validation.js +5 -129
  5. package/dist/api/middleware/address-validation.js.map +1 -1
  6. package/dist/api/middleware/host-guard.d.ts +1 -1
  7. package/dist/api/middleware/host-guard.js +2 -2
  8. package/dist/api/middleware/host-guard.js.map +1 -1
  9. package/dist/api/middleware/index.d.ts +1 -0
  10. package/dist/api/middleware/index.d.ts.map +1 -1
  11. package/dist/api/middleware/index.js +1 -0
  12. package/dist/api/middleware/index.js.map +1 -1
  13. package/dist/api/middleware/master-auth.d.ts +2 -5
  14. package/dist/api/middleware/master-auth.d.ts.map +1 -1
  15. package/dist/api/middleware/master-auth.js.map +1 -1
  16. package/dist/api/middleware/rate-limiter.d.ts +51 -0
  17. package/dist/api/middleware/rate-limiter.d.ts.map +1 -0
  18. package/dist/api/middleware/rate-limiter.js +146 -0
  19. package/dist/api/middleware/rate-limiter.js.map +1 -0
  20. package/dist/api/middleware/resolve-asset.d.ts +26 -0
  21. package/dist/api/middleware/resolve-asset.d.ts.map +1 -0
  22. package/dist/api/middleware/resolve-asset.js +81 -0
  23. package/dist/api/middleware/resolve-asset.js.map +1 -0
  24. package/dist/api/middleware/siwe-verify.d.ts +6 -26
  25. package/dist/api/middleware/siwe-verify.d.ts.map +1 -1
  26. package/dist/api/middleware/siwe-verify.js +5 -50
  27. package/dist/api/middleware/siwe-verify.js.map +1 -1
  28. package/dist/api/routes/actions.d.ts +1 -0
  29. package/dist/api/routes/actions.d.ts.map +1 -1
  30. package/dist/api/routes/actions.js +52 -4
  31. package/dist/api/routes/actions.js.map +1 -1
  32. package/dist/api/routes/admin-actions.d.ts +1 -0
  33. package/dist/api/routes/admin-actions.d.ts.map +1 -1
  34. package/dist/api/routes/admin-actions.js +3 -3
  35. package/dist/api/routes/admin-actions.js.map +1 -1
  36. package/dist/api/routes/admin-auth.d.ts.map +1 -1
  37. package/dist/api/routes/admin-auth.js +12 -7
  38. package/dist/api/routes/admin-auth.js.map +1 -1
  39. package/dist/api/routes/admin-credentials.js +2 -2
  40. package/dist/api/routes/admin-credentials.js.map +1 -1
  41. package/dist/api/routes/admin-monitoring.d.ts +10 -0
  42. package/dist/api/routes/admin-monitoring.d.ts.map +1 -1
  43. package/dist/api/routes/admin-monitoring.js +59 -14
  44. package/dist/api/routes/admin-monitoring.js.map +1 -1
  45. package/dist/api/routes/admin-notifications.d.ts.map +1 -1
  46. package/dist/api/routes/admin-notifications.js +2 -15
  47. package/dist/api/routes/admin-notifications.js.map +1 -1
  48. package/dist/api/routes/admin-settings.d.ts.map +1 -1
  49. package/dist/api/routes/admin-settings.js +90 -1
  50. package/dist/api/routes/admin-settings.js.map +1 -1
  51. package/dist/api/routes/admin-wallets.d.ts +16 -1
  52. package/dist/api/routes/admin-wallets.d.ts.map +1 -1
  53. package/dist/api/routes/admin-wallets.js +64 -75
  54. package/dist/api/routes/admin-wallets.js.map +1 -1
  55. package/dist/api/routes/admin.d.ts +1 -0
  56. package/dist/api/routes/admin.d.ts.map +1 -1
  57. package/dist/api/routes/admin.js.map +1 -1
  58. package/dist/api/routes/connect-info.d.ts.map +1 -1
  59. package/dist/api/routes/connect-info.js +2 -1
  60. package/dist/api/routes/connect-info.js.map +1 -1
  61. package/dist/api/routes/credentials.js +2 -2
  62. package/dist/api/routes/credentials.js.map +1 -1
  63. package/dist/api/routes/defi-positions.d.ts.map +1 -1
  64. package/dist/api/routes/defi-positions.js +10 -0
  65. package/dist/api/routes/defi-positions.js.map +1 -1
  66. package/dist/api/routes/incoming.d.ts.map +1 -1
  67. package/dist/api/routes/incoming.js +2 -1
  68. package/dist/api/routes/incoming.js.map +1 -1
  69. package/dist/api/routes/nfts.js +24 -4
  70. package/dist/api/routes/nfts.js.map +1 -1
  71. package/dist/api/routes/openapi-schemas.d.ts +611 -118
  72. package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
  73. package/dist/api/routes/openapi-schemas.js +53 -5
  74. package/dist/api/routes/openapi-schemas.js.map +1 -1
  75. package/dist/api/routes/policies.d.ts +2 -0
  76. package/dist/api/routes/policies.d.ts.map +1 -1
  77. package/dist/api/routes/policies.js +55 -6
  78. package/dist/api/routes/policies.js.map +1 -1
  79. package/dist/api/routes/rpc-proxy.js.map +1 -1
  80. package/dist/api/routes/sessions.d.ts.map +1 -1
  81. package/dist/api/routes/sessions.js +47 -28
  82. package/dist/api/routes/sessions.js.map +1 -1
  83. package/dist/api/routes/staking.d.ts.map +1 -1
  84. package/dist/api/routes/staking.js +19 -76
  85. package/dist/api/routes/staking.js.map +1 -1
  86. package/dist/api/routes/tokens.d.ts.map +1 -1
  87. package/dist/api/routes/tokens.js +8 -1
  88. package/dist/api/routes/tokens.js.map +1 -1
  89. package/dist/api/routes/transactions.d.ts +3 -0
  90. package/dist/api/routes/transactions.d.ts.map +1 -1
  91. package/dist/api/routes/transactions.js +66 -12
  92. package/dist/api/routes/transactions.js.map +1 -1
  93. package/dist/api/routes/userop.d.ts.map +1 -1
  94. package/dist/api/routes/userop.js +0 -2
  95. package/dist/api/routes/userop.js.map +1 -1
  96. package/dist/api/routes/wallet-apps.d.ts.map +1 -1
  97. package/dist/api/routes/wallet-apps.js +20 -13
  98. package/dist/api/routes/wallet-apps.js.map +1 -1
  99. package/dist/api/routes/wallet.d.ts.map +1 -1
  100. package/dist/api/routes/wallet.js +12 -4
  101. package/dist/api/routes/wallet.js.map +1 -1
  102. package/dist/api/routes/wallets.d.ts.map +1 -1
  103. package/dist/api/routes/wallets.js +3 -0
  104. package/dist/api/routes/wallets.js.map +1 -1
  105. package/dist/api/routes/wc.d.ts.map +1 -1
  106. package/dist/api/routes/wc.js +13 -8
  107. package/dist/api/routes/wc.js.map +1 -1
  108. package/dist/api/routes/x402.d.ts.map +1 -1
  109. package/dist/api/routes/x402.js +1 -2
  110. package/dist/api/routes/x402.js.map +1 -1
  111. package/dist/api/server.d.ts +8 -4
  112. package/dist/api/server.d.ts.map +1 -1
  113. package/dist/api/server.js +47 -5
  114. package/dist/api/server.js.map +1 -1
  115. package/dist/constants.d.ts +1 -1
  116. package/dist/constants.d.ts.map +1 -1
  117. package/dist/constants.js +1 -1
  118. package/dist/constants.js.map +1 -1
  119. package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -1
  120. package/dist/infrastructure/action/action-provider-registry.js +2 -3
  121. package/dist/infrastructure/action/action-provider-registry.js.map +1 -1
  122. package/dist/infrastructure/action/builtin-metadata.d.ts +22 -0
  123. package/dist/infrastructure/action/builtin-metadata.d.ts.map +1 -0
  124. package/dist/infrastructure/action/builtin-metadata.js +29 -0
  125. package/dist/infrastructure/action/builtin-metadata.js.map +1 -0
  126. package/dist/infrastructure/adapter-pool.d.ts +2 -1
  127. package/dist/infrastructure/adapter-pool.d.ts.map +1 -1
  128. package/dist/infrastructure/adapter-pool.js.map +1 -1
  129. package/dist/infrastructure/auth/address-validation.d.ts +38 -0
  130. package/dist/infrastructure/auth/address-validation.d.ts.map +1 -0
  131. package/dist/infrastructure/auth/address-validation.js +134 -0
  132. package/dist/infrastructure/auth/address-validation.js.map +1 -0
  133. package/dist/infrastructure/auth/siwe-verify.d.ts +34 -0
  134. package/dist/infrastructure/auth/siwe-verify.d.ts.map +1 -0
  135. package/dist/infrastructure/auth/siwe-verify.js +58 -0
  136. package/dist/infrastructure/auth/siwe-verify.js.map +1 -0
  137. package/dist/infrastructure/auth/types.d.ts +12 -0
  138. package/dist/infrastructure/auth/types.d.ts.map +1 -0
  139. package/dist/infrastructure/auth/types.js +8 -0
  140. package/dist/infrastructure/auth/types.js.map +1 -0
  141. package/dist/infrastructure/config/loader.d.ts +1 -10
  142. package/dist/infrastructure/config/loader.d.ts.map +1 -1
  143. package/dist/infrastructure/config/loader.js +0 -2
  144. package/dist/infrastructure/config/loader.js.map +1 -1
  145. package/dist/infrastructure/database/migrate.d.ts +6 -18
  146. package/dist/infrastructure/database/migrate.d.ts.map +1 -1
  147. package/dist/infrastructure/database/migrate.js +25 -2856
  148. package/dist/infrastructure/database/migrate.js.map +1 -1
  149. package/dist/infrastructure/database/migrations/v11-v20.d.ts +17 -0
  150. package/dist/infrastructure/database/migrations/v11-v20.d.ts.map +1 -0
  151. package/dist/infrastructure/database/migrations/v11-v20.js +295 -0
  152. package/dist/infrastructure/database/migrations/v11-v20.js.map +1 -0
  153. package/dist/infrastructure/database/migrations/v2-v10.d.ts +16 -0
  154. package/dist/infrastructure/database/migrations/v2-v10.d.ts.map +1 -0
  155. package/dist/infrastructure/database/migrations/v2-v10.js +539 -0
  156. package/dist/infrastructure/database/migrations/v2-v10.js.map +1 -0
  157. package/dist/infrastructure/database/migrations/v21-v30.d.ts +17 -0
  158. package/dist/infrastructure/database/migrations/v21-v30.d.ts.map +1 -0
  159. package/dist/infrastructure/database/migrations/v21-v30.js +507 -0
  160. package/dist/infrastructure/database/migrations/v21-v30.js.map +1 -0
  161. package/dist/infrastructure/database/migrations/v31-v40.d.ts +17 -0
  162. package/dist/infrastructure/database/migrations/v31-v40.d.ts.map +1 -0
  163. package/dist/infrastructure/database/migrations/v31-v40.js +203 -0
  164. package/dist/infrastructure/database/migrations/v31-v40.js.map +1 -0
  165. package/dist/infrastructure/database/migrations/v41-v50.d.ts +17 -0
  166. package/dist/infrastructure/database/migrations/v41-v50.d.ts.map +1 -0
  167. package/dist/infrastructure/database/migrations/v41-v50.js +188 -0
  168. package/dist/infrastructure/database/migrations/v41-v50.js.map +1 -0
  169. package/dist/infrastructure/database/migrations/v51-v59.d.ts +17 -0
  170. package/dist/infrastructure/database/migrations/v51-v59.d.ts.map +1 -0
  171. package/dist/infrastructure/database/migrations/v51-v59.js +420 -0
  172. package/dist/infrastructure/database/migrations/v51-v59.js.map +1 -0
  173. package/dist/infrastructure/database/schema-ddl.d.ts +24 -0
  174. package/dist/infrastructure/database/schema-ddl.d.ts.map +1 -0
  175. package/dist/infrastructure/database/schema-ddl.js +596 -0
  176. package/dist/infrastructure/database/schema-ddl.js.map +1 -0
  177. package/dist/infrastructure/database/schema.d.ts +38 -0
  178. package/dist/infrastructure/database/schema.d.ts.map +1 -1
  179. package/dist/infrastructure/database/schema.js +2 -0
  180. package/dist/infrastructure/database/schema.js.map +1 -1
  181. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -1
  182. package/dist/infrastructure/jwt/jwt-secret-manager.js +16 -3
  183. package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -1
  184. package/dist/infrastructure/nft/alchemy-nft-indexer.d.ts.map +1 -1
  185. package/dist/infrastructure/nft/alchemy-nft-indexer.js +0 -1
  186. package/dist/infrastructure/nft/alchemy-nft-indexer.js.map +1 -1
  187. package/dist/infrastructure/nft/helius-nft-indexer.d.ts.map +1 -1
  188. package/dist/infrastructure/nft/helius-nft-indexer.js +1 -2
  189. package/dist/infrastructure/nft/helius-nft-indexer.js.map +1 -1
  190. package/dist/infrastructure/nft/nft-indexer-client.d.ts.map +1 -1
  191. package/dist/infrastructure/nft/nft-indexer-client.js +0 -2
  192. package/dist/infrastructure/nft/nft-indexer-client.js.map +1 -1
  193. package/dist/infrastructure/security/ssrf-guard.d.ts +33 -0
  194. package/dist/infrastructure/security/ssrf-guard.d.ts.map +1 -0
  195. package/dist/infrastructure/security/ssrf-guard.js +244 -0
  196. package/dist/infrastructure/security/ssrf-guard.js.map +1 -0
  197. package/dist/infrastructure/settings/hot-reload.d.ts +1 -1
  198. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
  199. package/dist/infrastructure/settings/hot-reload.js +0 -2
  200. package/dist/infrastructure/settings/hot-reload.js.map +1 -1
  201. package/dist/infrastructure/settings/index.d.ts +2 -2
  202. package/dist/infrastructure/settings/index.d.ts.map +1 -1
  203. package/dist/infrastructure/settings/index.js +1 -1
  204. package/dist/infrastructure/settings/index.js.map +1 -1
  205. package/dist/infrastructure/settings/setting-keys.d.ts +14 -0
  206. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
  207. package/dist/infrastructure/settings/setting-keys.js +296 -214
  208. package/dist/infrastructure/settings/setting-keys.js.map +1 -1
  209. package/dist/infrastructure/settings/settings-service.d.ts +6 -1
  210. package/dist/infrastructure/settings/settings-service.d.ts.map +1 -1
  211. package/dist/infrastructure/settings/settings-service.js +15 -5
  212. package/dist/infrastructure/settings/settings-service.js.map +1 -1
  213. package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
  214. package/dist/infrastructure/telegram/telegram-bot-service.js +3 -2
  215. package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
  216. package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -1
  217. package/dist/infrastructure/token-registry/builtin-tokens.js +4 -7
  218. package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -1
  219. package/dist/lifecycle/daemon-pipeline.d.ts +49 -0
  220. package/dist/lifecycle/daemon-pipeline.d.ts.map +1 -0
  221. package/dist/lifecycle/daemon-pipeline.js +281 -0
  222. package/dist/lifecycle/daemon-pipeline.js.map +1 -0
  223. package/dist/lifecycle/daemon-shutdown.d.ts +14 -0
  224. package/dist/lifecycle/daemon-shutdown.d.ts.map +1 -0
  225. package/dist/lifecycle/daemon-shutdown.js +176 -0
  226. package/dist/lifecycle/daemon-shutdown.js.map +1 -0
  227. package/dist/lifecycle/daemon-startup.d.ts +15 -0
  228. package/dist/lifecycle/daemon-startup.d.ts.map +1 -0
  229. package/dist/lifecycle/daemon-startup.js +1527 -0
  230. package/dist/lifecycle/daemon-startup.js.map +1 -0
  231. package/dist/lifecycle/daemon.d.ts +171 -114
  232. package/dist/lifecycle/daemon.d.ts.map +1 -1
  233. package/dist/lifecycle/daemon.js +22 -1904
  234. package/dist/lifecycle/daemon.js.map +1 -1
  235. package/dist/notifications/channels/discord.d.ts.map +1 -1
  236. package/dist/notifications/channels/discord.js +1 -0
  237. package/dist/notifications/channels/discord.js.map +1 -1
  238. package/dist/notifications/channels/slack.d.ts.map +1 -1
  239. package/dist/notifications/channels/slack.js +1 -0
  240. package/dist/notifications/channels/slack.js.map +1 -1
  241. package/dist/notifications/index.d.ts +0 -1
  242. package/dist/notifications/index.d.ts.map +1 -1
  243. package/dist/notifications/index.js +0 -1
  244. package/dist/notifications/index.js.map +1 -1
  245. package/dist/notifications/notification-service.d.ts.map +1 -1
  246. package/dist/notifications/notification-service.js +8 -6
  247. package/dist/notifications/notification-service.js.map +1 -1
  248. package/dist/pipeline/database-policy-engine.d.ts +18 -438
  249. package/dist/pipeline/database-policy-engine.d.ts.map +1 -1
  250. package/dist/pipeline/database-policy-engine.js +154 -1321
  251. package/dist/pipeline/database-policy-engine.js.map +1 -1
  252. package/dist/pipeline/dry-run.d.ts +5 -2
  253. package/dist/pipeline/dry-run.d.ts.map +1 -1
  254. package/dist/pipeline/dry-run.js +102 -8
  255. package/dist/pipeline/dry-run.js.map +1 -1
  256. package/dist/pipeline/evaluators/allowed-tokens.d.ts +28 -0
  257. package/dist/pipeline/evaluators/allowed-tokens.d.ts.map +1 -0
  258. package/dist/pipeline/evaluators/allowed-tokens.js +129 -0
  259. package/dist/pipeline/evaluators/allowed-tokens.js.map +1 -0
  260. package/dist/pipeline/evaluators/approved-spenders.d.ts +26 -0
  261. package/dist/pipeline/evaluators/approved-spenders.d.ts.map +1 -0
  262. package/dist/pipeline/evaluators/approved-spenders.js +115 -0
  263. package/dist/pipeline/evaluators/approved-spenders.js.map +1 -0
  264. package/dist/pipeline/evaluators/contract-whitelist.d.ts +28 -0
  265. package/dist/pipeline/evaluators/contract-whitelist.d.ts.map +1 -0
  266. package/dist/pipeline/evaluators/contract-whitelist.js +168 -0
  267. package/dist/pipeline/evaluators/contract-whitelist.js.map +1 -0
  268. package/dist/pipeline/evaluators/helpers.d.ts +9 -0
  269. package/dist/pipeline/evaluators/helpers.d.ts.map +1 -0
  270. package/dist/pipeline/evaluators/helpers.js +13 -0
  271. package/dist/pipeline/evaluators/helpers.js.map +1 -0
  272. package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts +18 -0
  273. package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts.map +1 -0
  274. package/dist/pipeline/evaluators/lending-asset-whitelist.js +44 -0
  275. package/dist/pipeline/evaluators/lending-asset-whitelist.js.map +1 -0
  276. package/dist/pipeline/evaluators/lending-ltv-limit.d.ts +24 -0
  277. package/dist/pipeline/evaluators/lending-ltv-limit.d.ts.map +1 -0
  278. package/dist/pipeline/evaluators/lending-ltv-limit.js +130 -0
  279. package/dist/pipeline/evaluators/lending-ltv-limit.js.map +1 -0
  280. package/dist/pipeline/evaluators/spending-limit.d.ts +46 -0
  281. package/dist/pipeline/evaluators/spending-limit.d.ts.map +1 -0
  282. package/dist/pipeline/evaluators/spending-limit.js +241 -0
  283. package/dist/pipeline/evaluators/spending-limit.js.map +1 -0
  284. package/dist/pipeline/evaluators/types.d.ts +71 -0
  285. package/dist/pipeline/evaluators/types.d.ts.map +1 -0
  286. package/dist/pipeline/evaluators/types.js +7 -0
  287. package/dist/pipeline/evaluators/types.js.map +1 -0
  288. package/dist/pipeline/external-action-pipeline.js.map +1 -1
  289. package/dist/pipeline/gas-condition-tracker.d.ts +1 -1
  290. package/dist/pipeline/gas-condition-tracker.js +1 -1
  291. package/dist/pipeline/pipeline-helpers.d.ts +146 -0
  292. package/dist/pipeline/pipeline-helpers.d.ts.map +1 -0
  293. package/dist/pipeline/pipeline-helpers.js +260 -0
  294. package/dist/pipeline/pipeline-helpers.js.map +1 -0
  295. package/dist/pipeline/pipeline.d.ts +1 -0
  296. package/dist/pipeline/pipeline.d.ts.map +1 -1
  297. package/dist/pipeline/pipeline.js +3 -2
  298. package/dist/pipeline/pipeline.js.map +1 -1
  299. package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -1
  300. package/dist/pipeline/resolve-effective-amount-usd.js +4 -10
  301. package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -1
  302. package/dist/pipeline/sign-message.js +1 -1
  303. package/dist/pipeline/sign-message.js.map +1 -1
  304. package/dist/pipeline/sleep.d.ts +1 -5
  305. package/dist/pipeline/sleep.d.ts.map +1 -1
  306. package/dist/pipeline/sleep.js +2 -7
  307. package/dist/pipeline/sleep.js.map +1 -1
  308. package/dist/pipeline/stage1-validate.d.ts +8 -0
  309. package/dist/pipeline/stage1-validate.d.ts.map +1 -0
  310. package/dist/pipeline/stage1-validate.js +69 -0
  311. package/dist/pipeline/stage1-validate.js.map +1 -0
  312. package/dist/pipeline/stage2-auth.d.ts +12 -0
  313. package/dist/pipeline/stage2-auth.d.ts.map +1 -0
  314. package/dist/pipeline/stage2-auth.js +18 -0
  315. package/dist/pipeline/stage2-auth.js.map +1 -0
  316. package/dist/pipeline/stage3-policy.d.ts +26 -0
  317. package/dist/pipeline/stage3-policy.d.ts.map +1 -0
  318. package/dist/pipeline/stage3-policy.js +384 -0
  319. package/dist/pipeline/stage3-policy.js.map +1 -0
  320. package/dist/pipeline/stage4-wait.d.ts +8 -0
  321. package/dist/pipeline/stage4-wait.d.ts.map +1 -0
  322. package/dist/pipeline/stage4-wait.js +87 -0
  323. package/dist/pipeline/stage4-wait.js.map +1 -0
  324. package/dist/pipeline/stage5-execute.d.ts +120 -0
  325. package/dist/pipeline/stage5-execute.d.ts.map +1 -0
  326. package/dist/pipeline/stage5-execute.js +1070 -0
  327. package/dist/pipeline/stage5-execute.js.map +1 -0
  328. package/dist/pipeline/stage6-confirm.d.ts +11 -0
  329. package/dist/pipeline/stage6-confirm.d.ts.map +1 -0
  330. package/dist/pipeline/stage6-confirm.js +110 -0
  331. package/dist/pipeline/stage6-confirm.js.map +1 -0
  332. package/dist/pipeline/stages.d.ts +11 -245
  333. package/dist/pipeline/stages.d.ts.map +1 -1
  334. package/dist/pipeline/stages.js +11 -1896
  335. package/dist/pipeline/stages.js.map +1 -1
  336. package/dist/rpc-proxy/sync-pipeline.js +2 -2
  337. package/dist/rpc-proxy/sync-pipeline.js.map +1 -1
  338. package/dist/services/autostop/autostop-service.d.ts +4 -1
  339. package/dist/services/autostop/autostop-service.d.ts.map +1 -1
  340. package/dist/services/autostop/autostop-service.js +27 -7
  341. package/dist/services/autostop/autostop-service.js.map +1 -1
  342. package/dist/services/defi/position-tracker.d.ts +5 -0
  343. package/dist/services/defi/position-tracker.d.ts.map +1 -1
  344. package/dist/services/defi/position-tracker.js +41 -6
  345. package/dist/services/defi/position-tracker.js.map +1 -1
  346. package/dist/services/defi/position-write-queue.d.ts.map +1 -1
  347. package/dist/services/defi/position-write-queue.js +3 -2
  348. package/dist/services/defi/position-write-queue.js.map +1 -1
  349. package/dist/services/incoming/__tests__/integration-wiring.test.js +58 -0
  350. package/dist/services/incoming/__tests__/integration-wiring.test.js.map +1 -1
  351. package/dist/services/incoming/incoming-tx-monitor-service.d.ts.map +1 -1
  352. package/dist/services/incoming/incoming-tx-monitor-service.js +11 -14
  353. package/dist/services/incoming/incoming-tx-monitor-service.js.map +1 -1
  354. package/dist/services/incoming/incoming-tx-workers.d.ts +2 -2
  355. package/dist/services/incoming/incoming-tx-workers.d.ts.map +1 -1
  356. package/dist/services/incoming/incoming-tx-workers.js +1 -1
  357. package/dist/services/incoming/incoming-tx-workers.js.map +1 -1
  358. package/dist/services/incoming/safety-rules.d.ts.map +1 -1
  359. package/dist/services/incoming/safety-rules.js +3 -2
  360. package/dist/services/incoming/safety-rules.js.map +1 -1
  361. package/dist/services/incoming/subscription-multiplexer.d.ts +2 -6
  362. package/dist/services/incoming/subscription-multiplexer.d.ts.map +1 -1
  363. package/dist/services/incoming/subscription-multiplexer.js +1 -3
  364. package/dist/services/incoming/subscription-multiplexer.js.map +1 -1
  365. package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -1
  366. package/dist/services/monitoring/balance-monitor-service.js +2 -2
  367. package/dist/services/monitoring/balance-monitor-service.js.map +1 -1
  368. package/dist/services/signing-sdk/approval-channel-router.d.ts +7 -7
  369. package/dist/services/signing-sdk/approval-channel-router.d.ts.map +1 -1
  370. package/dist/services/signing-sdk/approval-channel-router.js +13 -13
  371. package/dist/services/signing-sdk/approval-channel-router.js.map +1 -1
  372. package/dist/services/signing-sdk/channels/index.d.ts +2 -2
  373. package/dist/services/signing-sdk/channels/index.d.ts.map +1 -1
  374. package/dist/services/signing-sdk/channels/index.js +1 -1
  375. package/dist/services/signing-sdk/channels/index.js.map +1 -1
  376. package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts +59 -0
  377. package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts.map +1 -0
  378. package/dist/services/signing-sdk/channels/push-relay-signing-channel.js +190 -0
  379. package/dist/services/signing-sdk/channels/push-relay-signing-channel.js.map +1 -0
  380. package/dist/services/signing-sdk/channels/telegram-signing-channel.d.ts +1 -1
  381. package/dist/services/signing-sdk/channels/telegram-signing-channel.js +1 -1
  382. package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts +6 -7
  383. package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts.map +1 -1
  384. package/dist/services/signing-sdk/channels/wallet-notification-channel.js +38 -55
  385. package/dist/services/signing-sdk/channels/wallet-notification-channel.js.map +1 -1
  386. package/dist/services/signing-sdk/index.d.ts +3 -3
  387. package/dist/services/signing-sdk/index.d.ts.map +1 -1
  388. package/dist/services/signing-sdk/index.js +2 -2
  389. package/dist/services/signing-sdk/index.js.map +1 -1
  390. package/dist/services/signing-sdk/preset-auto-setup.js +2 -2
  391. package/dist/services/signing-sdk/preset-auto-setup.js.map +1 -1
  392. package/dist/services/signing-sdk/sign-request-builder.d.ts +2 -2
  393. package/dist/services/signing-sdk/sign-request-builder.d.ts.map +1 -1
  394. package/dist/services/signing-sdk/sign-request-builder.js +17 -25
  395. package/dist/services/signing-sdk/sign-request-builder.js.map +1 -1
  396. package/dist/services/signing-sdk/wallet-app-service.d.ts +4 -0
  397. package/dist/services/signing-sdk/wallet-app-service.d.ts.map +1 -1
  398. package/dist/services/signing-sdk/wallet-app-service.js +12 -5
  399. package/dist/services/signing-sdk/wallet-app-service.js.map +1 -1
  400. package/dist/services/staking/aggregate-staking-balance.d.ts +24 -0
  401. package/dist/services/staking/aggregate-staking-balance.d.ts.map +1 -0
  402. package/dist/services/staking/aggregate-staking-balance.js +82 -0
  403. package/dist/services/staking/aggregate-staking-balance.js.map +1 -0
  404. package/dist/services/wc-session-service.d.ts.map +1 -1
  405. package/dist/services/wc-session-service.js +2 -1
  406. package/dist/services/wc-session-service.js.map +1 -1
  407. package/dist/services/wc-signing-bridge.js +2 -2
  408. package/dist/services/wc-signing-bridge.js.map +1 -1
  409. package/dist/services/x402/payment-signer.d.ts.map +1 -1
  410. package/dist/services/x402/payment-signer.js +2 -5
  411. package/dist/services/x402/payment-signer.js.map +1 -1
  412. package/dist/services/x402/ssrf-guard.d.ts +4 -23
  413. package/dist/services/x402/ssrf-guard.d.ts.map +1 -1
  414. package/dist/services/x402/ssrf-guard.js +3 -232
  415. package/dist/services/x402/ssrf-guard.js.map +1 -1
  416. package/dist/signing/capabilities/eip712-signer.d.ts.map +1 -1
  417. package/dist/signing/capabilities/eip712-signer.js +2 -0
  418. package/dist/signing/capabilities/eip712-signer.js.map +1 -1
  419. package/package.json +5 -5
  420. package/public/admin/assets/index-CpFF2lCo.js +3 -0
  421. package/public/admin/index.html +1 -1
  422. package/dist/notifications/channels/ntfy.d.ts +0 -13
  423. package/dist/notifications/channels/ntfy.d.ts.map +0 -1
  424. package/dist/notifications/channels/ntfy.js +0 -74
  425. package/dist/notifications/channels/ntfy.js.map +0 -1
  426. package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts +0 -66
  427. package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts.map +0 -1
  428. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js +0 -270
  429. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js.map +0 -1
  430. package/public/admin/assets/index-CQ3i4P2U.js +0 -3
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Stage 3: Policy evaluation + Stage 3.5: Gas condition check.
3
+ *
4
+ * Stage 3: evaluateAndReserve TOCTOU-safe + downgradeIfNoOwner
5
+ * Stage 3.5: Gas condition check (between policy and wait)
6
+ *
7
+ * @see docs/32-pipeline-design.md
8
+ */
9
+ import type { PipelineContext } from './pipeline-helpers.js';
10
+ export declare function stage3Policy(ctx: PipelineContext): Promise<void>;
11
+ /**
12
+ * Stage 3.5: Gas condition check.
13
+ *
14
+ * If the request includes `gasCondition` and the `gas_condition.enabled` setting
15
+ * is true (defaults to true when settings key is not yet registered):
16
+ * 1. Check max_pending_count limit against current GAS_WAITING transactions
17
+ * 2. Set status='GAS_WAITING', store gasCondition metadata in bridgeMetadata
18
+ * 3. Emit TX_GAS_WAITING notification
19
+ * 4. Throw PIPELINE_HALTED (transaction will be picked up by GasConditionTracker)
20
+ *
21
+ * If gasCondition is absent: no-op (backward compat -- proceed to stage4Wait).
22
+ *
23
+ * @see 258-CONTEXT.md for architecture details
24
+ */
25
+ export declare function stageGasCondition(ctx: PipelineContext): Promise<void>;
26
+ //# sourceMappingURL=stage3-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage3-policy.d.ts","sourceRoot":"","sources":["../../src/pipeline/stage3-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiB7D,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6PtE;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4I3E"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * Stage 3: Policy evaluation + Stage 3.5: Gas condition check.
3
+ *
4
+ * Stage 3: evaluateAndReserve TOCTOU-safe + downgradeIfNoOwner
5
+ * Stage 3.5: Gas condition check (between policy and wait)
6
+ *
7
+ * @see docs/32-pipeline-design.md
8
+ */
9
+ import { eq, sql } from 'drizzle-orm';
10
+ import { WAIaaSError, } from '@waiaas/core';
11
+ import { wallets, transactions } from '../infrastructure/database/schema.js';
12
+ import { insertAuditLog } from '../infrastructure/database/audit-helper.js';
13
+ import { DatabasePolicyEngine } from './database-policy-engine.js';
14
+ import { downgradeIfNoOwner } from '../workflow/owner-state.js';
15
+ import { resolveEffectiveAmountUsd } from './resolve-effective-amount-usd.js';
16
+ import { rpcConfigKey } from '../infrastructure/adapter-pool.js';
17
+ import { resolveActionTier, getRequestAmount, getRequestTo, resolveNotificationTo, formatNotificationAmount, resolveDisplayAmount, extractPolicyType, buildTransactionParam, hintedTokens, } from './pipeline-helpers.js';
18
+ // ---------------------------------------------------------------------------
19
+ // Stage 3: Policy evaluation
20
+ // ---------------------------------------------------------------------------
21
+ export async function stage3Policy(ctx) {
22
+ let evaluation;
23
+ // Determine transaction type from request
24
+ const req = ctx.request;
25
+ const txType = ('type' in req && req.type) ? req.type : 'TRANSFER';
26
+ // Build type-specific TransactionParam (hoisted for notification use)
27
+ const txParam = buildTransactionParam(req, txType, ctx.wallet.chain);
28
+ txParam.network = ctx.resolvedNetwork;
29
+ // [Phase 127] Oracle HTTP 호출 (evaluateAndReserve 진입 전 완료)
30
+ let priceResult;
31
+ if (ctx.priceOracle) {
32
+ priceResult = await resolveEffectiveAmountUsd(req, txType, ctx.wallet.chain, ctx.priceOracle, ctx.resolvedNetwork);
33
+ }
34
+ // BATCH type uses evaluateBatch (2-stage policy evaluation)
35
+ if (txType === 'BATCH' && ctx.policyEngine instanceof DatabasePolicyEngine) {
36
+ const batchReq = req;
37
+ // Classify each instruction and build TransactionParam array
38
+ const params = batchReq.instructions.map((instr) => {
39
+ let instrType = 'TRANSFER';
40
+ if ('spender' in instr)
41
+ instrType = 'APPROVE';
42
+ else if ('token' in instr)
43
+ instrType = 'TOKEN_TRANSFER';
44
+ else if ('programId' in instr || 'calldata' in instr)
45
+ instrType = 'CONTRACT_CALL';
46
+ return {
47
+ type: instrType,
48
+ amount: 'amount' in instr ? instr.amount ?? '0' : '0',
49
+ toAddress: 'to' in instr ? instr.to ?? '' : '',
50
+ chain: ctx.wallet.chain,
51
+ network: ctx.resolvedNetwork,
52
+ tokenAddress: 'token' in instr ? instr.token?.address : undefined,
53
+ assetId: 'token' in instr ? instr.token?.assetId : undefined,
54
+ contractAddress: instrType === 'CONTRACT_CALL' ? ('to' in instr ? instr.to : undefined) : undefined,
55
+ selector: 'calldata' in instr ? instr.calldata?.slice(0, 10) : undefined,
56
+ spenderAddress: 'spender' in instr ? instr.spender : undefined,
57
+ approveAmount: instrType === 'APPROVE' && 'amount' in instr ? instr.amount : undefined,
58
+ };
59
+ });
60
+ // evaluateBatch에 batchUsdAmount 전달 (Phase 127)
61
+ const batchUsdAmount = priceResult?.type === 'success' ? priceResult.usdAmount : undefined;
62
+ evaluation = await ctx.policyEngine.evaluateBatch(ctx.walletId, params, batchUsdAmount);
63
+ }
64
+ else {
65
+ // evaluateAndReserve에 usdAmount 전달 (Phase 127)
66
+ const usdAmount = priceResult?.type === 'success' ? priceResult.usdAmount : undefined;
67
+ // [Phase 320] Pre-fetch reputation floor tier (async, before IMMEDIATE txn)
68
+ let reputationFloorTier;
69
+ if (ctx.reputationCache && ctx.policyEngine instanceof DatabasePolicyEngine) {
70
+ const prefetchResult = await ctx.policyEngine.prefetchReputationTier(ctx.walletId, txParam, ctx.reputationCache);
71
+ reputationFloorTier = prefetchResult?.tier;
72
+ // INT-01 fix: Emit REPUTATION_THRESHOLD_TRIGGERED when tier is escalated.
73
+ // This fires before the evaluation result is used, so the notification goes out
74
+ // regardless of whether the transaction is ultimately allowed or denied.
75
+ if (prefetchResult) {
76
+ void ctx.notificationService?.notify('REPUTATION_THRESHOLD_TRIGGERED', ctx.walletId, {
77
+ tier: prefetchResult.tier,
78
+ score: prefetchResult.score ?? '',
79
+ threshold: prefetchResult.threshold ?? '',
80
+ }, { txId: ctx.txId });
81
+ }
82
+ }
83
+ // Use evaluateAndReserve for TOCTOU-safe evaluation when DatabasePolicyEngine + sqlite available
84
+ if (ctx.policyEngine instanceof DatabasePolicyEngine && ctx.sqlite) {
85
+ evaluation = ctx.policyEngine.evaluateAndReserve(ctx.walletId, txParam, ctx.txId, usdAmount, reputationFloorTier);
86
+ }
87
+ else {
88
+ evaluation = await ctx.policyEngine.evaluate(ctx.walletId, txParam);
89
+ }
90
+ }
91
+ if (!evaluation.allowed) {
92
+ // Update tx status to CANCELLED (REJECTED not in TRANSACTION_STATUSES enum)
93
+ await ctx.db
94
+ .update(transactions)
95
+ .set({ status: 'CANCELLED', error: evaluation.reason ?? 'Policy denied' })
96
+ .where(eq(transactions.id, ctx.txId));
97
+ // Fire-and-forget: notify POLICY_VIOLATION (never blocks pipeline)
98
+ void ctx.notificationService?.notify('POLICY_VIOLATION', ctx.walletId, {
99
+ reason: evaluation.reason ?? 'Policy denied',
100
+ amount: formatNotificationAmount(ctx.request, ctx.wallet.chain),
101
+ to: getRequestTo(ctx.request),
102
+ policyType: extractPolicyType(evaluation.reason),
103
+ tokenAddress: txParam.tokenAddress ?? '',
104
+ contractAddress: txParam.contractAddress ?? '',
105
+ adminLink: '/admin/policies',
106
+ }, { txId: ctx.txId });
107
+ // Audit log: POLICY_DENIED
108
+ if (ctx.sqlite) {
109
+ insertAuditLog(ctx.sqlite, {
110
+ eventType: 'POLICY_DENIED',
111
+ actor: ctx.sessionId ?? 'system',
112
+ walletId: ctx.walletId,
113
+ txId: ctx.txId,
114
+ details: {
115
+ reason: evaluation.reason,
116
+ requestedAmount: getRequestAmount(ctx.request),
117
+ type: ('type' in ctx.request && ctx.request.type) ? ctx.request.type : 'TRANSFER',
118
+ },
119
+ severity: 'warning',
120
+ });
121
+ }
122
+ throw new WAIaaSError('POLICY_DENIED', {
123
+ message: evaluation.reason ?? 'Transaction denied by policy',
124
+ });
125
+ }
126
+ let tier = evaluation.tier;
127
+ let downgraded = false;
128
+ // [Phase 331] Action tier override: Settings > provider default > no floor
129
+ if (ctx.actionProviderKey && ctx.actionName && ctx.actionDefaultTier) {
130
+ const actionTier = resolveActionTier(ctx.actionProviderKey, ctx.actionName, ctx.actionDefaultTier, ctx.settingsService);
131
+ // Action tier acts as a FLOOR -- escalate but never downgrade
132
+ const TIER_ORDER_331 = ['INSTANT', 'NOTIFY', 'DELAY', 'APPROVAL'];
133
+ if (TIER_ORDER_331.indexOf(actionTier) > TIER_ORDER_331.indexOf(tier)) {
134
+ tier = actionTier;
135
+ }
136
+ }
137
+ // [Phase 127] PriceResult에 따른 후처리
138
+ if (priceResult?.type === 'notListed') {
139
+ // Audit log: UNLISTED_TOKEN_TRANSFER (refactored to insertAuditLog)
140
+ if (ctx.sqlite) {
141
+ insertAuditLog(ctx.sqlite, {
142
+ eventType: 'UNLISTED_TOKEN_TRANSFER',
143
+ actor: ctx.sessionId ?? 'system',
144
+ walletId: ctx.walletId,
145
+ txId: ctx.txId,
146
+ details: {
147
+ tokenAddress: priceResult.tokenAddress,
148
+ chain: priceResult.chain,
149
+ failedCount: priceResult.failedCount,
150
+ },
151
+ severity: 'warning',
152
+ });
153
+ }
154
+ // 최소 NOTIFY 격상 (evaluation tier와 NOTIFY 중 보수적)
155
+ const TIER_ORDER = ['INSTANT', 'NOTIFY', 'DELAY', 'APPROVAL'];
156
+ const currentIdx = TIER_ORDER.indexOf(tier);
157
+ const notifyIdx = TIER_ORDER.indexOf('NOTIFY');
158
+ if (currentIdx < notifyIdx) {
159
+ tier = 'NOTIFY';
160
+ }
161
+ // CoinGecko 키 미설정 + 최초 1회 힌트
162
+ const cacheKey = `${priceResult.chain}:${priceResult.tokenAddress}`;
163
+ const coingeckoKey = ctx.settingsService?.get('oracle.coingecko_api_key');
164
+ const shouldShowHint = !coingeckoKey && !hintedTokens.has(cacheKey);
165
+ if (shouldShowHint) {
166
+ hintedTokens.add(cacheKey);
167
+ }
168
+ // 가격 불명 토큰 알림 발송 (allowed=true인 상태에서도 notListed는 발생)
169
+ const hint = shouldShowHint
170
+ ? 'CoinGecko API 키를 설정하면 이 토큰의 USD 가격을 조회할 수 있습니다. Admin Settings > Oracle에서 설정하세요.'
171
+ : undefined;
172
+ const notifyVars = {
173
+ amount: formatNotificationAmount(ctx.request, ctx.wallet.chain),
174
+ to: getRequestTo(ctx.request),
175
+ reason: `가격 불명 토큰 (${priceResult.tokenAddress}) -- 최소 NOTIFY 격상`,
176
+ policyType: 'SPENDING_LIMIT',
177
+ };
178
+ if (hint)
179
+ notifyVars.hint = hint;
180
+ void ctx.notificationService?.notify('POLICY_VIOLATION', ctx.walletId, notifyVars, { txId: ctx.txId });
181
+ }
182
+ // oracleDown: 아무것도 하지 않음 -- 네이티브 금액 기준 tier가 이미 설정됨
183
+ // Check for APPROVAL -> DELAY downgrade when no owner registered
184
+ if (tier === 'APPROVAL') {
185
+ const walletRow = await ctx.db.select().from(wallets).where(eq(wallets.id, ctx.walletId)).get();
186
+ if (walletRow) {
187
+ const result = downgradeIfNoOwner({
188
+ ownerAddress: walletRow.ownerAddress ?? null,
189
+ ownerVerified: walletRow.ownerVerified ?? false,
190
+ }, tier);
191
+ tier = result.tier;
192
+ downgraded = result.downgraded;
193
+ }
194
+ }
195
+ // Set tier and metadata on context
196
+ ctx.tier = tier;
197
+ ctx.downgraded = downgraded;
198
+ if (evaluation.delaySeconds !== undefined) {
199
+ ctx.delaySeconds = evaluation.delaySeconds;
200
+ }
201
+ // [Phase 139] Cache amountUsd on context for Stage 5/6 display_amount
202
+ const stageAmountUsd = priceResult?.type === 'success' ? priceResult.usdAmount : undefined;
203
+ ctx.amountUsd = stageAmountUsd;
204
+ // [Phase 139] Resolve display amount for notifications
205
+ const displayAmount = await resolveDisplayAmount(stageAmountUsd ?? null, ctx.settingsService, ctx.forexRateService);
206
+ // [Phase 136] Cumulative spending warning notification (80% threshold)
207
+ if (evaluation.cumulativeWarning) {
208
+ const w = evaluation.cumulativeWarning;
209
+ void ctx.notificationService?.notify('CUMULATIVE_LIMIT_WARNING', ctx.walletId, {
210
+ type: w.type,
211
+ spent: String(w.spent.toFixed(2)),
212
+ limit: String(w.limit.toFixed(2)),
213
+ ratio: String(Math.round(w.ratio * 100)),
214
+ display_amount: displayAmount,
215
+ }, { txId: ctx.txId });
216
+ }
217
+ // [Phase 136] APPROVAL tier notification with reason
218
+ if (tier === 'APPROVAL' && !downgraded) {
219
+ const reason = evaluation.approvalReason ?? 'per_tx';
220
+ void ctx.notificationService?.notify('TX_APPROVAL_REQUIRED', ctx.walletId, {
221
+ txId: ctx.txId,
222
+ amount: formatNotificationAmount(ctx.request, ctx.wallet.chain),
223
+ to: resolveNotificationTo(ctx.request, ctx.resolvedNetwork, ctx.contractNameRegistry),
224
+ reason,
225
+ display_amount: displayAmount,
226
+ }, { txId: ctx.txId });
227
+ }
228
+ // Update DB with tier
229
+ await ctx.db
230
+ .update(transactions)
231
+ .set({ tier })
232
+ .where(eq(transactions.id, ctx.txId));
233
+ }
234
+ // ---------------------------------------------------------------------------
235
+ // Stage 3.5: Gas condition check (between policy and wait)
236
+ // ---------------------------------------------------------------------------
237
+ /**
238
+ * Stage 3.5: Gas condition check.
239
+ *
240
+ * If the request includes `gasCondition` and the `gas_condition.enabled` setting
241
+ * is true (defaults to true when settings key is not yet registered):
242
+ * 1. Check max_pending_count limit against current GAS_WAITING transactions
243
+ * 2. Set status='GAS_WAITING', store gasCondition metadata in bridgeMetadata
244
+ * 3. Emit TX_GAS_WAITING notification
245
+ * 4. Throw PIPELINE_HALTED (transaction will be picked up by GasConditionTracker)
246
+ *
247
+ * If gasCondition is absent: no-op (backward compat -- proceed to stage4Wait).
248
+ *
249
+ * @see 258-CONTEXT.md for architecture details
250
+ */
251
+ export async function stageGasCondition(ctx) {
252
+ const req = ctx.request;
253
+ // Check if request has gasCondition (present on all 5 discriminatedUnion types)
254
+ const gasCondition = ('gasCondition' in req && req.gasCondition)
255
+ ? req.gasCondition
256
+ : undefined;
257
+ if (!gasCondition) {
258
+ // No gas condition specified: proceed normally (backward compat)
259
+ return;
260
+ }
261
+ // Check if gas_condition feature is enabled via settings
262
+ // Default to true if the setting key is not yet registered (258-02 adds it)
263
+ let gasConditionEnabled = true;
264
+ if (ctx.settingsService) {
265
+ try {
266
+ const enabledValue = ctx.settingsService.get('gas_condition.enabled');
267
+ gasConditionEnabled = enabledValue !== 'false';
268
+ }
269
+ catch {
270
+ // Setting key not yet registered (will be added in 258-02) -- default to true
271
+ gasConditionEnabled = true;
272
+ }
273
+ }
274
+ if (!gasConditionEnabled) {
275
+ // Feature disabled: proceed normally, ignore gasCondition
276
+ return;
277
+ }
278
+ // Check max_pending_count limit
279
+ let maxPendingCount = 100;
280
+ if (ctx.settingsService) {
281
+ try {
282
+ const maxValue = ctx.settingsService.get('gas_condition.max_pending_count');
283
+ const parsed = parseInt(maxValue, 10);
284
+ if (!isNaN(parsed) && parsed > 0) {
285
+ maxPendingCount = parsed;
286
+ }
287
+ }
288
+ catch {
289
+ // Setting key not yet registered -- use default
290
+ }
291
+ }
292
+ // Count current GAS_WAITING transactions
293
+ const countResult = ctx.db
294
+ .select({ count: sql `count(*)` })
295
+ .from(transactions)
296
+ .where(eq(transactions.status, 'GAS_WAITING'))
297
+ .get();
298
+ const currentWaiting = countResult?.count ?? 0;
299
+ if (currentWaiting >= maxPendingCount) {
300
+ throw new WAIaaSError('ACTION_VALIDATION_FAILED', {
301
+ message: `Gas condition pending limit reached (${currentWaiting}/${maxPendingCount}). Try again later.`,
302
+ });
303
+ }
304
+ // Resolve timeout: request.timeout > settings default > hardcoded 3600
305
+ let timeout = gasCondition.timeout;
306
+ if (!timeout) {
307
+ if (ctx.settingsService) {
308
+ try {
309
+ const defaultTimeout = ctx.settingsService.get('gas_condition.default_timeout_sec');
310
+ const parsed = parseInt(defaultTimeout, 10);
311
+ if (!isNaN(parsed) && parsed >= 60 && parsed <= 86400) {
312
+ timeout = parsed;
313
+ }
314
+ }
315
+ catch {
316
+ // Setting key not yet registered
317
+ }
318
+ }
319
+ if (!timeout)
320
+ timeout = 3600;
321
+ }
322
+ // Clamp timeout to max_timeout_sec
323
+ let maxTimeout = 86400;
324
+ if (ctx.settingsService) {
325
+ try {
326
+ const maxValue = ctx.settingsService.get('gas_condition.max_timeout_sec');
327
+ const parsed = parseInt(maxValue, 10);
328
+ if (!isNaN(parsed) && parsed >= 60) {
329
+ maxTimeout = parsed;
330
+ }
331
+ }
332
+ catch {
333
+ // Setting key not yet registered
334
+ }
335
+ }
336
+ if (timeout > maxTimeout) {
337
+ timeout = maxTimeout;
338
+ }
339
+ // Resolve RPC URL for GasConditionTracker (raw fetch, no adapter dependency)
340
+ let rpcUrl = '';
341
+ if (ctx.settingsService) {
342
+ try {
343
+ rpcUrl = ctx.settingsService.get(`rpc.${rpcConfigKey(ctx.wallet.chain, ctx.resolvedNetwork)}`);
344
+ }
345
+ catch {
346
+ // Setting key not found -- tracker will skip this TX
347
+ }
348
+ }
349
+ // Store gas condition metadata in bridgeMetadata for GasConditionTracker (258-02)
350
+ const gasConditionMeta = {
351
+ tracker: 'gas-condition',
352
+ gasCondition: {
353
+ maxGasPrice: gasCondition.maxGasPrice,
354
+ maxPriorityFee: gasCondition.maxPriorityFee,
355
+ timeout,
356
+ },
357
+ chain: ctx.wallet.chain,
358
+ network: ctx.resolvedNetwork,
359
+ rpcUrl,
360
+ gasConditionCreatedAt: Date.now(),
361
+ };
362
+ // Set status='GAS_WAITING', store bridgeMetadata
363
+ await ctx.db
364
+ .update(transactions)
365
+ .set({
366
+ status: 'GAS_WAITING',
367
+ bridgeMetadata: JSON.stringify(gasConditionMeta),
368
+ })
369
+ .where(eq(transactions.id, ctx.txId));
370
+ // Fire-and-forget: notify TX_GAS_WAITING
371
+ void ctx.notificationService?.notify('TX_GAS_WAITING', ctx.walletId, {
372
+ txId: ctx.txId,
373
+ maxGasPrice: gasCondition.maxGasPrice ?? '',
374
+ maxPriorityFee: gasCondition.maxPriorityFee ?? '',
375
+ timeout: String(timeout),
376
+ chain: ctx.wallet.chain,
377
+ network: ctx.resolvedNetwork,
378
+ }, { txId: ctx.txId });
379
+ // Halt pipeline -- transaction will be picked up by GasConditionTracker
380
+ throw new WAIaaSError('PIPELINE_HALTED', {
381
+ message: `Transaction ${ctx.txId} waiting for gas condition (timeout: ${timeout}s)`,
382
+ });
383
+ }
384
+ //# sourceMappingURL=stage3-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage3-policy.js","sourceRoot":"","sources":["../../src/pipeline/stage3-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Stage 4: Wait (DELAY/APPROVAL branching, INSTANT/NOTIFY passthrough).
3
+ *
4
+ * @see docs/32-pipeline-design.md
5
+ */
6
+ import type { PipelineContext } from './pipeline-helpers.js';
7
+ export declare function stage4Wait(ctx: PipelineContext): Promise<void>;
8
+ //# sourceMappingURL=stage4-wait.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage4-wait.d.ts","sourceRoot":"","sources":["../../src/pipeline/stage4-wait.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D,wBAAsB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFpE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Stage 4: Wait (DELAY/APPROVAL branching, INSTANT/NOTIFY passthrough).
3
+ *
4
+ * @see docs/32-pipeline-design.md
5
+ */
6
+ import { WAIaaSError } from '@waiaas/core';
7
+ import { getRequestTo, getRequestAmount, formatNotificationAmount } from './pipeline-helpers.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Stage 4: Wait (DELAY/APPROVAL branching, INSTANT/NOTIFY passthrough)
10
+ // ---------------------------------------------------------------------------
11
+ export async function stage4Wait(ctx) {
12
+ const tier = ctx.tier;
13
+ // INSTANT and NOTIFY: pass through to stage5
14
+ if (tier === 'INSTANT' || tier === 'NOTIFY') {
15
+ return;
16
+ }
17
+ // DELAY: queue with cooldown, halt pipeline
18
+ if (tier === 'DELAY') {
19
+ if (!ctx.delayQueue) {
20
+ // Fallback: if no DelayQueue, treat as INSTANT (backward compat)
21
+ return;
22
+ }
23
+ const delaySeconds = ctx.delaySeconds
24
+ ?? ctx.config?.policy_defaults_delay_seconds
25
+ ?? 60;
26
+ ctx.delayQueue.queueDelay(ctx.txId, delaySeconds);
27
+ // Fire-and-forget: notify TX_QUEUED with cancel keyboard data
28
+ void ctx.notificationService?.notify('TX_QUEUED', ctx.walletId, {
29
+ txId: ctx.txId,
30
+ amount: formatNotificationAmount(ctx.request, ctx.wallet.chain),
31
+ to: getRequestTo(ctx.request),
32
+ delaySeconds: String(delaySeconds),
33
+ }, { txId: ctx.txId });
34
+ // Halt pipeline -- transaction will be picked up by processExpired worker
35
+ throw new WAIaaSError('PIPELINE_HALTED', {
36
+ message: `Transaction ${ctx.txId} queued for ${delaySeconds}s delay`,
37
+ });
38
+ }
39
+ // APPROVAL: create pending approval, halt pipeline
40
+ if (tier === 'APPROVAL') {
41
+ if (!ctx.approvalWorkflow) {
42
+ // Fallback: if no ApprovalWorkflow, treat as INSTANT (backward compat)
43
+ return;
44
+ }
45
+ // Pass EIP-712 metadata to requestApproval if present (Phase 321)
46
+ ctx.approvalWorkflow.requestApproval(ctx.txId, ctx.eip712Metadata ? {
47
+ approvalType: ctx.eip712Metadata.approvalType,
48
+ typedDataJson: ctx.eip712Metadata.typedDataJson,
49
+ } : undefined);
50
+ // Route approval to the correct signing channel
51
+ if (ctx.approvalChannelRouter) {
52
+ // v2.6.1+: use ApprovalChannelRouter to determine the correct channel
53
+ void (async () => {
54
+ try {
55
+ const result = await ctx.approvalChannelRouter.route(ctx.walletId, {
56
+ walletId: ctx.walletId,
57
+ txId: ctx.txId,
58
+ chain: ctx.wallet.chain,
59
+ network: ctx.resolvedNetwork,
60
+ type: ('type' in ctx.request && ctx.request.type) ? ctx.request.type : 'TRANSFER',
61
+ from: ctx.wallet.publicKey,
62
+ to: getRequestTo(ctx.request),
63
+ amount: getRequestAmount(ctx.request),
64
+ policyTier: 'APPROVAL',
65
+ approvalType: ctx.eip712Metadata?.approvalType,
66
+ });
67
+ // Only invoke WC bridge when the router selects walletconnect
68
+ if (result.method === 'walletconnect' && ctx.wcSigningBridge) {
69
+ void ctx.wcSigningBridge.requestSignature(ctx.walletId, ctx.txId, ctx.wallet.chain);
70
+ }
71
+ }
72
+ catch {
73
+ // Channel routing errors are non-fatal; pipeline already halted
74
+ }
75
+ })();
76
+ }
77
+ else if (ctx.wcSigningBridge) {
78
+ // Legacy: no router available, fall back to direct WC bridge
79
+ void ctx.wcSigningBridge.requestSignature(ctx.walletId, ctx.txId, ctx.wallet.chain);
80
+ }
81
+ // Halt pipeline -- transaction will be picked up by approve/reject/expire
82
+ throw new WAIaaSError('PIPELINE_HALTED', {
83
+ message: `Transaction ${ctx.txId} queued for owner approval`,
84
+ });
85
+ }
86
+ }
87
+ //# sourceMappingURL=stage4-wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage4-wait.js","sourceRoot":"","sources":["../../src/pipeline/stage4-wait.ts"],"names":[],"mappings":"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"}