@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
@@ -35,260 +35,294 @@ export const SETTING_CATEGORIES = [
35
35
  'rpc_proxy',
36
36
  ];
37
37
  // ---------------------------------------------------------------------------
38
+ // Label derivation helper
39
+ // ---------------------------------------------------------------------------
40
+ /**
41
+ * Derive a human-readable label from a setting key's last segment.
42
+ * e.g. 'notifications.telegram_bot_token' -> 'Telegram Bot Token'
43
+ */
44
+ function deriveLabel(key) {
45
+ const lastSegment = key.includes('.') ? key.split('.').pop() : key;
46
+ return lastSegment
47
+ .replace(/_/g, ' ')
48
+ .replace(/\b\w/g, (c) => c.toUpperCase())
49
+ .replace(/\bUrl\b/g, 'URL')
50
+ .replace(/\bRpm\b/g, 'RPM')
51
+ .replace(/\bRpc\b/g, 'RPC')
52
+ .replace(/\bApi\b/g, 'API')
53
+ .replace(/\bSec\b/g, 'Sec')
54
+ .replace(/\bMs\b/g, 'ms')
55
+ .replace(/\bPct\b/g, '%')
56
+ .replace(/\bBps\b/g, 'BPS')
57
+ .replace(/\bUsd\b/g, 'USD')
58
+ .replace(/\bSol\b/g, 'SOL')
59
+ .replace(/\bEth\b/g, 'ETH')
60
+ .replace(/\bEvm\b/g, 'EVM')
61
+ .replace(/\bWss\b/g, 'WSS')
62
+ .replace(/\bIp\b/g, 'IP')
63
+ .replace(/\bSdk\b/g, 'SDK')
64
+ .replace(/\bTtl\b/g, 'TTL')
65
+ .replace(/\bLtv\b/g, 'LTV')
66
+ .replace(/\bHf\b/g, 'HF');
67
+ }
68
+ // ---------------------------------------------------------------------------
38
69
  // Setting Definitions
39
70
  // ---------------------------------------------------------------------------
