@waiaas/daemon 2.11.0-rc.8 → 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 (414) 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/siwe-verify.d.ts +6 -26
  21. package/dist/api/middleware/siwe-verify.d.ts.map +1 -1
  22. package/dist/api/middleware/siwe-verify.js +5 -50
  23. package/dist/api/middleware/siwe-verify.js.map +1 -1
  24. package/dist/api/routes/actions.d.ts +1 -0
  25. package/dist/api/routes/actions.d.ts.map +1 -1
  26. package/dist/api/routes/actions.js +52 -4
  27. package/dist/api/routes/actions.js.map +1 -1
  28. package/dist/api/routes/admin-actions.d.ts +1 -0
  29. package/dist/api/routes/admin-actions.d.ts.map +1 -1
  30. package/dist/api/routes/admin-actions.js +3 -3
  31. package/dist/api/routes/admin-actions.js.map +1 -1
  32. package/dist/api/routes/admin-auth.d.ts.map +1 -1
  33. package/dist/api/routes/admin-auth.js +12 -7
  34. package/dist/api/routes/admin-auth.js.map +1 -1
  35. package/dist/api/routes/admin-credentials.js +2 -2
  36. package/dist/api/routes/admin-credentials.js.map +1 -1
  37. package/dist/api/routes/admin-monitoring.d.ts +10 -0
  38. package/dist/api/routes/admin-monitoring.d.ts.map +1 -1
  39. package/dist/api/routes/admin-monitoring.js +59 -14
  40. package/dist/api/routes/admin-monitoring.js.map +1 -1
  41. package/dist/api/routes/admin-notifications.d.ts.map +1 -1
  42. package/dist/api/routes/admin-notifications.js +2 -15
  43. package/dist/api/routes/admin-notifications.js.map +1 -1
  44. package/dist/api/routes/admin-settings.d.ts.map +1 -1
  45. package/dist/api/routes/admin-settings.js +90 -1
  46. package/dist/api/routes/admin-settings.js.map +1 -1
  47. package/dist/api/routes/admin-wallets.d.ts +16 -1
  48. package/dist/api/routes/admin-wallets.d.ts.map +1 -1
  49. package/dist/api/routes/admin-wallets.js +64 -75
  50. package/dist/api/routes/admin-wallets.js.map +1 -1
  51. package/dist/api/routes/admin.d.ts +1 -0
  52. package/dist/api/routes/admin.d.ts.map +1 -1
  53. package/dist/api/routes/admin.js.map +1 -1
  54. package/dist/api/routes/credentials.js +2 -2
  55. package/dist/api/routes/credentials.js.map +1 -1
  56. package/dist/api/routes/defi-positions.js.map +1 -1
  57. package/dist/api/routes/nfts.js.map +1 -1
  58. package/dist/api/routes/openapi-schemas.d.ts +412 -12
  59. package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
  60. package/dist/api/routes/openapi-schemas.js +38 -5
  61. package/dist/api/routes/openapi-schemas.js.map +1 -1
  62. package/dist/api/routes/policies.d.ts +2 -0
  63. package/dist/api/routes/policies.d.ts.map +1 -1
  64. package/dist/api/routes/policies.js +55 -6
  65. package/dist/api/routes/policies.js.map +1 -1
  66. package/dist/api/routes/rpc-proxy.js.map +1 -1
  67. package/dist/api/routes/sessions.d.ts.map +1 -1
  68. package/dist/api/routes/sessions.js +47 -28
  69. package/dist/api/routes/sessions.js.map +1 -1
  70. package/dist/api/routes/staking.d.ts.map +1 -1
  71. package/dist/api/routes/staking.js +4 -76
  72. package/dist/api/routes/staking.js.map +1 -1
  73. package/dist/api/routes/tokens.d.ts.map +1 -1
  74. package/dist/api/routes/tokens.js.map +1 -1
  75. package/dist/api/routes/transactions.d.ts +1 -0
  76. package/dist/api/routes/transactions.d.ts.map +1 -1
  77. package/dist/api/routes/transactions.js +8 -2
  78. package/dist/api/routes/transactions.js.map +1 -1
  79. package/dist/api/routes/userop.d.ts.map +1 -1
  80. package/dist/api/routes/userop.js +0 -2
  81. package/dist/api/routes/userop.js.map +1 -1
  82. package/dist/api/routes/wallet-apps.d.ts.map +1 -1
  83. package/dist/api/routes/wallet-apps.js +20 -13
  84. package/dist/api/routes/wallet-apps.js.map +1 -1
  85. package/dist/api/routes/wallet.js.map +1 -1
  86. package/dist/api/routes/wallets.d.ts.map +1 -1
  87. package/dist/api/routes/wallets.js +3 -0
  88. package/dist/api/routes/wallets.js.map +1 -1
  89. package/dist/api/routes/wc.d.ts.map +1 -1
  90. package/dist/api/routes/wc.js +13 -8
  91. package/dist/api/routes/wc.js.map +1 -1
  92. package/dist/api/routes/x402.d.ts.map +1 -1
  93. package/dist/api/routes/x402.js +1 -2
  94. package/dist/api/routes/x402.js.map +1 -1
  95. package/dist/api/server.d.ts +8 -4
  96. package/dist/api/server.d.ts.map +1 -1
  97. package/dist/api/server.js +46 -5
  98. package/dist/api/server.js.map +1 -1
  99. package/dist/constants.d.ts +1 -1
  100. package/dist/constants.d.ts.map +1 -1
  101. package/dist/constants.js +1 -1
  102. package/dist/constants.js.map +1 -1
  103. package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -1
  104. package/dist/infrastructure/action/action-provider-registry.js +2 -3
  105. package/dist/infrastructure/action/action-provider-registry.js.map +1 -1
  106. package/dist/infrastructure/action/builtin-metadata.d.ts +22 -0
  107. package/dist/infrastructure/action/builtin-metadata.d.ts.map +1 -0
  108. package/dist/infrastructure/action/builtin-metadata.js +29 -0
  109. package/dist/infrastructure/action/builtin-metadata.js.map +1 -0
  110. package/dist/infrastructure/adapter-pool.d.ts +2 -1
  111. package/dist/infrastructure/adapter-pool.d.ts.map +1 -1
  112. package/dist/infrastructure/adapter-pool.js.map +1 -1
  113. package/dist/infrastructure/auth/address-validation.d.ts +38 -0
  114. package/dist/infrastructure/auth/address-validation.d.ts.map +1 -0
  115. package/dist/infrastructure/auth/address-validation.js +134 -0
  116. package/dist/infrastructure/auth/address-validation.js.map +1 -0
  117. package/dist/infrastructure/auth/siwe-verify.d.ts +34 -0
  118. package/dist/infrastructure/auth/siwe-verify.d.ts.map +1 -0
  119. package/dist/infrastructure/auth/siwe-verify.js +58 -0
  120. package/dist/infrastructure/auth/siwe-verify.js.map +1 -0
  121. package/dist/infrastructure/auth/types.d.ts +12 -0
  122. package/dist/infrastructure/auth/types.d.ts.map +1 -0
  123. package/dist/infrastructure/auth/types.js +8 -0
  124. package/dist/infrastructure/auth/types.js.map +1 -0
  125. package/dist/infrastructure/config/loader.d.ts +1 -10
  126. package/dist/infrastructure/config/loader.d.ts.map +1 -1
  127. package/dist/infrastructure/config/loader.js +0 -2
  128. package/dist/infrastructure/config/loader.js.map +1 -1
  129. package/dist/infrastructure/database/migrate.d.ts +6 -18
  130. package/dist/infrastructure/database/migrate.d.ts.map +1 -1
  131. package/dist/infrastructure/database/migrate.js +25 -2856
  132. package/dist/infrastructure/database/migrate.js.map +1 -1
  133. package/dist/infrastructure/database/migrations/v11-v20.d.ts +17 -0
  134. package/dist/infrastructure/database/migrations/v11-v20.d.ts.map +1 -0
  135. package/dist/infrastructure/database/migrations/v11-v20.js +295 -0
  136. package/dist/infrastructure/database/migrations/v11-v20.js.map +1 -0
  137. package/dist/infrastructure/database/migrations/v2-v10.d.ts +16 -0
  138. package/dist/infrastructure/database/migrations/v2-v10.d.ts.map +1 -0
  139. package/dist/infrastructure/database/migrations/v2-v10.js +539 -0
  140. package/dist/infrastructure/database/migrations/v2-v10.js.map +1 -0
  141. package/dist/infrastructure/database/migrations/v21-v30.d.ts +17 -0
  142. package/dist/infrastructure/database/migrations/v21-v30.d.ts.map +1 -0
  143. package/dist/infrastructure/database/migrations/v21-v30.js +507 -0
  144. package/dist/infrastructure/database/migrations/v21-v30.js.map +1 -0
  145. package/dist/infrastructure/database/migrations/v31-v40.d.ts +17 -0
  146. package/dist/infrastructure/database/migrations/v31-v40.d.ts.map +1 -0
  147. package/dist/infrastructure/database/migrations/v31-v40.js +203 -0
  148. package/dist/infrastructure/database/migrations/v31-v40.js.map +1 -0
  149. package/dist/infrastructure/database/migrations/v41-v50.d.ts +17 -0
  150. package/dist/infrastructure/database/migrations/v41-v50.d.ts.map +1 -0
  151. package/dist/infrastructure/database/migrations/v41-v50.js +188 -0
  152. package/dist/infrastructure/database/migrations/v41-v50.js.map +1 -0
  153. package/dist/infrastructure/database/migrations/v51-v59.d.ts +17 -0
  154. package/dist/infrastructure/database/migrations/v51-v59.d.ts.map +1 -0
  155. package/dist/infrastructure/database/migrations/v51-v59.js +420 -0
  156. package/dist/infrastructure/database/migrations/v51-v59.js.map +1 -0
  157. package/dist/infrastructure/database/schema-ddl.d.ts +24 -0
  158. package/dist/infrastructure/database/schema-ddl.d.ts.map +1 -0
  159. package/dist/infrastructure/database/schema-ddl.js +596 -0
  160. package/dist/infrastructure/database/schema-ddl.js.map +1 -0
  161. package/dist/infrastructure/database/schema.d.ts +38 -0
  162. package/dist/infrastructure/database/schema.d.ts.map +1 -1
  163. package/dist/infrastructure/database/schema.js +2 -0
  164. package/dist/infrastructure/database/schema.js.map +1 -1
  165. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -1
  166. package/dist/infrastructure/jwt/jwt-secret-manager.js +16 -3
  167. package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -1
  168. package/dist/infrastructure/nft/alchemy-nft-indexer.d.ts.map +1 -1
  169. package/dist/infrastructure/nft/alchemy-nft-indexer.js +0 -1
  170. package/dist/infrastructure/nft/alchemy-nft-indexer.js.map +1 -1
  171. package/dist/infrastructure/nft/helius-nft-indexer.d.ts.map +1 -1
  172. package/dist/infrastructure/nft/helius-nft-indexer.js +1 -2
  173. package/dist/infrastructure/nft/helius-nft-indexer.js.map +1 -1
  174. package/dist/infrastructure/nft/nft-indexer-client.d.ts.map +1 -1
  175. package/dist/infrastructure/nft/nft-indexer-client.js +0 -2
  176. package/dist/infrastructure/nft/nft-indexer-client.js.map +1 -1
  177. package/dist/infrastructure/security/ssrf-guard.d.ts +33 -0
  178. package/dist/infrastructure/security/ssrf-guard.d.ts.map +1 -0
  179. package/dist/infrastructure/security/ssrf-guard.js +244 -0
  180. package/dist/infrastructure/security/ssrf-guard.js.map +1 -0
  181. package/dist/infrastructure/settings/hot-reload.d.ts +1 -1
  182. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
  183. package/dist/infrastructure/settings/hot-reload.js +0 -2
  184. package/dist/infrastructure/settings/hot-reload.js.map +1 -1
  185. package/dist/infrastructure/settings/index.d.ts +2 -2
  186. package/dist/infrastructure/settings/index.d.ts.map +1 -1
  187. package/dist/infrastructure/settings/index.js +1 -1
  188. package/dist/infrastructure/settings/index.js.map +1 -1
  189. package/dist/infrastructure/settings/setting-keys.d.ts +14 -0
  190. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
  191. package/dist/infrastructure/settings/setting-keys.js +296 -214
  192. package/dist/infrastructure/settings/setting-keys.js.map +1 -1
  193. package/dist/infrastructure/settings/settings-service.d.ts +6 -1
  194. package/dist/infrastructure/settings/settings-service.d.ts.map +1 -1
  195. package/dist/infrastructure/settings/settings-service.js +15 -5
  196. package/dist/infrastructure/settings/settings-service.js.map +1 -1
  197. package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
  198. package/dist/infrastructure/telegram/telegram-bot-service.js +3 -2
  199. package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
  200. package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -1
  201. package/dist/infrastructure/token-registry/builtin-tokens.js +4 -7
  202. package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -1
  203. package/dist/lifecycle/daemon-pipeline.d.ts +49 -0
  204. package/dist/lifecycle/daemon-pipeline.d.ts.map +1 -0
  205. package/dist/lifecycle/daemon-pipeline.js +281 -0
  206. package/dist/lifecycle/daemon-pipeline.js.map +1 -0
  207. package/dist/lifecycle/daemon-shutdown.d.ts +14 -0
  208. package/dist/lifecycle/daemon-shutdown.d.ts.map +1 -0
  209. package/dist/lifecycle/daemon-shutdown.js +176 -0
  210. package/dist/lifecycle/daemon-shutdown.js.map +1 -0
  211. package/dist/lifecycle/daemon-startup.d.ts +15 -0
  212. package/dist/lifecycle/daemon-startup.d.ts.map +1 -0
  213. package/dist/lifecycle/daemon-startup.js +1527 -0
  214. package/dist/lifecycle/daemon-startup.js.map +1 -0
  215. package/dist/lifecycle/daemon.d.ts +171 -114
  216. package/dist/lifecycle/daemon.d.ts.map +1 -1
  217. package/dist/lifecycle/daemon.js +22 -1904
  218. package/dist/lifecycle/daemon.js.map +1 -1
  219. package/dist/notifications/channels/discord.d.ts.map +1 -1
  220. package/dist/notifications/channels/discord.js +1 -0
  221. package/dist/notifications/channels/discord.js.map +1 -1
  222. package/dist/notifications/channels/slack.d.ts.map +1 -1
  223. package/dist/notifications/channels/slack.js +1 -0
  224. package/dist/notifications/channels/slack.js.map +1 -1
  225. package/dist/notifications/index.d.ts +0 -1
  226. package/dist/notifications/index.d.ts.map +1 -1
  227. package/dist/notifications/index.js +0 -1
  228. package/dist/notifications/index.js.map +1 -1
  229. package/dist/notifications/notification-service.d.ts.map +1 -1
  230. package/dist/notifications/notification-service.js +8 -6
  231. package/dist/notifications/notification-service.js.map +1 -1
  232. package/dist/pipeline/database-policy-engine.d.ts +18 -438
  233. package/dist/pipeline/database-policy-engine.d.ts.map +1 -1
  234. package/dist/pipeline/database-policy-engine.js +154 -1321
  235. package/dist/pipeline/database-policy-engine.js.map +1 -1
  236. package/dist/pipeline/dry-run.d.ts +5 -2
  237. package/dist/pipeline/dry-run.d.ts.map +1 -1
  238. package/dist/pipeline/dry-run.js +102 -8
  239. package/dist/pipeline/dry-run.js.map +1 -1
  240. package/dist/pipeline/evaluators/allowed-tokens.d.ts +28 -0
  241. package/dist/pipeline/evaluators/allowed-tokens.d.ts.map +1 -0
  242. package/dist/pipeline/evaluators/allowed-tokens.js +129 -0
  243. package/dist/pipeline/evaluators/allowed-tokens.js.map +1 -0
  244. package/dist/pipeline/evaluators/approved-spenders.d.ts +26 -0
  245. package/dist/pipeline/evaluators/approved-spenders.d.ts.map +1 -0
  246. package/dist/pipeline/evaluators/approved-spenders.js +115 -0
  247. package/dist/pipeline/evaluators/approved-spenders.js.map +1 -0
  248. package/dist/pipeline/evaluators/contract-whitelist.d.ts +28 -0
  249. package/dist/pipeline/evaluators/contract-whitelist.d.ts.map +1 -0
  250. package/dist/pipeline/evaluators/contract-whitelist.js +168 -0
  251. package/dist/pipeline/evaluators/contract-whitelist.js.map +1 -0
  252. package/dist/pipeline/evaluators/helpers.d.ts +9 -0
  253. package/dist/pipeline/evaluators/helpers.d.ts.map +1 -0
  254. package/dist/pipeline/evaluators/helpers.js +13 -0
  255. package/dist/pipeline/evaluators/helpers.js.map +1 -0
  256. package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts +18 -0
  257. package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts.map +1 -0
  258. package/dist/pipeline/evaluators/lending-asset-whitelist.js +44 -0
  259. package/dist/pipeline/evaluators/lending-asset-whitelist.js.map +1 -0
  260. package/dist/pipeline/evaluators/lending-ltv-limit.d.ts +24 -0
  261. package/dist/pipeline/evaluators/lending-ltv-limit.d.ts.map +1 -0
  262. package/dist/pipeline/evaluators/lending-ltv-limit.js +130 -0
  263. package/dist/pipeline/evaluators/lending-ltv-limit.js.map +1 -0
  264. package/dist/pipeline/evaluators/spending-limit.d.ts +46 -0
  265. package/dist/pipeline/evaluators/spending-limit.d.ts.map +1 -0
  266. package/dist/pipeline/evaluators/spending-limit.js +241 -0
  267. package/dist/pipeline/evaluators/spending-limit.js.map +1 -0
  268. package/dist/pipeline/evaluators/types.d.ts +71 -0
  269. package/dist/pipeline/evaluators/types.d.ts.map +1 -0
  270. package/dist/pipeline/evaluators/types.js +7 -0
  271. package/dist/pipeline/evaluators/types.js.map +1 -0
  272. package/dist/pipeline/external-action-pipeline.js.map +1 -1
  273. package/dist/pipeline/gas-condition-tracker.d.ts +1 -1
  274. package/dist/pipeline/gas-condition-tracker.js +1 -1
  275. package/dist/pipeline/pipeline-helpers.d.ts +146 -0
  276. package/dist/pipeline/pipeline-helpers.d.ts.map +1 -0
  277. package/dist/pipeline/pipeline-helpers.js +260 -0
  278. package/dist/pipeline/pipeline-helpers.js.map +1 -0
  279. package/dist/pipeline/pipeline.d.ts +1 -0
  280. package/dist/pipeline/pipeline.d.ts.map +1 -1
  281. package/dist/pipeline/pipeline.js +3 -2
  282. package/dist/pipeline/pipeline.js.map +1 -1
  283. package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -1
  284. package/dist/pipeline/resolve-effective-amount-usd.js +4 -10
  285. package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -1
  286. package/dist/pipeline/sign-message.js +1 -1
  287. package/dist/pipeline/sign-message.js.map +1 -1
  288. package/dist/pipeline/sleep.d.ts +1 -5
  289. package/dist/pipeline/sleep.d.ts.map +1 -1
  290. package/dist/pipeline/sleep.js +2 -7
  291. package/dist/pipeline/sleep.js.map +1 -1
  292. package/dist/pipeline/stage1-validate.d.ts +8 -0
  293. package/dist/pipeline/stage1-validate.d.ts.map +1 -0
  294. package/dist/pipeline/stage1-validate.js +69 -0
  295. package/dist/pipeline/stage1-validate.js.map +1 -0
  296. package/dist/pipeline/stage2-auth.d.ts +12 -0
  297. package/dist/pipeline/stage2-auth.d.ts.map +1 -0
  298. package/dist/pipeline/stage2-auth.js +18 -0
  299. package/dist/pipeline/stage2-auth.js.map +1 -0
  300. package/dist/pipeline/stage3-policy.d.ts +26 -0
  301. package/dist/pipeline/stage3-policy.d.ts.map +1 -0
  302. package/dist/pipeline/stage3-policy.js +384 -0
  303. package/dist/pipeline/stage3-policy.js.map +1 -0
  304. package/dist/pipeline/stage4-wait.d.ts +8 -0
  305. package/dist/pipeline/stage4-wait.d.ts.map +1 -0
  306. package/dist/pipeline/stage4-wait.js +87 -0
  307. package/dist/pipeline/stage4-wait.js.map +1 -0
  308. package/dist/pipeline/stage5-execute.d.ts +120 -0
  309. package/dist/pipeline/stage5-execute.d.ts.map +1 -0
  310. package/dist/pipeline/stage5-execute.js +1070 -0
  311. package/dist/pipeline/stage5-execute.js.map +1 -0
  312. package/dist/pipeline/stage6-confirm.d.ts +11 -0
  313. package/dist/pipeline/stage6-confirm.d.ts.map +1 -0
  314. package/dist/pipeline/stage6-confirm.js +110 -0
  315. package/dist/pipeline/stage6-confirm.js.map +1 -0
  316. package/dist/pipeline/stages.d.ts +11 -245
  317. package/dist/pipeline/stages.d.ts.map +1 -1
  318. package/dist/pipeline/stages.js +11 -1896
  319. package/dist/pipeline/stages.js.map +1 -1
  320. package/dist/rpc-proxy/sync-pipeline.js +2 -2
  321. package/dist/rpc-proxy/sync-pipeline.js.map +1 -1
  322. package/dist/services/autostop/autostop-service.d.ts +4 -1
  323. package/dist/services/autostop/autostop-service.d.ts.map +1 -1
  324. package/dist/services/autostop/autostop-service.js +27 -7
  325. package/dist/services/autostop/autostop-service.js.map +1 -1
  326. package/dist/services/defi/position-tracker.d.ts +5 -0
  327. package/dist/services/defi/position-tracker.d.ts.map +1 -1
  328. package/dist/services/defi/position-tracker.js +41 -6
  329. package/dist/services/defi/position-tracker.js.map +1 -1
  330. package/dist/services/defi/position-write-queue.d.ts.map +1 -1
  331. package/dist/services/defi/position-write-queue.js +3 -2
  332. package/dist/services/defi/position-write-queue.js.map +1 -1
  333. package/dist/services/incoming/__tests__/integration-wiring.test.js +58 -0
  334. package/dist/services/incoming/__tests__/integration-wiring.test.js.map +1 -1
  335. package/dist/services/incoming/incoming-tx-monitor-service.d.ts.map +1 -1
  336. package/dist/services/incoming/incoming-tx-monitor-service.js +11 -14
  337. package/dist/services/incoming/incoming-tx-monitor-service.js.map +1 -1
  338. package/dist/services/incoming/incoming-tx-workers.d.ts +2 -2
  339. package/dist/services/incoming/incoming-tx-workers.d.ts.map +1 -1
  340. package/dist/services/incoming/incoming-tx-workers.js +1 -1
  341. package/dist/services/incoming/incoming-tx-workers.js.map +1 -1
  342. package/dist/services/incoming/safety-rules.d.ts.map +1 -1
  343. package/dist/services/incoming/safety-rules.js +3 -2
  344. package/dist/services/incoming/safety-rules.js.map +1 -1
  345. package/dist/services/incoming/subscription-multiplexer.d.ts +2 -6
  346. package/dist/services/incoming/subscription-multiplexer.d.ts.map +1 -1
  347. package/dist/services/incoming/subscription-multiplexer.js +1 -3
  348. package/dist/services/incoming/subscription-multiplexer.js.map +1 -1
  349. package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -1
  350. package/dist/services/monitoring/balance-monitor-service.js +2 -2
  351. package/dist/services/monitoring/balance-monitor-service.js.map +1 -1
  352. package/dist/services/signing-sdk/approval-channel-router.d.ts +7 -7
  353. package/dist/services/signing-sdk/approval-channel-router.d.ts.map +1 -1
  354. package/dist/services/signing-sdk/approval-channel-router.js +13 -13
  355. package/dist/services/signing-sdk/approval-channel-router.js.map +1 -1
  356. package/dist/services/signing-sdk/channels/index.d.ts +2 -2
  357. package/dist/services/signing-sdk/channels/index.d.ts.map +1 -1
  358. package/dist/services/signing-sdk/channels/index.js +1 -1
  359. package/dist/services/signing-sdk/channels/index.js.map +1 -1
  360. package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts +59 -0
  361. package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts.map +1 -0
  362. package/dist/services/signing-sdk/channels/push-relay-signing-channel.js +190 -0
  363. package/dist/services/signing-sdk/channels/push-relay-signing-channel.js.map +1 -0
  364. package/dist/services/signing-sdk/channels/telegram-signing-channel.d.ts +1 -1
  365. package/dist/services/signing-sdk/channels/telegram-signing-channel.js +1 -1
  366. package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts +6 -7
  367. package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts.map +1 -1
  368. package/dist/services/signing-sdk/channels/wallet-notification-channel.js +38 -55
  369. package/dist/services/signing-sdk/channels/wallet-notification-channel.js.map +1 -1
  370. package/dist/services/signing-sdk/index.d.ts +3 -3
  371. package/dist/services/signing-sdk/index.d.ts.map +1 -1
  372. package/dist/services/signing-sdk/index.js +2 -2
  373. package/dist/services/signing-sdk/index.js.map +1 -1
  374. package/dist/services/signing-sdk/preset-auto-setup.js +2 -2
  375. package/dist/services/signing-sdk/preset-auto-setup.js.map +1 -1
  376. package/dist/services/signing-sdk/sign-request-builder.d.ts +2 -2
  377. package/dist/services/signing-sdk/sign-request-builder.d.ts.map +1 -1
  378. package/dist/services/signing-sdk/sign-request-builder.js +17 -25
  379. package/dist/services/signing-sdk/sign-request-builder.js.map +1 -1
  380. package/dist/services/signing-sdk/wallet-app-service.d.ts +4 -0
  381. package/dist/services/signing-sdk/wallet-app-service.d.ts.map +1 -1
  382. package/dist/services/signing-sdk/wallet-app-service.js +12 -5
  383. package/dist/services/signing-sdk/wallet-app-service.js.map +1 -1
  384. package/dist/services/staking/aggregate-staking-balance.d.ts +24 -0
  385. package/dist/services/staking/aggregate-staking-balance.d.ts.map +1 -0
  386. package/dist/services/staking/aggregate-staking-balance.js +82 -0
  387. package/dist/services/staking/aggregate-staking-balance.js.map +1 -0
  388. package/dist/services/wc-session-service.d.ts.map +1 -1
  389. package/dist/services/wc-session-service.js +2 -1
  390. package/dist/services/wc-session-service.js.map +1 -1
  391. package/dist/services/wc-signing-bridge.js +2 -2
  392. package/dist/services/wc-signing-bridge.js.map +1 -1
  393. package/dist/services/x402/payment-signer.d.ts.map +1 -1
  394. package/dist/services/x402/payment-signer.js +2 -5
  395. package/dist/services/x402/payment-signer.js.map +1 -1
  396. package/dist/services/x402/ssrf-guard.d.ts +4 -23
  397. package/dist/services/x402/ssrf-guard.d.ts.map +1 -1
  398. package/dist/services/x402/ssrf-guard.js +3 -232
  399. package/dist/services/x402/ssrf-guard.js.map +1 -1
  400. package/dist/signing/capabilities/eip712-signer.d.ts.map +1 -1
  401. package/dist/signing/capabilities/eip712-signer.js +2 -0
  402. package/dist/signing/capabilities/eip712-signer.js.map +1 -1
  403. package/package.json +5 -5
  404. package/public/admin/assets/index-CpFF2lCo.js +3 -0
  405. package/public/admin/index.html +1 -1
  406. package/dist/notifications/channels/ntfy.d.ts +0 -13
  407. package/dist/notifications/channels/ntfy.d.ts.map +0 -1
  408. package/dist/notifications/channels/ntfy.js +0 -74
  409. package/dist/notifications/channels/ntfy.js.map +0 -1
  410. package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts +0 -66
  411. package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts.map +0 -1
  412. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js +0 -270
  413. package/dist/services/signing-sdk/channels/ntfy-signing-channel.js.map +0 -1
  414. package/public/admin/assets/index-CQ3i4P2U.js +0 -3
@@ -0,0 +1,26 @@
1
+ /**
2
+ * evaluators/approved-spenders.ts - APPROVED_SPENDERS, APPROVE_AMOUNT_LIMIT,
3
+ * APPROVE_TIER_OVERRIDE evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext, SettingsContext } from './types.js';
8
+ /**
9
+ * Evaluate APPROVED_SPENDERS policy.
10
+ *
11
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
12
+ */
13
+ export declare function evaluateApprovedSpenders(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
14
+ /**
15
+ * Evaluate APPROVE_AMOUNT_LIMIT policy.
16
+ *
17
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
18
+ */
19
+ export declare function evaluateApproveAmountLimit(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
20
+ /**
21
+ * Evaluate APPROVE_TIER_OVERRIDE policy.
22
+ *
23
+ * Returns PolicyEvaluation if override policy exists, null otherwise.
24
+ */
25
+ export declare function evaluateApproveTierOverride(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
26
+ //# sourceMappingURL=approved-spenders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approved-spenders.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/approved-spenders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAc,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKhI;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA4CzB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA6CzB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAczB"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * evaluators/approved-spenders.ts - APPROVED_SPENDERS, APPROVE_AMOUNT_LIMIT,
3
+ * APPROVE_TIER_OVERRIDE evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import { ApprovedSpendersRulesSchema, ApproveAmountLimitRulesSchema, ApproveTierOverrideRulesSchema, } from '@waiaas/core';
8
+ /** Threshold for detecting "unlimited" approve amounts. */
9
+ const UNLIMITED_THRESHOLD = (2n ** 256n - 1n) / 2n;
10
+ /**
11
+ * Evaluate APPROVED_SPENDERS policy.
12
+ *
13
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
14
+ */
15
+ export function evaluateApprovedSpenders(ctx, resolved, transaction) {
16
+ // Only evaluate for APPROVE transactions
17
+ if (transaction.type !== 'APPROVE')
18
+ return null;
19
+ const approvedSpendersPolicy = resolved.find((p) => p.type === 'APPROVED_SPENDERS');
20
+ // No APPROVED_SPENDERS policy -> check toggle, then deny (default deny)
21
+ if (!approvedSpendersPolicy) {
22
+ if (ctx.settingsService?.get('policy.default_deny_spenders') === 'false') {
23
+ return null; // default-allow mode: skip approved spenders check
24
+ }
25
+ return {
26
+ allowed: false,
27
+ tier: 'INSTANT',
28
+ reason: 'Token approvals disabled: no APPROVED_SPENDERS policy configured',
29
+ };
30
+ }
31
+ // Parse rules.spenders array
32
+ const rules = ctx.parseRules(approvedSpendersPolicy.rules, ApprovedSpendersRulesSchema, 'APPROVED_SPENDERS');
33
+ const spenderAddress = transaction.spenderAddress;
34
+ if (!spenderAddress) {
35
+ return {
36
+ allowed: false,
37
+ tier: 'INSTANT',
38
+ reason: 'Approve missing spender address',
39
+ };
40
+ }
41
+ // Check if spender is in approved list (case-insensitive for EVM addresses)
42
+ const isApproved = rules.spenders.some((s) => s.address.toLowerCase() === spenderAddress.toLowerCase());
43
+ if (!isApproved) {
44
+ return {
45
+ allowed: false,
46
+ tier: 'INSTANT',
47
+ reason: `Spender not in approved list: ${spenderAddress}`,
48
+ };
49
+ }
50
+ return null; // Spender is approved, continue evaluation
51
+ }
52
+ /**
53
+ * Evaluate APPROVE_AMOUNT_LIMIT policy.
54
+ *
55
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
56
+ */
57
+ export function evaluateApproveAmountLimit(ctx, resolved, transaction) {
58
+ // Only evaluate for APPROVE transactions
59
+ if (transaction.type !== 'APPROVE')
60
+ return null;
61
+ const approveAmount = transaction.approveAmount;
62
+ if (!approveAmount)
63
+ return null; // No amount to check
64
+ const amount = BigInt(approveAmount);
65
+ const approveAmountPolicy = resolved.find((p) => p.type === 'APPROVE_AMOUNT_LIMIT');
66
+ if (!approveAmountPolicy) {
67
+ // No policy: default block unlimited
68
+ if (amount >= UNLIMITED_THRESHOLD) {
69
+ return {
70
+ allowed: false,
71
+ tier: 'INSTANT',
72
+ reason: 'Unlimited token approval is blocked',
73
+ };
74
+ }
75
+ return null;
76
+ }
77
+ // Parse rules
78
+ const rules = ctx.parseRules(approveAmountPolicy.rules, ApproveAmountLimitRulesSchema, 'APPROVE_AMOUNT_LIMIT');
79
+ // Check unlimited block
80
+ if (rules.blockUnlimited && amount >= UNLIMITED_THRESHOLD) {
81
+ return {
82
+ allowed: false,
83
+ tier: 'INSTANT',
84
+ reason: 'Unlimited token approval is blocked',
85
+ };
86
+ }
87
+ // Check maxAmount cap
88
+ if (rules.maxAmount && amount > BigInt(rules.maxAmount)) {
89
+ return {
90
+ allowed: false,
91
+ tier: 'INSTANT',
92
+ reason: 'Approve amount exceeds limit',
93
+ };
94
+ }
95
+ return null; // Amount within limits, continue evaluation
96
+ }
97
+ /**
98
+ * Evaluate APPROVE_TIER_OVERRIDE policy.
99
+ *
100
+ * Returns PolicyEvaluation if override policy exists, null otherwise.
101
+ */
102
+ export function evaluateApproveTierOverride(ctx, resolved, transaction) {
103
+ // Only evaluate for APPROVE transactions
104
+ if (transaction.type !== 'APPROVE')
105
+ return null;
106
+ const approveTierPolicy = resolved.find((p) => p.type === 'APPROVE_TIER_OVERRIDE');
107
+ if (!approveTierPolicy) {
108
+ // Phase 236: No override -> fall through to SPENDING_LIMIT for token_limits evaluation
109
+ return null;
110
+ }
111
+ // Parse rules
112
+ const rules = ctx.parseRules(approveTierPolicy.rules, ApproveTierOverrideRulesSchema, 'APPROVE_TIER_OVERRIDE');
113
+ return { allowed: true, tier: rules.tier };
114
+ }
115
+ //# sourceMappingURL=approved-spenders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approved-spenders.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/approved-spenders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * evaluators/contract-whitelist.ts - CONTRACT_WHITELIST, METHOD_WHITELIST,
3
+ * VENUE_WHITELIST, PERP_ALLOWED_MARKETS evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext, SettingsContext } from './types.js';
8
+ /**
9
+ * Evaluate CONTRACT_WHITELIST policy.
10
+ *
11
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
12
+ */
13
+ export declare function evaluateContractWhitelist(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
14
+ /**
15
+ * Evaluate METHOD_WHITELIST policy.
16
+ *
17
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
18
+ */
19
+ export declare function evaluateMethodWhitelist(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
20
+ /**
21
+ * Evaluate VENUE_WHITELIST policy (default-deny when enabled).
22
+ */
23
+ export declare function evaluateVenueWhitelist(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
24
+ /**
25
+ * Evaluate PERP_ALLOWED_MARKETS policy.
26
+ */
27
+ export declare function evaluatePerpAllowedMarkets(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
28
+ //# sourceMappingURL=contract-whitelist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-whitelist.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/contract-whitelist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpH;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAiDzB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA4CzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAqCzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAkCzB"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * evaluators/contract-whitelist.ts - CONTRACT_WHITELIST, METHOD_WHITELIST,
3
+ * VENUE_WHITELIST, PERP_ALLOWED_MARKETS evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import { ContractWhitelistRulesSchema, MethodWhitelistRulesSchema, VenueWhitelistRulesSchema, PerpAllowedMarketsRulesSchema, } from '@waiaas/core';
8
+ /**
9
+ * Evaluate CONTRACT_WHITELIST policy.
10
+ *
11
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
12
+ */
13
+ export function evaluateContractWhitelist(ctx, resolved, transaction) {
14
+ // Evaluate for CONTRACT_CALL and NFT_TRANSFER transactions (v31.0)
15
+ if (transaction.type !== 'CONTRACT_CALL' && transaction.type !== 'NFT_TRANSFER')
16
+ return null;
17
+ // Provider-trust: skip CONTRACT_WHITELIST for trusted action providers
18
+ if (transaction.actionProvider && ctx.settingsService) {
19
+ const enabledKey = `actions.${transaction.actionProvider}_enabled`;
20
+ try {
21
+ const enabled = ctx.settingsService.get(enabledKey);
22
+ if (enabled === 'true') {
23
+ return null; // Skip CONTRACT_WHITELIST -- provider is trusted
24
+ }
25
+ }
26
+ catch {
27
+ // Unknown setting key means provider is not registered -- fall through to normal check
28
+ }
29
+ }
30
+ const contractWhitelistPolicy = resolved.find((p) => p.type === 'CONTRACT_WHITELIST');
31
+ // No CONTRACT_WHITELIST policy -> check toggle, then deny (default deny)
32
+ if (!contractWhitelistPolicy) {
33
+ if (ctx.settingsService?.get('policy.default_deny_contracts') === 'false') {
34
+ return null; // default-allow mode: skip contract whitelist check
35
+ }
36
+ return {
37
+ allowed: false,
38
+ tier: 'INSTANT',
39
+ reason: 'Contract calls disabled: no CONTRACT_WHITELIST policy configured',
40
+ };
41
+ }
42
+ // Parse rules.contracts array
43
+ const rules = ctx.parseRules(contractWhitelistPolicy.rules, ContractWhitelistRulesSchema, 'CONTRACT_WHITELIST');
44
+ const contractAddress = transaction.contractAddress ?? transaction.toAddress;
45
+ // Check if contract is in whitelist (case-insensitive comparison for EVM addresses)
46
+ const isWhitelisted = rules.contracts.some((c) => c.address.toLowerCase() === contractAddress.toLowerCase());
47
+ if (!isWhitelisted) {
48
+ return {
49
+ allowed: false,
50
+ tier: 'INSTANT',
51
+ reason: `Contract not whitelisted: ${contractAddress}`,
52
+ };
53
+ }
54
+ return null; // Contract is whitelisted, continue evaluation
55
+ }
56
+ /**
57
+ * Evaluate METHOD_WHITELIST policy.
58
+ *
59
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
60
+ */
61
+ export function evaluateMethodWhitelist(ctx, resolved, transaction) {
62
+ // Only evaluate for CONTRACT_CALL transactions
63
+ if (transaction.type !== 'CONTRACT_CALL')
64
+ return null;
65
+ const methodWhitelistPolicy = resolved.find((p) => p.type === 'METHOD_WHITELIST');
66
+ // No METHOD_WHITELIST policy -> no method restriction (optional policy)
67
+ if (!methodWhitelistPolicy)
68
+ return null;
69
+ // Parse rules.methods array
70
+ const rules = ctx.parseRules(methodWhitelistPolicy.rules, MethodWhitelistRulesSchema, 'METHOD_WHITELIST');
71
+ const contractAddress = transaction.contractAddress ?? transaction.toAddress;
72
+ const selector = transaction.selector;
73
+ // Find matching entry for this contract (case-insensitive)
74
+ const entry = rules.methods.find((m) => m.contractAddress.toLowerCase() === contractAddress.toLowerCase());
75
+ // No entry for this contract -> no method restriction for this specific contract
76
+ if (!entry)
77
+ return null;
78
+ // Check if selector is in the allowed list (case-insensitive)
79
+ if (!selector) {
80
+ return {
81
+ allowed: false,
82
+ tier: 'INSTANT',
83
+ reason: `Method not whitelisted: missing selector on contract ${contractAddress}`,
84
+ };
85
+ }
86
+ const isAllowed = entry.selectors.some((s) => s.toLowerCase() === selector.toLowerCase());
87
+ if (!isAllowed) {
88
+ return {
89
+ allowed: false,
90
+ tier: 'INSTANT',
91
+ reason: `Method not whitelisted: ${selector} on contract ${contractAddress}`,
92
+ };
93
+ }
94
+ return null; // Method is whitelisted, continue evaluation
95
+ }
96
+ /**
97
+ * Evaluate VENUE_WHITELIST policy (default-deny when enabled).
98
+ */
99
+ export function evaluateVenueWhitelist(ctx, resolved, transaction) {
100
+ // No venue (contractCall) -> skip
101
+ if (!transaction.venue)
102
+ return null;
103
+ // Check if venue whitelist is enabled via Admin Settings
104
+ let enabled = false;
105
+ try {
106
+ enabled = ctx.settingsService?.get('venue_whitelist_enabled') === 'true';
107
+ }
108
+ catch {
109
+ // Setting key not registered -- disabled by default
110
+ }
111
+ if (!enabled)
112
+ return null;
113
+ const policy = resolved.find((p) => p.type === 'VENUE_WHITELIST');
114
+ const venueNorm = transaction.venue.toLowerCase();
115
+ if (!policy) {
116
+ // Default-deny: venue present but no whitelist policy
117
+ return {
118
+ allowed: false,
119
+ tier: 'INSTANT',
120
+ reason: `VENUE_NOT_ALLOWED: venue '${transaction.venue}' is not whitelisted (no VENUE_WHITELIST policy)`,
121
+ };
122
+ }
123
+ const rules = ctx.parseRules(policy.rules, VenueWhitelistRulesSchema, 'VENUE_WHITELIST');
124
+ const isAllowed = rules.venues.some((v) => v.id.toLowerCase() === venueNorm);
125
+ if (!isAllowed) {
126
+ return {
127
+ allowed: false,
128
+ tier: 'INSTANT',
129
+ reason: `VENUE_NOT_ALLOWED: venue '${transaction.venue}' is not in the whitelist`,
130
+ };
131
+ }
132
+ return null; // Venue allowed
133
+ }
134
+ /**
135
+ * Evaluate PERP_ALLOWED_MARKETS policy.
136
+ */
137
+ export function evaluatePerpAllowedMarkets(ctx, resolved, transaction) {
138
+ const PERP_ACTIONS = new Set([
139
+ 'open_position', 'close_position', 'modify_position',
140
+ 'add_margin', 'withdraw_margin',
141
+ ]);
142
+ // Suffix matching for prefixed actions (drift_open_position -> open_position)
143
+ const actionSuffix = transaction.actionName
144
+ ? [...PERP_ACTIONS].find((a) => transaction.actionName.endsWith(a))
145
+ : undefined;
146
+ if (!actionSuffix)
147
+ return null; // Not a perp action
148
+ const marketPolicy = resolved.find((p) => p.type === 'PERP_ALLOWED_MARKETS');
149
+ if (!marketPolicy) {
150
+ return {
151
+ allowed: false,
152
+ tier: 'INSTANT',
153
+ reason: 'No PERP_ALLOWED_MARKETS policy configured. Perp markets require explicit whitelist.',
154
+ };
155
+ }
156
+ const rules = ctx.parseRules(marketPolicy.rules, PerpAllowedMarketsRulesSchema, 'PERP_ALLOWED_MARKETS');
157
+ const targetMarket = transaction.contractAddress ?? transaction.toAddress;
158
+ const isAllowed = rules.markets.some((m) => m.market.toLowerCase() === targetMarket.toLowerCase());
159
+ if (!isAllowed) {
160
+ return {
161
+ allowed: false,
162
+ tier: 'INSTANT',
163
+ reason: `Market ${targetMarket} not in perp allowed markets whitelist`,
164
+ };
165
+ }
166
+ return null;
167
+ }
168
+ //# sourceMappingURL=contract-whitelist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-whitelist.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/contract-whitelist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * evaluators/helpers.ts - Shared helper functions for policy evaluators.
3
+ */
4
+ import type { PolicyTier } from '@waiaas/core';
5
+ /**
6
+ * Return the more conservative (higher) tier of two.
7
+ */
8
+ export declare function maxTier(a: PolicyTier, b: PolicyTier): PolicyTier;
9
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAIhE"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * evaluators/helpers.ts - Shared helper functions for policy evaluators.
3
+ */
4
+ const TIER_ORDER = ['INSTANT', 'NOTIFY', 'DELAY', 'APPROVAL'];
5
+ /**
6
+ * Return the more conservative (higher) tier of two.
7
+ */
8
+ export function maxTier(a, b) {
9
+ const aIdx = TIER_ORDER.indexOf(a);
10
+ const bIdx = TIER_ORDER.indexOf(b);
11
+ return TIER_ORDER[Math.max(aIdx, bIdx)];
12
+ }
13
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,GAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,CAAa,EAAE,CAAa;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * evaluators/lending-asset-whitelist.ts - LENDING_ASSET_WHITELIST evaluation.
3
+ *
4
+ * Extracted from DatabasePolicyEngine private methods.
5
+ */
6
+ import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext } from './types.js';
7
+ /**
8
+ * Evaluate LENDING_ASSET_WHITELIST policy.
9
+ *
10
+ * Logic:
11
+ * - Only applies to lending actions (supply/borrow/repay/withdraw)
12
+ * - If no LENDING_ASSET_WHITELIST policy exists: deny (default-deny per CLAUDE.md)
13
+ * - If policy exists: check if target contract address is in rules.assets[].address
14
+ *
15
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
16
+ */
17
+ export declare function evaluateLendingAssetWhitelist(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
18
+ //# sourceMappingURL=lending-asset-whitelist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lending-asset-whitelist.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-asset-whitelist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnG;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * evaluators/lending-asset-whitelist.ts - LENDING_ASSET_WHITELIST evaluation.
3
+ *
4
+ * Extracted from DatabasePolicyEngine private methods.
5
+ */
6
+ import { LendingAssetWhitelistRulesSchema } from '@waiaas/core';
7
+ /**
8
+ * Evaluate LENDING_ASSET_WHITELIST policy.
9
+ *
10
+ * Logic:
11
+ * - Only applies to lending actions (supply/borrow/repay/withdraw)
12
+ * - If no LENDING_ASSET_WHITELIST policy exists: deny (default-deny per CLAUDE.md)
13
+ * - If policy exists: check if target contract address is in rules.assets[].address
14
+ *
15
+ * Returns PolicyEvaluation if denied, null if allowed (or not applicable).
16
+ */
17
+ export function evaluateLendingAssetWhitelist(ctx, resolved, transaction) {
18
+ // Only applies to lending actions
19
+ const LENDING_ACTIONS = new Set(['supply', 'borrow', 'repay', 'withdraw']);
20
+ if (!transaction.actionName || !LENDING_ACTIONS.has(transaction.actionName)) {
21
+ return null;
22
+ }
23
+ const assetPolicy = resolved.find((p) => p.type === 'LENDING_ASSET_WHITELIST');
24
+ if (!assetPolicy) {
25
+ // Default-deny (CLAUDE.md compliance): no whitelist -> deny lending
26
+ return {
27
+ allowed: false,
28
+ tier: 'INSTANT',
29
+ reason: 'No LENDING_ASSET_WHITELIST policy configured. Lending assets require explicit whitelist.',
30
+ };
31
+ }
32
+ const rules = ctx.parseRules(assetPolicy.rules, LendingAssetWhitelistRulesSchema, 'LENDING_ASSET_WHITELIST');
33
+ const targetAddress = transaction.contractAddress ?? transaction.toAddress;
34
+ const isWhitelisted = rules.assets.some((a) => a.address.toLowerCase() === targetAddress.toLowerCase());
35
+ if (!isWhitelisted) {
36
+ return {
37
+ allowed: false,
38
+ tier: 'INSTANT',
39
+ reason: `Asset ${targetAddress} not in lending asset whitelist`,
40
+ };
41
+ }
42
+ return null; // pass through
43
+ }
44
+ //# sourceMappingURL=lending-asset-whitelist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lending-asset-whitelist.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-asset-whitelist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAGhE;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAC3C,GAAsB,EACtB,QAAqB,EACrB,WAA6B;IAE7B,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAAC,CAAC;IAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,oEAAoE;QACpE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,0FAA0F;SACnG,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,gCAAgC,EAAE,yBAAyB,CAAC,CAAC;IAC7G,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,IAAI,WAAW,CAAC,SAAS,CAAC;IAC3E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAC/D,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS,aAAa,iCAAiC;SAChE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,eAAe;AAC9B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * evaluators/lending-ltv-limit.ts - LENDING_LTV_LIMIT, PERP_MAX_LEVERAGE,
3
+ * PERP_MAX_POSITION_USD evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext } from './types.js';
8
+ import type { Database as SQLiteDatabase } from 'better-sqlite3';
9
+ /**
10
+ * Evaluate LENDING_LTV_LIMIT policy for borrow actions.
11
+ *
12
+ * @param usdAmount - USD value of the new borrow (from pipeline IPriceOracle, LEND-09)
13
+ * Returns PolicyEvaluation if denied/escalated, null if allowed (or not applicable).
14
+ */
15
+ export declare function evaluateLendingLtvLimit(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam, walletId: string, sqlite: SQLiteDatabase | null, usdAmount?: number): PolicyEvaluation | null;
16
+ /**
17
+ * Evaluate PERP_MAX_LEVERAGE policy.
18
+ */
19
+ export declare function evaluatePerpMaxLeverage(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
20
+ /**
21
+ * Evaluate PERP_MAX_POSITION_USD policy.
22
+ */
23
+ export declare function evaluatePerpMaxPositionUsd(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
24
+ //# sourceMappingURL=lending-ltv-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lending-ltv-limit.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-ltv-limit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAc,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/G,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,GAAG,IAAI,CAoDzB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * evaluators/lending-ltv-limit.ts - LENDING_LTV_LIMIT, PERP_MAX_LEVERAGE,
3
+ * PERP_MAX_POSITION_USD evaluation.
4
+ *
5
+ * Extracted from DatabasePolicyEngine private methods.
6
+ */
7
+ import { LendingLtvLimitRulesSchema, PerpMaxLeverageRulesSchema, PerpMaxPositionUsdRulesSchema, } from '@waiaas/core';
8
+ /**
9
+ * Evaluate LENDING_LTV_LIMIT policy for borrow actions.
10
+ *
11
+ * @param usdAmount - USD value of the new borrow (from pipeline IPriceOracle, LEND-09)
12
+ * Returns PolicyEvaluation if denied/escalated, null if allowed (or not applicable).
13
+ */
14
+ export function evaluateLendingLtvLimit(ctx, resolved, transaction, walletId, sqlite, usdAmount) {
15
+ // Only applies to borrow actions (matches 'borrow', 'aave_borrow', 'kamino_borrow', etc.)
16
+ if (!transaction.actionName?.endsWith('borrow'))
17
+ return null;
18
+ const ltvPolicy = resolved.find((p) => p.type === 'LENDING_LTV_LIMIT');
19
+ if (!ltvPolicy)
20
+ return null; // No LTV policy -> pass through
21
+ const rules = ctx.parseRules(ltvPolicy.rules, LendingLtvLimitRulesSchema, 'LENDING_LTV_LIMIT');
22
+ // Read cached position data from defi_positions
23
+ if (!sqlite)
24
+ return null;
25
+ const positions = sqlite.prepare("SELECT amount_usd, metadata, status FROM defi_positions WHERE wallet_id = ? AND category = 'LENDING' AND status = 'ACTIVE'").all(walletId);
26
+ // Aggregate collateral and debt from positions
27
+ let totalCollateralUsd = 0;
28
+ let totalDebtUsd = 0;
29
+ for (const pos of positions) {
30
+ if (!pos.metadata)
31
+ continue;
32
+ try {
33
+ const meta = JSON.parse(pos.metadata);
34
+ const posType = meta.positionType;
35
+ const usd = pos.amount_usd ?? 0;
36
+ if (posType === 'SUPPLY')
37
+ totalCollateralUsd += usd;
38
+ else if (posType === 'BORROW')
39
+ totalDebtUsd += usd;
40
+ }
41
+ catch { /* ignore parse errors */ }
42
+ }
43
+ // Calculate projected LTV including new borrow amount (LEND-09)
44
+ const newBorrowUsd = usdAmount ?? 0;
45
+ const projectedLtv = totalCollateralUsd > 0
46
+ ? (totalDebtUsd + newBorrowUsd) / totalCollateralUsd
47
+ : (totalDebtUsd > 0 || newBorrowUsd > 0 ? Infinity : 0);
48
+ if (projectedLtv > rules.maxLtv) {
49
+ return {
50
+ allowed: false,
51
+ tier: 'INSTANT',
52
+ reason: `Borrow would exceed max LTV (projected: ${(projectedLtv * 100).toFixed(1)}%, limit: ${(rules.maxLtv * 100).toFixed(1)}%)`,
53
+ };
54
+ }
55
+ if (projectedLtv > rules.warningLtv) {
56
+ return {
57
+ allowed: true,
58
+ tier: 'DELAY',
59
+ reason: `LTV approaching limit (projected: ${(projectedLtv * 100).toFixed(1)}%)`,
60
+ };
61
+ }
62
+ return null; // pass through
63
+ }
64
+ /**
65
+ * Evaluate PERP_MAX_LEVERAGE policy.
66
+ */
67
+ export function evaluatePerpMaxLeverage(ctx, resolved, transaction) {
68
+ if (!transaction.actionName)
69
+ return null;
70
+ const isLeverageAction = transaction.actionName.endsWith('open_position') ||
71
+ transaction.actionName.endsWith('modify_position');
72
+ if (!isLeverageAction)
73
+ return null;
74
+ const leveragePolicy = resolved.find((p) => p.type === 'PERP_MAX_LEVERAGE');
75
+ if (!leveragePolicy)
76
+ return null; // No leverage policy -> pass through
77
+ const rules = ctx.parseRules(leveragePolicy.rules, PerpMaxLeverageRulesSchema, 'PERP_MAX_LEVERAGE');
78
+ const leverage = transaction.perpLeverage;
79
+ if (typeof leverage !== 'number')
80
+ return null; // No leverage info -> pass through
81
+ if (leverage > rules.maxLeverage) {
82
+ return {
83
+ allowed: false,
84
+ tier: 'INSTANT',
85
+ reason: `Leverage ${leverage}x exceeds max allowed (${rules.maxLeverage}x)`,
86
+ };
87
+ }
88
+ if (rules.warningLeverage && leverage > rules.warningLeverage) {
89
+ return {
90
+ allowed: true,
91
+ tier: 'DELAY',
92
+ reason: `Leverage ${leverage}x approaching limit (warning: ${rules.warningLeverage}x, max: ${rules.maxLeverage}x)`,
93
+ };
94
+ }
95
+ return null;
96
+ }
97
+ /**
98
+ * Evaluate PERP_MAX_POSITION_USD policy.
99
+ */
100
+ export function evaluatePerpMaxPositionUsd(ctx, resolved, transaction) {
101
+ if (!transaction.actionName)
102
+ return null;
103
+ const isSizeAction = transaction.actionName.endsWith('open_position') ||
104
+ transaction.actionName.endsWith('modify_position');
105
+ if (!isSizeAction)
106
+ return null;
107
+ const sizePolicy = resolved.find((p) => p.type === 'PERP_MAX_POSITION_USD');
108
+ if (!sizePolicy)
109
+ return null; // No size policy -> pass through
110
+ const rules = ctx.parseRules(sizePolicy.rules, PerpMaxPositionUsdRulesSchema, 'PERP_MAX_POSITION_USD');
111
+ const sizeUsd = transaction.perpSizeUsd;
112
+ if (typeof sizeUsd !== 'number')
113
+ return null; // No size info -> pass through
114
+ if (sizeUsd > rules.maxPositionUsd) {
115
+ return {
116
+ allowed: false,
117
+ tier: 'INSTANT',
118
+ reason: `Position size $${sizeUsd.toLocaleString()} exceeds max allowed ($${rules.maxPositionUsd.toLocaleString()})`,
119
+ };
120
+ }
121
+ if (rules.warningPositionUsd && sizeUsd > rules.warningPositionUsd) {
122
+ return {
123
+ allowed: true,
124
+ tier: 'DELAY',
125
+ reason: `Position size $${sizeUsd.toLocaleString()} approaching limit (warning: $${rules.warningPositionUsd.toLocaleString()}, max: $${rules.maxPositionUsd.toLocaleString()})`,
126
+ };
127
+ }
128
+ return null;
129
+ }
130
+ //# sourceMappingURL=lending-ltv-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lending-ltv-limit.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-ltv-limit.ts"],"names":[],"mappings":"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"}