40
71
  export const SETTING_DEFINITIONS = [
41
72
  // --- notifications category ---
42
- { key: 'notifications.enabled', category: 'notifications', configPath: 'notifications.enabled', defaultValue: 'false', isCredential: false },
43
- { key: 'notifications.telegram_bot_token', category: 'notifications', configPath: 'notifications.telegram_bot_token', defaultValue: '', isCredential: true },
44
- { key: 'notifications.telegram_chat_id', category: 'notifications', configPath: 'notifications.telegram_chat_id', defaultValue: '', isCredential: false },
45
- { key: 'notifications.discord_webhook_url', category: 'notifications', configPath: 'notifications.discord_webhook_url', defaultValue: '', isCredential: true },
46
- { key: 'notifications.ntfy_server', category: 'notifications', configPath: 'notifications.ntfy_server', defaultValue: 'https://ntfy.sh', isCredential: false },
47
- // notifications.ntfy_topic removed in v29.10 -- per-wallet topics are now stored in wallet_apps table
48
- { key: 'notifications.slack_webhook_url', category: 'notifications', configPath: 'notifications.slack_webhook_url', defaultValue: '', isCredential: true },
49
- { key: 'notifications.locale', category: 'notifications', configPath: 'notifications.locale', defaultValue: 'en', isCredential: false },
50
- { key: 'notifications.rate_limit_rpm', category: 'notifications', configPath: 'notifications.rate_limit_rpm', defaultValue: '20', isCredential: false },
51
- { key: 'notifications.notify_categories', category: 'notifications', configPath: 'notifications.notify_categories', defaultValue: '[]', isCredential: false },
52
- { key: 'notifications.notify_events', category: 'notifications', configPath: 'notifications.notify_events', defaultValue: '[]', isCredential: false },
73
+ { key: 'notifications.enabled', category: 'notifications', configPath: 'notifications.enabled', defaultValue: 'false', isCredential: false, label: 'Enabled', description: 'Enable or disable the notification system' },
74
+ { key: 'notifications.telegram_bot_token', category: 'notifications', configPath: 'notifications.telegram_bot_token', defaultValue: '', isCredential: true, label: 'Telegram Bot Token', description: 'Telegram bot API token for sending notifications' },
75
+ { key: 'notifications.telegram_chat_id', category: 'notifications', configPath: 'notifications.telegram_chat_id', defaultValue: '', isCredential: false, label: 'Telegram Chat ID', description: 'Telegram chat/channel ID for notification delivery' },
76
+ { key: 'notifications.discord_webhook_url', category: 'notifications', configPath: 'notifications.discord_webhook_url', defaultValue: '', isCredential: true, label: 'Discord Webhook URL', description: 'Discord webhook URL for sending notifications' },
77
+ { key: 'notifications.slack_webhook_url', category: 'notifications', configPath: 'notifications.slack_webhook_url', defaultValue: '', isCredential: true, label: 'Slack Webhook URL', description: 'Slack webhook URL for sending notifications' },
78
+ { key: 'notifications.locale', category: 'notifications', configPath: 'notifications.locale', defaultValue: 'en', isCredential: false, label: 'Locale', description: 'Notification message language (en, ko, etc.)' },
79
+ { key: 'notifications.rate_limit_rpm', category: 'notifications', configPath: 'notifications.rate_limit_rpm', defaultValue: '20', isCredential: false, label: 'Rate Limit RPM', description: 'Maximum notification messages per minute' },
80
+ { key: 'notifications.notify_categories', category: 'notifications', configPath: 'notifications.notify_categories', defaultValue: '[]', isCredential: false, label: 'Notify Categories', description: 'JSON array of notification category filters' },
81
+ { key: 'notifications.notify_events', category: 'notifications', configPath: 'notifications.notify_events', defaultValue: '[]', isCredential: false, label: 'Notify Events', description: 'JSON array of specific notification event filters' },
53
82
  // --- rpc category (Solana 3 + EVM 12) ---
54
- { key: 'rpc.solana_mainnet', category: 'rpc', configPath: 'rpc.solana_mainnet', defaultValue: 'https://api.mainnet-beta.solana.com', isCredential: false },
55
- { key: 'rpc.solana_devnet', category: 'rpc', configPath: 'rpc.solana_devnet', defaultValue: 'https://api.devnet.solana.com', isCredential: false },
56
- { key: 'rpc.solana_testnet', category: 'rpc', configPath: 'rpc.solana_testnet', defaultValue: 'https://api.testnet.solana.com', isCredential: false },
57
- { key: 'rpc.evm_ethereum_mainnet', category: 'rpc', configPath: 'rpc.evm_ethereum_mainnet', defaultValue: 'https://eth.drpc.org', isCredential: false },
58
- { key: 'rpc.evm_ethereum_sepolia', category: 'rpc', configPath: 'rpc.evm_ethereum_sepolia', defaultValue: 'https://sepolia.drpc.org', isCredential: false },
59
- { key: 'rpc.evm_polygon_mainnet', category: 'rpc', configPath: 'rpc.evm_polygon_mainnet', defaultValue: 'https://polygon.drpc.org', isCredential: false },
60
- { key: 'rpc.evm_polygon_amoy', category: 'rpc', configPath: 'rpc.evm_polygon_amoy', defaultValue: 'https://polygon-amoy.drpc.org', isCredential: false },
61
- { key: 'rpc.evm_arbitrum_mainnet', category: 'rpc', configPath: 'rpc.evm_arbitrum_mainnet', defaultValue: 'https://arbitrum.drpc.org', isCredential: false },
62
- { key: 'rpc.evm_arbitrum_sepolia', category: 'rpc', configPath: 'rpc.evm_arbitrum_sepolia', defaultValue: 'https://arbitrum-sepolia.drpc.org', isCredential: false },
63
- { key: 'rpc.evm_optimism_mainnet', category: 'rpc', configPath: 'rpc.evm_optimism_mainnet', defaultValue: 'https://optimism.drpc.org', isCredential: false },
64
- { key: 'rpc.evm_optimism_sepolia', category: 'rpc', configPath: 'rpc.evm_optimism_sepolia', defaultValue: 'https://optimism-sepolia.drpc.org', isCredential: false },
65
- { key: 'rpc.evm_base_mainnet', category: 'rpc', configPath: 'rpc.evm_base_mainnet', defaultValue: 'https://base.drpc.org', isCredential: false },
66
- { key: 'rpc.evm_base_sepolia', category: 'rpc', configPath: 'rpc.evm_base_sepolia', defaultValue: 'https://base-sepolia.drpc.org', isCredential: false },
67
- { key: 'rpc.evm_hyperevm_mainnet', category: 'rpc', configPath: 'rpc.evm_hyperevm_mainnet', defaultValue: 'https://rpc.hyperliquid.xyz/evm', isCredential: false },
68
- { key: 'rpc.evm_hyperevm_testnet', category: 'rpc', configPath: 'rpc.evm_hyperevm_testnet', defaultValue: 'https://rpc.hyperliquid-testnet.xyz/evm', isCredential: false },
83
+ { key: 'rpc.solana_mainnet', category: 'rpc', configPath: 'rpc.solana_mainnet', defaultValue: 'https://api.mainnet-beta.solana.com', isCredential: false, label: 'Solana Mainnet', description: 'Solana mainnet RPC endpoint URL' },
84
+ { key: 'rpc.solana_devnet', category: 'rpc', configPath: 'rpc.solana_devnet', defaultValue: 'https://api.devnet.solana.com', isCredential: false, label: 'Solana Devnet', description: 'Solana devnet RPC endpoint URL' },
85
+ { key: 'rpc.solana_testnet', category: 'rpc', configPath: 'rpc.solana_testnet', defaultValue: 'https://api.testnet.solana.com', isCredential: false, label: 'Solana Testnet', description: 'Solana testnet RPC endpoint URL' },
86
+ { key: 'rpc.evm_ethereum_mainnet', category: 'rpc', configPath: 'rpc.evm_ethereum_mainnet', defaultValue: 'https://eth.drpc.org', isCredential: false, label: 'Ethereum Mainnet', description: 'Ethereum mainnet RPC endpoint URL' },
87
+ { key: 'rpc.evm_ethereum_sepolia', category: 'rpc', configPath: 'rpc.evm_ethereum_sepolia', defaultValue: 'https://sepolia.drpc.org', isCredential: false, label: 'Ethereum Sepolia', description: 'Ethereum Sepolia testnet RPC endpoint URL' },
88
+ { key: 'rpc.evm_polygon_mainnet', category: 'rpc', configPath: 'rpc.evm_polygon_mainnet', defaultValue: 'https://polygon.drpc.org', isCredential: false, label: 'Polygon Mainnet', description: 'Polygon mainnet RPC endpoint URL' },
89
+ { key: 'rpc.evm_polygon_amoy', category: 'rpc', configPath: 'rpc.evm_polygon_amoy', defaultValue: 'https://polygon-amoy.drpc.org', isCredential: false, label: 'Polygon Amoy', description: 'Polygon Amoy testnet RPC endpoint URL' },
90
+ { key: 'rpc.evm_arbitrum_mainnet', category: 'rpc', configPath: 'rpc.evm_arbitrum_mainnet', defaultValue: 'https://arbitrum.drpc.org', isCredential: false, label: 'Arbitrum Mainnet', description: 'Arbitrum mainnet RPC endpoint URL' },
91
+ { key: 'rpc.evm_arbitrum_sepolia', category: 'rpc', configPath: 'rpc.evm_arbitrum_sepolia', defaultValue: 'https://arbitrum-sepolia.drpc.org', isCredential: false, label: 'Arbitrum Sepolia', description: 'Arbitrum Sepolia testnet RPC endpoint URL' },
92
+ { key: 'rpc.evm_optimism_mainnet', category: 'rpc', configPath: 'rpc.evm_optimism_mainnet', defaultValue: 'https://optimism.drpc.org', isCredential: false, label: 'Optimism Mainnet', description: 'Optimism mainnet RPC endpoint URL' },
93
+ { key: 'rpc.evm_optimism_sepolia', category: 'rpc', configPath: 'rpc.evm_optimism_sepolia', defaultValue: 'https://optimism-sepolia.drpc.org', isCredential: false, label: 'Optimism Sepolia', description: 'Optimism Sepolia testnet RPC endpoint URL' },
94
+ { key: 'rpc.evm_base_mainnet', category: 'rpc', configPath: 'rpc.evm_base_mainnet', defaultValue: 'https://base.drpc.org', isCredential: false, label: 'Base Mainnet', description: 'Base mainnet RPC endpoint URL' },
95
+ { key: 'rpc.evm_base_sepolia', category: 'rpc', configPath: 'rpc.evm_base_sepolia', defaultValue: 'https://base-sepolia.drpc.org', isCredential: false, label: 'Base Sepolia', description: 'Base Sepolia testnet RPC endpoint URL' },
96
+ { key: 'rpc.evm_hyperevm_mainnet', category: 'rpc', configPath: 'rpc.evm_hyperevm_mainnet', defaultValue: 'https://rpc.hyperliquid.xyz/evm', isCredential: false, label: 'HyperEVM Mainnet', description: 'HyperEVM mainnet RPC endpoint URL' },
97
+ { key: 'rpc.evm_hyperevm_testnet', category: 'rpc', configPath: 'rpc.evm_hyperevm_testnet', defaultValue: 'https://rpc.hyperliquid-testnet.xyz/evm', isCredential: false, label: 'HyperEVM Testnet', description: 'HyperEVM testnet RPC endpoint URL' },
69
98
  // --- security category ---
70
- { key: 'security.max_sessions_per_wallet', category: 'security', configPath: 'security.max_sessions_per_wallet', defaultValue: '5', isCredential: false },
71
- { key: 'security.max_pending_tx', category: 'security', configPath: 'security.max_pending_tx', defaultValue: '10', isCredential: false },
72
- { key: 'security.rate_limit_global_ip_rpm', category: 'security', configPath: 'security.rate_limit_global_ip_rpm', defaultValue: '1000', isCredential: false },
73
- { key: 'security.rate_limit_session_rpm', category: 'security', configPath: 'security.rate_limit_session_rpm', defaultValue: '300', isCredential: false },
74
- { key: 'security.rate_limit_tx_rpm', category: 'security', configPath: 'security.rate_limit_tx_rpm', defaultValue: '10', isCredential: false },
75
- { key: 'security.policy_defaults_delay_seconds', category: 'security', configPath: 'security.policy_defaults_delay_seconds', defaultValue: '300', isCredential: false },
76
- { key: 'security.policy_defaults_approval_timeout', category: 'security', configPath: 'security.policy_defaults_approval_timeout', defaultValue: '3600', isCredential: false },
99
+ { key: 'security.max_sessions_per_wallet', category: 'security', configPath: 'security.max_sessions_per_wallet', defaultValue: '5', isCredential: false, label: 'Max Sessions Per Wallet', description: 'Maximum concurrent sessions allowed per wallet' },
100
+ { key: 'security.max_pending_tx', category: 'security', configPath: 'security.max_pending_tx', defaultValue: '10', isCredential: false, label: 'Max Pending Tx', description: 'Maximum pending transactions allowed per wallet' },
101
+ { key: 'security.rate_limit_global_ip_rpm', category: 'security', configPath: 'security.rate_limit_global_ip_rpm', defaultValue: '1000', isCredential: false, label: 'Rate Limit Global IP RPM', description: 'Rate limit: maximum requests per minute' },
102
+ { key: 'security.rate_limit_session_rpm', category: 'security', configPath: 'security.rate_limit_session_rpm', defaultValue: '300', isCredential: false, label: 'Rate Limit Session RPM', description: 'Rate limit: maximum requests per minute' },
103
+ { key: 'security.rate_limit_tx_rpm', category: 'security', configPath: 'security.rate_limit_tx_rpm', defaultValue: '10', isCredential: false, label: 'Rate Limit Tx RPM', description: 'Rate limit: maximum requests per minute' },
104
+ { key: 'security.cors_origins', category: 'security', configPath: 'security.cors_origins', defaultValue: '["http://localhost:3100","http://127.0.0.1:3100"]', isCredential: false, label: 'CORS Origins', description: 'Allowed CORS origins (JSON array of URLs)' },
105
+ { key: 'security.policy_defaults_delay_seconds', category: 'security', configPath: 'security.policy_defaults_delay_seconds', defaultValue: '300', isCredential: false, label: 'Policy Defaults Delay Seconds', description: 'Default delay duration for DELAY tier transactions' },
106
+ { key: 'security.policy_defaults_approval_timeout', category: 'security', configPath: 'security.policy_defaults_approval_timeout', defaultValue: '3600', isCredential: false, label: 'Policy Defaults Approval Timeout', description: 'Timeout duration in seconds' },
77
107
  // --- policy default deny toggles (Phase 116) ---
78
- { key: 'policy.default_deny_tokens', category: 'policy', configPath: 'security.default_deny_tokens', defaultValue: 'true', isCredential: false },
79
- { key: 'policy.default_deny_contracts', category: 'policy', configPath: 'security.default_deny_contracts', defaultValue: 'true', isCredential: false },
80
- { key: 'policy.default_deny_spenders', category: 'policy', configPath: 'security.default_deny_spenders', defaultValue: 'true', isCredential: false },
81
- { key: 'policy.default_deny_x402_domains', category: 'policy', configPath: 'security.default_deny_x402_domains', defaultValue: 'true', isCredential: false },
82
- { key: 'policy.default_deny_erc8128_domains', category: 'policy', configPath: 'security.default_deny_erc8128_domains', defaultValue: 'true', isCredential: false },
108
+ { key: 'policy.default_deny_tokens', category: 'policy', configPath: 'security.default_deny_tokens', defaultValue: 'true', isCredential: false, label: 'Default Deny Tokens', description: 'Deny all tokens not in ALLOWED_TOKENS policy' },
109
+ { key: 'policy.default_deny_contracts', category: 'policy', configPath: 'security.default_deny_contracts', defaultValue: 'true', isCredential: false, label: 'Default Deny Contracts', description: 'Deny all contracts not in CONTRACT_WHITELIST policy' },
110
+ { key: 'policy.default_deny_spenders', category: 'policy', configPath: 'security.default_deny_spenders', defaultValue: 'true', isCredential: false, label: 'Default Deny Spenders', description: 'Deny all spenders not in APPROVED_SPENDERS policy' },
111
+ { key: 'policy.default_deny_x402_domains', category: 'policy', configPath: 'security.default_deny_x402_domains', defaultValue: 'true', isCredential: false, label: 'Default Deny X402 Domains', description: 'Deny all x402 domains not in X402_ALLOWED_DOMAINS policy' },
112
+ { key: 'policy.default_deny_erc8128_domains', category: 'policy', configPath: 'security.default_deny_erc8128_domains', defaultValue: 'true', isCredential: false, label: 'Default Deny Erc8128 Domains', description: 'Deny all ERC-8128 domains not in allowed list' },
83
113
  // --- Phase 389: venue whitelist toggle ---
84
- { key: 'venue_whitelist_enabled', category: 'policy', configPath: 'security.venue_whitelist_enabled', defaultValue: 'false', isCredential: false },
114
+ { key: 'venue_whitelist_enabled', category: 'policy', configPath: 'security.venue_whitelist_enabled', defaultValue: 'false', isCredential: false, label: 'Venue Whitelist Enabled', description: 'Enable or disable this feature' },
85
115
  // --- daemon category ---
86
- { key: 'daemon.log_level', category: 'daemon', configPath: 'daemon.log_level', defaultValue: 'info', isCredential: false },
116
+ { key: 'daemon.log_level', category: 'daemon', configPath: 'daemon.log_level', defaultValue: 'info', isCredential: false, label: 'Log Level', description: 'Daemon log verbosity level (debug, info, warn, error)' },
87
117
  // --- walletconnect category ---
88
- { key: 'walletconnect.project_id', category: 'walletconnect', configPath: 'walletconnect.project_id', defaultValue: '', isCredential: false },
89
- { key: 'walletconnect.relay_url', category: 'walletconnect', configPath: 'walletconnect.relay_url', defaultValue: 'wss://relay.walletconnect.com', isCredential: false },
118
+ { key: 'walletconnect.project_id', category: 'walletconnect', configPath: 'walletconnect.project_id', defaultValue: '', isCredential: false, label: 'Project Id', description: 'WalletConnect Cloud project ID' },
119
+ { key: 'walletconnect.relay_url', category: 'walletconnect', configPath: 'walletconnect.relay_url', defaultValue: 'wss://relay.walletconnect.com', isCredential: false, label: 'Relay URL', description: 'WalletConnect relay server WebSocket URL' },
90
120
  // --- oracle category ---
91
- { key: 'oracle.coingecko_api_key', category: 'oracle', configPath: 'oracle.coingecko_api_key', defaultValue: '', isCredential: true },
92
- { key: 'oracle.cross_validation_threshold', category: 'oracle', configPath: 'oracle.cross_validation_threshold', defaultValue: '5', isCredential: false },
121
+ // DB-only: no config.toml [oracle] section. Managed exclusively via Admin Settings.
122
+ { key: 'oracle.coingecko_api_key', category: 'oracle', configPath: 'oracle.coingecko_api_key', defaultValue: '', isCredential: true, label: 'Coingecko API Key', description: 'API key for external service authentication' },
123
+ { key: 'oracle.cross_validation_threshold', category: 'oracle', configPath: 'oracle.cross_validation_threshold', defaultValue: '5', isCredential: false, label: 'Cross Validation Threshold', description: 'Threshold value for triggering action' },
93
124
  // --- display category ---
94
- { key: 'display.currency', category: 'display', configPath: 'display.currency', defaultValue: 'USD', isCredential: false },
125
+ { key: 'display.currency', category: 'display', configPath: 'display.currency', defaultValue: 'USD', isCredential: false, label: 'Currency', description: 'Display currency for USD value conversions' },
95
126
  // --- autostop category (AUTO-05 runtime-overridable) ---
96
- { key: 'autostop.consecutive_failures_threshold', category: 'autostop', configPath: 'security.autostop_consecutive_failures_threshold', defaultValue: '5', isCredential: false },
97
- { key: 'autostop.unusual_activity_threshold', category: 'autostop', configPath: 'security.autostop_unusual_activity_threshold', defaultValue: '20', isCredential: false },
98
- { key: 'autostop.unusual_activity_window_sec', category: 'autostop', configPath: 'security.autostop_unusual_activity_window_sec', defaultValue: '300', isCredential: false },
99
- { key: 'autostop.idle_timeout_sec', category: 'autostop', configPath: 'security.autostop_idle_timeout_sec', defaultValue: '3600', isCredential: false },
100
- { key: 'autostop.idle_check_interval_sec', category: 'autostop', configPath: 'security.autostop_idle_check_interval_sec', defaultValue: '60', isCredential: false },
101
- { key: 'autostop.enabled', category: 'autostop', configPath: 'security.autostop_enabled', defaultValue: 'true', isCredential: false },
127
+ { key: 'autostop.consecutive_failures_threshold', category: 'autostop', configPath: 'security.autostop_consecutive_failures_threshold', defaultValue: '5', isCredential: false, label: 'Consecutive Failures Threshold', description: 'Threshold value for triggering action' },
128
+ { key: 'autostop.unusual_activity_threshold', category: 'autostop', configPath: 'security.autostop_unusual_activity_threshold', defaultValue: '20', isCredential: false, label: 'Unusual Activity Threshold', description: 'Threshold value for triggering action' },
129
+ { key: 'autostop.unusual_activity_window_sec', category: 'autostop', configPath: 'security.autostop_unusual_activity_window_sec', defaultValue: '300', isCredential: false, label: 'Unusual Activity Window Sec', description: 'Time window for unusual activity detection' },
130
+ { key: 'autostop.idle_timeout_sec', category: 'autostop', configPath: 'security.autostop_idle_timeout_sec', defaultValue: '3600', isCredential: false, label: 'Idle Timeout Sec', description: 'Timeout duration in seconds' },
131
+ { key: 'autostop.idle_check_interval_sec', category: 'autostop', configPath: 'security.autostop_idle_check_interval_sec', defaultValue: '60', isCredential: false, label: 'Idle Check Interval Sec', description: 'Polling or check interval duration' },
132
+ { key: 'autostop.enabled', category: 'autostop', configPath: 'security.autostop_enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
102
133
  // --- autostop per-rule enable (PLUG-04) ---
103
- { key: 'autostop.rule.consecutive_failures.enabled', category: 'autostop', configPath: 'security.autostop_rule_consecutive_failures_enabled', defaultValue: 'true', isCredential: false },
104
- { key: 'autostop.rule.unusual_activity.enabled', category: 'autostop', configPath: 'security.autostop_rule_unusual_activity_enabled', defaultValue: 'true', isCredential: false },
105
- { key: 'autostop.rule.idle_timeout.enabled', category: 'autostop', configPath: 'security.autostop_rule_idle_timeout_enabled', defaultValue: 'true', isCredential: false },
134
+ { key: 'autostop.rule.consecutive_failures.enabled', category: 'autostop', configPath: 'security.autostop_rule_consecutive_failures_enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
135
+ { key: 'autostop.rule.unusual_activity.enabled', category: 'autostop', configPath: 'security.autostop_rule_unusual_activity_enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
136
+ { key: 'autostop.rule.idle_timeout.enabled', category: 'autostop', configPath: 'security.autostop_rule_idle_timeout_enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
106
137
  // --- monitoring category (BMON-05 runtime-overridable) ---
107
- { key: 'monitoring.check_interval_sec', category: 'monitoring', configPath: 'security.monitoring_check_interval_sec', defaultValue: '300', isCredential: false },
108
- { key: 'monitoring.low_balance_threshold_sol', category: 'monitoring', configPath: 'security.monitoring_low_balance_threshold_sol', defaultValue: '0.01', isCredential: false },
109
- { key: 'monitoring.low_balance_threshold_eth', category: 'monitoring', configPath: 'security.monitoring_low_balance_threshold_eth', defaultValue: '0.005', isCredential: false },
110
- { key: 'monitoring.cooldown_hours', category: 'monitoring', configPath: 'security.monitoring_cooldown_hours', defaultValue: '24', isCredential: false },
111
- { key: 'monitoring.enabled', category: 'monitoring', configPath: 'security.monitoring_enabled', defaultValue: 'true', isCredential: false },
138
+ { key: 'monitoring.check_interval_sec', category: 'monitoring', configPath: 'security.monitoring_check_interval_sec', defaultValue: '300', isCredential: false, label: 'Check Interval Sec', description: 'Polling or check interval duration' },
139
+ { key: 'monitoring.low_balance_threshold_sol', category: 'monitoring', configPath: 'security.monitoring_low_balance_threshold_sol', defaultValue: '0.01', isCredential: false, label: 'Low Balance Threshold SOL', description: 'Low balance alert threshold for SOL wallets' },
140
+ { key: 'monitoring.low_balance_threshold_eth', category: 'monitoring', configPath: 'security.monitoring_low_balance_threshold_eth', defaultValue: '0.005', isCredential: false, label: 'Low Balance Threshold ETH', description: 'Low balance alert threshold for ETH wallets' },
141
+ { key: 'monitoring.cooldown_hours', category: 'monitoring', configPath: 'security.monitoring_cooldown_hours', defaultValue: '24', isCredential: false, label: 'Cooldown Hours', description: 'Cooldown between repeated balance alerts' },
142
+ { key: 'monitoring.enabled', category: 'monitoring', configPath: 'security.monitoring_enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
112
143
  // --- telegram category (Bot service settings) ---
113
- { key: 'telegram.bot_token', category: 'telegram', configPath: 'telegram.bot_token', defaultValue: '', isCredential: true },
114
- { key: 'telegram.locale', category: 'telegram', configPath: 'telegram.locale', defaultValue: 'en', isCredential: false },
144
+ { key: 'telegram.bot_token', category: 'telegram', configPath: 'telegram.bot_token', defaultValue: '', isCredential: true, label: 'Bot Token', description: 'Telegram bot token for interactive bot service' },
145
+ { key: 'telegram.locale', category: 'telegram', configPath: 'telegram.locale', defaultValue: 'en', isCredential: false, label: 'Locale', description: 'Telegram bot message language' },
115
146
  // --- signing_sdk category (CONF-01: 6 operational keys, CONF-02: 1 wallets JSON key) ---
116
- { key: 'signing_sdk.enabled', category: 'signing_sdk', configPath: 'signing_sdk.enabled', defaultValue: 'false', isCredential: false },
117
- { key: 'signing_sdk.request_expiry_min', category: 'signing_sdk', configPath: 'signing_sdk.request_expiry_min', defaultValue: '30', isCredential: false },
118
- { key: 'signing_sdk.preferred_channel', category: 'signing_sdk', configPath: 'signing_sdk.preferred_channel', defaultValue: 'ntfy', isCredential: false },
119
- { key: 'signing_sdk.preferred_wallet', category: 'signing_sdk', configPath: 'signing_sdk.preferred_wallet', defaultValue: '', isCredential: false },
120
- { key: 'signing_sdk.ntfy_request_topic_prefix', category: 'signing_sdk', configPath: 'signing_sdk.ntfy_request_topic_prefix', defaultValue: 'waiaas-sign', isCredential: false },
121
- { key: 'signing_sdk.ntfy_response_topic_prefix', category: 'signing_sdk', configPath: 'signing_sdk.ntfy_response_topic_prefix', defaultValue: 'waiaas-response', isCredential: false },
122
- { key: 'signing_sdk.wallets', category: 'signing_sdk', configPath: 'signing_sdk.wallets', defaultValue: '[]', isCredential: false },
123
- { key: 'signing_sdk.notifications_enabled', category: 'signing_sdk', configPath: 'signing_sdk.notifications_enabled', defaultValue: 'true', isCredential: false },
147
+ // DB-only: no config.toml [signing_sdk] section. Managed exclusively via Admin Settings.
148
+ { key: 'signing_sdk.enabled', category: 'signing_sdk', configPath: 'signing_sdk.enabled', defaultValue: 'false', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
149
+ { key: 'signing_sdk.request_expiry_min', category: 'signing_sdk', configPath: 'signing_sdk.request_expiry_min', defaultValue: '30', isCredential: false, label: 'Request Expiry Min', description: 'Signing request expiry time in minutes' },
150
+ { key: 'signing_sdk.preferred_channel', category: 'signing_sdk', configPath: 'signing_sdk.preferred_channel', defaultValue: 'push_relay', isCredential: false, label: 'Preferred Channel', description: 'Preferred signing notification channel (push_relay, telegram)' },
151
+ { key: 'signing_sdk.preferred_wallet', category: 'signing_sdk', configPath: 'signing_sdk.preferred_wallet', defaultValue: '', isCredential: false, label: 'Preferred Wallet', description: 'Preferred wallet app for signing requests' },
152
+ { key: 'signing_sdk.wallets', category: 'signing_sdk', configPath: 'signing_sdk.wallets', defaultValue: '[]', isCredential: false, label: 'Wallets', description: 'JSON array of configured wallet app connections' },
153
+ { key: 'signing_sdk.notifications_enabled', category: 'signing_sdk', configPath: 'signing_sdk.notifications_enabled', defaultValue: 'true', isCredential: false, label: 'Notifications Enabled', description: 'Enable or disable this feature' },
124
154
  // --- incoming category (Incoming TX monitor settings) ---
125
- { key: 'incoming.enabled', category: 'incoming', configPath: 'incoming.enabled', defaultValue: 'false', isCredential: false },
126
- { key: 'incoming.poll_interval', category: 'incoming', configPath: 'incoming.poll_interval', defaultValue: '30', isCredential: false },
127
- { key: 'incoming.retention_days', category: 'incoming', configPath: 'incoming.retention_days', defaultValue: '90', isCredential: false },
128
- { key: 'incoming.suspicious_dust_usd', category: 'incoming', configPath: 'incoming.suspicious_dust_usd', defaultValue: '0.01', isCredential: false },
129
- { key: 'incoming.suspicious_amount_multiplier', category: 'incoming', configPath: 'incoming.suspicious_amount_multiplier', defaultValue: '10', isCredential: false },
130
- { key: 'incoming.cooldown_minutes', category: 'incoming', configPath: 'incoming.cooldown_minutes', defaultValue: '5', isCredential: false },
131
- { key: 'incoming.wss_url', category: 'incoming', configPath: 'incoming.wss_url', defaultValue: '', isCredential: false },
155
+ { key: 'incoming.enabled', category: 'incoming', configPath: 'incoming.enabled', defaultValue: 'false', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
156
+ { key: 'incoming.poll_interval', category: 'incoming', configPath: 'incoming.poll_interval', defaultValue: '30', isCredential: false, label: 'Poll Interval', description: 'Incoming transaction poll interval in seconds' },
157
+ { key: 'incoming.retention_days', category: 'incoming', configPath: 'incoming.retention_days', defaultValue: '90', isCredential: false, label: 'Retention Days', description: 'Incoming transaction data retention period in days' },
158
+ { key: 'incoming.suspicious_dust_usd', category: 'incoming', configPath: 'incoming.suspicious_dust_usd', defaultValue: '0.01', isCredential: false, label: 'Suspicious Dust USD', description: 'USD threshold for dust transaction detection' },
159
+ { key: 'incoming.suspicious_amount_multiplier', category: 'incoming', configPath: 'incoming.suspicious_amount_multiplier', defaultValue: '10', isCredential: false, label: 'Suspicious Amount Multiplier', description: 'Multiplier for unusual amount detection' },
160
+ { key: 'incoming.cooldown_minutes', category: 'incoming', configPath: 'incoming.cooldown_minutes', defaultValue: '5', isCredential: false, label: 'Cooldown Minutes', description: 'Cooldown between duplicate incoming TX alerts' },
161
+ { key: 'incoming.wss_url', category: 'incoming', configPath: 'incoming.wss_url', defaultValue: '', isCredential: false, label: 'WSS URL', description: 'Global WebSocket URL for incoming TX monitoring' },
132
162
  // Per-network WSS URL overrides (#193): takes priority over global incoming.wss_url
133
- { key: 'incoming.wss_url.solana-mainnet', category: 'incoming', configPath: 'incoming.wss_url.solana-mainnet', defaultValue: '', isCredential: false },
134
- { key: 'incoming.wss_url.solana-devnet', category: 'incoming', configPath: 'incoming.wss_url.solana-devnet', defaultValue: '', isCredential: false },
135
- { key: 'incoming.wss_url.solana-testnet', category: 'incoming', configPath: 'incoming.wss_url.solana-testnet', defaultValue: '', isCredential: false },
136
- { key: 'incoming.wss_url.ethereum-mainnet', category: 'incoming', configPath: 'incoming.wss_url.ethereum-mainnet', defaultValue: '', isCredential: false },
137
- { key: 'incoming.wss_url.ethereum-sepolia', category: 'incoming', configPath: 'incoming.wss_url.ethereum-sepolia', defaultValue: '', isCredential: false },
138
- { key: 'incoming.wss_url.arbitrum-mainnet', category: 'incoming', configPath: 'incoming.wss_url.arbitrum-mainnet', defaultValue: '', isCredential: false },
139
- { key: 'incoming.wss_url.arbitrum-sepolia', category: 'incoming', configPath: 'incoming.wss_url.arbitrum-sepolia', defaultValue: '', isCredential: false },
140
- { key: 'incoming.wss_url.optimism-mainnet', category: 'incoming', configPath: 'incoming.wss_url.optimism-mainnet', defaultValue: '', isCredential: false },
141
- { key: 'incoming.wss_url.optimism-sepolia', category: 'incoming', configPath: 'incoming.wss_url.optimism-sepolia', defaultValue: '', isCredential: false },
142
- { key: 'incoming.wss_url.base-mainnet', category: 'incoming', configPath: 'incoming.wss_url.base-mainnet', defaultValue: '', isCredential: false },
143
- { key: 'incoming.wss_url.base-sepolia', category: 'incoming', configPath: 'incoming.wss_url.base-sepolia', defaultValue: '', isCredential: false },
144
- { key: 'incoming.wss_url.polygon-mainnet', category: 'incoming', configPath: 'incoming.wss_url.polygon-mainnet', defaultValue: '', isCredential: false },
145
- { key: 'incoming.wss_url.polygon-amoy', category: 'incoming', configPath: 'incoming.wss_url.polygon-amoy', defaultValue: '', isCredential: false },
146
- { key: 'incoming.wss_url.hyperevm-mainnet', category: 'incoming', configPath: 'incoming.wss_url.hyperevm-mainnet', defaultValue: '', isCredential: false },
147
- { key: 'incoming.wss_url.hyperevm-testnet', category: 'incoming', configPath: 'incoming.wss_url.hyperevm-testnet', defaultValue: '', isCredential: false },
163
+ { key: 'incoming.wss_url.solana-mainnet', category: 'incoming', configPath: 'incoming.wss_url.solana-mainnet', defaultValue: '', isCredential: false, label: 'Solana-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
164
+ { key: 'incoming.wss_url.solana-devnet', category: 'incoming', configPath: 'incoming.wss_url.solana-devnet', defaultValue: '', isCredential: false, label: 'Solana-Devnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
165
+ { key: 'incoming.wss_url.solana-testnet', category: 'incoming', configPath: 'incoming.wss_url.solana-testnet', defaultValue: '', isCredential: false, label: 'Solana-Testnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
166
+ { key: 'incoming.wss_url.ethereum-mainnet', category: 'incoming', configPath: 'incoming.wss_url.ethereum-mainnet', defaultValue: '', isCredential: false, label: 'Ethereum-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
167
+ { key: 'incoming.wss_url.ethereum-sepolia', category: 'incoming', configPath: 'incoming.wss_url.ethereum-sepolia', defaultValue: '', isCredential: false, label: 'Ethereum-Sepolia', description: 'WebSocket URL override for incoming TX monitoring on this network' },
168
+ { key: 'incoming.wss_url.arbitrum-mainnet', category: 'incoming', configPath: 'incoming.wss_url.arbitrum-mainnet', defaultValue: '', isCredential: false, label: 'Arbitrum-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
169
+ { key: 'incoming.wss_url.arbitrum-sepolia', category: 'incoming', configPath: 'incoming.wss_url.arbitrum-sepolia', defaultValue: '', isCredential: false, label: 'Arbitrum-Sepolia', description: 'WebSocket URL override for incoming TX monitoring on this network' },
170
+ { key: 'incoming.wss_url.optimism-mainnet', category: 'incoming', configPath: 'incoming.wss_url.optimism-mainnet', defaultValue: '', isCredential: false, label: 'Optimism-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
171
+ { key: 'incoming.wss_url.optimism-sepolia', category: 'incoming', configPath: 'incoming.wss_url.optimism-sepolia', defaultValue: '', isCredential: false, label: 'Optimism-Sepolia', description: 'WebSocket URL override for incoming TX monitoring on this network' },
172
+ { key: 'incoming.wss_url.base-mainnet', category: 'incoming', configPath: 'incoming.wss_url.base-mainnet', defaultValue: '', isCredential: false, label: 'Base-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
173
+ { key: 'incoming.wss_url.base-sepolia', category: 'incoming', configPath: 'incoming.wss_url.base-sepolia', defaultValue: '', isCredential: false, label: 'Base-Sepolia', description: 'WebSocket URL override for incoming TX monitoring on this network' },
174
+ { key: 'incoming.wss_url.polygon-mainnet', category: 'incoming', configPath: 'incoming.wss_url.polygon-mainnet', defaultValue: '', isCredential: false, label: 'Polygon-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
175
+ { key: 'incoming.wss_url.polygon-amoy', category: 'incoming', configPath: 'incoming.wss_url.polygon-amoy', defaultValue: '', isCredential: false, label: 'Polygon-Amoy', description: 'WebSocket URL override for incoming TX monitoring on this network' },
176
+ { key: 'incoming.wss_url.hyperevm-mainnet', category: 'incoming', configPath: 'incoming.wss_url.hyperevm-mainnet', defaultValue: '', isCredential: false, label: 'Hyperevm-Mainnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
177
+ { key: 'incoming.wss_url.hyperevm-testnet', category: 'incoming', configPath: 'incoming.wss_url.hyperevm-testnet', defaultValue: '', isCredential: false, label: 'Hyperevm-Testnet', description: 'WebSocket URL override for incoming TX monitoring on this network' },
148
178
  // --- actions category (DeFi action providers) ---
149
- { key: 'actions.jupiter_swap_enabled', category: 'actions', configPath: 'actions.jupiter_swap_enabled', defaultValue: 'true', isCredential: false },
150
- { key: 'actions.jupiter_swap_api_base_url', category: 'actions', configPath: 'actions.jupiter_swap_api_base_url', defaultValue: 'https://api.jup.ag/swap/v1', isCredential: false },
151
- { key: 'actions.jupiter_swap_api_key', category: 'actions', configPath: 'actions.jupiter_swap_api_key', defaultValue: '', isCredential: true },
152
- { key: 'actions.jupiter_swap_default_slippage_bps', category: 'actions', configPath: 'actions.jupiter_swap_default_slippage_bps', defaultValue: '50', isCredential: false },
153
- { key: 'actions.jupiter_swap_max_slippage_bps', category: 'actions', configPath: 'actions.jupiter_swap_max_slippage_bps', defaultValue: '500', isCredential: false },
154
- { key: 'actions.jupiter_swap_max_price_impact_pct', category: 'actions', configPath: 'actions.jupiter_swap_max_price_impact_pct', defaultValue: '1', isCredential: false },
155
- { key: 'actions.jupiter_swap_jito_tip_lamports', category: 'actions', configPath: 'actions.jupiter_swap_jito_tip_lamports', defaultValue: '1000', isCredential: false },
156
- { key: 'actions.jupiter_swap_request_timeout_ms', category: 'actions', configPath: 'actions.jupiter_swap_request_timeout_ms', defaultValue: '10000', isCredential: false },
157
- { key: 'actions.zerox_swap_enabled', category: 'actions', configPath: 'actions.zerox_swap_enabled', defaultValue: 'true', isCredential: false },
158
- { key: 'actions.zerox_swap_api_key', category: 'actions', configPath: 'actions.zerox_swap_api_key', defaultValue: '', isCredential: true },
159
- { key: 'actions.zerox_swap_default_slippage_bps', category: 'actions', configPath: 'actions.zerox_swap_default_slippage_bps', defaultValue: '100', isCredential: false },
160
- { key: 'actions.zerox_swap_max_slippage_bps', category: 'actions', configPath: 'actions.zerox_swap_max_slippage_bps', defaultValue: '500', isCredential: false },
161
- { key: 'actions.zerox_swap_request_timeout_ms', category: 'actions', configPath: 'actions.zerox_swap_request_timeout_ms', defaultValue: '10000', isCredential: false },
162
- { key: 'actions.lifi_enabled', category: 'actions', configPath: 'actions.lifi_enabled', defaultValue: 'true', isCredential: false },
163
- { key: 'actions.lifi_api_key', category: 'actions', configPath: 'actions.lifi_api_key', defaultValue: '', isCredential: true },
164
- { key: 'actions.lifi_api_base_url', category: 'actions', configPath: 'actions.lifi_api_base_url', defaultValue: 'https://li.quest/v1', isCredential: false },
165
- { key: 'actions.lifi_default_slippage_pct', category: 'actions', configPath: 'actions.lifi_default_slippage_pct', defaultValue: '0.03', isCredential: false },
166
- { key: 'actions.lifi_max_slippage_pct', category: 'actions', configPath: 'actions.lifi_max_slippage_pct', defaultValue: '0.05', isCredential: false },
179
+ { key: 'actions.jupiter_swap_enabled', category: 'actions', configPath: 'actions.jupiter_swap_enabled', defaultValue: 'true', isCredential: false, label: 'Jupiter Swap Enabled', description: 'Enable or disable this feature' },
180
+ { key: 'actions.jupiter_swap_api_base_url', category: 'actions', configPath: 'actions.jupiter_swap_api_base_url', defaultValue: 'https://api.jup.ag/swap/v1', isCredential: false, label: 'Jupiter Swap API Base URL', description: 'Base URL for external API requests' },
181
+ { key: 'actions.jupiter_swap_api_key', category: 'actions', configPath: 'actions.jupiter_swap_api_key', defaultValue: '', isCredential: true, label: 'Jupiter Swap API Key', description: 'API key for external service authentication' },
182
+ { key: 'actions.jupiter_swap_default_slippage_bps', category: 'actions', configPath: 'actions.jupiter_swap_default_slippage_bps', defaultValue: '50', isCredential: false, label: 'Jupiter Swap Default Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
183
+ { key: 'actions.jupiter_swap_max_slippage_bps', category: 'actions', configPath: 'actions.jupiter_swap_max_slippage_bps', defaultValue: '500', isCredential: false, label: 'Jupiter Swap Max Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
184
+ { key: 'actions.jupiter_swap_max_price_impact_pct', category: 'actions', configPath: 'actions.jupiter_swap_max_price_impact_pct', defaultValue: '1', isCredential: false, label: 'Jupiter Swap Max Price Impact %', description: 'Jupiter Swap DEX aggregator setting' },
185
+ { key: 'actions.jupiter_swap_jito_tip_lamports', category: 'actions', configPath: 'actions.jupiter_swap_jito_tip_lamports', defaultValue: '1000', isCredential: false, label: 'Jupiter Swap Jito Tip Lamports', description: 'Jupiter Swap DEX aggregator setting' },
186
+ { key: 'actions.jupiter_swap_request_timeout_ms', category: 'actions', configPath: 'actions.jupiter_swap_request_timeout_ms', defaultValue: '10000', isCredential: false, label: 'Jupiter Swap Request Timeout ms', description: 'Request timeout in milliseconds' },
187
+ { key: 'actions.zerox_swap_enabled', category: 'actions', configPath: 'actions.zerox_swap_enabled', defaultValue: 'true', isCredential: false, label: 'Zerox Swap Enabled', description: 'Enable or disable this feature' },
188
+ { key: 'actions.zerox_swap_api_key', category: 'actions', configPath: 'actions.zerox_swap_api_key', defaultValue: '', isCredential: true, label: 'Zerox Swap API Key', description: 'API key for external service authentication' },
189
+ { key: 'actions.zerox_swap_default_slippage_bps', category: 'actions', configPath: 'actions.zerox_swap_default_slippage_bps', defaultValue: '100', isCredential: false, label: 'Zerox Swap Default Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
190
+ { key: 'actions.zerox_swap_max_slippage_bps', category: 'actions', configPath: 'actions.zerox_swap_max_slippage_bps', defaultValue: '500', isCredential: false, label: 'Zerox Swap Max Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
191
+ { key: 'actions.zerox_swap_request_timeout_ms', category: 'actions', configPath: 'actions.zerox_swap_request_timeout_ms', defaultValue: '10000', isCredential: false, label: 'Zerox Swap Request Timeout ms', description: 'Request timeout in milliseconds' },
192
+ { key: 'actions.lifi_enabled', category: 'actions', configPath: 'actions.lifi_enabled', defaultValue: 'true', isCredential: false, label: 'Lifi Enabled', description: 'Enable or disable this feature' },
193
+ { key: 'actions.lifi_api_key', category: 'actions', configPath: 'actions.lifi_api_key', defaultValue: '', isCredential: true, label: 'Lifi API Key', description: 'API key for external service authentication' },
194
+ { key: 'actions.lifi_api_base_url', category: 'actions', configPath: 'actions.lifi_api_base_url', defaultValue: 'https://li.quest/v1', isCredential: false, label: 'Lifi API Base URL', description: 'Base URL for external API requests' },
195
+ { key: 'actions.lifi_default_slippage_pct', category: 'actions', configPath: 'actions.lifi_default_slippage_pct', defaultValue: '0.03', isCredential: false, label: 'Lifi Default Slippage %', description: 'Slippage tolerance as decimal percentage' },
196
+ { key: 'actions.lifi_max_slippage_pct', category: 'actions', configPath: 'actions.lifi_max_slippage_pct', defaultValue: '0.05', isCredential: false, label: 'Lifi Max Slippage %', description: 'Slippage tolerance as decimal percentage' },
167
197
  // --- Lido Staking ---
168
- { key: 'actions.lido_staking_enabled', category: 'actions', configPath: 'actions.lido_staking_enabled', defaultValue: 'true', isCredential: false },
169
- { key: 'actions.lido_staking_steth_address', category: 'actions', configPath: 'actions.lido_staking_steth_address', defaultValue: '', isCredential: false },
170
- { key: 'actions.lido_staking_withdrawal_queue_address', category: 'actions', configPath: 'actions.lido_staking_withdrawal_queue_address', defaultValue: '', isCredential: false },
198
+ { key: 'actions.lido_staking_enabled', category: 'actions', configPath: 'actions.lido_staking_enabled', defaultValue: 'true', isCredential: false, label: 'Lido Staking Enabled', description: 'Enable or disable this feature' },
199
+ { key: 'actions.lido_staking_steth_address', category: 'actions', configPath: 'actions.lido_staking_steth_address', defaultValue: '', isCredential: false, label: 'Lido Staking Steth Address', description: 'On-chain contract or account address' },
200
+ { key: 'actions.lido_staking_withdrawal_queue_address', category: 'actions', configPath: 'actions.lido_staking_withdrawal_queue_address', defaultValue: '', isCredential: false, label: 'Lido Staking Withdrawal Queue Address', description: 'On-chain contract or account address' },
171
201
  // --- Jito Staking ---
172
- { key: 'actions.jito_staking_enabled', category: 'actions', configPath: 'actions.jito_staking_enabled', defaultValue: 'true', isCredential: false },
173
- { key: 'actions.jito_staking_stake_pool_address', category: 'actions', configPath: 'actions.jito_staking_stake_pool_address', defaultValue: '', isCredential: false },
174
- { key: 'actions.jito_staking_jitosol_mint', category: 'actions', configPath: 'actions.jito_staking_jitosol_mint', defaultValue: '', isCredential: false },
202
+ { key: 'actions.jito_staking_enabled', category: 'actions', configPath: 'actions.jito_staking_enabled', defaultValue: 'true', isCredential: false, label: 'Jito Staking Enabled', description: 'Enable or disable this feature' },
203
+ { key: 'actions.jito_staking_stake_pool_address', category: 'actions', configPath: 'actions.jito_staking_stake_pool_address', defaultValue: '', isCredential: false, label: 'Jito Staking Stake Pool Address', description: 'On-chain contract or account address' },
204
+ { key: 'actions.jito_staking_jitosol_mint', category: 'actions', configPath: 'actions.jito_staking_jitosol_mint', defaultValue: '', isCredential: false, label: 'Jito Staking Jitosol Mint', description: 'Jito SOL staking setting' },
175
205
  // --- Aave V3 Lending ---
176
- { key: 'actions.aave_v3_enabled', category: 'actions', configPath: 'actions.aave_v3_enabled', defaultValue: 'true', isCredential: false },
177
- { key: 'actions.aave_v3_health_factor_warning_threshold', category: 'actions', configPath: 'actions.aave_v3_health_factor_warning_threshold', defaultValue: '1.2', isCredential: false },
178
- { key: 'actions.aave_v3_position_sync_interval_sec', category: 'actions', configPath: 'actions.aave_v3_position_sync_interval_sec', defaultValue: '300', isCredential: false },
179
- { key: 'actions.aave_v3_max_ltv_pct', category: 'actions', configPath: 'actions.aave_v3_max_ltv_pct', defaultValue: '0.8', isCredential: false },
206
+ { key: 'actions.aave_v3_enabled', category: 'actions', configPath: 'actions.aave_v3_enabled', defaultValue: 'true', isCredential: false, label: 'Aave V3 Enabled', description: 'Enable or disable this feature' },
207
+ { key: 'actions.aave_v3_health_factor_warning_threshold', category: 'actions', configPath: 'actions.aave_v3_health_factor_warning_threshold', defaultValue: '1.2', isCredential: false, label: 'Aave V3 Health Factor Warning Threshold', description: 'Threshold value for triggering action' },
208
+ { key: 'actions.aave_v3_position_sync_interval_sec', category: 'actions', configPath: 'actions.aave_v3_position_sync_interval_sec', defaultValue: '300', isCredential: false, label: 'Aave V3 Position Sync Interval Sec', description: 'Polling or check interval duration' },
209
+ { key: 'actions.aave_v3_max_ltv_pct', category: 'actions', configPath: 'actions.aave_v3_max_ltv_pct', defaultValue: '0.8', isCredential: false, label: 'Aave V3 Max LTV %', description: 'Aave V3 lending protocol setting' },
180
210
  // --- Kamino Lending ---
181
- { key: 'actions.kamino_enabled', category: 'actions', configPath: 'actions.kamino_enabled', defaultValue: 'true', isCredential: false },
182
- { key: 'actions.kamino_market', category: 'actions', configPath: 'actions.kamino_market', defaultValue: 'main', isCredential: false },
183
- { key: 'actions.kamino_hf_threshold', category: 'actions', configPath: 'actions.kamino_hf_threshold', defaultValue: '1.2', isCredential: false },
211
+ { key: 'actions.kamino_enabled', category: 'actions', configPath: 'actions.kamino_enabled', defaultValue: 'true', isCredential: false, label: 'Kamino Enabled', description: 'Enable or disable this feature' },
212
+ { key: 'actions.kamino_market', category: 'actions', configPath: 'actions.kamino_market', defaultValue: 'main', isCredential: false, label: 'Kamino Market', description: 'Kamino Solana lending setting' },
213
+ { key: 'actions.kamino_hf_threshold', category: 'actions', configPath: 'actions.kamino_hf_threshold', defaultValue: '1.2', isCredential: false, label: 'Kamino HF Threshold', description: 'Threshold value for triggering action' },
184
214
  // --- Pendle Yield ---
185
- { key: 'actions.pendle_yield_enabled', category: 'actions', configPath: 'actions.pendle_yield_enabled', defaultValue: 'true', isCredential: false },
186
- { key: 'actions.pendle_yield_api_base_url', category: 'actions', configPath: 'actions.pendle_yield_api_base_url', defaultValue: 'https://api-v2.pendle.finance/core', isCredential: false },
187
- { key: 'actions.pendle_yield_api_key', category: 'actions', configPath: 'actions.pendle_yield_api_key', defaultValue: '', isCredential: true },
188
- { key: 'actions.pendle_yield_default_slippage_bps', category: 'actions', configPath: 'actions.pendle_yield_default_slippage_bps', defaultValue: '100', isCredential: false },
189
- { key: 'actions.pendle_yield_max_slippage_bps', category: 'actions', configPath: 'actions.pendle_yield_max_slippage_bps', defaultValue: '500', isCredential: false },
190
- { key: 'actions.pendle_yield_request_timeout_ms', category: 'actions', configPath: 'actions.pendle_yield_request_timeout_ms', defaultValue: '10000', isCredential: false },
191
- { key: 'actions.pendle_yield_maturity_warning_days', category: 'actions', configPath: 'actions.pendle_yield_maturity_warning_days', defaultValue: '7', isCredential: false },
215
+ { key: 'actions.pendle_yield_enabled', category: 'actions', configPath: 'actions.pendle_yield_enabled', defaultValue: 'true', isCredential: false, label: 'Pendle Yield Enabled', description: 'Enable or disable this feature' },
216
+ { key: 'actions.pendle_yield_api_base_url', category: 'actions', configPath: 'actions.pendle_yield_api_base_url', defaultValue: 'https://api-v2.pendle.finance/core', isCredential: false, label: 'Pendle Yield API Base URL', description: 'Base URL for external API requests' },
217
+ { key: 'actions.pendle_yield_api_key', category: 'actions', configPath: 'actions.pendle_yield_api_key', defaultValue: '', isCredential: true, label: 'Pendle Yield API Key', description: 'API key for external service authentication' },
218
+ { key: 'actions.pendle_yield_default_slippage_bps', category: 'actions', configPath: 'actions.pendle_yield_default_slippage_bps', defaultValue: '100', isCredential: false, label: 'Pendle Yield Default Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
219
+ { key: 'actions.pendle_yield_max_slippage_bps', category: 'actions', configPath: 'actions.pendle_yield_max_slippage_bps', defaultValue: '500', isCredential: false, label: 'Pendle Yield Max Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
220
+ { key: 'actions.pendle_yield_request_timeout_ms', category: 'actions', configPath: 'actions.pendle_yield_request_timeout_ms', defaultValue: '10000', isCredential: false, label: 'Pendle Yield Request Timeout ms', description: 'Request timeout in milliseconds' },
221
+ { key: 'actions.pendle_yield_maturity_warning_days', category: 'actions', configPath: 'actions.pendle_yield_maturity_warning_days', defaultValue: '7', isCredential: false, label: 'Pendle Yield Maturity Warning Days', description: 'Pendle yield trading setting' },
192
222
  // --- Drift Perp ---
193
- { key: 'actions.drift_enabled', category: 'actions', configPath: 'actions.drift_enabled', defaultValue: 'true', isCredential: false },
194
- { key: 'actions.drift_max_leverage', category: 'actions', configPath: 'actions.drift_max_leverage', defaultValue: '5', isCredential: false },
195
- { key: 'actions.drift_max_position_usd', category: 'actions', configPath: 'actions.drift_max_position_usd', defaultValue: '10000', isCredential: false },
196
- { key: 'actions.drift_margin_warning_threshold_pct', category: 'actions', configPath: 'actions.drift_margin_warning_threshold_pct', defaultValue: '0.15', isCredential: false },
197
- { key: 'actions.drift_position_sync_interval_sec', category: 'actions', configPath: 'actions.drift_position_sync_interval_sec', defaultValue: '60', isCredential: false },
223
+ { key: 'actions.drift_enabled', category: 'actions', configPath: 'actions.drift_enabled', defaultValue: 'true', isCredential: false, label: 'Drift Enabled', description: 'Enable or disable this feature' },
224
+ { key: 'actions.drift_max_leverage', category: 'actions', configPath: 'actions.drift_max_leverage', defaultValue: '5', isCredential: false, label: 'Drift Max Leverage', description: 'Maximum allowed leverage multiplier' },
225
+ { key: 'actions.drift_max_position_usd', category: 'actions', configPath: 'actions.drift_max_position_usd', defaultValue: '10000', isCredential: false, label: 'Drift Max Position USD', description: 'Maximum amount in USD' },
226
+ { key: 'actions.drift_margin_warning_threshold_pct', category: 'actions', configPath: 'actions.drift_margin_warning_threshold_pct', defaultValue: '0.15', isCredential: false, label: 'Drift Margin Warning Threshold %', description: 'Threshold percentage for triggering action' },
227
+ { key: 'actions.drift_position_sync_interval_sec', category: 'actions', configPath: 'actions.drift_position_sync_interval_sec', defaultValue: '60', isCredential: false, label: 'Drift Position Sync Interval Sec', description: 'Polling or check interval duration' },
198
228
  // --- gas_condition category (Gas conditional execution) ---
199
- { key: 'gas_condition.enabled', category: 'gas_condition', configPath: 'gas_condition.enabled', defaultValue: 'true', isCredential: false },
200
- { key: 'gas_condition.poll_interval_sec', category: 'gas_condition', configPath: 'gas_condition.poll_interval_sec', defaultValue: '30', isCredential: false },
201
- { key: 'gas_condition.default_timeout_sec', category: 'gas_condition', configPath: 'gas_condition.default_timeout_sec', defaultValue: '3600', isCredential: false },
202
- { key: 'gas_condition.max_timeout_sec', category: 'gas_condition', configPath: 'gas_condition.max_timeout_sec', defaultValue: '86400', isCredential: false },
203
- { key: 'gas_condition.max_pending_count', category: 'gas_condition', configPath: 'gas_condition.max_pending_count', defaultValue: '100', isCredential: false },
229
+ // DB-only: no config.toml [gas_condition] section. Managed exclusively via Admin Settings.
230
+ { key: 'gas_condition.enabled', category: 'gas_condition', configPath: 'gas_condition.enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
231
+ { key: 'gas_condition.poll_interval_sec', category: 'gas_condition', configPath: 'gas_condition.poll_interval_sec', defaultValue: '30', isCredential: false, label: 'Poll Interval Sec', description: 'Polling or check interval duration' },
232
+ { key: 'gas_condition.default_timeout_sec', category: 'gas_condition', configPath: 'gas_condition.default_timeout_sec', defaultValue: '3600', isCredential: false, label: 'Default Timeout Sec', description: 'Timeout duration in seconds' },
233
+ { key: 'gas_condition.max_timeout_sec', category: 'gas_condition', configPath: 'gas_condition.max_timeout_sec', defaultValue: '86400', isCredential: false, label: 'Max Timeout Sec', description: 'Timeout duration in seconds' },
234
+ { key: 'gas_condition.max_pending_count', category: 'gas_condition', configPath: 'gas_condition.max_pending_count', defaultValue: '100', isCredential: false, label: 'Max Pending Count', description: 'Maximum gas-conditional transactions in queue' },
204
235
  // --- rpc_pool category (per-network URL lists managed via Admin Settings API) ---
205
- { key: 'rpc_pool.solana-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-mainnet', defaultValue: '[]', isCredential: false },
206
- { key: 'rpc_pool.solana-devnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-devnet', defaultValue: '[]', isCredential: false },
207
- { key: 'rpc_pool.solana-testnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-testnet', defaultValue: '[]', isCredential: false },
208
- { key: 'rpc_pool.ethereum-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.ethereum-mainnet', defaultValue: '[]', isCredential: false },
209
- { key: 'rpc_pool.ethereum-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.ethereum-sepolia', defaultValue: '[]', isCredential: false },
210
- { key: 'rpc_pool.arbitrum-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.arbitrum-mainnet', defaultValue: '[]', isCredential: false },
211
- { key: 'rpc_pool.arbitrum-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.arbitrum-sepolia', defaultValue: '[]', isCredential: false },
212
- { key: 'rpc_pool.optimism-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.optimism-mainnet', defaultValue: '[]', isCredential: false },
213
- { key: 'rpc_pool.optimism-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.optimism-sepolia', defaultValue: '[]', isCredential: false },
214
- { key: 'rpc_pool.base-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.base-mainnet', defaultValue: '[]', isCredential: false },
215
- { key: 'rpc_pool.base-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.base-sepolia', defaultValue: '[]', isCredential: false },
216
- { key: 'rpc_pool.polygon-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.polygon-mainnet', defaultValue: '[]', isCredential: false },
217
- { key: 'rpc_pool.polygon-amoy', category: 'rpc_pool', configPath: 'rpc_pool.polygon-amoy', defaultValue: '[]', isCredential: false },
218
- { key: 'rpc_pool.hyperevm-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.hyperevm-mainnet', defaultValue: '[]', isCredential: false },
219
- { key: 'rpc_pool.hyperevm-testnet', category: 'rpc_pool', configPath: 'rpc_pool.hyperevm-testnet', defaultValue: '[]', isCredential: false },
236
+ // DB-only: no config.toml [rpc_pool] section. Managed exclusively via Admin Settings.
237
+ { key: 'rpc_pool.solana-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-mainnet', defaultValue: '[]', isCredential: false, label: 'Solana-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
238
+ { key: 'rpc_pool.solana-devnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-devnet', defaultValue: '[]', isCredential: false, label: 'Solana-Devnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
239
+ { key: 'rpc_pool.solana-testnet', category: 'rpc_pool', configPath: 'rpc_pool.solana-testnet', defaultValue: '[]', isCredential: false, label: 'Solana-Testnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
240
+ { key: 'rpc_pool.ethereum-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.ethereum-mainnet', defaultValue: '[]', isCredential: false, label: 'Ethereum-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
241
+ { key: 'rpc_pool.ethereum-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.ethereum-sepolia', defaultValue: '[]', isCredential: false, label: 'Ethereum-Sepolia', description: 'JSON array of RPC endpoint URLs for pool rotation' },
242
+ { key: 'rpc_pool.arbitrum-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.arbitrum-mainnet', defaultValue: '[]', isCredential: false, label: 'Arbitrum-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
243
+ { key: 'rpc_pool.arbitrum-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.arbitrum-sepolia', defaultValue: '[]', isCredential: false, label: 'Arbitrum-Sepolia', description: 'JSON array of RPC endpoint URLs for pool rotation' },
244
+ { key: 'rpc_pool.optimism-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.optimism-mainnet', defaultValue: '[]', isCredential: false, label: 'Optimism-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
245
+ { key: 'rpc_pool.optimism-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.optimism-sepolia', defaultValue: '[]', isCredential: false, label: 'Optimism-Sepolia', description: 'JSON array of RPC endpoint URLs for pool rotation' },
246
+ { key: 'rpc_pool.base-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.base-mainnet', defaultValue: '[]', isCredential: false, label: 'Base-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
247
+ { key: 'rpc_pool.base-sepolia', category: 'rpc_pool', configPath: 'rpc_pool.base-sepolia', defaultValue: '[]', isCredential: false, label: 'Base-Sepolia', description: 'JSON array of RPC endpoint URLs for pool rotation' },
248
+ { key: 'rpc_pool.polygon-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.polygon-mainnet', defaultValue: '[]', isCredential: false, label: 'Polygon-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
249
+ { key: 'rpc_pool.polygon-amoy', category: 'rpc_pool', configPath: 'rpc_pool.polygon-amoy', defaultValue: '[]', isCredential: false, label: 'Polygon-Amoy', description: 'JSON array of RPC endpoint URLs for pool rotation' },
250
+ { key: 'rpc_pool.hyperevm-mainnet', category: 'rpc_pool', configPath: 'rpc_pool.hyperevm-mainnet', defaultValue: '[]', isCredential: false, label: 'Hyperevm-Mainnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
251
+ { key: 'rpc_pool.hyperevm-testnet', category: 'rpc_pool', configPath: 'rpc_pool.hyperevm-testnet', defaultValue: '[]', isCredential: false, label: 'Hyperevm-Testnet', description: 'JSON array of RPC endpoint URLs for pool rotation' },
220
252
  // --- position_tracker category (DeFi position sync) ---
221
- { key: 'position_tracker.enabled', category: 'position_tracker', configPath: 'position_tracker.enabled', defaultValue: 'true', isCredential: false },
253
+ // DB-only: no config.toml [position_tracker] section. Managed exclusively via Admin Settings.
254
+ { key: 'position_tracker.enabled', category: 'position_tracker', configPath: 'position_tracker.enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
222
255
  // --- smart_account category (ERC-4337 Account Abstraction) ---
223
256
  // v30.9: enabled default changed to 'true' (DFLT-01). bundler_url/paymaster_url/paymaster_api_key
224
257
  // and all per-chain overrides removed (23 keys) -- replaced by per-wallet provider model (PROV-09).
225
- { key: 'smart_account.enabled', category: 'smart_account', configPath: 'smart_account.enabled', defaultValue: 'true', isCredential: false },
226
- { key: 'smart_account.entry_point', category: 'smart_account', configPath: 'smart_account.entry_point', defaultValue: '0x0000000071727De22E5E9d8BAf0edAc6f37da032', isCredential: false },
227
- { key: 'smart_account.pimlico.api_key', category: 'smart_account', configPath: 'smart_account.pimlico.api_key', defaultValue: '', isCredential: true },
228
- { key: 'smart_account.pimlico.paymaster_policy_id', category: 'smart_account', configPath: 'smart_account.pimlico.paymaster_policy_id', defaultValue: '', isCredential: false },
229
- { key: 'smart_account.alchemy.api_key', category: 'smart_account', configPath: 'smart_account.alchemy.api_key', defaultValue: '', isCredential: true },
230
- { key: 'smart_account.alchemy.paymaster_policy_id', category: 'smart_account', configPath: 'smart_account.alchemy.paymaster_policy_id', defaultValue: '', isCredential: false },
258
+ { key: 'smart_account.enabled', category: 'smart_account', configPath: 'smart_account.enabled', defaultValue: 'true', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
259
+ { key: 'smart_account.entry_point', category: 'smart_account', configPath: 'smart_account.entry_point', defaultValue: '0x0000000071727De22E5E9d8BAf0edAc6f37da032', isCredential: false, label: 'Entry Point', description: 'ERC-4337 EntryPoint contract address' },
260
+ { key: 'smart_account.pimlico.api_key', category: 'smart_account', configPath: 'smart_account.pimlico.api_key', defaultValue: '', isCredential: true, label: 'API Key', description: 'Pimlico bundler/paymaster API key' },
261
+ { key: 'smart_account.pimlico.paymaster_policy_id', category: 'smart_account', configPath: 'smart_account.pimlico.paymaster_policy_id', defaultValue: '', isCredential: false, label: 'Paymaster Policy Id', description: 'Pimlico paymaster policy ID' },
262
+ { key: 'smart_account.alchemy.api_key', category: 'smart_account', configPath: 'smart_account.alchemy.api_key', defaultValue: '', isCredential: true, label: 'API Key', description: 'Alchemy bundler/paymaster API key' },
263
+ { key: 'smart_account.alchemy.paymaster_policy_id', category: 'smart_account', configPath: 'smart_account.alchemy.paymaster_policy_id', defaultValue: '', isCredential: false, label: 'Paymaster Policy Id', description: 'Alchemy paymaster policy ID' },
231
264
  // --- ERC-8004 Agent Identity ---
232
- { key: 'actions.erc8004_agent_enabled', category: 'actions', configPath: 'actions.erc8004_agent_enabled', defaultValue: 'true', isCredential: false },
233
- { key: 'actions.erc8004_identity_registry_address', category: 'actions', configPath: 'actions.erc8004_identity_registry_address', defaultValue: '0x8004A169FB4a3325136EB29fA0ceB6D2e539a432', isCredential: false },
234
- { key: 'actions.erc8004_reputation_registry_address', category: 'actions', configPath: 'actions.erc8004_reputation_registry_address', defaultValue: '0x8004BAa17C55a88189AE136b182e5fdA19dE9b63', isCredential: false },
235
- { key: 'actions.erc8004_validation_registry_address', category: 'actions', configPath: 'actions.erc8004_validation_registry_address', defaultValue: '', isCredential: false },
236
- { key: 'actions.erc8004_registration_file_base_url', category: 'actions', configPath: 'actions.erc8004_registration_file_base_url', defaultValue: '', isCredential: false },
237
- { key: 'actions.erc8004_auto_publish_registration', category: 'actions', configPath: 'actions.erc8004_auto_publish_registration', defaultValue: 'true', isCredential: false },
238
- { key: 'actions.erc8004_reputation_cache_ttl_sec', category: 'actions', configPath: 'actions.erc8004_reputation_cache_ttl_sec', defaultValue: '300', isCredential: false },
239
- { key: 'actions.erc8004_min_reputation_score', category: 'actions', configPath: 'actions.erc8004_min_reputation_score', defaultValue: '0', isCredential: false },
240
- { key: 'actions.erc8004_reputation_rpc_timeout_ms', category: 'actions', configPath: 'actions.erc8004_reputation_rpc_timeout_ms', defaultValue: '3000', isCredential: false },
265
+ { key: 'actions.erc8004_agent_enabled', category: 'actions', configPath: 'actions.erc8004_agent_enabled', defaultValue: 'true', isCredential: false, label: 'Erc8004 Agent Enabled', description: 'Enable or disable this feature' },
266
+ { key: 'actions.erc8004_identity_registry_address', category: 'actions', configPath: 'actions.erc8004_identity_registry_address', defaultValue: '0x8004A169FB4a3325136EB29fA0ceB6D2e539a432', isCredential: false, label: 'Erc8004 Identity Registry Address', description: 'On-chain contract or account address' },
267
+ { key: 'actions.erc8004_reputation_registry_address', category: 'actions', configPath: 'actions.erc8004_reputation_registry_address', defaultValue: '0x8004BAa17C55a88189AE136b182e5fdA19dE9b63', isCredential: false, label: 'Erc8004 Reputation Registry Address', description: 'On-chain contract or account address' },
268
+ { key: 'actions.erc8004_validation_registry_address', category: 'actions', configPath: 'actions.erc8004_validation_registry_address', defaultValue: '', isCredential: false, label: 'Erc8004 Validation Registry Address', description: 'On-chain contract or account address' },
269
+ { key: 'actions.erc8004_registration_file_base_url', category: 'actions', configPath: 'actions.erc8004_registration_file_base_url', defaultValue: '', isCredential: false, label: 'Erc8004 Registration File Base URL', description: 'ERC-8004 agent identity setting' },
270
+ { key: 'actions.erc8004_auto_publish_registration', category: 'actions', configPath: 'actions.erc8004_auto_publish_registration', defaultValue: 'true', isCredential: false, label: 'Erc8004 Auto Publish Registration', description: 'ERC-8004 agent identity setting' },
271
+ { key: 'actions.erc8004_reputation_cache_ttl_sec', category: 'actions', configPath: 'actions.erc8004_reputation_cache_ttl_sec', defaultValue: '300', isCredential: false, label: 'Erc8004 Reputation Cache TTL Sec', description: 'Cache or data time-to-live duration' },
272
+ { key: 'actions.erc8004_min_reputation_score', category: 'actions', configPath: 'actions.erc8004_min_reputation_score', defaultValue: '0', isCredential: false, label: 'Erc8004 Min Reputation Score', description: 'ERC-8004 agent identity setting' },
273
+ { key: 'actions.erc8004_reputation_rpc_timeout_ms', category: 'actions', configPath: 'actions.erc8004_reputation_rpc_timeout_ms', defaultValue: '3000', isCredential: false, label: 'Erc8004 Reputation RPC Timeout ms', description: 'Request timeout in milliseconds' },
241
274
  // --- NFT Indexer ---
242
- { key: 'actions.alchemy_nft_api_key', category: 'actions', configPath: 'actions.alchemy_nft_api_key', defaultValue: '', isCredential: true },
243
- { key: 'actions.helius_das_api_key', category: 'actions', configPath: 'actions.helius_das_api_key', defaultValue: '', isCredential: true },
244
- { key: 'actions.nft_indexer_cache_ttl_sec', category: 'actions', configPath: 'actions.nft_indexer_cache_ttl_sec', defaultValue: '300', isCredential: false },
275
+ { key: 'actions.alchemy_nft_api_key', category: 'actions', configPath: 'actions.alchemy_nft_api_key', defaultValue: '', isCredential: true, label: 'Alchemy Nft API Key', description: 'API key for external service authentication' },
276
+ { key: 'actions.helius_das_api_key', category: 'actions', configPath: 'actions.helius_das_api_key', defaultValue: '', isCredential: true, label: 'Helius Das API Key', description: 'API key for external service authentication' },
277
+ { key: 'actions.nft_indexer_cache_ttl_sec', category: 'actions', configPath: 'actions.nft_indexer_cache_ttl_sec', defaultValue: '300', isCredential: false, label: 'Nft Indexer Cache TTL Sec', description: 'Cache or data time-to-live duration' },
245
278
  // --- D'CENT Swap Aggregator ---
246
- { key: 'actions.dcent_swap_enabled', category: 'actions', configPath: 'actions.dcent_swap_enabled', defaultValue: 'true', isCredential: false },
247
- { key: 'actions.dcent_swap_api_url', category: 'actions', configPath: 'actions.dcent_swap_api_url', defaultValue: 'https://agent-swap.dcentwallet.com', isCredential: false },
248
- { key: 'actions.dcent_swap_default_slippage_bps', category: 'actions', configPath: 'actions.dcent_swap_default_slippage_bps', defaultValue: '100', isCredential: false },
249
- { key: 'actions.dcent_swap_max_slippage_bps', category: 'actions', configPath: 'actions.dcent_swap_max_slippage_bps', defaultValue: '500', isCredential: false },
250
- { key: 'actions.dcent_swap_currency_cache_ttl_ms', category: 'actions', configPath: 'actions.dcent_swap_currency_cache_ttl_ms', defaultValue: '86400000', isCredential: false },
279
+ { key: 'actions.dcent_swap_enabled', category: 'actions', configPath: 'actions.dcent_swap_enabled', defaultValue: 'true', isCredential: false, label: 'Dcent Swap Enabled', description: 'Enable or disable this feature' },
280
+ { key: 'actions.dcent_swap_api_url', category: 'actions', configPath: 'actions.dcent_swap_api_url', defaultValue: 'https://agent-swap.dcentwallet.com', isCredential: false, label: 'Dcent Swap API URL', description: 'Base URL for external API requests' },
281
+ { key: 'actions.dcent_swap_default_slippage_bps', category: 'actions', configPath: 'actions.dcent_swap_default_slippage_bps', defaultValue: '100', isCredential: false, label: 'Dcent Swap Default Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
282
+ { key: 'actions.dcent_swap_max_slippage_bps', category: 'actions', configPath: 'actions.dcent_swap_max_slippage_bps', defaultValue: '500', isCredential: false, label: 'Dcent Swap Max Slippage BPS', description: 'Slippage tolerance in basis points (1 bps = 0.01%)' },
283
+ { key: 'actions.dcent_swap_currency_cache_ttl_ms', category: 'actions', configPath: 'actions.dcent_swap_currency_cache_ttl_ms', defaultValue: '86400000', isCredential: false, label: 'Dcent Swap Currency Cache TTL ms', description: 'Cache or data time-to-live duration' },
251
284
  // --- Hyperliquid Perp Trading (Phase 349) ---
252
- { key: 'actions.hyperliquid_enabled', category: 'actions', configPath: 'actions.hyperliquid_enabled', defaultValue: 'false', isCredential: false },
253
- { key: 'actions.hyperliquid_network', category: 'actions', configPath: 'actions.hyperliquid_network', defaultValue: 'mainnet', isCredential: false },
254
- { key: 'actions.hyperliquid_api_url', category: 'actions', configPath: 'actions.hyperliquid_api_url', defaultValue: '', isCredential: false },
255
- { key: 'actions.hyperliquid_rate_limit_weight_per_min', category: 'actions', configPath: 'actions.hyperliquid_rate_limit_weight_per_min', defaultValue: '600', isCredential: false },
256
- { key: 'actions.hyperliquid_default_leverage', category: 'actions', configPath: 'actions.hyperliquid_default_leverage', defaultValue: '1', isCredential: false },
257
- { key: 'actions.hyperliquid_default_margin_mode', category: 'actions', configPath: 'actions.hyperliquid_default_margin_mode', defaultValue: 'CROSS', isCredential: false },
258
- { key: 'actions.hyperliquid_builder_address', category: 'actions', configPath: 'actions.hyperliquid_builder_address', defaultValue: '', isCredential: false },
259
- { key: 'actions.hyperliquid_builder_fee', category: 'actions', configPath: 'actions.hyperliquid_builder_fee', defaultValue: '0', isCredential: false },
260
- { key: 'actions.hyperliquid_order_status_poll_interval_ms', category: 'actions', configPath: 'actions.hyperliquid_order_status_poll_interval_ms', defaultValue: '2000', isCredential: false },
285
+ { key: 'actions.hyperliquid_enabled', category: 'actions', configPath: 'actions.hyperliquid_enabled', defaultValue: 'true', isCredential: false, label: 'Hyperliquid Enabled', description: 'Enable or disable this feature' },
286
+ { key: 'actions.hyperliquid_network', category: 'actions', configPath: 'actions.hyperliquid_network', defaultValue: 'mainnet', isCredential: false, label: 'Hyperliquid Network', description: 'Hyperliquid trading platform setting' },
287
+ { key: 'actions.hyperliquid_api_url', category: 'actions', configPath: 'actions.hyperliquid_api_url', defaultValue: '', isCredential: false, label: 'Hyperliquid API URL', description: 'Base URL for external API requests' },
288
+ { key: 'actions.hyperliquid_rate_limit_weight_per_min', category: 'actions', configPath: 'actions.hyperliquid_rate_limit_weight_per_min', defaultValue: '600', isCredential: false, label: 'Hyperliquid Rate Limit Weight Per Min', description: 'Hyperliquid trading platform setting' },
289
+ { key: 'actions.hyperliquid_default_leverage', category: 'actions', configPath: 'actions.hyperliquid_default_leverage', defaultValue: '1', isCredential: false, label: 'Hyperliquid Default Leverage', description: 'Hyperliquid trading platform setting' },
290
+ { key: 'actions.hyperliquid_default_margin_mode', category: 'actions', configPath: 'actions.hyperliquid_default_margin_mode', defaultValue: 'CROSS', isCredential: false, label: 'Hyperliquid Default Margin Mode', description: 'Hyperliquid trading platform setting' },
291
+ { key: 'actions.hyperliquid_builder_address', category: 'actions', configPath: 'actions.hyperliquid_builder_address', defaultValue: '', isCredential: false, label: 'Hyperliquid Builder Address', description: 'On-chain contract or account address' },
292
+ { key: 'actions.hyperliquid_builder_fee', category: 'actions', configPath: 'actions.hyperliquid_builder_fee', defaultValue: '0', isCredential: false, label: 'Hyperliquid Builder Fee', description: 'Hyperliquid trading platform setting' },
293
+ { key: 'actions.hyperliquid_order_status_poll_interval_ms', category: 'actions', configPath: 'actions.hyperliquid_order_status_poll_interval_ms', defaultValue: '2000', isCredential: false, label: 'Hyperliquid Order Status Poll Interval ms', description: 'Polling or check interval duration' },
294
+ { key: 'actions.hyperliquid_request_timeout_ms', category: 'actions', configPath: 'actions.hyperliquid_request_timeout_ms', defaultValue: '10000', isCredential: false, label: 'Hyperliquid Request Timeout ms', description: 'Request timeout in milliseconds' },
261
295
  // --- Polymarket Prediction Market ---
262
- { key: 'actions.polymarket_enabled', category: 'actions', configPath: 'actions.polymarket_enabled', defaultValue: 'false', isCredential: false },
263
- { key: 'actions.polymarket_default_fee_bps', category: 'actions', configPath: 'actions.polymarket_default_fee_bps', defaultValue: '0', isCredential: false },
264
- { key: 'actions.polymarket_order_expiry_seconds', category: 'actions', configPath: 'actions.polymarket_order_expiry_seconds', defaultValue: '86400', isCredential: false },
265
- { key: 'actions.polymarket_max_position_usdc', category: 'actions', configPath: 'actions.polymarket_max_position_usdc', defaultValue: '1000', isCredential: false },
266
- { key: 'actions.polymarket_proxy_wallet', category: 'actions', configPath: 'actions.polymarket_proxy_wallet', defaultValue: 'false', isCredential: false },
267
- { key: 'actions.polymarket_neg_risk_enabled', category: 'actions', configPath: 'actions.polymarket_neg_risk_enabled', defaultValue: 'true', isCredential: false },
268
- { key: 'actions.polymarket_auto_approve_ctf', category: 'actions', configPath: 'actions.polymarket_auto_approve_ctf', defaultValue: 'true', isCredential: false },
296
+ { key: 'actions.polymarket_enabled', category: 'actions', configPath: 'actions.polymarket_enabled', defaultValue: 'true', isCredential: false, label: 'Polymarket Enabled', description: 'Enable or disable this feature' },
297
+ { key: 'actions.polymarket_default_fee_bps', category: 'actions', configPath: 'actions.polymarket_default_fee_bps', defaultValue: '0', isCredential: false, label: 'Polymarket Default Fee BPS', description: 'Polymarket prediction market setting' },
298
+ { key: 'actions.polymarket_order_expiry_seconds', category: 'actions', configPath: 'actions.polymarket_order_expiry_seconds', defaultValue: '86400', isCredential: false, label: 'Polymarket Order Expiry Seconds', description: 'Polymarket prediction market setting' },
299
+ { key: 'actions.polymarket_max_position_usdc', category: 'actions', configPath: 'actions.polymarket_max_position_usdc', defaultValue: '1000', isCredential: false, label: 'Polymarket Max Position Usdc', description: 'Maximum amount in USD' },
300
+ { key: 'actions.polymarket_proxy_wallet', category: 'actions', configPath: 'actions.polymarket_proxy_wallet', defaultValue: 'false', isCredential: false, label: 'Polymarket Proxy Wallet', description: 'Polymarket prediction market setting' },
301
+ { key: 'actions.polymarket_neg_risk_enabled', category: 'actions', configPath: 'actions.polymarket_neg_risk_enabled', defaultValue: 'true', isCredential: false, label: 'Polymarket Neg Risk Enabled', description: 'Enable or disable this feature' },
302
+ { key: 'actions.polymarket_auto_approve_ctf', category: 'actions', configPath: 'actions.polymarket_auto_approve_ctf', defaultValue: 'true', isCredential: false, label: 'Polymarket Auto Approve Ctf', description: 'Polymarket prediction market setting' },
269
303
  // --- Across Bridge ---
270
- { key: 'actions.across_bridge_enabled', category: 'actions', configPath: 'actions.across_bridge_enabled', defaultValue: 'false', isCredential: false },
271
- { key: 'actions.across_bridge_api_base_url', category: 'actions', configPath: 'actions.across_bridge_api_base_url', defaultValue: 'https://app.across.to/api', isCredential: false },
272
- { key: 'actions.across_bridge_integrator_id', category: 'actions', configPath: 'actions.across_bridge_integrator_id', defaultValue: '', isCredential: false },
273
- { key: 'actions.across_bridge_fill_deadline_buffer_sec', category: 'actions', configPath: 'actions.across_bridge_fill_deadline_buffer_sec', defaultValue: '21600', isCredential: false },
274
- { key: 'actions.across_bridge_default_slippage_pct', category: 'actions', configPath: 'actions.across_bridge_default_slippage_pct', defaultValue: '0.01', isCredential: false },
275
- { key: 'actions.across_bridge_max_slippage_pct', category: 'actions', configPath: 'actions.across_bridge_max_slippage_pct', defaultValue: '0.03', isCredential: false },
276
- { key: 'actions.across_bridge_request_timeout_ms', category: 'actions', configPath: 'actions.across_bridge_request_timeout_ms', defaultValue: '10000', isCredential: false },
304
+ { key: 'actions.across_bridge_enabled', category: 'actions', configPath: 'actions.across_bridge_enabled', defaultValue: 'true', isCredential: false, label: 'Across Bridge Enabled', description: 'Enable or disable this feature' },
305
+ { key: 'actions.across_bridge_api_base_url', category: 'actions', configPath: 'actions.across_bridge_api_base_url', defaultValue: 'https://app.across.to/api', isCredential: false, label: 'Across Bridge API Base URL', description: 'Base URL for external API requests' },
306
+ { key: 'actions.across_bridge_integrator_id', category: 'actions', configPath: 'actions.across_bridge_integrator_id', defaultValue: '', isCredential: false, label: 'Across Bridge Integrator Id', description: 'Across Protocol cross-chain bridge setting' },
307
+ { key: 'actions.across_bridge_fill_deadline_buffer_sec', category: 'actions', configPath: 'actions.across_bridge_fill_deadline_buffer_sec', defaultValue: '21600', isCredential: false, label: 'Across Bridge Fill Deadline Buffer Sec', description: 'Across Protocol cross-chain bridge setting' },
308
+ { key: 'actions.across_bridge_default_slippage_pct', category: 'actions', configPath: 'actions.across_bridge_default_slippage_pct', defaultValue: '0.01', isCredential: false, label: 'Across Bridge Default Slippage %', description: 'Slippage tolerance as decimal percentage' },
309
+ { key: 'actions.across_bridge_max_slippage_pct', category: 'actions', configPath: 'actions.across_bridge_max_slippage_pct', defaultValue: '0.03', isCredential: false, label: 'Across Bridge Max Slippage %', description: 'Slippage tolerance as decimal percentage' },
310
+ { key: 'actions.across_bridge_request_timeout_ms', category: 'actions', configPath: 'actions.across_bridge_request_timeout_ms', defaultValue: '10000', isCredential: false, label: 'Across Bridge Request Timeout ms', description: 'Request timeout in milliseconds' },
277
311
  // --- erc8128 category (ERC-8128 Signed HTTP Requests) ---
278
- { key: 'erc8128.enabled', category: 'erc8128', configPath: 'erc8128.enabled', defaultValue: 'false', isCredential: false },
279
- { key: 'erc8128.default_preset', category: 'erc8128', configPath: 'erc8128.default_preset', defaultValue: 'standard', isCredential: false },
280
- { key: 'erc8128.default_ttl_sec', category: 'erc8128', configPath: 'erc8128.default_ttl_sec', defaultValue: '300', isCredential: false },
281
- { key: 'erc8128.default_nonce', category: 'erc8128', configPath: 'erc8128.default_nonce', defaultValue: 'true', isCredential: false },
282
- { key: 'erc8128.default_algorithm', category: 'erc8128', configPath: 'erc8128.default_algorithm', defaultValue: 'ethereum-eip191', isCredential: false },
283
- { key: 'erc8128.default_rate_limit_rpm', category: 'erc8128', configPath: 'erc8128.default_rate_limit_rpm', defaultValue: '60', isCredential: false },
312
+ { key: 'erc8128.enabled', category: 'erc8128', configPath: 'erc8128.enabled', defaultValue: 'false', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
313
+ { key: 'erc8128.default_preset', category: 'erc8128', configPath: 'erc8128.default_preset', defaultValue: 'standard', isCredential: false, label: 'Default Preset', description: 'Default signing preset for ERC-8128 requests' },
314
+ { key: 'erc8128.default_ttl_sec', category: 'erc8128', configPath: 'erc8128.default_ttl_sec', defaultValue: '300', isCredential: false, label: 'Default TTL Sec', description: 'Cache or data time-to-live duration' },
315
+ { key: 'erc8128.default_nonce', category: 'erc8128', configPath: 'erc8128.default_nonce', defaultValue: 'true', isCredential: false, label: 'Default Nonce', description: 'Include nonce in ERC-8128 signatures by default' },
316
+ { key: 'erc8128.default_algorithm', category: 'erc8128', configPath: 'erc8128.default_algorithm', defaultValue: 'ethereum-eip191', isCredential: false, label: 'Default Algorithm', description: 'Default signing algorithm for ERC-8128' },
317
+ { key: 'erc8128.default_rate_limit_rpm', category: 'erc8128', configPath: 'erc8128.default_rate_limit_rpm', defaultValue: '60', isCredential: false, label: 'Default Rate Limit RPM', description: 'Rate limit: maximum requests per minute' },
284
318
  // --- rpc_proxy category (EVM RPC proxy mode settings) ---
285
- { key: 'rpc_proxy.enabled', category: 'rpc_proxy', configPath: 'rpc_proxy.enabled', defaultValue: 'false', isCredential: false },
286
- { key: 'rpc_proxy.allowed_methods', category: 'rpc_proxy', configPath: 'rpc_proxy.allowed_methods', defaultValue: '[]', isCredential: false },
287
- { key: 'rpc_proxy.delay_timeout_seconds', category: 'rpc_proxy', configPath: 'rpc_proxy.delay_timeout_seconds', defaultValue: '300', isCredential: false },
288
- { key: 'rpc_proxy.approval_timeout_seconds', category: 'rpc_proxy', configPath: 'rpc_proxy.approval_timeout_seconds', defaultValue: '600', isCredential: false },
289
- { key: 'rpc_proxy.max_gas_limit', category: 'rpc_proxy', configPath: 'rpc_proxy.max_gas_limit', defaultValue: '30000000', isCredential: false },
290
- { key: 'rpc_proxy.max_bytecode_size', category: 'rpc_proxy', configPath: 'rpc_proxy.max_bytecode_size', defaultValue: '49152', isCredential: false },
291
- { key: 'rpc_proxy.deploy_default_tier', category: 'rpc_proxy', configPath: 'rpc_proxy.deploy_default_tier', defaultValue: 'APPROVAL', isCredential: false },
319
+ { key: 'rpc_proxy.enabled', category: 'rpc_proxy', configPath: 'rpc_proxy.enabled', defaultValue: 'false', isCredential: false, label: 'Enabled', description: 'Enable or disable this feature' },
320
+ { key: 'rpc_proxy.allowed_methods', category: 'rpc_proxy', configPath: 'rpc_proxy.allowed_methods', defaultValue: '[]', isCredential: false, label: 'Allowed Methods', description: 'JSON array of allowed RPC methods for proxy' },
321
+ { key: 'rpc_proxy.delay_timeout_seconds', category: 'rpc_proxy', configPath: 'rpc_proxy.delay_timeout_seconds', defaultValue: '300', isCredential: false, label: 'Delay Timeout Seconds', description: 'Delay timeout for proxied signing transactions' },
322
+ { key: 'rpc_proxy.approval_timeout_seconds', category: 'rpc_proxy', configPath: 'rpc_proxy.approval_timeout_seconds', defaultValue: '600', isCredential: false, label: 'Approval Timeout Seconds', description: 'Approval timeout for proxied signing transactions' },
323
+ { key: 'rpc_proxy.max_gas_limit', category: 'rpc_proxy', configPath: 'rpc_proxy.max_gas_limit', defaultValue: '30000000', isCredential: false, label: 'Max Gas Limit', description: 'Maximum gas limit for proxied transactions' },
324
+ { key: 'rpc_proxy.max_bytecode_size', category: 'rpc_proxy', configPath: 'rpc_proxy.max_bytecode_size', defaultValue: '49152', isCredential: false, label: 'Max Bytecode Size', description: 'Maximum bytecode size for contract deployment via proxy' },
325
+ { key: 'rpc_proxy.deploy_default_tier', category: 'rpc_proxy', configPath: 'rpc_proxy.deploy_default_tier', defaultValue: 'APPROVAL', isCredential: false, label: 'Deploy Default Tier', description: 'Default security tier for contract deployments via proxy' },
292
326
  ];
293
327
  // ---------------------------------------------------------------------------
294
328
  // [Phase 331] Action tier override Zod schema
@@ -316,6 +350,8 @@ function getDynamicTierDefinition(key) {
316
350
  configPath: key,
317
351
  defaultValue: '',
318
352
  isCredential: false,
353
+ label: deriveLabel(key),
354
+ description: 'Action tier override (INSTANT, NOTIFY, DELAY, APPROVAL, or empty for provider default)',
319
355
  };
320
356
  }
321
357
  // ---------------------------------------------------------------------------
@@ -328,4 +364,50 @@ const definitionMap = new Map(SETTING_DEFINITIONS.map((def) => [def.key, def]));
328
364
  export function getSettingDefinition(key) {
329
365
  return definitionMap.get(key) ?? getDynamicTierDefinition(key);
330
366
  }
367
+ // ---------------------------------------------------------------------------
368
+ // Category labels
369
+ // ---------------------------------------------------------------------------
370
+ const CATEGORY_LABELS = {
371
+ notifications: 'Notifications',
372
+ rpc: 'RPC Endpoints',
373
+ security: 'Security',
374
+ policy: 'Policy Defaults',
375
+ daemon: 'Daemon',
376
+ walletconnect: 'WalletConnect',
377
+ oracle: 'Price Oracle',
378
+ display: 'Display',
379
+ autostop: 'Auto-Stop',
380
+ monitoring: 'Balance Monitoring',
381
+ telegram: 'Telegram Bot',
382
+ signing_sdk: 'Signing SDK',
383
+ incoming: 'Incoming TX Monitor',
384
+ actions: 'Action Providers',
385
+ gas_condition: 'Gas Conditional',
386
+ rpc_pool: 'RPC Pool',
387
+ position_tracker: 'Position Tracker',
388
+ smart_account: 'Smart Account',
389
+ erc8128: 'ERC-8128',
390
+ rpc_proxy: 'RPC Proxy',
391
+ };
392
+ /**
393
+ * Group all setting definitions by category.
394
+ * Returns an array of { name, label, settings } objects.
395
+ */
396
+ export function groupSettingsByCategory() {
397
+ const groups = new Map();
398
+ for (const def of SETTING_DEFINITIONS) {
399
+ const existing = groups.get(def.category);
400
+ if (existing) {
401
+ existing.push(def);
402
+ }
403
+ else {
404
+ groups.set(def.category, [def]);
405
+ }
406
+ }
407
+ return Array.from(groups.entries()).map(([name, settings]) => ({
408
+ name,
409
+ label: CATEGORY_LABELS[name] ?? name,
410
+ settings,
411
+ }));
412
+ }
331
413
  //# sourceMappingURL=setting-keys.js.map