@waiaas/daemon 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/dist/api/error-hints.d.ts +15 -0
  2. package/dist/api/error-hints.d.ts.map +1 -0
  3. package/dist/api/error-hints.js +71 -0
  4. package/dist/api/error-hints.js.map +1 -0
  5. package/dist/api/index.d.ts +11 -0
  6. package/dist/api/index.d.ts.map +1 -0
  7. package/dist/api/index.js +14 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/api/middleware/address-validation.d.ts +38 -0
  10. package/dist/api/middleware/address-validation.d.ts.map +1 -0
  11. package/dist/api/middleware/address-validation.js +134 -0
  12. package/dist/api/middleware/address-validation.js.map +1 -0
  13. package/dist/api/middleware/csp.d.ts +17 -0
  14. package/dist/api/middleware/csp.d.ts.map +1 -0
  15. package/dist/api/middleware/csp.js +31 -0
  16. package/dist/api/middleware/csp.js.map +1 -0
  17. package/dist/api/middleware/error-handler.d.ts +16 -0
  18. package/dist/api/middleware/error-handler.d.ts.map +1 -0
  19. package/dist/api/middleware/error-handler.js +46 -0
  20. package/dist/api/middleware/error-handler.js.map +1 -0
  21. package/dist/api/middleware/host-guard.d.ts +11 -0
  22. package/dist/api/middleware/host-guard.d.ts.map +1 -0
  23. package/dist/api/middleware/host-guard.js +25 -0
  24. package/dist/api/middleware/host-guard.js.map +1 -0
  25. package/dist/api/middleware/index.d.ts +13 -0
  26. package/dist/api/middleware/index.d.ts.map +1 -0
  27. package/dist/api/middleware/index.js +13 -0
  28. package/dist/api/middleware/index.js.map +1 -0
  29. package/dist/api/middleware/kill-switch-guard.d.ts +19 -0
  30. package/dist/api/middleware/kill-switch-guard.d.ts.map +1 -0
  31. package/dist/api/middleware/kill-switch-guard.js +49 -0
  32. package/dist/api/middleware/kill-switch-guard.js.map +1 -0
  33. package/dist/api/middleware/master-auth.d.ts +15 -0
  34. package/dist/api/middleware/master-auth.d.ts.map +1 -0
  35. package/dist/api/middleware/master-auth.js +35 -0
  36. package/dist/api/middleware/master-auth.js.map +1 -0
  37. package/dist/api/middleware/owner-auth.d.ts +30 -0
  38. package/dist/api/middleware/owner-auth.d.ts.map +1 -0
  39. package/dist/api/middleware/owner-auth.js +133 -0
  40. package/dist/api/middleware/owner-auth.js.map +1 -0
  41. package/dist/api/middleware/request-id.d.ts +10 -0
  42. package/dist/api/middleware/request-id.d.ts.map +1 -0
  43. package/dist/api/middleware/request-id.js +18 -0
  44. package/dist/api/middleware/request-id.js.map +1 -0
  45. package/dist/api/middleware/request-logger.d.ts +9 -0
  46. package/dist/api/middleware/request-logger.d.ts.map +1 -0
  47. package/dist/api/middleware/request-logger.js +18 -0
  48. package/dist/api/middleware/request-logger.js.map +1 -0
  49. package/dist/api/middleware/session-auth.d.ts +21 -0
  50. package/dist/api/middleware/session-auth.d.ts.map +1 -0
  51. package/dist/api/middleware/session-auth.js +51 -0
  52. package/dist/api/middleware/session-auth.js.map +1 -0
  53. package/dist/api/middleware/siwe-verify.d.ts +31 -0
  54. package/dist/api/middleware/siwe-verify.d.ts.map +1 -0
  55. package/dist/api/middleware/siwe-verify.js +55 -0
  56. package/dist/api/middleware/siwe-verify.js.map +1 -0
  57. package/dist/api/routes/actions.d.ts +56 -0
  58. package/dist/api/routes/actions.d.ts.map +1 -0
  59. package/dist/api/routes/actions.js +291 -0
  60. package/dist/api/routes/actions.js.map +1 -0
  61. package/dist/api/routes/admin.d.ts +99 -0
  62. package/dist/api/routes/admin.d.ts.map +1 -0
  63. package/dist/api/routes/admin.js +1304 -0
  64. package/dist/api/routes/admin.js.map +1 -0
  65. package/dist/api/routes/display-currency-helper.d.ts +26 -0
  66. package/dist/api/routes/display-currency-helper.d.ts.map +1 -0
  67. package/dist/api/routes/display-currency-helper.js +47 -0
  68. package/dist/api/routes/display-currency-helper.js.map +1 -0
  69. package/dist/api/routes/health.d.ts +14 -0
  70. package/dist/api/routes/health.d.ts.map +1 -0
  71. package/dist/api/routes/health.js +47 -0
  72. package/dist/api/routes/health.js.map +1 -0
  73. package/dist/api/routes/index.d.ts +15 -0
  74. package/dist/api/routes/index.d.ts.map +1 -0
  75. package/dist/api/routes/index.js +15 -0
  76. package/dist/api/routes/index.js.map +1 -0
  77. package/dist/api/routes/mcp.d.ts +30 -0
  78. package/dist/api/routes/mcp.d.ts.map +1 -0
  79. package/dist/api/routes/mcp.js +156 -0
  80. package/dist/api/routes/mcp.js.map +1 -0
  81. package/dist/api/routes/nonce.d.ts +20 -0
  82. package/dist/api/routes/nonce.d.ts.map +1 -0
  83. package/dist/api/routes/nonce.js +48 -0
  84. package/dist/api/routes/nonce.js.map +1 -0
  85. package/dist/api/routes/openapi-schemas.d.ts +2281 -0
  86. package/dist/api/routes/openapi-schemas.d.ts.map +1 -0
  87. package/dist/api/routes/openapi-schemas.js +770 -0
  88. package/dist/api/routes/openapi-schemas.js.map +1 -0
  89. package/dist/api/routes/policies.d.ts +29 -0
  90. package/dist/api/routes/policies.d.ts.map +1 -0
  91. package/dist/api/routes/policies.js +332 -0
  92. package/dist/api/routes/policies.js.map +1 -0
  93. package/dist/api/routes/sessions.d.ts +35 -0
  94. package/dist/api/routes/sessions.d.ts.map +1 -0
  95. package/dist/api/routes/sessions.js +347 -0
  96. package/dist/api/routes/sessions.js.map +1 -0
  97. package/dist/api/routes/skills.d.ts +9 -0
  98. package/dist/api/routes/skills.d.ts.map +1 -0
  99. package/dist/api/routes/skills.js +59 -0
  100. package/dist/api/routes/skills.js.map +1 -0
  101. package/dist/api/routes/tokens.d.ts +25 -0
  102. package/dist/api/routes/tokens.d.ts.map +1 -0
  103. package/dist/api/routes/tokens.js +161 -0
  104. package/dist/api/routes/tokens.js.map +1 -0
  105. package/dist/api/routes/transactions.d.ts +68 -0
  106. package/dist/api/routes/transactions.d.ts.map +1 -0
  107. package/dist/api/routes/transactions.js +576 -0
  108. package/dist/api/routes/transactions.js.map +1 -0
  109. package/dist/api/routes/utils.d.ts +9 -0
  110. package/dist/api/routes/utils.d.ts.map +1 -0
  111. package/dist/api/routes/utils.js +52 -0
  112. package/dist/api/routes/utils.js.map +1 -0
  113. package/dist/api/routes/wallet.d.ts +36 -0
  114. package/dist/api/routes/wallet.d.ts.map +1 -0
  115. package/dist/api/routes/wallet.js +358 -0
  116. package/dist/api/routes/wallet.js.map +1 -0
  117. package/dist/api/routes/wallets.d.ts +43 -0
  118. package/dist/api/routes/wallets.d.ts.map +1 -0
  119. package/dist/api/routes/wallets.js +630 -0
  120. package/dist/api/routes/wallets.js.map +1 -0
  121. package/dist/api/routes/wc.d.ts +46 -0
  122. package/dist/api/routes/wc.d.ts.map +1 -0
  123. package/dist/api/routes/wc.js +354 -0
  124. package/dist/api/routes/wc.js.map +1 -0
  125. package/dist/api/routes/x402.d.ts +61 -0
  126. package/dist/api/routes/x402.d.ts.map +1 -0
  127. package/dist/api/routes/x402.js +493 -0
  128. package/dist/api/routes/x402.js.map +1 -0
  129. package/dist/api/server.d.ts +81 -0
  130. package/dist/api/server.d.ts.map +1 -0
  131. package/dist/api/server.js +406 -0
  132. package/dist/api/server.js.map +1 -0
  133. package/dist/index.d.ts +35 -0
  134. package/dist/index.d.ts.map +1 -0
  135. package/dist/index.js +43 -0
  136. package/dist/index.js.map +1 -0
  137. package/dist/infrastructure/action/action-provider-registry.d.ts +77 -0
  138. package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -0
  139. package/dist/infrastructure/action/action-provider-registry.js +239 -0
  140. package/dist/infrastructure/action/action-provider-registry.js.map +1 -0
  141. package/dist/infrastructure/action/api-key-store.d.ts +60 -0
  142. package/dist/infrastructure/action/api-key-store.d.ts.map +1 -0
  143. package/dist/infrastructure/action/api-key-store.js +130 -0
  144. package/dist/infrastructure/action/api-key-store.js.map +1 -0
  145. package/dist/infrastructure/action/index.d.ts +10 -0
  146. package/dist/infrastructure/action/index.d.ts.map +1 -0
  147. package/dist/infrastructure/action/index.js +9 -0
  148. package/dist/infrastructure/action/index.js.map +1 -0
  149. package/dist/infrastructure/adapter-pool.d.ts +50 -0
  150. package/dist/infrastructure/adapter-pool.d.ts.map +1 -0
  151. package/dist/infrastructure/adapter-pool.js +110 -0
  152. package/dist/infrastructure/adapter-pool.js.map +1 -0
  153. package/dist/infrastructure/backup/backup-service.d.ts +53 -0
  154. package/dist/infrastructure/backup/backup-service.d.ts.map +1 -0
  155. package/dist/infrastructure/backup/backup-service.js +158 -0
  156. package/dist/infrastructure/backup/backup-service.js.map +1 -0
  157. package/dist/infrastructure/backup/index.d.ts +2 -0
  158. package/dist/infrastructure/backup/index.d.ts.map +1 -0
  159. package/dist/infrastructure/backup/index.js +2 -0
  160. package/dist/infrastructure/backup/index.js.map +1 -0
  161. package/dist/infrastructure/config/index.d.ts +8 -0
  162. package/dist/infrastructure/config/index.d.ts.map +1 -0
  163. package/dist/infrastructure/config/index.js +7 -0
  164. package/dist/infrastructure/config/index.js.map +1 -0
  165. package/dist/infrastructure/config/loader.d.ts +555 -0
  166. package/dist/infrastructure/config/loader.d.ts.map +1 -0
  167. package/dist/infrastructure/config/loader.js +311 -0
  168. package/dist/infrastructure/config/loader.js.map +1 -0
  169. package/dist/infrastructure/database/checks.d.ts +19 -0
  170. package/dist/infrastructure/database/checks.d.ts.map +1 -0
  171. package/dist/infrastructure/database/checks.js +27 -0
  172. package/dist/infrastructure/database/checks.js.map +1 -0
  173. package/dist/infrastructure/database/compatibility.d.ts +36 -0
  174. package/dist/infrastructure/database/compatibility.d.ts.map +1 -0
  175. package/dist/infrastructure/database/compatibility.js +75 -0
  176. package/dist/infrastructure/database/compatibility.js.map +1 -0
  177. package/dist/infrastructure/database/connection.d.ts +36 -0
  178. package/dist/infrastructure/database/connection.d.ts.map +1 -0
  179. package/dist/infrastructure/database/connection.js +47 -0
  180. package/dist/infrastructure/database/connection.js.map +1 -0
  181. package/dist/infrastructure/database/id.d.ts +17 -0
  182. package/dist/infrastructure/database/id.d.ts.map +1 -0
  183. package/dist/infrastructure/database/id.js +20 -0
  184. package/dist/infrastructure/database/id.js.map +1 -0
  185. package/dist/infrastructure/database/index.d.ts +15 -0
  186. package/dist/infrastructure/database/index.d.ts.map +1 -0
  187. package/dist/infrastructure/database/index.js +12 -0
  188. package/dist/infrastructure/database/index.js.map +1 -0
  189. package/dist/infrastructure/database/migrate.d.ts +76 -0
  190. package/dist/infrastructure/database/migrate.d.ts.map +1 -0
  191. package/dist/infrastructure/database/migrate.js +1214 -0
  192. package/dist/infrastructure/database/migrate.js.map +1 -0
  193. package/dist/infrastructure/database/schema.d.ts +2352 -0
  194. package/dist/infrastructure/database/schema.d.ts.map +1 -0
  195. package/dist/infrastructure/database/schema.js +288 -0
  196. package/dist/infrastructure/database/schema.js.map +1 -0
  197. package/dist/infrastructure/jwt/index.d.ts +2 -0
  198. package/dist/infrastructure/jwt/index.d.ts.map +1 -0
  199. package/dist/infrastructure/jwt/index.js +2 -0
  200. package/dist/infrastructure/jwt/index.js.map +1 -0
  201. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts +58 -0
  202. package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -0
  203. package/dist/infrastructure/jwt/jwt-secret-manager.js +222 -0
  204. package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -0
  205. package/dist/infrastructure/keystore/crypto.d.ts +62 -0
  206. package/dist/infrastructure/keystore/crypto.d.ts.map +1 -0
  207. package/dist/infrastructure/keystore/crypto.js +89 -0
  208. package/dist/infrastructure/keystore/crypto.js.map +1 -0
  209. package/dist/infrastructure/keystore/index.d.ts +4 -0
  210. package/dist/infrastructure/keystore/index.d.ts.map +1 -0
  211. package/dist/infrastructure/keystore/index.js +5 -0
  212. package/dist/infrastructure/keystore/index.js.map +1 -0
  213. package/dist/infrastructure/keystore/keystore.d.ts +115 -0
  214. package/dist/infrastructure/keystore/keystore.d.ts.map +1 -0
  215. package/dist/infrastructure/keystore/keystore.js +327 -0
  216. package/dist/infrastructure/keystore/keystore.js.map +1 -0
  217. package/dist/infrastructure/keystore/memory.d.ts +45 -0
  218. package/dist/infrastructure/keystore/memory.d.ts.map +1 -0
  219. package/dist/infrastructure/keystore/memory.js +105 -0
  220. package/dist/infrastructure/keystore/memory.js.map +1 -0
  221. package/dist/infrastructure/oracle/coingecko-forex.d.ts +35 -0
  222. package/dist/infrastructure/oracle/coingecko-forex.d.ts.map +1 -0
  223. package/dist/infrastructure/oracle/coingecko-forex.js +69 -0
  224. package/dist/infrastructure/oracle/coingecko-forex.js.map +1 -0
  225. package/dist/infrastructure/oracle/coingecko-oracle.d.ts +73 -0
  226. package/dist/infrastructure/oracle/coingecko-oracle.d.ts.map +1 -0
  227. package/dist/infrastructure/oracle/coingecko-oracle.js +199 -0
  228. package/dist/infrastructure/oracle/coingecko-oracle.js.map +1 -0
  229. package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts +32 -0
  230. package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts.map +1 -0
  231. package/dist/infrastructure/oracle/coingecko-platform-ids.js +30 -0
  232. package/dist/infrastructure/oracle/coingecko-platform-ids.js.map +1 -0
  233. package/dist/infrastructure/oracle/forex-currencies.d.ts +36 -0
  234. package/dist/infrastructure/oracle/forex-currencies.d.ts.map +1 -0
  235. package/dist/infrastructure/oracle/forex-currencies.js +71 -0
  236. package/dist/infrastructure/oracle/forex-currencies.js.map +1 -0
  237. package/dist/infrastructure/oracle/forex-rate-service.d.ts +51 -0
  238. package/dist/infrastructure/oracle/forex-rate-service.d.ts.map +1 -0
  239. package/dist/infrastructure/oracle/forex-rate-service.js +149 -0
  240. package/dist/infrastructure/oracle/forex-rate-service.js.map +1 -0
  241. package/dist/infrastructure/oracle/index.d.ts +18 -0
  242. package/dist/infrastructure/oracle/index.d.ts.map +1 -0
  243. package/dist/infrastructure/oracle/index.js +19 -0
  244. package/dist/infrastructure/oracle/index.js.map +1 -0
  245. package/dist/infrastructure/oracle/oracle-chain.d.ts +101 -0
  246. package/dist/infrastructure/oracle/oracle-chain.d.ts.map +1 -0
  247. package/dist/infrastructure/oracle/oracle-chain.js +163 -0
  248. package/dist/infrastructure/oracle/oracle-chain.js.map +1 -0
  249. package/dist/infrastructure/oracle/oracle-errors.d.ts +42 -0
  250. package/dist/infrastructure/oracle/oracle-errors.d.ts.map +1 -0
  251. package/dist/infrastructure/oracle/oracle-errors.js +53 -0
  252. package/dist/infrastructure/oracle/oracle-errors.js.map +1 -0
  253. package/dist/infrastructure/oracle/price-age.d.ts +38 -0
  254. package/dist/infrastructure/oracle/price-age.d.ts.map +1 -0
  255. package/dist/infrastructure/oracle/price-age.js +44 -0
  256. package/dist/infrastructure/oracle/price-age.js.map +1 -0
  257. package/dist/infrastructure/oracle/price-cache.d.ts +99 -0
  258. package/dist/infrastructure/oracle/price-cache.d.ts.map +1 -0
  259. package/dist/infrastructure/oracle/price-cache.js +173 -0
  260. package/dist/infrastructure/oracle/price-cache.js.map +1 -0
  261. package/dist/infrastructure/oracle/pyth-feed-ids.d.ts +31 -0
  262. package/dist/infrastructure/oracle/pyth-feed-ids.d.ts.map +1 -0
  263. package/dist/infrastructure/oracle/pyth-feed-ids.js +44 -0
  264. package/dist/infrastructure/oracle/pyth-feed-ids.js.map +1 -0
  265. package/dist/infrastructure/oracle/pyth-oracle.d.ts +69 -0
  266. package/dist/infrastructure/oracle/pyth-oracle.d.ts.map +1 -0
  267. package/dist/infrastructure/oracle/pyth-oracle.js +149 -0
  268. package/dist/infrastructure/oracle/pyth-oracle.js.map +1 -0
  269. package/dist/infrastructure/settings/hot-reload.d.ts +71 -0
  270. package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -0
  271. package/dist/infrastructure/settings/hot-reload.js +315 -0
  272. package/dist/infrastructure/settings/hot-reload.js.map +1 -0
  273. package/dist/infrastructure/settings/index.d.ts +13 -0
  274. package/dist/infrastructure/settings/index.d.ts.map +1 -0
  275. package/dist/infrastructure/settings/index.js +10 -0
  276. package/dist/infrastructure/settings/index.js.map +1 -0
  277. package/dist/infrastructure/settings/setting-keys.d.ts +28 -0
  278. package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -0
  279. package/dist/infrastructure/settings/setting-keys.js +105 -0
  280. package/dist/infrastructure/settings/setting-keys.js.map +1 -0
  281. package/dist/infrastructure/settings/settings-crypto.d.ts +39 -0
  282. package/dist/infrastructure/settings/settings-crypto.d.ts.map +1 -0
  283. package/dist/infrastructure/settings/settings-crypto.js +73 -0
  284. package/dist/infrastructure/settings/settings-crypto.js.map +1 -0
  285. package/dist/infrastructure/settings/settings-service.d.ts +82 -0
  286. package/dist/infrastructure/settings/settings-service.d.ts.map +1 -0
  287. package/dist/infrastructure/settings/settings-service.js +267 -0
  288. package/dist/infrastructure/settings/settings-service.js.map +1 -0
  289. package/dist/infrastructure/telegram/index.d.ts +6 -0
  290. package/dist/infrastructure/telegram/index.d.ts.map +1 -0
  291. package/dist/infrastructure/telegram/index.js +5 -0
  292. package/dist/infrastructure/telegram/index.js.map +1 -0
  293. package/dist/infrastructure/telegram/telegram-api.d.ts +35 -0
  294. package/dist/infrastructure/telegram/telegram-api.d.ts.map +1 -0
  295. package/dist/infrastructure/telegram/telegram-api.js +82 -0
  296. package/dist/infrastructure/telegram/telegram-api.js.map +1 -0
  297. package/dist/infrastructure/telegram/telegram-auth.d.ts +57 -0
  298. package/dist/infrastructure/telegram/telegram-auth.d.ts.map +1 -0
  299. package/dist/infrastructure/telegram/telegram-auth.js +88 -0
  300. package/dist/infrastructure/telegram/telegram-auth.js.map +1 -0
  301. package/dist/infrastructure/telegram/telegram-bot-service.d.ts +95 -0
  302. package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -0
  303. package/dist/infrastructure/telegram/telegram-bot-service.js +564 -0
  304. package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -0
  305. package/dist/infrastructure/telegram/telegram-keyboard.d.ts +27 -0
  306. package/dist/infrastructure/telegram/telegram-keyboard.d.ts.map +1 -0
  307. package/dist/infrastructure/telegram/telegram-keyboard.js +52 -0
  308. package/dist/infrastructure/telegram/telegram-keyboard.js.map +1 -0
  309. package/dist/infrastructure/telegram/telegram-types.d.ts +43 -0
  310. package/dist/infrastructure/telegram/telegram-types.d.ts.map +1 -0
  311. package/dist/infrastructure/telegram/telegram-types.js +8 -0
  312. package/dist/infrastructure/telegram/telegram-types.js.map +1 -0
  313. package/dist/infrastructure/token-registry/builtin-tokens.d.ts +39 -0
  314. package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -0
  315. package/dist/infrastructure/token-registry/builtin-tokens.js +135 -0
  316. package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -0
  317. package/dist/infrastructure/token-registry/index.d.ts +8 -0
  318. package/dist/infrastructure/token-registry/index.d.ts.map +1 -0
  319. package/dist/infrastructure/token-registry/index.js +8 -0
  320. package/dist/infrastructure/token-registry/index.js.map +1 -0
  321. package/dist/infrastructure/token-registry/token-registry-service.d.ts +49 -0
  322. package/dist/infrastructure/token-registry/token-registry-service.d.ts.map +1 -0
  323. package/dist/infrastructure/token-registry/token-registry-service.js +93 -0
  324. package/dist/infrastructure/token-registry/token-registry-service.js.map +1 -0
  325. package/dist/infrastructure/version/index.d.ts +5 -0
  326. package/dist/infrastructure/version/index.d.ts.map +1 -0
  327. package/dist/infrastructure/version/index.js +5 -0
  328. package/dist/infrastructure/version/index.js.map +1 -0
  329. package/dist/infrastructure/version/version-check-service.d.ts +35 -0
  330. package/dist/infrastructure/version/version-check-service.d.ts.map +1 -0
  331. package/dist/infrastructure/version/version-check-service.js +92 -0
  332. package/dist/infrastructure/version/version-check-service.js.map +1 -0
  333. package/dist/lifecycle/daemon.d.ts +103 -0
  334. package/dist/lifecycle/daemon.d.ts.map +1 -0
  335. package/dist/lifecycle/daemon.js +934 -0
  336. package/dist/lifecycle/daemon.js.map +1 -0
  337. package/dist/lifecycle/index.d.ts +9 -0
  338. package/dist/lifecycle/index.d.ts.map +1 -0
  339. package/dist/lifecycle/index.js +9 -0
  340. package/dist/lifecycle/index.js.map +1 -0
  341. package/dist/lifecycle/signal-handler.d.ts +18 -0
  342. package/dist/lifecycle/signal-handler.d.ts.map +1 -0
  343. package/dist/lifecycle/signal-handler.js +37 -0
  344. package/dist/lifecycle/signal-handler.js.map +1 -0
  345. package/dist/lifecycle/workers.d.ts +46 -0
  346. package/dist/lifecycle/workers.d.ts.map +1 -0
  347. package/dist/lifecycle/workers.js +101 -0
  348. package/dist/lifecycle/workers.js.map +1 -0
  349. package/dist/notifications/channels/discord.d.ts +10 -0
  350. package/dist/notifications/channels/discord.d.ts.map +1 -0
  351. package/dist/notifications/channels/discord.js +54 -0
  352. package/dist/notifications/channels/discord.js.map +1 -0
  353. package/dist/notifications/channels/ntfy.d.ts +13 -0
  354. package/dist/notifications/channels/ntfy.d.ts.map +1 -0
  355. package/dist/notifications/channels/ntfy.js +58 -0
  356. package/dist/notifications/channels/ntfy.js.map +1 -0
  357. package/dist/notifications/channels/slack.d.ts +10 -0
  358. package/dist/notifications/channels/slack.d.ts.map +1 -0
  359. package/dist/notifications/channels/slack.js +55 -0
  360. package/dist/notifications/channels/slack.js.map +1 -0
  361. package/dist/notifications/channels/telegram.d.ts +10 -0
  362. package/dist/notifications/channels/telegram.d.ts.map +1 -0
  363. package/dist/notifications/channels/telegram.js +40 -0
  364. package/dist/notifications/channels/telegram.js.map +1 -0
  365. package/dist/notifications/index.d.ts +9 -0
  366. package/dist/notifications/index.d.ts.map +1 -0
  367. package/dist/notifications/index.js +7 -0
  368. package/dist/notifications/index.js.map +1 -0
  369. package/dist/notifications/notification-service.d.ts +75 -0
  370. package/dist/notifications/notification-service.d.ts.map +1 -0
  371. package/dist/notifications/notification-service.js +213 -0
  372. package/dist/notifications/notification-service.js.map +1 -0
  373. package/dist/notifications/templates/message-templates.d.ts +12 -0
  374. package/dist/notifications/templates/message-templates.d.ts.map +1 -0
  375. package/dist/notifications/templates/message-templates.js +22 -0
  376. package/dist/notifications/templates/message-templates.js.map +1 -0
  377. package/dist/pipeline/database-policy-engine.d.ts +286 -0
  378. package/dist/pipeline/database-policy-engine.d.ts.map +1 -0
  379. package/dist/pipeline/database-policy-engine.js +992 -0
  380. package/dist/pipeline/database-policy-engine.js.map +1 -0
  381. package/dist/pipeline/default-policy-engine.d.ts +26 -0
  382. package/dist/pipeline/default-policy-engine.d.ts.map +1 -0
  383. package/dist/pipeline/default-policy-engine.js +25 -0
  384. package/dist/pipeline/default-policy-engine.js.map +1 -0
  385. package/dist/pipeline/index.d.ts +9 -0
  386. package/dist/pipeline/index.d.ts.map +1 -0
  387. package/dist/pipeline/index.js +9 -0
  388. package/dist/pipeline/index.js.map +1 -0
  389. package/dist/pipeline/network-resolver.d.ts +22 -0
  390. package/dist/pipeline/network-resolver.d.ts.map +1 -0
  391. package/dist/pipeline/network-resolver.js +32 -0
  392. package/dist/pipeline/network-resolver.js.map +1 -0
  393. package/dist/pipeline/pipeline.d.ts +72 -0
  394. package/dist/pipeline/pipeline.d.ts.map +1 -0
  395. package/dist/pipeline/pipeline.js +87 -0
  396. package/dist/pipeline/pipeline.js.map +1 -0
  397. package/dist/pipeline/resolve-effective-amount-usd.d.ts +41 -0
  398. package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -0
  399. package/dist/pipeline/resolve-effective-amount-usd.js +208 -0
  400. package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -0
  401. package/dist/pipeline/sign-only.d.ts +99 -0
  402. package/dist/pipeline/sign-only.d.ts.map +1 -0
  403. package/dist/pipeline/sign-only.js +267 -0
  404. package/dist/pipeline/sign-only.js.map +1 -0
  405. package/dist/pipeline/sleep.d.ts +6 -0
  406. package/dist/pipeline/sleep.d.ts.map +1 -0
  407. package/dist/pipeline/sleep.js +8 -0
  408. package/dist/pipeline/sleep.js.map +1 -0
  409. package/dist/pipeline/stages.d.ts +82 -0
  410. package/dist/pipeline/stages.d.ts.map +1 -0
  411. package/dist/pipeline/stages.js +784 -0
  412. package/dist/pipeline/stages.js.map +1 -0
  413. package/dist/services/autostop-rules.d.ts +79 -0
  414. package/dist/services/autostop-rules.d.ts.map +1 -0
  415. package/dist/services/autostop-rules.js +174 -0
  416. package/dist/services/autostop-rules.js.map +1 -0
  417. package/dist/services/autostop-service.d.ts +82 -0
  418. package/dist/services/autostop-service.d.ts.map +1 -0
  419. package/dist/services/autostop-service.js +223 -0
  420. package/dist/services/autostop-service.js.map +1 -0
  421. package/dist/services/kill-switch-service.d.ts +118 -0
  422. package/dist/services/kill-switch-service.d.ts.map +1 -0
  423. package/dist/services/kill-switch-service.js +291 -0
  424. package/dist/services/kill-switch-service.js.map +1 -0
  425. package/dist/services/monitoring/balance-monitor-service.d.ts +65 -0
  426. package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -0
  427. package/dist/services/monitoring/balance-monitor-service.js +207 -0
  428. package/dist/services/monitoring/balance-monitor-service.js.map +1 -0
  429. package/dist/services/wc-session-service.d.ts +123 -0
  430. package/dist/services/wc-session-service.d.ts.map +1 -0
  431. package/dist/services/wc-session-service.js +363 -0
  432. package/dist/services/wc-session-service.js.map +1 -0
  433. package/dist/services/wc-signing-bridge.d.ts +60 -0
  434. package/dist/services/wc-signing-bridge.d.ts.map +1 -0
  435. package/dist/services/wc-signing-bridge.js +334 -0
  436. package/dist/services/wc-signing-bridge.js.map +1 -0
  437. package/dist/services/wc-storage.d.ts +32 -0
  438. package/dist/services/wc-storage.d.ts.map +1 -0
  439. package/dist/services/wc-storage.js +64 -0
  440. package/dist/services/wc-storage.js.map +1 -0
  441. package/dist/services/x402/payment-signer.d.ts +88 -0
  442. package/dist/services/x402/payment-signer.d.ts.map +1 -0
  443. package/dist/services/x402/payment-signer.js +311 -0
  444. package/dist/services/x402/payment-signer.js.map +1 -0
  445. package/dist/services/x402/ssrf-guard.d.ts +27 -0
  446. package/dist/services/x402/ssrf-guard.d.ts.map +1 -0
  447. package/dist/services/x402/ssrf-guard.js +236 -0
  448. package/dist/services/x402/ssrf-guard.js.map +1 -0
  449. package/dist/services/x402/x402-domain-policy.d.ts +50 -0
  450. package/dist/services/x402/x402-domain-policy.d.ts.map +1 -0
  451. package/dist/services/x402/x402-domain-policy.js +78 -0
  452. package/dist/services/x402/x402-domain-policy.js.map +1 -0
  453. package/dist/services/x402/x402-handler.d.ts +71 -0
  454. package/dist/services/x402/x402-handler.d.ts.map +1 -0
  455. package/dist/services/x402/x402-handler.js +195 -0
  456. package/dist/services/x402/x402-handler.js.map +1 -0
  457. package/dist/services/x402/x402-usd-resolver.d.ts +26 -0
  458. package/dist/services/x402/x402-usd-resolver.d.ts.map +1 -0
  459. package/dist/services/x402/x402-usd-resolver.js +79 -0
  460. package/dist/services/x402/x402-usd-resolver.js.map +1 -0
  461. package/dist/workflow/approval-workflow.d.ts +103 -0
  462. package/dist/workflow/approval-workflow.d.ts.map +1 -0
  463. package/dist/workflow/approval-workflow.js +202 -0
  464. package/dist/workflow/approval-workflow.js.map +1 -0
  465. package/dist/workflow/delay-queue.d.ts +78 -0
  466. package/dist/workflow/delay-queue.d.ts.map +1 -0
  467. package/dist/workflow/delay-queue.js +174 -0
  468. package/dist/workflow/delay-queue.js.map +1 -0
  469. package/dist/workflow/index.d.ts +11 -0
  470. package/dist/workflow/index.d.ts.map +1 -0
  471. package/dist/workflow/index.js +9 -0
  472. package/dist/workflow/index.js.map +1 -0
  473. package/dist/workflow/owner-state.d.ts +97 -0
  474. package/dist/workflow/owner-state.d.ts.map +1 -0
  475. package/dist/workflow/owner-state.js +168 -0
  476. package/dist/workflow/owner-state.js.map +1 -0
  477. package/package.json +71 -0
  478. package/public/admin/assets/index-BPoUSH8W.css +1 -0
  479. package/public/admin/assets/index-CDi1qoXB.js +1 -0
  480. package/public/admin/index.html +13 -0
@@ -0,0 +1 @@
1
+ var cn,K,jn,Jn,be,xn,Xn,Zn,Qn,An,gn,bn,Ve={},et=[],Pt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,dn=Array.isArray;function he(t,n){for(var a in n)t[a]=n[a];return t}function kn(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function Mt(t,n,a){var l,i,r,s={};for(r in n)r=="key"?l=n[r]:r=="ref"?i=n[r]:s[r]=n[r];if(arguments.length>2&&(s.children=arguments.length>3?cn.call(arguments,2):a),typeof t=="function"&&t.defaultProps!=null)for(r in t.defaultProps)s[r]===void 0&&(s[r]=t.defaultProps[r]);return en(t,s,l,i,null)}function en(t,n,a,l,i){var r={type:t,props:n,key:a,ref:l,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++jn,__i:-1,__u:0};return i==null&&K.vnode!=null&&K.vnode(r),r}function oe(t){return t.children}function Ke(t,n){this.props=t,this.context=n}function Oe(t,n){if(n==null)return t.__?Oe(t.__,t.__i+1):null;for(var a;n<t.__k.length;n++)if((a=t.__k[n])!=null&&a.__e!=null)return a.__e;return typeof t.type=="function"?Oe(t):null}function nt(t){var n,a;if((t=t.__)!=null&&t.__c!=null){for(t.__e=t.__c.base=null,n=0;n<t.__k.length;n++)if((a=t.__k[n])!=null&&a.__e!=null){t.__e=t.__c.base=a.__e;break}return nt(t)}}function Rn(t){(!t.__d&&(t.__d=!0)&&be.push(t)&&!tn.__r++||xn!=K.debounceRendering)&&((xn=K.debounceRendering)||Xn)(tn)}function tn(){for(var t,n,a,l,i,r,s,o=1;be.length;)be.length>o&&be.sort(Zn),t=be.shift(),o=be.length,t.__d&&(a=void 0,l=void 0,i=(l=(n=t).__v).__e,r=[],s=[],n.__P&&((a=he({},l)).__v=l.__v+1,K.vnode&&K.vnode(a),Cn(n.__P,a,l,n.__n,n.__P.namespaceURI,32&l.__u?[i]:null,r,i??Oe(l),!!(32&l.__u),s),a.__v=l.__v,a.__.__k[a.__i]=a,lt(r,a,s),l.__e=l.__=null,a.__e!=i&&nt(a)));tn.__r=0}function tt(t,n,a,l,i,r,s,o,h,c,p){var d,N,y,b,k,m,A,I=l&&l.__k||et,F=n.length;for(h=$t(a,n,I,h,F),d=0;d<F;d++)(y=a.__k[d])!=null&&(N=y.__i==-1?Ve:I[y.__i]||Ve,y.__i=d,m=Cn(t,y,N,i,r,s,o,h,c,p),b=y.__e,y.ref&&N.ref!=y.ref&&(N.ref&&In(N.ref,null,y),p.push(y.ref,y.__c||b,y)),k==null&&b!=null&&(k=b),(A=!!(4&y.__u))||N.__k===y.__k?h=at(y,h,t,A):typeof y.type=="function"&&m!==void 0?h=m:b&&(h=b.nextSibling),y.__u&=-7);return a.__e=k,h}function $t(t,n,a,l,i){var r,s,o,h,c,p=a.length,d=p,N=0;for(t.__k=new Array(i),r=0;r<i;r++)(s=n[r])!=null&&typeof s!="boolean"&&typeof s!="function"?(typeof s=="string"||typeof s=="number"||typeof s=="bigint"||s.constructor==String?s=t.__k[r]=en(null,s,null,null,null):dn(s)?s=t.__k[r]=en(oe,{children:s},null,null,null):s.constructor===void 0&&s.__b>0?s=t.__k[r]=en(s.type,s.props,s.key,s.ref?s.ref:null,s.__v):t.__k[r]=s,h=r+N,s.__=t,s.__b=t.__b+1,o=null,(c=s.__i=Ut(s,a,h,d))!=-1&&(d--,(o=a[c])&&(o.__u|=2)),o==null||o.__v==null?(c==-1&&(i>p?N--:i<p&&N++),typeof s.type!="function"&&(s.__u|=4)):c!=h&&(c==h-1?N--:c==h+1?N++:(c>h?N--:N++,s.__u|=4))):t.__k[r]=null;if(d)for(r=0;r<p;r++)(o=a[r])!=null&&(2&o.__u)==0&&(o.__e==l&&(l=Oe(o)),rt(o,o));return l}function at(t,n,a,l){var i,r;if(typeof t.type=="function"){for(i=t.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=t,n=at(i[r],n,a,l));return n}t.__e!=n&&(l&&(n&&t.type&&!n.parentNode&&(n=Oe(t)),a.insertBefore(t.__e,n||null)),n=t.__e);do n=n&&n.nextSibling;while(n!=null&&n.nodeType==8);return n}function Ut(t,n,a,l){var i,r,s,o=t.key,h=t.type,c=n[a],p=c!=null&&(2&c.__u)==0;if(c===null&&o==null||p&&o==c.key&&h==c.type)return a;if(l>(p?1:0)){for(i=a-1,r=a+1;i>=0||r<n.length;)if((c=n[s=i>=0?i--:r++])!=null&&(2&c.__u)==0&&o==c.key&&h==c.type)return s}return-1}function Wn(t,n,a){n[0]=="-"?t.setProperty(n,a??""):t[n]=a==null?"":typeof a!="number"||Pt.test(n)?a:a+"px"}function je(t,n,a,l,i){var r,s;e:if(n=="style")if(typeof a=="string")t.style.cssText=a;else{if(typeof l=="string"&&(t.style.cssText=l=""),l)for(n in l)a&&n in a||Wn(t.style,n,"");if(a)for(n in a)l&&a[n]==l[n]||Wn(t.style,n,a[n])}else if(n[0]=="o"&&n[1]=="n")r=n!=(n=n.replace(Qn,"$1")),s=n.toLowerCase(),n=s in t||n=="onFocusOut"||n=="onFocusIn"?s.slice(2):n.slice(2),t.l||(t.l={}),t.l[n+r]=a,a?l?a.u=l.u:(a.u=An,t.addEventListener(n,r?bn:gn,r)):t.removeEventListener(n,r?bn:gn,r);else{if(i=="http://www.w3.org/2000/svg")n=n.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(n!="width"&&n!="height"&&n!="href"&&n!="list"&&n!="form"&&n!="tabIndex"&&n!="download"&&n!="rowSpan"&&n!="colSpan"&&n!="role"&&n!="popover"&&n in t)try{t[n]=a??"";break e}catch{}typeof a=="function"||(a==null||a===!1&&n[4]!="-"?t.removeAttribute(n):t.setAttribute(n,n=="popover"&&a==1?"":a))}}function Pn(t){return function(n){if(this.l){var a=this.l[n.type+t];if(n.t==null)n.t=An++;else if(n.t<a.u)return;return a(K.event?K.event(n):n)}}}function Cn(t,n,a,l,i,r,s,o,h,c){var p,d,N,y,b,k,m,A,I,F,P,T,x,R,q,V,le,z=n.type;if(n.constructor!==void 0)return null;128&a.__u&&(h=!!(32&a.__u),r=[o=n.__e=a.__e]),(p=K.__b)&&p(n);e:if(typeof z=="function")try{if(A=n.props,I="prototype"in z&&z.prototype.render,F=(p=z.contextType)&&l[p.__c],P=p?F?F.props.value:p.__:l,a.__c?m=(d=n.__c=a.__c).__=d.__E:(I?n.__c=d=new z(A,P):(n.__c=d=new Ke(A,P),d.constructor=z,d.render=Ft),F&&F.sub(d),d.state||(d.state={}),d.__n=l,N=d.__d=!0,d.__h=[],d._sb=[]),I&&d.__s==null&&(d.__s=d.state),I&&z.getDerivedStateFromProps!=null&&(d.__s==d.state&&(d.__s=he({},d.__s)),he(d.__s,z.getDerivedStateFromProps(A,d.__s))),y=d.props,b=d.state,d.__v=n,N)I&&z.getDerivedStateFromProps==null&&d.componentWillMount!=null&&d.componentWillMount(),I&&d.componentDidMount!=null&&d.__h.push(d.componentDidMount);else{if(I&&z.getDerivedStateFromProps==null&&A!==y&&d.componentWillReceiveProps!=null&&d.componentWillReceiveProps(A,P),n.__v==a.__v||!d.__e&&d.shouldComponentUpdate!=null&&d.shouldComponentUpdate(A,d.__s,P)===!1){for(n.__v!=a.__v&&(d.props=A,d.state=d.__s,d.__d=!1),n.__e=a.__e,n.__k=a.__k,n.__k.some(function(Z){Z&&(Z.__=n)}),T=0;T<d._sb.length;T++)d.__h.push(d._sb[T]);d._sb=[],d.__h.length&&s.push(d);break e}d.componentWillUpdate!=null&&d.componentWillUpdate(A,d.__s,P),I&&d.componentDidUpdate!=null&&d.__h.push(function(){d.componentDidUpdate(y,b,k)})}if(d.context=P,d.props=A,d.__P=t,d.__e=!1,x=K.__r,R=0,I){for(d.state=d.__s,d.__d=!1,x&&x(n),p=d.render(d.props,d.state,d.context),q=0;q<d._sb.length;q++)d.__h.push(d._sb[q]);d._sb=[]}else do d.__d=!1,x&&x(n),p=d.render(d.props,d.state,d.context),d.state=d.__s;while(d.__d&&++R<25);d.state=d.__s,d.getChildContext!=null&&(l=he(he({},l),d.getChildContext())),I&&!N&&d.getSnapshotBeforeUpdate!=null&&(k=d.getSnapshotBeforeUpdate(y,b)),V=p,p!=null&&p.type===oe&&p.key==null&&(V=it(p.props.children)),o=tt(t,dn(V)?V:[V],n,a,l,i,r,s,o,h,c),d.base=n.__e,n.__u&=-161,d.__h.length&&s.push(d),m&&(d.__E=d.__=null)}catch(Z){if(n.__v=null,h||r!=null)if(Z.then){for(n.__u|=h?160:128;o&&o.nodeType==8&&o.nextSibling;)o=o.nextSibling;r[r.indexOf(o)]=null,n.__e=o}else{for(le=r.length;le--;)kn(r[le]);wn(n)}else n.__e=a.__e,n.__k=a.__k,Z.then||wn(n);K.__e(Z,n,a)}else r==null&&n.__v==a.__v?(n.__k=a.__k,n.__e=a.__e):o=n.__e=Kt(a.__e,n,a,l,i,r,s,h,c);return(p=K.diffed)&&p(n),128&n.__u?void 0:o}function wn(t){t&&t.__c&&(t.__c.__e=!0),t&&t.__k&&t.__k.forEach(wn)}function lt(t,n,a){for(var l=0;l<a.length;l++)In(a[l],a[++l],a[++l]);K.__c&&K.__c(n,t),t.some(function(i){try{t=i.__h,i.__h=[],t.some(function(r){r.call(i)})}catch(r){K.__e(r,i.__v)}})}function it(t){return typeof t!="object"||t==null||t.__b&&t.__b>0?t:dn(t)?t.map(it):he({},t)}function Kt(t,n,a,l,i,r,s,o,h){var c,p,d,N,y,b,k,m=a.props||Ve,A=n.props,I=n.type;if(I=="svg"?i="http://www.w3.org/2000/svg":I=="math"?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),r!=null){for(c=0;c<r.length;c++)if((y=r[c])&&"setAttribute"in y==!!I&&(I?y.localName==I:y.nodeType==3)){t=y,r[c]=null;break}}if(t==null){if(I==null)return document.createTextNode(A);t=document.createElementNS(i,I,A.is&&A),o&&(K.__m&&K.__m(n,r),o=!1),r=null}if(I==null)m===A||o&&t.data==A||(t.data=A);else{if(r=r&&cn.call(t.childNodes),!o&&r!=null)for(m={},c=0;c<t.attributes.length;c++)m[(y=t.attributes[c]).name]=y.value;for(c in m)if(y=m[c],c!="children"){if(c=="dangerouslySetInnerHTML")d=y;else if(!(c in A)){if(c=="value"&&"defaultValue"in A||c=="checked"&&"defaultChecked"in A)continue;je(t,c,null,y,i)}}for(c in A)y=A[c],c=="children"?N=y:c=="dangerouslySetInnerHTML"?p=y:c=="value"?b=y:c=="checked"?k=y:o&&typeof y!="function"||m[c]===y||je(t,c,y,m[c],i);if(p)o||d&&(p.__html==d.__html||p.__html==t.innerHTML)||(t.innerHTML=p.__html),n.__k=[];else if(d&&(t.innerHTML=""),tt(n.type=="template"?t.content:t,dn(N)?N:[N],n,a,l,I=="foreignObject"?"http://www.w3.org/1999/xhtml":i,r,s,r?r[0]:a.__k&&Oe(a,0),o,h),r!=null)for(c=r.length;c--;)kn(r[c]);o||(c="value",I=="progress"&&b==null?t.removeAttribute("value"):b!=null&&(b!==t[c]||I=="progress"&&!b||I=="option"&&b!=m[c])&&je(t,c,b,m[c],i),c="checked",k!=null&&k!=t[c]&&je(t,c,k,m[c],i))}return t}function In(t,n,a){try{if(typeof t=="function"){var l=typeof t.__u=="function";l&&t.__u(),l&&n==null||(t.__u=t(n))}else t.current=n}catch(i){K.__e(i,a)}}function rt(t,n,a){var l,i;if(K.unmount&&K.unmount(t),(l=t.ref)&&(l.current&&l.current!=t.__e||In(l,null,n)),(l=t.__c)!=null){if(l.componentWillUnmount)try{l.componentWillUnmount()}catch(r){K.__e(r,n)}l.base=l.__P=null}if(l=t.__k)for(i=0;i<l.length;i++)l[i]&&rt(l[i],n,a||typeof t.type!="function");a||kn(t.__e),t.__c=t.__=t.__e=void 0}function Ft(t,n,a){return this.constructor(t,a)}function Ht(t,n,a){var l,i,r,s;n==document&&(n=document.documentElement),K.__&&K.__(t,n),i=(l=!1)?null:n.__k,r=[],s=[],Cn(n,t=n.__k=Mt(oe,null,[t]),i||Ve,Ve,n.namespaceURI,i?null:n.firstChild?cn.call(n.childNodes):null,r,i?i.__e:n.firstChild,l,s),lt(r,t,s)}cn=et.slice,K={__e:function(t,n,a,l){for(var i,r,s;n=n.__;)if((i=n.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(t)),s=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(t,l||{}),s=i.__d),s)return i.__E=i}catch(o){t=o}throw t}},jn=0,Jn=function(t){return t!=null&&t.constructor===void 0},Ke.prototype.setState=function(t,n){var a;a=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=he({},this.state),typeof t=="function"&&(t=t(he({},a),this.props)),t&&he(a,t),t!=null&&this.__v&&(n&&this._sb.push(n),Rn(this))},Ke.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),Rn(this))},Ke.prototype.render=oe,be=[],Xn=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Zn=function(t,n){return t.__v.__b-n.__v.__b},tn.__r=0,Qn=/(PointerCapture)$|Capture$/i,An=0,gn=Pn(!1),bn=Pn(!0);var Bt=0;function e(t,n,a,l,i,r){n||(n={});var s,o,h=n;if("ref"in h)for(o in h={},n)o=="ref"?s=n[o]:h[o]=n[o];var c={type:t,props:h,key:a,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Bt,__i:-1,__u:0,__source:i,__self:r};if(typeof t=="function"&&(s=t.defaultProps))for(o in s)h[o]===void 0&&(h[o]=s[o]);return K.vnode&&K.vnode(c),c}var an,te,_n,Mn,Sn=0,st=[],j=K,$n=j.__b,Un=j.__r,Kn=j.diffed,Fn=j.__c,Hn=j.unmount,Bn=j.__;function ot(t,n){j.__h&&j.__h(te,t,Sn||n),Sn=0;var a=te.__H||(te.__H={__:[],__h:[]});return t>=a.__.length&&a.__.push({}),a.__[t]}function ee(t,n){var a=ot(an++,3);!j.__s&&dt(a.__H,n)&&(a.__=t,a.u=n,te.__H.__h.push(a))}function ct(t){return Sn=5,un(function(){return{current:t}},[])}function un(t,n){var a=ot(an++,7);return dt(a.__H,n)&&(a.__=t(),a.__H=n,a.__h=t),a.__}function Vt(){for(var t;t=st.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(nn),t.__H.__h.forEach(Tn),t.__H.__h=[]}catch(n){t.__H.__h=[],j.__e(n,t.__v)}}j.__b=function(t){te=null,$n&&$n(t)},j.__=function(t,n){t&&n.__k&&n.__k.__m&&(t.__m=n.__k.__m),Bn&&Bn(t,n)},j.__r=function(t){Un&&Un(t),an=0;var n=(te=t.__c).__H;n&&(_n===te?(n.__h=[],te.__h=[],n.__.forEach(function(a){a.__N&&(a.__=a.__N),a.u=a.__N=void 0})):(n.__h.forEach(nn),n.__h.forEach(Tn),n.__h=[],an=0)),_n=te},j.diffed=function(t){Kn&&Kn(t);var n=t.__c;n&&n.__H&&(n.__H.__h.length&&(st.push(n)!==1&&Mn===j.requestAnimationFrame||((Mn=j.requestAnimationFrame)||qt)(Vt)),n.__H.__.forEach(function(a){a.u&&(a.__H=a.u),a.u=void 0})),_n=te=null},j.__c=function(t,n){n.some(function(a){try{a.__h.forEach(nn),a.__h=a.__h.filter(function(l){return!l.__||Tn(l)})}catch(l){n.some(function(i){i.__h&&(i.__h=[])}),n=[],j.__e(l,a.__v)}}),Fn&&Fn(t,n)},j.unmount=function(t){Hn&&Hn(t);var n,a=t.__c;a&&a.__H&&(a.__H.__.forEach(function(l){try{nn(l)}catch(i){n=i}}),a.__H=void 0,n&&j.__e(n,a.__v))};var Vn=typeof requestAnimationFrame=="function";function qt(t){var n,a=function(){clearTimeout(l),Vn&&cancelAnimationFrame(n),setTimeout(t)},l=setTimeout(a,35);Vn&&(n=requestAnimationFrame(a))}function nn(t){var n=te,a=t.__c;typeof a=="function"&&(t.__c=void 0,a()),te=n}function Tn(t){var n=te;t.__c=t.__(),te=n}function dt(t,n){return!t||t.length!==n.length||n.some(function(a,l){return a!==t[l]})}var zt=Symbol.for("preact-signals");function vn(){if(pe>1)pe--;else{for(var t,n=!1;Fe!==void 0;){var a=Fe;for(Fe=void 0,Nn++;a!==void 0;){var l=a.o;if(a.o=void 0,a.f&=-3,!(8&a.f)&&ht(a))try{a.c()}catch(i){n||(t=i,n=!0)}a=l}}if(Nn=0,pe--,n)throw t}}function Gt(t){if(pe>0)return t();pe++;try{return t()}finally{vn()}}var U=void 0;function ut(t){var n=U;U=void 0;try{return t()}finally{U=n}}var Fe=void 0,pe=0,Nn=0,ln=0;function vt(t){if(U!==void 0){var n=t.n;if(n===void 0||n.t!==U)return n={i:0,S:t,p:U.s,n:void 0,t:U,e:void 0,x:void 0,r:n},U.s!==void 0&&(U.s.n=n),U.s=n,t.n=n,32&U.f&&t.S(n),n;if(n.i===-1)return n.i=0,n.n!==void 0&&(n.n.p=n.p,n.p!==void 0&&(n.p.n=n.n),n.p=U.s,n.n=void 0,U.s.n=n,U.s=n),n}}function X(t,n){this.v=t,this.i=0,this.n=void 0,this.t=void 0,this.W=n?.watched,this.Z=n?.unwatched,this.name=n?.name}X.prototype.brand=zt;X.prototype.h=function(){return!0};X.prototype.S=function(t){var n=this,a=this.t;a!==t&&t.e===void 0&&(t.x=a,this.t=t,a!==void 0?a.e=t:ut(function(){var l;(l=n.W)==null||l.call(n)}))};X.prototype.U=function(t){var n=this;if(this.t!==void 0){var a=t.e,l=t.x;a!==void 0&&(a.x=l,t.e=void 0),l!==void 0&&(l.e=a,t.x=void 0),t===this.t&&(this.t=l,l===void 0&&ut(function(){var i;(i=n.Z)==null||i.call(n)}))}};X.prototype.subscribe=function(t){var n=this;return Ge(function(){var a=n.value,l=U;U=void 0;try{t(a)}finally{U=l}},{name:"sub"})};X.prototype.valueOf=function(){return this.value};X.prototype.toString=function(){return this.value+""};X.prototype.toJSON=function(){return this.value};X.prototype.peek=function(){var t=U;U=void 0;try{return this.value}finally{U=t}};Object.defineProperty(X.prototype,"value",{get:function(){var t=vt(this);return t!==void 0&&(t.i=this.i),this.v},set:function(t){if(t!==this.v){if(Nn>100)throw new Error("Cycle detected");this.v=t,this.i++,ln++,pe++;try{for(var n=this.t;n!==void 0;n=n.x)n.t.N()}finally{vn()}}}});function de(t,n){return new X(t,n)}function ht(t){for(var n=t.s;n!==void 0;n=n.n)if(n.S.i!==n.i||!n.S.h()||n.S.i!==n.i)return!0;return!1}function mt(t){for(var n=t.s;n!==void 0;n=n.n){var a=n.S.n;if(a!==void 0&&(n.r=a),n.S.n=n,n.i=-1,n.n===void 0){t.s=n;break}}}function _t(t){for(var n=t.s,a=void 0;n!==void 0;){var l=n.p;n.i===-1?(n.S.U(n),l!==void 0&&(l.n=n.n),n.n!==void 0&&(n.n.p=l)):a=n,n.S.n=n.r,n.r!==void 0&&(n.r=void 0),n=l}t.s=a}function Te(t,n){X.call(this,void 0),this.x=t,this.s=void 0,this.g=ln-1,this.f=4,this.W=n?.watched,this.Z=n?.unwatched,this.name=n?.name}Te.prototype=new X;Te.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===ln))return!0;if(this.g=ln,this.f|=1,this.i>0&&!ht(this))return this.f&=-2,!0;var t=U;try{mt(this),U=this;var n=this.x();(16&this.f||this.v!==n||this.i===0)&&(this.v=n,this.f&=-17,this.i++)}catch(a){this.v=a,this.f|=16,this.i++}return U=t,_t(this),this.f&=-2,!0};Te.prototype.S=function(t){if(this.t===void 0){this.f|=36;for(var n=this.s;n!==void 0;n=n.n)n.S.S(n)}X.prototype.S.call(this,t)};Te.prototype.U=function(t){if(this.t!==void 0&&(X.prototype.U.call(this,t),this.t===void 0)){this.f&=-33;for(var n=this.s;n!==void 0;n=n.n)n.S.U(n)}};Te.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var t=this.t;t!==void 0;t=t.x)t.t.N()}};Object.defineProperty(Te.prototype,"value",{get:function(){if(1&this.f)throw new Error("Cycle detected");var t=vt(this);if(this.h(),t!==void 0&&(t.i=this.i),16&this.f)throw this.v;return this.v}});function rn(t,n){return new Te(t,n)}function ft(t){var n=t.u;if(t.u=void 0,typeof n=="function"){pe++;var a=U;U=void 0;try{n()}catch(l){throw t.f&=-2,t.f|=8,Dn(t),l}finally{U=a,vn()}}}function Dn(t){for(var n=t.s;n!==void 0;n=n.n)n.S.U(n);t.x=void 0,t.s=void 0,ft(t)}function Yt(t){if(U!==this)throw new Error("Out-of-order effect");_t(this),U=t,this.f&=-2,8&this.f&&Dn(this),vn()}function Le(t,n){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=n?.name}Le.prototype.c=function(){var t=this.S();try{if(8&this.f||this.x===void 0)return;var n=this.x();typeof n=="function"&&(this.u=n)}finally{t()}};Le.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,ft(this),mt(this),pe++;var t=U;return U=this,Yt.bind(this,t)};Le.prototype.N=function(){2&this.f||(this.f|=2,this.o=Fe,Fe=this)};Le.prototype.d=function(){this.f|=8,1&this.f||Dn(this)};Le.prototype.dispose=function(){this.d()};function Ge(t,n){var a=new Le(t,n);try{a.c()}catch(i){throw a.d(),i}var l=a.d.bind(a);return l[Symbol.dispose]=l,l}var pt,hn,Je,jt=typeof window<"u"&&!!window.__PREACT_SIGNALS_DEVTOOLS__,yt=[];Ge(function(){pt=this.N})();function xe(t,n){K[t]=n.bind(null,K[t]||function(){})}function sn(t){if(Je){var n=Je;Je=void 0,n()}Je=t&&t.S()}function gt(t){var n=this,a=t.data,l=u(a);l.value=a;var i=un(function(){for(var o=n,h=n.__v;h=h.__;)if(h.__c){h.__c.__$f|=4;break}var c=rn(function(){var y=l.value.value;return y===0?0:y===!0?"":y||""}),p=rn(function(){return!Array.isArray(c.value)&&!Jn(c.value)}),d=Ge(function(){if(this.N=bt,p.value){var y=c.value;o.__v&&o.__v.__e&&o.__v.__e.nodeType===3&&(o.__v.__e.data=y)}}),N=n.__$u.d;return n.__$u.d=function(){d(),N.call(this)},[p,c]},[]),r=i[0],s=i[1];return r.value?s.peek():s.value}gt.displayName="ReactiveTextNode";Object.defineProperties(X.prototype,{constructor:{configurable:!0,value:void 0},type:{configurable:!0,value:gt},props:{configurable:!0,get:function(){return{data:this}}},__b:{configurable:!0,value:1}});xe("__b",function(t,n){if(typeof n.type=="string"){var a,l=n.props;for(var i in l)if(i!=="children"){var r=l[i];r instanceof X&&(a||(n.__np=a={}),a[i]=r,l[i]=r.peek())}}t(n)});xe("__r",function(t,n){if(t(n),n.type!==oe){sn();var a,l=n.__c;l&&(l.__$f&=-2,(a=l.__$u)===void 0&&(l.__$u=a=(function(i,r){var s;return Ge(function(){s=this},{name:r}),s.c=i,s})(function(){var i;jt&&((i=a.y)==null||i.call(a)),l.__$f|=1,l.setState({})},typeof n.type=="function"?n.type.displayName||n.type.name:""))),hn=l,sn(a)}});xe("__e",function(t,n,a,l){sn(),hn=void 0,t(n,a,l)});xe("diffed",function(t,n){sn(),hn=void 0;var a;if(typeof n.type=="string"&&(a=n.__e)){var l=n.__np,i=n.props;if(l){var r=a.U;if(r)for(var s in r){var o=r[s];o!==void 0&&!(s in l)&&(o.d(),r[s]=void 0)}else r={},a.U=r;for(var h in l){var c=r[h],p=l[h];c===void 0?(c=Jt(a,h,p,i),r[h]=c):c.o(p,i)}}}t(n)});function Jt(t,n,a,l){var i=n in t&&t.ownerSVGElement===void 0,r=de(a);return{o:function(s,o){r.value=s,l=o},d:Ge(function(){this.N=bt;var s=r.value.value;l[n]!==s&&(l[n]=s,i?t[n]=s:s!=null&&(s!==!1||n[4]==="-")?t.setAttribute(n,s):t.removeAttribute(n))})}}xe("unmount",function(t,n){if(typeof n.type=="string"){var a=n.__e;if(a){var l=a.U;if(l){a.U=void 0;for(var i in l){var r=l[i];r&&r.d()}}}}else{var s=n.__c;if(s){var o=s.__$u;o&&(s.__$u=void 0,o.d())}}t(n)});xe("__h",function(t,n,a,l){(l<3||l===9)&&(n.__$f|=2),t(n,a,l)});Ke.prototype.shouldComponentUpdate=function(t,n){if(this.__R)return!0;var a=this.__$u,l=a&&a.s!==void 0;for(var i in n)return!0;if(this.__f||typeof this.u=="boolean"&&this.u===!0){var r=2&this.__$f;if(!(l||r||4&this.__$f)||1&this.__$f)return!0}else if(!(l||4&this.__$f)||3&this.__$f)return!0;for(var s in t)if(s!=="__source"&&t[s]!==this.props[s])return!0;for(var o in this.props)if(!(o in t))return!0;return!1};function u(t,n){return un(function(){return de(t,n)},[])}function Xt(t,n){var a=ct(t);return a.current=t,hn.__$f|=4,un(function(){return rn(function(){return a.current()},n)},[])}var Zt=function(t){queueMicrotask(function(){queueMicrotask(t)})};function Qt(){Gt(function(){for(var t;t=yt.shift();)pt.call(t)})}function bt(){yt.push(this)===1&&(K.requestAnimationFrame||Zt)(Qt)}const qe=de(null),ea=rn(()=>qe.value!==null),wt=de(900),na=de(!1);let Ce=null;const Ie=()=>{On()};function ta(){document.addEventListener("mousemove",Ie,{passive:!0}),document.addEventListener("keydown",Ie,{passive:!0}),document.addEventListener("click",Ie,{passive:!0}),On()}function aa(){document.removeEventListener("mousemove",Ie),document.removeEventListener("keydown",Ie),document.removeEventListener("click",Ie),Ce!==null&&(clearTimeout(Ce),Ce=null)}function On(){Ce!==null&&clearTimeout(Ce),Ce=setTimeout(()=>{Ln()},wt.value*1e3)}function la(t,n){qe.value=t,n!==void 0&&(wt.value=n),ta(),location.hash="#/dashboard"}function Ln(){qe.value=null,aa(),location.hash="#/login"}const C={ADMIN_STATUS:"/v1/admin/status",ADMIN_KILL_SWITCH:"/v1/admin/kill-switch",ADMIN_KILL_SWITCH_ESCALATE:"/v1/admin/kill-switch/escalate",ADMIN_RECOVER:"/v1/admin/recover",ADMIN_SHUTDOWN:"/v1/admin/shutdown",ADMIN_ROTATE_SECRET:"/v1/admin/rotate-secret",WALLETS:"/v1/wallets",WALLET:t=>`/v1/wallets/${t}`,SESSIONS:"/v1/sessions",SESSION:t=>`/v1/sessions/${t}`,POLICIES:"/v1/policies",POLICY:t=>`/v1/policies/${t}`,ADMIN_NOTIFICATIONS_STATUS:"/v1/admin/notifications/status",ADMIN_NOTIFICATIONS_TEST:"/v1/admin/notifications/test",ADMIN_NOTIFICATIONS_LOG:"/v1/admin/notifications/log",MCP_TOKENS:"/v1/mcp/tokens",ADMIN_SETTINGS:"/v1/admin/settings",ADMIN_SETTINGS_TEST_RPC:"/v1/admin/settings/test-rpc",WALLET_NETWORKS:t=>`/v1/wallets/${t}/networks`,WALLET_DEFAULT_NETWORK:t=>`/v1/wallets/${t}/default-network`,ADMIN_WALLET_BALANCE:t=>`/v1/admin/wallets/${t}/balance`,ADMIN_WALLET_TRANSACTIONS:t=>`/v1/admin/wallets/${t}/transactions`,ADMIN_API_KEYS:"/v1/admin/api-keys",ADMIN_API_KEY:t=>`/v1/admin/api-keys/${t}`,ADMIN_FOREX_RATES:"/v1/admin/forex/rates",ADMIN_TELEGRAM_USERS:"/v1/admin/telegram-users",ADMIN_TELEGRAM_USER:t=>`/v1/admin/telegram-users/${t}`,WALLET_OWNER:t=>`/v1/wallets/${t}/owner`,WALLET_WITHDRAW:t=>`/v1/wallets/${t}/withdraw`,WALLET_WC_PAIR:t=>`/v1/wallets/${t}/wc/pair`,WALLET_WC_SESSION:t=>`/v1/wallets/${t}/wc/session`,WALLET_WC_PAIR_STATUS:t=>`/v1/wallets/${t}/wc/pair/status`,WALLET_OWNER_VERIFY:t=>`/v1/wallets/${t}/owner/verify`},He=de(""),ke=de(null),Be=de(!1),_e={wrapper:{display:"flex",alignItems:"center",justifyContent:"center",minHeight:"100vh",background:"var(--color-bg-secondary)"},card:{background:"var(--color-bg)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-lg)",padding:"var(--space-8)",width:"100%",maxWidth:"360px",boxShadow:"var(--shadow-md)"},title:{fontSize:"var(--font-size-2xl)",fontWeight:"var(--font-weight-bold)",textAlign:"center",marginBottom:"var(--space-1)"},subtitle:{fontSize:"var(--font-size-sm)",color:"var(--color-text-secondary)",textAlign:"center",marginBottom:"var(--space-6)"},input:{width:"100%",padding:"var(--space-2) var(--space-3)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",outline:"none"},button:{width:"100%",padding:"var(--space-2) var(--space-4)",background:"var(--color-primary)",color:"white",border:"none",borderRadius:"var(--radius-md)",fontSize:"var(--font-size-base)",fontWeight:"var(--font-weight-medium)",marginTop:"var(--space-4)"},buttonDisabled:{opacity:.6,cursor:"not-allowed"},error:{color:"var(--color-danger)",fontSize:"var(--font-size-sm)",textAlign:"center",marginTop:"var(--space-3)"}},ia=async t=>{if(t.preventDefault(),!!He.value.trim()){Be.value=!0,ke.value=null;try{const n=await fetch(C.ADMIN_STATUS,{headers:{"X-Master-Password":He.value},signal:AbortSignal.timeout(1e4)});if(n.status===401){ke.value="Invalid master password";return}if(!n.ok){ke.value="Cannot connect to daemon";return}const a=await n.json();la(He.value,a.adminTimeout)}catch{ke.value="Cannot connect to daemon"}finally{Be.value=!1}}};function ra(){return e("div",{style:_e.wrapper,children:e("form",{style:_e.card,onSubmit:ia,children:[e("h1",{style:_e.title,children:"WAIaaS Admin"}),e("p",{style:_e.subtitle,children:"Enter master password to continue"}),e("input",{type:"password",placeholder:"Master password",autoFocus:!0,value:He.value,onInput:t=>{He.value=t.target.value},style:_e.input}),e("button",{type:"submit",disabled:Be.value,style:{..._e.button,...Be.value?_e.buttonDisabled:{}},children:Be.value?"Signing in...":"Sign in"}),ke.value&&e("p",{style:_e.error,children:ke.value})]})})}class g extends Error{constructor(n,a,l){super(`[${n}] ${a}: ${l}`),this.status=n,this.code=a,this.serverMessage=l,this.name="ApiError"}}async function mn(t,n){const a={"Content-Type":"application/json",...n?.headers};qe.value!==null&&(a["X-Master-Password"]=qe.value);let l;try{l=await fetch(t,{...n,headers:a,signal:AbortSignal.timeout(1e4)})}catch(i){const r=i;throw r.name==="AbortError"||r.name==="TimeoutError"?new g(0,"TIMEOUT","Request timed out"):new g(0,"NETWORK_ERROR","Cannot connect to daemon")}if(l.status===401)throw Ln(),new g(401,"INVALID_MASTER_PASSWORD","Authentication failed");if(!l.ok){let i={};try{i=await l.json()}catch{}throw new g(l.status,i.code??"UNKNOWN",i.message??"Unknown error")}return On(),await l.json()}const B=t=>mn(t,{method:"GET"}),Q=(t,n)=>mn(t,{method:"POST",body:n?JSON.stringify(n):void 0}),we=(t,n)=>mn(t,{method:"PUT",body:n?JSON.stringify(n):void 0}),Se=t=>mn(t,{method:"DELETE"});function sa(t){const n=Math.floor(t/86400),a=Math.floor(t%86400/3600),l=Math.floor(t%3600/60);return n>0?`${n}d ${a}h ${l}m`:a>0?`${a}h ${l}m`:`${l}m`}function ae(t){const n=new Date(t*1e3),a=l=>l.toString().padStart(2,"0");return`${n.getFullYear()}-${a(n.getMonth()+1)}-${a(n.getDate())} ${a(n.getHours())}:${a(n.getMinutes())}`}function on(t){return t.length<=10?t:`${t.slice(0,4)}..${t.slice(-4)}`}const oa=new Set(["KRW","JPY","VND","CLP","HUF","PKR"]),ca=new Set(["KWD","BHD"]);function da(t){return oa.has(t)?0:ca.has(t)?3:2}function ua(t,n,a){const l=t*a,i=da(n),r=new Intl.NumberFormat("en-US",{style:"currency",currency:n,minimumFractionDigits:i,maximumFractionDigits:i}).format(l);return n==="USD"?r:`≈${r}`}let Ae=null;const va=300*1e3;async function ha(){if(Ae&&Date.now()-Ae.fetchedAt<va)return{currency:Ae.currency,rate:Ae.rate};try{const n=(await B(C.ADMIN_SETTINGS)).display?.["display.currency"]??"USD";if(n==="USD")return Ae={currency:"USD",rate:1,fetchedAt:Date.now()},{currency:"USD",rate:1};const i=(await B(`${C.ADMIN_FOREX_RATES}?currencies=${n}`)).rates[n]?.rate??null;return Ae={currency:n,rate:i,fetchedAt:Date.now()},{currency:n,rate:i}}catch{return{currency:"USD",rate:1}}}function ma(t,n,a){return t==null?"":a==null?`$${t.toFixed(2)}`:ua(t,n,a)}function E({label:t,name:n,type:a="text",value:l,onChange:i,options:r,error:s,required:o,disabled:h,placeholder:c,min:p,max:d}){if(a==="checkbox")return e("div",{class:"form-field",children:[e("label",{children:[e("input",{type:"checkbox",name:n,checked:!!l,onChange:y=>i(y.target.checked),disabled:h}),t,o&&e("span",{children:" *"})]}),s&&e("span",{class:"form-error",children:s})]});const N=`field-${n}`;return e("div",{class:"form-field",children:[e("label",{for:N,children:[t,o&&e("span",{children:" *"})]}),a==="select"?e("select",{id:N,name:n,value:l,onChange:y=>i(y.target.value),disabled:h,children:r?.map(y=>e("option",{value:y.value,children:y.label},y.value))}):a==="textarea"?e("textarea",{id:N,name:n,value:l,onInput:y=>i(y.target.value),disabled:h,placeholder:c}):e("input",{id:N,type:a,name:n,value:l,onInput:y=>{const b=y.target;i(a==="number"?Number(b.value):b.value)},disabled:h,placeholder:c,min:p,max:d,required:o}),s&&e("span",{class:"form-error",children:s})]})}function D({variant:t="primary",size:n="md",loading:a=!1,disabled:l=!1,onClick:i,children:r,type:s="button"}){const o=["btn",`btn-${t}`,n==="sm"?"btn-sm":""].filter(Boolean).join(" ");return e("button",{type:s,class:o,disabled:l||a,onClick:i,children:a?"...":r})}function W({variant:t,children:n}){return e("span",{class:`badge badge-${t}`,children:n})}function ge({columns:t,data:n,onRowClick:a,emptyMessage:l="No data",loading:i=!1}){return e("div",{class:"table-container",children:e("table",{children:[e("thead",{children:e("tr",{children:t.map(r=>e("th",{style:r.width?{width:r.width}:void 0,children:r.header},r.key))})}),e("tbody",{children:i?e("tr",{children:e("td",{colSpan:t.length,class:"table-loading",children:"Loading..."})}):!n||n.length===0?e("tr",{children:e("td",{colSpan:t.length,class:"table-empty",children:l})}):n.map((r,s)=>e("tr",{class:a?"clickable":"",onClick:a?()=>a(r):void 0,children:t.map(o=>e("td",{children:o.render?o.render(r):r[o.key]},o.key))},s))})]})})}const _a={INVALID_TOKEN:"Your authentication token is invalid. Please log in again.",TOKEN_EXPIRED:"Your session token has expired. Please log in again.",SESSION_REVOKED:"Your session has been revoked by an administrator.",INVALID_SIGNATURE:"The cryptographic signature is invalid.",INVALID_NONCE:"The authentication nonce is invalid or has expired.",INVALID_MASTER_PASSWORD:"Invalid master password. Please try again.",MASTER_PASSWORD_LOCKED:"Master password is locked due to too many failed attempts. Please wait.",SYSTEM_LOCKED:"The system is currently locked.",SESSION_NOT_FOUND:"Session not found.",SESSION_EXPIRED:"The session has expired.",SESSION_LIMIT_EXCEEDED:"Maximum number of sessions reached.",CONSTRAINT_VIOLATED:"A session constraint was violated.",RENEWAL_LIMIT_REACHED:"Session renewal limit has been reached. Create a new session.",SESSION_ABSOLUTE_LIFETIME_EXCEEDED:"Session has exceeded its maximum lifetime.",RENEWAL_TOO_EARLY:"Session renewal attempted too early. Please wait.",SESSION_RENEWAL_MISMATCH:"Session renewal count mismatch. The session may have been renewed elsewhere.",PIPELINE_HALTED:"Transaction is queued for delay or approval.",INSUFFICIENT_BALANCE:"Insufficient balance for this transaction.",INVALID_ADDRESS:"The blockchain address is invalid.",TX_NOT_FOUND:"Transaction not found.",TX_EXPIRED:"The transaction has expired.",TX_ALREADY_PROCESSED:"This transaction has already been processed.",CHAIN_ERROR:"A blockchain network error occurred. Please try again.",SIMULATION_FAILED:"Transaction simulation failed. The transaction may revert.",TOKEN_NOT_FOUND:"Token not found.",TOKEN_NOT_ALLOWED:"This token is not in the allowed list.",INSUFFICIENT_TOKEN_BALANCE:"Insufficient token balance.",CONTRACT_CALL_DISABLED:"Contract calls are disabled. Configure a CONTRACT_WHITELIST policy first.",CONTRACT_NOT_WHITELISTED:"This contract address is not whitelisted.",METHOD_NOT_WHITELISTED:"This contract method is not whitelisted.",APPROVE_DISABLED:"Token approvals are disabled. Configure an APPROVED_SPENDERS policy first.",SPENDER_NOT_APPROVED:"This spender address is not in the approved list.",APPROVE_AMOUNT_EXCEEDED:"The approve amount exceeds the configured limit.",UNLIMITED_APPROVE_BLOCKED:"Unlimited token approvals are blocked by policy.",BATCH_NOT_SUPPORTED:"Batch transactions are not supported on this chain.",BATCH_SIZE_EXCEEDED:"Batch contains too many instructions (maximum 20).",BATCH_POLICY_VIOLATION:"A policy violation occurred in the batch transaction.",POLICY_NOT_FOUND:"Policy not found.",POLICY_DENIED:"Transaction denied by policy.",SPENDING_LIMIT_EXCEEDED:"Spending limit has been exceeded.",RATE_LIMIT_EXCEEDED:"Rate limit exceeded. Please wait before retrying.",WHITELIST_DENIED:"The destination address is not in the whitelist.",OWNER_ALREADY_CONNECTED:"An owner wallet is already connected to this wallet.",OWNER_NOT_CONNECTED:"No owner wallet is connected to this wallet.",OWNER_NOT_FOUND:"Owner not found.",APPROVAL_TIMEOUT:"The approval request has timed out.",APPROVAL_NOT_FOUND:"Approval request not found.",OWNER_NOT_SET:"Owner address must be set before connecting WalletConnect.",OWNER_ADDRESS_MISMATCH:"Connected wallet address does not match registered owner.",KILL_SWITCH_ACTIVE:"Kill switch is active. All operations are suspended.",KILL_SWITCH_NOT_ACTIVE:"Kill switch is not currently active.",KEYSTORE_LOCKED:"The keystore is locked. Please try again.",CHAIN_NOT_SUPPORTED:"This blockchain is not supported.",SHUTTING_DOWN:"The daemon is shutting down.",ADAPTER_NOT_AVAILABLE:"Chain adapter is not available. Please try again.",WALLET_NOT_FOUND:"Wallet not found.",WALLET_SUSPENDED:"This wallet is currently suspended.",WALLET_TERMINATED:"This wallet has been terminated.",WC_NOT_CONFIGURED:"WalletConnect is not configured. Set the Project ID in Settings first.",WC_SESSION_NOT_FOUND:"No active WalletConnect session.",WC_SESSION_EXISTS:"A WalletConnect session already exists. Disconnect first.",WC_SIGNING_FAILED:"WalletConnect signing request failed.",NO_OWNER:"No owner connected. Withdrawal requires an owner wallet.",WITHDRAW_LOCKED_ONLY:"Withdrawal is only available when the owner state is LOCKED.",SWEEP_TOTAL_FAILURE:"All sweep operations failed. Please try again.",INSUFFICIENT_FOR_FEE:"Insufficient balance to cover transaction fees.",ACTION_NOT_FOUND:"Action not found.",ACTION_VALIDATION_FAILED:"Action input validation failed.",ACTION_RESOLVE_FAILED:"Action failed due to an external API error. Please try again.",ACTION_RETURN_INVALID:"Action returned an invalid result.",ACTION_PLUGIN_LOAD_FAILED:"Failed to load the action plugin.",ACTION_NAME_CONFLICT:"An action with this name already exists.",ACTION_CHAIN_MISMATCH:"The request chain does not match the action provider.",ROTATION_TOO_RECENT:"Key rotation was attempted too recently. Please wait.",NETWORK_ERROR:"Cannot connect to the daemon. Check if it is running.",TIMEOUT:"Request timed out. The daemon may be busy."};function O(t){return _a[t]??`An error occurred (${t}).`}function ve({label:t,value:n,loading:a,badge:l,href:i}){const r=e(oe,{children:[e("div",{class:"stat-label",children:[t,i&&e("span",{class:"stat-link-arrow",children:" →"})]}),a?e("div",{class:"stat-skeleton"}):l?e(W,{variant:l,children:n}):e("div",{class:"stat-value",children:n})]});return i?e("a",{href:i,class:"stat-card stat-card-link",style:{textDecoration:"none",color:"inherit",cursor:"pointer"},children:r}):e("div",{class:"stat-card",children:r})}function fa(t,n){return[{key:"createdAt",header:"Time",render:a=>a.createdAt?ae(a.createdAt):"—"},{key:"walletName",header:"Wallet",render:a=>a.walletName??a.walletId.slice(0,8)},{key:"type",header:"Type"},{key:"amount",header:"Amount",render:a=>{if(!a.amount)return"—";const l=ma(a.amountUsd,t,n);return l?`${a.amount} (${l})`:a.amount}},{key:"status",header:"Status",render:a=>{const l=a.status==="CONFIRMED"?"success":a.status==="FAILED"?"danger":"warning";return e(W,{variant:l,children:a.status})}}]}function pa(){const t=u(null),n=u(!0),a=u(null),l=u("USD"),i=u(1),r=async()=>{n.value=!0,a.value=null;try{const o=await B(C.ADMIN_STATUS);t.value=o}catch(o){o instanceof g?a.value=O(o.code):a.value="An unexpected error occurred."}finally{n.value=!1}};ee(()=>{r(),ha().then(({currency:h,rate:c})=>{l.value=h,i.value=c}).catch(()=>{});const o=setInterval(r,3e4);return()=>clearInterval(o)},[]);const s=n.value&&!t.value;return e("div",{class:"page",children:[a.value&&e("div",{class:"dashboard-error",children:[e("span",{children:a.value}),e(D,{variant:"secondary",size:"sm",onClick:r,children:"Retry"})]}),e("div",{class:"stat-grid",children:[e(ve,{label:"Version",value:t.value?.version??"—",loading:s}),e(ve,{label:"Uptime",value:t.value?sa(t.value.uptime):"—",loading:s}),e(ve,{label:"Wallets",value:t.value?.walletCount?.toString()??"—",loading:s,href:"#/wallets"}),e(ve,{label:"Active Sessions",value:t.value?.activeSessionCount?.toString()??"—",loading:s,href:"#/sessions"})]}),e("div",{class:"stat-grid",style:{marginTop:"var(--space-4)"},children:[e(ve,{label:"Kill Switch",value:t.value?.killSwitchState==="ACTIVATED"?"ACTIVATED":"NORMAL",loading:s,badge:t.value?t.value.killSwitchState==="ACTIVATED"?"danger":"success":void 0}),e(ve,{label:"Status",value:t.value?.status??"—",loading:s})]}),e("div",{class:"stat-grid",style:{marginTop:"var(--space-4)"},children:[e(ve,{label:"Policies",value:t.value?.policyCount?.toString()??"—",loading:s,href:"#/policies"}),e(ve,{label:"Recent Txns (24h)",value:t.value?.recentTxCount?.toString()??"—",loading:s}),e(ve,{label:"Failed Txns (24h)",value:t.value?.failedTxCount?.toString()??"—",loading:s,badge:t.value?t.value.failedTxCount===0?"success":"danger":void 0})]}),e("div",{style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"Recent Activity"}),e(ge,{columns:fa(l.value,i.value),data:t.value?.recentTransactions??[],loading:s,emptyMessage:"No recent transactions"})]})]})}function ce({open:t,title:n,children:a,onConfirm:l,onCancel:i,confirmText:r="Confirm",cancelText:s="Cancel",confirmVariant:o="primary",confirmDisabled:h=!1,loading:c=!1}){return ee(()=>{if(!t)return;const p=d=>{d.key==="Escape"&&i()};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[t,i]),t?e("div",{class:"modal-overlay",onClick:i,children:e("div",{class:"modal-card",onClick:p=>p.stopPropagation(),children:[e("div",{class:"modal-header",children:n}),e("div",{class:"modal-body",children:a}),e("div",{class:"modal-footer",children:[e(D,{variant:"secondary",onClick:i,disabled:c,children:s}),l&&e(D,{variant:o,onClick:l,loading:c,disabled:h,children:r})]})]})}):null}function ze({value:t,label:n}){const a=u(!1);return e("button",{class:"btn btn-ghost btn-sm",onClick:async()=>{try{await navigator.clipboard.writeText(t)}catch{const i=document.createElement("textarea");i.value=t,i.style.position="fixed",i.style.left="-9999px",document.body.appendChild(i),i.select(),document.execCommand("copy"),document.body.removeChild(i)}a.value=!0,setTimeout(()=>{a.value=!1},2e3)},children:a.value?"Copied!":n??"Copy"})}function ya({title:t,description:n,actionLabel:a,onAction:l}){return e("div",{class:"empty-state",children:[e("h3",{children:t}),n&&e("p",{children:n}),a&&l&&e("button",{class:"btn btn-primary",onClick:l,children:a})]})}const fe=de([]);let ga=0;function S(t,n){const a=ga++;fe.value=[...fe.value,{id:a,type:t,message:n}],setTimeout(()=>{fe.value=fe.value.filter(l=>l.id!==a)},5e3)}function ba(t){fe.value=fe.value.filter(n=>n.id!==t)}function wa(){return fe.value.length===0?null:e("div",{class:"toast-container",children:fe.value.map(t=>e("div",{class:`toast toast-${t.type}`,onClick:()=>ba(t.id),children:t.message},t.id))})}const Sa=[{key:"name",header:"Name"},{key:"chain",header:"Chain"},{key:"environment",header:"Environment",render:t=>e(W,{variant:t.environment==="mainnet"?"warning":"info",children:t.environment})},{key:"publicKey",header:"Public Key",render:t=>e("span",{style:{display:"flex",alignItems:"center",gap:"0.25rem"},children:[on(t.publicKey)," ",e(ze,{value:t.publicKey})]})},{key:"status",header:"Status",render:t=>e(W,{variant:t.status==="ACTIVE"?"success":"danger",children:t.status})},{key:"ownerState",header:"Owner",render:t=>e(W,{variant:St(t.ownerState),children:t.ownerState})},{key:"createdAt",header:"Created",render:t=>ae(t.createdAt)}];function St(t){switch(t){case"NONE":return"neutral";case"GRACE":return"warning";case"LOCKED":return"success";default:return"neutral"}}function J({label:t,value:n,copy:a,children:l}){return e("div",{class:"detail-row",children:[e("div",{class:"detail-row-label",children:t}),e("div",{class:"detail-row-value",children:[l??n??"—",a&&n&&e(ze,{value:n})]})]})}function Ta({id:t}){const n=u(null),a=u(!0),l=u(!1),i=u(""),r=u(!1),s=u(!1),o=u(!1),h=u(!1),c=u(null),p=u([]),d=u(!0),N=u(!1),y=u(null),b=u(!0),k=u([]),m=u(!0),A=u(!1),I=u(null),F=u(!1),P=u(null),T=u(!0),x=u(!1),R=u(null),q=u(!1),V=u(""),le=u(!1),z=async()=>{try{const w=await B(C.WALLET(t));n.value=w}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{a.value=!1}},Z=async()=>{r.value=!0;try{const w=await we(C.WALLET(t),{name:i.value});n.value=w,l.value=!1,S("success","Wallet name updated")}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{r.value=!1}},M=async()=>{o.value=!0;try{await Se(C.WALLET(t)),S("success","Wallet terminated"),window.location.hash="#/wallets"}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{o.value=!1}},H=()=>{i.value=n.value.name,l.value=!0},ie=()=>{l.value=!1},ue=async()=>{h.value=!0;try{const w=await Q(C.MCP_TOKENS,{walletId:t});c.value=w,S("success","MCP token provisioned successfully")}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{h.value=!1}},Ne=async()=>{d.value=!0;try{const w=await B(C.WALLET_NETWORKS(t));p.value=w.availableNetworks??[]}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code)),p.value=[]}finally{d.value=!1}},Re=async()=>{b.value=!0;try{y.value=await B(C.ADMIN_WALLET_BALANCE(t))}catch{y.value=null}finally{b.value=!1}},We=async()=>{m.value=!0;try{const w=await B(C.ADMIN_WALLET_TRANSACTIONS(t));k.value=w.items}catch{k.value=[]}finally{m.value=!1}},Pe=async()=>{T.value=!0;try{P.value=await B(C.WALLET_WC_SESSION(t))}catch{P.value=null}finally{T.value=!1}},Ee=()=>{R.value&&clearInterval(R.value),R.value=setInterval(async()=>{try{const w=await B(C.WALLET_WC_PAIR_STATUS(t));w.status==="connected"?(R.value&&clearInterval(R.value),R.value=null,A.value=!1,I.value=null,P.value=w.session??null,S("success","Wallet connected via WalletConnect")):(w.status==="expired"||w.status==="none")&&(R.value&&clearInterval(R.value),R.value=null,A.value=!1,I.value=null,S("error","Pairing expired. Try again."))}catch{}},3e3)},Me=async()=>{F.value=!0;try{const w=await Q(C.WALLET_WC_PAIR(t));I.value=w,A.value=!0,Ee()}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{F.value=!1}},$e=async()=>{x.value=!0;try{await Se(C.WALLET_WC_SESSION(t)),P.value=null,S("success","WalletConnect session disconnected")}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{x.value=!1}},me=()=>{V.value=n.value?.ownerAddress??"",q.value=!0},_=()=>{q.value=!1},$=async()=>{if(!V.value.trim()){S("error","Owner address is required");return}le.value=!0;try{const w=await we(C.WALLET_OWNER(t),{owner_address:V.value.trim()});n.value={...n.value,...w},q.value=!1,S("success","Owner address updated")}catch(w){const G=w instanceof g?w:new g(0,"UNKNOWN","Unknown error");S("error",O(G.code))}finally{le.value=!1}},ne=async w=>{N.value=!0;try{await we(C.WALLET_DEFAULT_NETWORK(t),{network:w}),S("success",`Default network changed to ${w}`),await z(),await Ne()}catch(G){const Ye=G instanceof g?G:new g(0,"UNKNOWN","Unknown error");S("error",O(Ye.code))}finally{N.value=!1}};return ee(()=>{z(),Ne(),Re(),We(),Pe()},[t]),ee(()=>()=>{R.value&&clearInterval(R.value)},[]),e("div",{class:"page",children:[e("a",{href:"#/wallets",class:"back-link",children:"← Back to Wallets"}),a.value?e("div",{class:"stat-skeleton",style:{height:"200px",marginTop:"var(--space-4)"}}):n.value?e("div",{class:"wallet-detail",children:[e("div",{class:"detail-header",children:[e("div",{class:"detail-name",children:l.value?e("div",{class:"inline-edit",children:[e("input",{value:i.value,onInput:w=>{i.value=w.target.value},class:"inline-edit-input"}),e(D,{size:"sm",onClick:Z,loading:r.value,children:"Save"}),e(D,{size:"sm",variant:"secondary",onClick:ie,children:"Cancel"})]}):e("span",{children:[n.value.name,e("button",{class:"btn btn-ghost btn-sm",onClick:H,title:"Edit name",children:"✎"})]})}),e(D,{variant:"danger",onClick:()=>{s.value=!0},children:"Terminate Wallet"})]}),e("div",{class:"detail-grid",children:[e(J,{label:"ID",value:n.value.id,copy:!0}),e(J,{label:"Public Key",value:n.value.publicKey,copy:!0}),e(J,{label:"Chain",value:n.value.chain}),e(J,{label:"Environment",children:e(W,{variant:n.value.environment==="mainnet"?"warning":"info",children:n.value.environment})}),e(J,{label:"Default Network",value:n.value.defaultNetwork??n.value.network}),e(J,{label:"Status",children:e(W,{variant:n.value.status==="ACTIVE"?"success":"danger",children:n.value.status})}),e(J,{label:"Created",value:ae(n.value.createdAt)}),e(J,{label:"Updated",value:n.value.updatedAt?ae(n.value.updatedAt):"Never"})]}),e("div",{class:"balance-section",style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"Balance"}),b.value?e("div",{class:"stat-skeleton",style:{height:"60px"}}):y.value?.native?e("div",{children:[e(J,{label:"Native",value:`${y.value.native.balance} ${y.value.native.symbol} (${y.value.native.network})`}),y.value.tokens.length>0?y.value.tokens.map(w=>e(J,{label:w.symbol,value:w.balance},w.address)):e("p",{style:{color:"var(--color-text-secondary)",marginTop:"var(--space-2)"},children:"No tokens registered"})]}):e("p",{style:{color:"var(--color-text-secondary)"},children:y.value?.error??"Balance unavailable"})]}),e("div",{class:"networks-section",style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"Available Networks"}),d.value?e("div",{class:"stat-skeleton",style:{height:"80px"}}):e("div",{style:{display:"flex",flexDirection:"column",gap:"var(--space-2)"},children:(p.value??[]).map(w=>e("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"var(--space-2) var(--space-3)",background:"var(--color-bg-secondary)",borderRadius:"var(--radius-md)"},children:[e("span",{children:[w.name??w.network,w.isDefault&&e(W,{variant:"success",style:{marginLeft:"var(--space-2)"},children:"Default"})]}),!w.isDefault&&n.value?.status==="ACTIVE"&&e(D,{size:"sm",variant:"secondary",onClick:()=>ne(w.network),loading:N.value,children:"Set Default"})]},w.network))})]}),e("div",{class:"transactions-section",style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"Recent Transactions"}),e(ge,{columns:[{key:"createdAt",header:"Time",render:w=>w.createdAt?ae(w.createdAt):"--"},{key:"type",header:"Type",render:w=>w.type},{key:"toAddress",header:"To",render:w=>w.toAddress?on(w.toAddress):"--"},{key:"amount",header:"Amount",render:w=>w.amount??"--"},{key:"status",header:"Status",render:w=>e(W,{variant:w.status==="CONFIRMED"?"success":w.status==="FAILED"?"danger":"warning",children:w.status})},{key:"network",header:"Network",render:w=>w.network??"--"}],data:k.value,loading:m.value,emptyMessage:"No transactions yet"})]}),e("div",{class:"owner-section",style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"Owner Wallet"}),n.value.ownerState==="NONE"&&n.value.status!=="TERMINATED"&&e("div",{style:{background:"var(--color-bg-secondary)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",padding:"var(--space-3) var(--space-4)",marginBottom:"var(--space-4)"},children:[e("p",{style:{marginBottom:"var(--space-2)",fontWeight:500},children:"What is an Owner Wallet?"}),e("p",{style:{color:"var(--color-text-secondary)",fontSize:"0.85rem",marginBottom:"var(--space-3)"},children:"Register an Owner wallet to enable transaction approval (APPROVAL policy) for high-value transfers. Connect D'CENT, MetaMask, or other WalletConnect-compatible wallets to approve transactions directly."}),e(D,{size:"sm",onClick:me,children:"Set Owner Address"})]}),e(J,{label:"Address",children:q.value?e("div",{class:"inline-edit",children:[e("input",{value:V.value,onInput:w=>{V.value=w.target.value},class:"inline-edit-input",placeholder:"Enter owner wallet address"}),e(D,{size:"sm",onClick:$,loading:le.value,children:"Save"}),e(D,{size:"sm",variant:"secondary",onClick:_,children:"Cancel"})]}):e("span",{children:[n.value.ownerAddress?e(oe,{children:[on(n.value.ownerAddress),e(ze,{value:n.value.ownerAddress})]}):"Not set",n.value.ownerState!=="LOCKED"&&n.value.status==="ACTIVE"&&e("button",{class:"btn btn-ghost btn-sm",onClick:me,title:"Set owner address",children:"✎"})]})}),e(J,{label:"State",children:e(W,{variant:St(n.value.ownerState),children:n.value.ownerState})}),n.value.ownerState==="GRACE"&&e("div",{style:{background:"var(--color-bg-secondary)",border:"1px solid var(--color-border)",borderRadius:"var(--radius-md)",padding:"var(--space-3) var(--space-4)",marginTop:"var(--space-3)"},children:[e("p",{style:{marginBottom:"var(--space-2)",fontWeight:500,fontSize:"0.85rem"},children:"Verify Owner"}),e("p",{style:{color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:"Sign a verification message with the Owner wallet to transition from GRACE to LOCKED. Connect via WalletConnect first, then trigger an APPROVAL-tier transaction or use the CLI/SDK to call the verify endpoint."})]}),e("div",{style:{marginTop:"var(--space-4)",paddingTop:"var(--space-3)",borderTop:"1px solid var(--color-border)"},children:[e("h4",{style:{marginBottom:"var(--space-2)",fontSize:"0.9rem"},children:"WalletConnect"}),T.value?e("div",{class:"stat-skeleton",style:{height:"60px"}}):P.value?e("div",{children:[e(J,{label:"Status",children:e(W,{variant:"success",children:"Connected"})}),e(J,{label:"Peer",value:P.value.peerName??"Unknown"}),e(J,{label:"Chain ID",value:P.value.chainId}),e(J,{label:"Expires",value:ae(P.value.expiry)}),e("div",{style:{marginTop:"var(--space-3)"},children:e(D,{variant:"danger",onClick:$e,loading:x.value,children:"Disconnect"})})]}):e("div",{children:[e("p",{style:{marginBottom:"var(--space-3)",color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:"Connect an external wallet (D'CENT, MetaMask, Phantom) via WalletConnect for transaction approval."}),n.value?.ownerAddress?e(D,{onClick:Me,loading:F.value,children:"Connect Wallet"}):e("p",{style:{color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:"Set an Owner address first to enable WalletConnect."})]})]})]}),e("div",{class:"mcp-setup-section",style:{marginTop:"var(--space-6)"},children:[e("h3",{style:{marginBottom:"var(--space-3)"},children:"MCP Setup"}),c.value?e("div",{children:[e("div",{class:"detail-grid",style:{marginBottom:"var(--space-4)"},children:[e(J,{label:"Token Path",value:c.value.tokenPath}),e(J,{label:"Expires At",value:ae(c.value.expiresAt)})]}),e("div",{style:{marginBottom:"var(--space-2)"},children:e("strong",{children:"Claude Desktop Config"})}),e("div",{style:{position:"relative"},children:[e("pre",{children:e("code",{style:{display:"block",whiteSpace:"pre-wrap",wordBreak:"break-all",background:"var(--color-bg-secondary)",padding:"var(--space-3)",borderRadius:"var(--radius-md)",fontSize:"0.85rem",maxHeight:"300px",overflow:"auto"},children:JSON.stringify({mcpServers:c.value.claudeDesktopConfig},null,2)})}),e("div",{style:{marginTop:"var(--space-2)"},children:e(ze,{value:JSON.stringify({mcpServers:c.value.claudeDesktopConfig},null,2),label:"Copy Config"})})]}),e("div",{style:{marginTop:"var(--space-3)"},children:e(D,{variant:"secondary",onClick:ue,loading:h.value,children:"Re-provision"})})]}):e("div",{children:[e("p",{style:{marginBottom:"var(--space-3)",color:"var(--color-text-secondary)"},children:"Provision an MCP token for Claude Desktop integration."}),e(D,{onClick:ue,loading:h.value,children:"Setup MCP"})]})]}),e(ce,{open:s.value,title:"Terminate Wallet",onCancel:()=>{s.value=!1},onConfirm:M,confirmText:"Terminate",confirmVariant:"danger",loading:o.value,children:e("p",{children:["Are you sure you want to terminate wallet ",e("strong",{children:n.value.name}),"? This action cannot be undone."]})}),e(ce,{open:A.value,title:"Scan QR Code",onCancel:()=>{A.value=!1,R.value&&clearInterval(R.value),R.value=null},children:I.value&&e("div",{style:{textAlign:"center"},children:[e("img",{src:I.value.qrCode,alt:"WalletConnect QR Code",style:{width:"280px",height:"280px",margin:"0 auto"}}),e("p",{style:{marginTop:"var(--space-3)",color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:"Scan with D'CENT, MetaMask, Phantom, or any WalletConnect-compatible wallet"}),e("p",{style:{marginTop:"var(--space-2)",color:"var(--color-text-secondary)",fontSize:"0.75rem"},children:"Waiting for connection..."})]})})]}):e(ya,{title:"Wallet not found",description:"The wallet may have been deleted."})]})}function Na(){const t=u([]),n=u(!0),a=u(!1),l=u(""),i=u("solana"),r=u("testnet"),s=u(null),o=u(!1),h=async()=>{try{const N=await B(C.WALLETS);t.value=N.items}catch(N){const y=N instanceof g?N:new g(0,"UNKNOWN","Unknown error");S("error",O(y.code))}finally{n.value=!1}},c=async()=>{if(!l.value.trim()){s.value="Name is required";return}s.value=null,o.value=!0;try{await Q(C.WALLETS,{name:l.value.trim(),chain:i.value,environment:r.value}),S("success","Wallet created"),l.value="",i.value="solana",r.value="testnet",a.value=!1,n.value=!0,await h()}catch(N){const y=N instanceof g?N:new g(0,"UNKNOWN","Unknown error");s.value=O(y.code)}finally{o.value=!1}},p=N=>{window.location.hash="#/wallets/"+N.id},d=N=>{i.value=N};return ee(()=>{h()},[]),e("div",{class:"page",children:[e("div",{class:"page-actions",children:!a.value&&e(D,{onClick:()=>{a.value=!0},children:"Create Wallet"})}),a.value&&e("div",{class:"inline-form",children:[e(E,{label:"Name",name:"name",value:l.value,onChange:N=>{l.value=N},required:!0,placeholder:"e.g. trading-bot",error:s.value??void 0}),e(E,{label:"Chain",name:"chain",type:"select",value:i.value,onChange:d,options:[{label:"Solana",value:"solana"},{label:"Ethereum",value:"ethereum"}]}),e(E,{label:"Environment",name:"environment",type:"select",value:r.value,onChange:N=>{r.value=N},options:[{label:"Testnet",value:"testnet"},{label:"Mainnet",value:"mainnet"}]}),e("div",{class:"inline-form-actions",children:[e(D,{onClick:c,loading:o.value,children:"Create"}),e(D,{variant:"secondary",onClick:()=>{a.value=!1,s.value=null},children:"Cancel"})]})]}),e(ge,{columns:Sa,data:t.value,loading:n.value,onRowClick:p,emptyMessage:"No wallets yet"})]})}function Ea(){const t=De.value,n=t.startsWith("/wallets/")?t.slice(9):null;return n?e(Ta,{id:n}):e(Na,{})}function Aa(t,n,a){n.value=t,a.value=!0}function ka(){const t=u([]),n=u(""),a=u([]),l=u(!1),i=u(!0),r=u(!1),s=u(!1),o=u(""),h=u(!1),c=u(""),p=u(!1),d=async()=>{try{const m=await B(C.WALLETS);t.value=m.items.filter(A=>A.status==="ACTIVE")}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{i.value=!1}},N=async()=>{l.value=!0;try{const m=n.value?`${C.SESSIONS}?walletId=${n.value}`:C.SESSIONS,A=await B(m);a.value=A}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{l.value=!1}},y=async()=>{r.value=!0;try{const m=await Q(C.SESSIONS,{walletId:n.value});o.value=m.token,s.value=!0,await N()}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{r.value=!1}},b=async()=>{p.value=!0;try{await Se(C.SESSION(c.value)),S("success","Session revoked"),h.value=!1,await N()}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{p.value=!1}};ee(()=>{d()},[]),ee(()=>{a.value=[],N()},[n.value]);const k=[{key:"id",header:"ID",render:m=>m.id.slice(0,8)+"..."},{key:"walletName",header:"Wallet",render:m=>m.walletName??m.walletId.slice(0,8)+"..."},{key:"status",header:"Status",render:m=>e(W,{variant:m.status==="ACTIVE"?"success":m.status==="EXPIRED"?"warning":"danger",children:m.status})},{key:"expiresAt",header:"Expires At",render:m=>ae(m.expiresAt)},{key:"renewals",header:"Renewals",render:m=>`${m.renewalCount}/${m.maxRenewals}`},{key:"createdAt",header:"Created",render:m=>ae(m.createdAt)},{key:"actions",header:"Actions",render:m=>m.status==="ACTIVE"?e(D,{size:"sm",variant:"danger",onClick:()=>Aa(m.id,c,h),children:"Revoke"}):null}];return e("div",{class:"page",children:[e("div",{class:"session-controls",children:[e("div",{class:"session-wallet-select",children:[e("label",{for:"wallet-select",children:"Wallet"}),e("select",{id:"wallet-select",value:n.value,onChange:m=>{n.value=m.target.value},disabled:i.value,children:[e("option",{value:"",children:"All Wallets"}),t.value.map(m=>e("option",{value:m.id,children:[m.name," (",m.chain,"/",m.network,")"]},m.id))]})]}),e(D,{onClick:y,disabled:!n.value,loading:r.value,children:"Create Session"})]}),e(ge,{columns:k,data:a.value,loading:l.value,emptyMessage:"No sessions"}),e(ce,{open:s.value,title:"Session Created",onCancel:()=>{s.value=!1},cancelText:"Close",children:[e("p",{class:"token-warning",children:"Copy this token now. It will not be shown again."}),e("div",{class:"token-display",children:[e("code",{class:"token-value",children:o.value}),e(ze,{value:o.value,label:"Copy Token"})]})]}),e(ce,{open:h.value,title:"Revoke Session",onCancel:()=>{h.value=!1},onConfirm:b,confirmText:"Revoke",confirmVariant:"danger",loading:p.value,children:e("p",{children:"Are you sure you want to revoke this session? The associated token will be immediately invalidated."})})]})}function Ca({rules:t,onChange:n,errors:a}){const l=r=>s=>{n({...t,[r]:s})},i=r=>s=>{const o=Number(s),h={...t};s===""||s===0||Number.isNaN(o)?delete h[r]:h[r]=o,n(h)};return e("div",{class:"policy-form-fields",children:[e("h4",{children:"Native Amount Tiers"}),e("div",{class:"policy-form-grid",children:[e(E,{label:"Instant Max (lamports/wei)",name:"instant_max",value:t.instant_max||"",onChange:l("instant_max"),error:a.instant_max,required:!0}),e(E,{label:"Notify Max (lamports/wei)",name:"notify_max",value:t.notify_max||"",onChange:l("notify_max"),error:a.notify_max,required:!0}),e(E,{label:"Delay Max (lamports/wei)",name:"delay_max",value:t.delay_max||"",onChange:l("delay_max"),error:a.delay_max,required:!0})]}),e("h4",{children:"USD Amount Tiers (Optional)"}),e("div",{class:"policy-form-grid",children:[e(E,{label:"Instant Max USD",name:"instant_max_usd",type:"number",value:t.instant_max_usd??"",onChange:i("instant_max_usd"),placeholder:"Optional"}),e(E,{label:"Notify Max USD",name:"notify_max_usd",type:"number",value:t.notify_max_usd??"",onChange:i("notify_max_usd"),placeholder:"Optional"}),e(E,{label:"Delay Max USD",name:"delay_max_usd",type:"number",value:t.delay_max_usd??"",onChange:i("delay_max_usd"),placeholder:"Optional"})]}),e("h4",{children:"Cumulative USD Limits (Optional)"}),e("div",{class:"policy-form-grid",children:[e(E,{label:"Daily Limit USD (24h rolling)",name:"daily_limit_usd",type:"number",value:t.daily_limit_usd??"",onChange:i("daily_limit_usd"),placeholder:"e.g. 500",error:a.daily_limit_usd}),e(E,{label:"Monthly Limit USD (30d rolling)",name:"monthly_limit_usd",type:"number",value:t.monthly_limit_usd??"",onChange:i("monthly_limit_usd"),placeholder:"e.g. 5000",error:a.monthly_limit_usd})]}),e(E,{label:"Delay Duration (seconds, min 60)",name:"delay_seconds",type:"number",value:t.delay_seconds??900,onChange:l("delay_seconds"),error:a.delay_seconds,required:!0,min:60})]})}function ye({items:t,onAdd:n,onRemove:a,renderRow:l,onChange:i,addLabel:r="+ Add",minItems:s=0,error:o}){return e("div",{class:"dynamic-row-list",children:[t.map((h,c)=>e("div",{class:"dynamic-row",children:[e("div",{class:"dynamic-row-fields",children:l(h,c,i)}),e("button",{class:"btn btn-ghost btn-sm dynamic-row-remove",onClick:()=>a(c),disabled:t.length<=s,title:"Remove",children:"x"})]},c)),e("button",{class:"btn btn-secondary btn-sm",onClick:n,children:r}),o&&e("span",{class:"form-error",children:o})]})}function Ia({rules:t,onChange:n,errors:a}){const l=t.allowed_addresses||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,allowed_addresses:[...l,""]}),onRemove:i=>n({...t,allowed_addresses:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,n({...t,allowed_addresses:s})},renderRow:(i,r,s)=>e(E,{label:`Address ${r+1}`,name:`address-${r}`,value:i,onChange:o=>s(r,o),placeholder:"Wallet address",error:a[`allowed_addresses.${r}`],required:!0}),addLabel:"+ Add Address",error:a.allowed_addresses})})}function Da({rules:t,onChange:n,errors:a}){const l=i=>r=>{n({...t,[i]:r})};return e("div",{class:"policy-form-fields",children:[e(E,{label:"Max Requests",name:"max_requests",type:"number",value:t.max_requests??100,onChange:l("max_requests"),error:a.max_requests,required:!0,min:1}),e(E,{label:"Window (seconds)",name:"window_seconds",type:"number",value:t.window_seconds??3600,onChange:l("window_seconds"),error:a.window_seconds,required:!0,min:1})]})}function Oa({rules:t,onChange:n,errors:a}){const l=i=>{const r={...t};i===""||i===void 0?delete r.maxAmount:r.maxAmount=i,n(r)};return e("div",{class:"policy-form-fields",children:[e(E,{label:"Max Amount (lamports/wei, optional)",name:"maxAmount",value:t.maxAmount??"",onChange:l,error:a.maxAmount,placeholder:"Leave empty for no limit"}),e(E,{label:"Block Unlimited Approvals",name:"blockUnlimited",type:"checkbox",value:t.blockUnlimited??!0,onChange:i=>n({...t,blockUnlimited:i})})]})}const La=[{label:"Instant",value:"INSTANT"},{label:"Notify",value:"NOTIFY"},{label:"Delay",value:"DELAY"},{label:"Approval",value:"APPROVAL"}];function xa({rules:t,onChange:n,errors:a}){return e("div",{class:"policy-form-fields",children:e(E,{label:"Override Tier",name:"tier",type:"select",value:t.tier??"DELAY",onChange:l=>n({...t,tier:l}),options:La,error:a.tier})})}const Ra=[{label:"All Chains",value:""},{label:"Solana",value:"solana"},{label:"Ethereum",value:"ethereum"}];function Wa({rules:t,onChange:n,errors:a}){const l=t.tokens||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,tokens:[...l,{address:"",symbol:"",chain:""}]}),onRemove:i=>n({...t,tokens:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,n({...t,tokens:s})},renderRow:(i,r,s)=>e("div",{class:"dynamic-row-fields",style:{display:"flex",gap:"0.5rem",flex:1},children:[e(E,{label:`Address ${r+1}`,name:`token-addr-${r}`,value:i.address,onChange:o=>s(r,{...i,address:o}),placeholder:"Token mint/contract address",error:a[`tokens.${r}.address`],required:!0}),e(E,{label:"Symbol",name:`token-symbol-${r}`,value:i.symbol,onChange:o=>s(r,{...i,symbol:o}),placeholder:"e.g. USDC"}),e(E,{label:"Chain",name:`token-chain-${r}`,type:"select",value:i.chain,onChange:o=>{const h={...i,chain:o};o||delete h.chain,s(r,h)},options:Ra})]}),addLabel:"+ Add Token",error:a.tokens})})}const Pa=[{label:"All Chains",value:""},{label:"Solana",value:"solana"},{label:"Ethereum",value:"ethereum"}];function Ma({rules:t,onChange:n,errors:a}){const l=t.contracts||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,contracts:[...l,{address:"",name:"",chain:""}]}),onRemove:i=>n({...t,contracts:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,n({...t,contracts:s})},renderRow:(i,r,s)=>e("div",{class:"dynamic-row-fields",style:{display:"flex",gap:"0.5rem",flex:1},children:[e(E,{label:`Address ${r+1}`,name:`contract-addr-${r}`,value:i.address,onChange:o=>s(r,{...i,address:o}),placeholder:"Contract address",error:a[`contracts.${r}.address`],required:!0}),e(E,{label:"Name",name:`contract-name-${r}`,value:i.name,onChange:o=>s(r,{...i,name:o}),placeholder:"e.g. Uniswap Router"}),e(E,{label:"Chain",name:`contract-chain-${r}`,type:"select",value:i.chain,onChange:o=>{const h={...i,chain:o};o||delete h.chain,s(r,h)},options:Pa})]}),addLabel:"+ Add Contract",error:a.contracts})})}function $a({rules:t,onChange:n,errors:a}){const l=t.methods||[],i=r=>{n({...t,methods:r})};return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>i([...l,{contractAddress:"",selectors:[""]}]),onRemove:r=>i(l.filter((s,o)=>o!==r)),onChange:(r,s)=>{const o=[...l];o[r]=s,i(o)},renderRow:(r,s,o)=>e("div",{style:{flex:1},children:[e(E,{label:`Contract Address ${s+1}`,name:`method-addr-${s}`,value:r.contractAddress,onChange:h=>o(s,{...r,contractAddress:h}),placeholder:"Contract address",error:a[`methods.${s}.contractAddress`],required:!0}),e("div",{style:{marginTop:"0.5rem",marginLeft:"1rem"},children:[e("label",{style:{fontSize:"0.85rem",fontWeight:500},children:"Selectors"}),e(ye,{items:r.selectors,onAdd:()=>o(s,{...r,selectors:[...r.selectors,""]}),onRemove:h=>o(s,{...r,selectors:r.selectors.filter((c,p)=>p!==h)}),onChange:(h,c)=>{const p=[...r.selectors];p[h]=c,o(s,{...r,selectors:p})},renderRow:(h,c,p)=>e(E,{label:`Selector ${c+1}`,name:`method-sel-${s}-${c}`,value:h,onChange:d=>p(c,d),placeholder:"e.g. 0xa9059cbb or transfer(address,uint256)",error:a[`methods.${s}.selectors.${c}`],required:!0}),addLabel:"+ Add Selector",error:a[`methods.${s}.selectors`]})]})]}),addLabel:"+ Add Method Entry",error:a.methods})})}function Ua({rules:t,onChange:n,errors:a}){const l=t.spenders||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,spenders:[...l,{address:"",name:"",maxAmount:""}]}),onRemove:i=>n({...t,spenders:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,r.maxAmount||delete s[i].maxAmount,n({...t,spenders:s})},renderRow:(i,r,s)=>e("div",{class:"dynamic-row-fields",style:{display:"flex",gap:"0.5rem",flex:1},children:[e(E,{label:`Address ${r+1}`,name:`spender-addr-${r}`,value:i.address,onChange:o=>s(r,{...i,address:o}),placeholder:"Spender address",error:a[`spenders.${r}.address`],required:!0}),e(E,{label:"Name",name:`spender-name-${r}`,value:i.name,onChange:o=>s(r,{...i,name:o}),placeholder:"e.g. Uniswap"}),e(E,{label:"Max Amount",name:`spender-max-${r}`,value:i.maxAmount||"",onChange:o=>s(r,{...i,maxAmount:o}),placeholder:"Leave empty for unlimited",error:a[`spenders.${r}.maxAmount`]})]}),addLabel:"+ Add Spender",error:a.spenders})})}const Ka=Array.from({length:24},(t,n)=>({label:`${String(n).padStart(2,"0")}:00`,value:String(n)})),Fa=Array.from({length:24},(t,n)=>({label:`${String(n+1).padStart(2,"0")}:00`,value:String(n+1)})),Ha=[{label:"Sun",value:0},{label:"Mon",value:1},{label:"Tue",value:2},{label:"Wed",value:3},{label:"Thu",value:4},{label:"Fri",value:5},{label:"Sat",value:6}];function Ba({rules:t,onChange:n,errors:a}){const l=t.allowed_hours||{start:0,end:24},i=t.allowed_days||[],r=o=>h=>{const c={...l,[o]:Number(h)};n({...t,allowed_hours:c})},s=o=>{const h=i.includes(o)?i.filter(c=>c!==o):[...i,o].sort((c,p)=>c-p);n({...t,allowed_days:h})};return e("div",{class:"policy-form-fields",children:[e("h4",{children:"Allowed Hours"}),e("div",{class:"policy-form-grid",children:[e(E,{label:"Start Hour",name:"allowed_hours_start",type:"select",value:String(l.start),onChange:r("start"),options:Ka,error:a.allowed_hours}),e(E,{label:"End Hour",name:"allowed_hours_end",type:"select",value:String(l.end),onChange:r("end"),options:Fa})]}),e("h4",{children:"Allowed Days"}),e("div",{style:{display:"flex",gap:"0.75rem",flexWrap:"wrap"},children:Ha.map(o=>e("label",{style:{display:"flex",alignItems:"center",gap:"0.25rem",cursor:"pointer"},children:[e("input",{type:"checkbox",checked:i.includes(o.value),onChange:()=>s(o.value)}),o.label]},o.value))}),a.allowed_days&&e("span",{class:"form-error",children:a.allowed_days})]})}const Va=[{label:"mainnet",value:"mainnet"},{label:"devnet",value:"devnet"},{label:"testnet",value:"testnet"},{label:"ethereum-mainnet",value:"ethereum-mainnet"},{label:"ethereum-sepolia",value:"ethereum-sepolia"},{label:"polygon-mainnet",value:"polygon-mainnet"},{label:"polygon-amoy",value:"polygon-amoy"},{label:"arbitrum-mainnet",value:"arbitrum-mainnet"},{label:"arbitrum-sepolia",value:"arbitrum-sepolia"},{label:"optimism-mainnet",value:"optimism-mainnet"},{label:"optimism-sepolia",value:"optimism-sepolia"},{label:"base-mainnet",value:"base-mainnet"},{label:"base-sepolia",value:"base-sepolia"}];function qa({rules:t,onChange:n,errors:a}){const l=t.networks||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,networks:[...l,{network:"mainnet",name:""}]}),onRemove:i=>n({...t,networks:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,n({...t,networks:s})},renderRow:(i,r,s)=>e("div",{class:"dynamic-row-fields",style:{display:"flex",gap:"0.5rem",flex:1},children:[e(E,{label:`Network ${r+1}`,name:`network-sel-${r}`,type:"select",value:i.network,onChange:o=>s(r,{...i,network:o}),options:Va,error:a[`networks.${r}.network`],required:!0}),e(E,{label:"Label",name:`network-name-${r}`,value:i.name,onChange:o=>s(r,{...i,name:o}),placeholder:"Optional label"})]}),addLabel:"+ Add Network",error:a.networks})})}function za({rules:t,onChange:n,errors:a}){const l=t.domains||[];return e("div",{class:"policy-form-fields",children:e(ye,{items:l,onAdd:()=>n({...t,domains:[...l,""]}),onRemove:i=>n({...t,domains:l.filter((r,s)=>s!==i)}),onChange:(i,r)=>{const s=[...l];s[i]=r,n({...t,domains:s})},renderRow:(i,r,s)=>e(E,{label:`Domain ${r+1}`,name:`domain-${r}`,value:i,onChange:o=>s(r,o),placeholder:"e.g. api.example.com or *.service.io",error:a[`domains.${r}`],required:!0}),addLabel:"+ Add Domain",error:a.domains})})}function qn({type:t,rules:n,onChange:a,errors:l}){switch(t){case"SPENDING_LIMIT":return e(Ca,{rules:n,onChange:a,errors:l});case"WHITELIST":return e(Ia,{rules:n,onChange:a,errors:l});case"RATE_LIMIT":return e(Da,{rules:n,onChange:a,errors:l});case"APPROVE_AMOUNT_LIMIT":return e(Oa,{rules:n,onChange:a,errors:l});case"APPROVE_TIER_OVERRIDE":return e(xa,{rules:n,onChange:a,errors:l});case"ALLOWED_TOKENS":return e(Wa,{rules:n,onChange:a,errors:l});case"CONTRACT_WHITELIST":return e(Ma,{rules:n,onChange:a,errors:l});case"METHOD_WHITELIST":return e($a,{rules:n,onChange:a,errors:l});case"APPROVED_SPENDERS":return e(Ua,{rules:n,onChange:a,errors:l});case"TIME_RESTRICTION":return e(Ba,{rules:n,onChange:a,errors:l});case"ALLOWED_NETWORKS":return e(qa,{rules:n,onChange:a,errors:l});case"X402_ALLOWED_DOMAINS":return e(za,{rules:n,onChange:a,errors:l});default:return e("p",{class:"policy-form-placeholder",children:"This policy type uses JSON editor. Toggle to JSON mode."})}}function En(t){const n=typeof t=="string"?Number(t):t;return Number.isNaN(n)?String(t):n.toLocaleString("en-US")}function Ga(t){return t===86400?"1d":t%86400===0?`${t/86400}d`:t===3600?"1h":t%3600===0?`${t/3600}h`:t===60?"1m":t%60===0?`${t/60}m`:`${t}s`}const fn=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function Ya(t){if(!t||t.length===0)return"";const n=[...t].sort((l,i)=>l-i);let a=!0;for(let l=1;l<n.length;l++)if(n[l]!==n[l-1]+1){a=!1;break}return a&&n.length>2?`${fn[n[0]]}-${fn[n[n.length-1]]}`:n.map(l=>fn[l]??String(l)).join(", ")}function zn(t){return String(t).padStart(2,"0")}function ja({rules:t}){const n=Number(t.instant_max??0),a=Number(t.notify_max??0),l=Number(t.delay_max??0),i=Math.max(n,a,l,1),r=[{label:"Instant",value:t.instant_max,width:n/i*100,cls:"instant"},{label:"Notify",value:t.notify_max,width:a/i*100,cls:"notify"},{label:"Delay",value:t.delay_max,width:l/i*100,cls:"delay"},{label:"Approval",value:"",width:100,cls:"approval"}];return e("div",{class:"tier-bars",children:r.map(s=>e("div",{class:"tier-bar",children:[e("span",{class:"tier-bar-label",children:s.label}),e("div",{class:"tier-bar-track",children:e("div",{class:`tier-bar-fill tier-bar-fill--${s.cls}`,style:{width:`${s.width}%`}})}),e("span",{class:"tier-bar-value",children:s.value?En(s.value):""})]},s.cls))})}function Gn(t){return t.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2})}function Ja({rules:t}){const n=t.daily_limit_usd,a=t.monthly_limit_usd;return!n&&!a?null:e("div",{class:"cumulative-limits",children:[e("div",{class:"cumulative-limits-label",children:"Cumulative Limits"}),n&&e("div",{class:"cumulative-limit-row",children:[e("span",{class:"cumulative-limit-type",children:"Daily (24h)"}),e("span",{class:"cumulative-limit-value",children:["$",Gn(n)]})]}),a&&e("div",{class:"cumulative-limit-row",children:[e("span",{class:"cumulative-limit-type",children:"Monthly (30d)"}),e("span",{class:"cumulative-limit-value",children:["$",Gn(a)]})]})]})}const Xa={INSTANT:"success",NOTIFY:"info",DELAY:"warning",APPROVAL:"danger"};function Za({type:t,rules:n}){switch(t){case"SPENDING_LIMIT":return e("div",{class:"spending-limit-summary",children:[e(ja,{rules:n}),e(Ja,{rules:n})]});case"ALLOWED_TOKENS":{const a=n.tokens||[];return a.length===0?e("span",{class:"rules-vis-text",children:"No tokens"}):e("div",{class:"rules-vis-badges",children:a.map((l,i)=>e(W,{variant:"info",children:l.symbol||(l.address?l.address.slice(0,8)+"...":"?")},i))})}case"RATE_LIMIT":{const a=n.max_requests,l=n.window_seconds;return e("span",{class:"rules-vis-text",children:[a," req / ",Ga(l)]})}case"WHITELIST":{const a=n.allowed_addresses||[];return e(W,{variant:"neutral",children:[a.length," addresses"]})}case"TIME_RESTRICTION":{const a=n.allowed_days||[],l=n.allowed_hours,i=Ya(a),r=l?`${zn(l.start)}:00-${zn(l.end)}:00`:"";return e("span",{class:"rules-vis-text",children:[i," ",r]})}case"CONTRACT_WHITELIST":{const a=n.contracts||[];if(a.length===0)return e("span",{class:"rules-vis-text",children:"No contracts"});const l=a.slice(0,3),i=a.length-3;return e("div",{class:"rules-vis-badges",children:[l.map((r,s)=>e(W,{variant:"neutral",children:r.name||(r.address?r.address.slice(0,8)+"...":"?")},s)),i>0&&e(W,{variant:"neutral",children:["+",i," more"]})]})}case"METHOD_WHITELIST":{const a=n.methods||[],l=a.length,i=a.reduce((r,s)=>r+(s.selectors?.length||0),0);return e(W,{variant:"neutral",children:[l," contracts, ",i," methods"]})}case"APPROVED_SPENDERS":{const a=n.spenders||[];return e(W,{variant:"neutral",children:[a.length," spenders"]})}case"APPROVE_AMOUNT_LIMIT":{const a=n.maxAmount,l=n.blockUnlimited;return a&&l?e("span",{class:"rules-vis-text",children:["Max: ",En(a)," + Block unlimited"]}):a?e("span",{class:"rules-vis-text",children:["Max: ",En(a)]}):l?e("span",{class:"rules-vis-text",children:"Block unlimited only"}):e("span",{class:"rules-vis-text",children:"No limits"})}case"APPROVE_TIER_OVERRIDE":{const a=n.tier||"DELAY",l=Xa[a]||"neutral";return e(W,{variant:l,children:a})}case"ALLOWED_NETWORKS":{const a=n.networks||[];if(a.length===0)return e("span",{class:"rules-vis-text",children:"No networks"});const l=a.slice(0,3),i=a.length-3;return e("div",{class:"rules-vis-badges",children:[l.map((r,s)=>e(W,{variant:"info",children:r.network},s)),i>0&&e(W,{variant:"info",children:["+",i," more"]})]})}case"X402_ALLOWED_DOMAINS":{const a=n.domains||[];if(a.length===0)return e("span",{class:"rules-vis-text",children:"No domains"});const l=a.slice(0,3),i=a.length-3;return e("div",{class:"rules-vis-badges",children:[l.map((r,s)=>e(W,{variant:"neutral",children:r},s)),i>0&&e(W,{variant:"neutral",children:["+",i," more"]})]})}default:{const a=JSON.stringify(n);return e("span",{class:"rules-summary",children:a.length>60?a.slice(0,60)+"...":a})}}}const Tt=[{label:"Spending Limit",value:"SPENDING_LIMIT"},{label:"Whitelist",value:"WHITELIST"},{label:"Time Restriction",value:"TIME_RESTRICTION"},{label:"Rate Limit",value:"RATE_LIMIT"},{label:"Allowed Tokens",value:"ALLOWED_TOKENS"},{label:"Contract Whitelist",value:"CONTRACT_WHITELIST"},{label:"Method Whitelist",value:"METHOD_WHITELIST"},{label:"Approved Spenders",value:"APPROVED_SPENDERS"},{label:"Approve Amount Limit",value:"APPROVE_AMOUNT_LIMIT"},{label:"Approve Tier Override",value:"APPROVE_TIER_OVERRIDE"},{label:"Allowed Networks",value:"ALLOWED_NETWORKS"},{label:"x402 Allowed Domains",value:"X402_ALLOWED_DOMAINS"}],Ue={SPENDING_LIMIT:{instant_max:"1000000",notify_max:"5000000",delay_max:"10000000",delay_seconds:300,approval_timeout:3600},WHITELIST:{allowed_addresses:[]},TIME_RESTRICTION:{allowed_hours:{start:0,end:24},allowed_days:[0,1,2,3,4,5,6]},RATE_LIMIT:{max_requests:100,window_seconds:3600},ALLOWED_TOKENS:{tokens:[]},CONTRACT_WHITELIST:{contracts:[]},METHOD_WHITELIST:{methods:[]},APPROVED_SPENDERS:{spenders:[]},APPROVE_AMOUNT_LIMIT:{maxAmount:"1000000",blockUnlimited:!0},APPROVE_TIER_OVERRIDE:{tier:"DELAY"},ALLOWED_NETWORKS:{networks:[]},X402_ALLOWED_DOMAINS:{domains:[]}};function Xe(t,n){const a={};if(t==="SPENDING_LIMIT"){(!n.instant_max||!/^\d+$/.test(n.instant_max))&&(a.instant_max="Positive integer required"),(!n.notify_max||!/^\d+$/.test(n.notify_max))&&(a.notify_max="Positive integer required"),(!n.delay_max||!/^\d+$/.test(n.delay_max))&&(a.delay_max="Positive integer required");const l=Number(n.delay_seconds);(n.delay_seconds===void 0||n.delay_seconds===""||Number.isNaN(l)||l<60)&&(a.delay_seconds="Minimum 60 seconds");const i=n.daily_limit_usd;if(i!==void 0&&i!==""){const s=Number(i);(Number.isNaN(s)||s<=0)&&(a.daily_limit_usd="Must be a positive number")}const r=n.monthly_limit_usd;if(r!==void 0&&r!==""){const s=Number(r);(Number.isNaN(s)||s<=0)&&(a.monthly_limit_usd="Must be a positive number")}}else if(t==="WHITELIST"){const l=n.allowed_addresses||[];l.length===0&&(a.allowed_addresses="At least one address required"),l.forEach((i,r)=>{(!i||i.trim()==="")&&(a[`allowed_addresses.${r}`]="Address required")})}else if(t==="RATE_LIMIT"){const l=Number(n.max_requests);(!n.max_requests||Number.isNaN(l)||l<1||!Number.isInteger(l))&&(a.max_requests="Positive integer required");const i=Number(n.window_seconds);(!n.window_seconds||Number.isNaN(i)||i<1||!Number.isInteger(i))&&(a.window_seconds="Positive integer required")}else if(t==="APPROVE_AMOUNT_LIMIT")n.maxAmount&&!/^\d+$/.test(n.maxAmount)&&(a.maxAmount="Must be a positive integer string");else if(t==="ALLOWED_TOKENS"){const l=n.tokens||[];l.length===0&&(a.tokens="At least one token required"),l.forEach((i,r)=>{(!i.address||i.address.trim()==="")&&(a[`tokens.${r}.address`]="Address required")})}else if(t==="CONTRACT_WHITELIST"){const l=n.contracts||[];l.length===0&&(a.contracts="At least one contract required"),l.forEach((i,r)=>{(!i.address||i.address.trim()==="")&&(a[`contracts.${r}.address`]="Address required")})}else if(t==="METHOD_WHITELIST"){const l=n.methods||[];l.length===0&&(a.methods="At least one method entry required"),l.forEach((i,r)=>{(!i.contractAddress||i.contractAddress.trim()==="")&&(a[`methods.${r}.contractAddress`]="Contract address required"),!i.selectors||i.selectors.length===0?a[`methods.${r}.selectors`]="At least one selector required":i.selectors.forEach((s,o)=>{(!s||s.trim()==="")&&(a[`methods.${r}.selectors.${o}`]="Selector required")})})}else if(t==="APPROVED_SPENDERS"){const l=n.spenders||[];l.length===0&&(a.spenders="At least one spender required"),l.forEach((i,r)=>{(!i.address||i.address.trim()==="")&&(a[`spenders.${r}.address`]="Address required"),i.maxAmount&&!/^\d+$/.test(i.maxAmount)&&(a[`spenders.${r}.maxAmount`]="Must be a positive integer")})}else if(t==="TIME_RESTRICTION"){(n.allowed_days||[]).length===0&&(a.allowed_days="At least one day required");const i=n.allowed_hours;i&&i.start>=i.end&&(a.allowed_hours="Start must be before end")}else if(t==="ALLOWED_NETWORKS"){const l=n.networks||[];l.length===0&&(a.networks="At least one network required"),l.forEach((i,r)=>{(!i.network||i.network.trim()==="")&&(a[`networks.${r}.network`]="Network required")})}else if(t==="X402_ALLOWED_DOMAINS"){const l=n.domains||[];l.length===0&&(a.domains="At least one domain required"),l.forEach((i,r)=>{(!i||i.trim()==="")&&(a[`domains.${r}`]="Domain required")})}return a}function Qa(t,n){if(!t)return"Global";const a=n.find(l=>l.id===t);return a?a.name:t.slice(0,8)+"..."}function pn(t){const n=Tt.find(a=>a.value===t);return n?n.label:t}function el(){const t=u([]),n=u([]),a=u("__all__"),l=u(!1),i=u(!0),r=u(!1),s=u("SPENDING_LIMIT"),o=u(""),h=u(JSON.stringify(Ue.SPENDING_LIMIT,null,2)),c=u(Ue.SPENDING_LIMIT),p=u({}),d=u(!1),N=u(0),y=u(!0),b=u(""),k=u(null),m=u(!1),A=u(!1),I=u(null),F=u(""),P=u({}),T=u(!1),x=u({}),R=u(0),q=u(!0),V=u(null),le=u(!1),z=u(!1),Z=u(null),M=u(!1),H=async()=>{try{const _=await B(C.WALLETS);t.value=_.items}catch(_){const $=_ instanceof g?_:new g(0,"UNKNOWN","Unknown error");S("error",O($.code))}finally{i.value=!1}},ie=async()=>{l.value=!0;try{let _=C.POLICIES;a.value!=="__all__"&&a.value!=="__global__"&&(_=`${C.POLICIES}?walletId=${a.value}`);const $=await B(_);a.value==="__global__"?n.value=$.filter(ne=>ne.walletId===null):n.value=$}catch(_){const $=_ instanceof g?_:new g(0,"UNKNOWN","Unknown error");S("error",O($.code))}finally{l.value=!1}},ue=async()=>{k.value=null;let _;if(d.value)try{_=JSON.parse(h.value)}catch{k.value="Invalid JSON in rules field";return}else{const $=Xe(s.value,c.value);if(Object.keys($).length>0){p.value=$;return}p.value={},_=c.value}m.value=!0;try{await Q(C.POLICIES,{walletId:o.value||void 0,type:s.value,rules:_,priority:N.value,enabled:y.value,network:b.value||void 0}),S("success","Policy created"),r.value=!1,s.value="SPENDING_LIMIT",o.value="",b.value="",h.value=JSON.stringify(Ue.SPENDING_LIMIT,null,2),c.value=Ue.SPENDING_LIMIT,p.value={},d.value=!1,N.value=0,y.value=!0,k.value=null,await ie()}catch($){const ne=$ instanceof g?$:new g(0,"UNKNOWN","Unknown error");S("error",O(ne.code))}finally{m.value=!1}},Ne=_=>{I.value=_,F.value=JSON.stringify(_.rules,null,2),P.value={..._.rules},T.value=!1,x.value={},R.value=_.priority,q.value=_.enabled,V.value=null,A.value=!0},Re=async()=>{V.value=null;let _;if(T.value)try{_=JSON.parse(F.value)}catch{V.value="Invalid JSON in rules field";return}else{const $=Xe(I.value.type,P.value);if(Object.keys($).length>0){x.value=$;return}x.value={},_=P.value}le.value=!0;try{await we(C.POLICY(I.value.id),{rules:_,priority:R.value,enabled:q.value}),S("success","Policy updated"),A.value=!1,await ie()}catch($){const ne=$ instanceof g?$:new g(0,"UNKNOWN","Unknown error");S("error",O(ne.code))}finally{le.value=!1}},We=()=>{if(!T.value)F.value=JSON.stringify(P.value,null,2);else try{P.value=JSON.parse(F.value),V.value=null}catch{V.value="Invalid JSON — cannot switch to form mode";return}T.value=!T.value},Pe=_=>{Z.value=_,z.value=!0},Ee=async()=>{M.value=!0;try{await Se(C.POLICY(Z.value.id)),S("success","Policy deleted"),z.value=!1,await ie()}catch(_){const $=_ instanceof g?_:new g(0,"UNKNOWN","Unknown error");S("error",O($.code))}finally{M.value=!1}},Me=_=>{const $=_;s.value=$;const ne=Ue[$];ne&&(h.value=JSON.stringify(ne,null,2),c.value={...ne}),p.value={},d.value=!1},$e=()=>{if(!d.value)h.value=JSON.stringify(c.value,null,2);else try{c.value=JSON.parse(h.value),k.value=null}catch{k.value="Invalid JSON — cannot switch to form mode";return}d.value=!d.value};ee(()=>{H()},[]),ee(()=>{ie()},[a.value]);const me=[{key:"type",header:"Type",render:_=>e(W,{variant:_.type==="SPENDING_LIMIT"?"success":"info",children:pn(_.type)})},{key:"walletId",header:"Wallet",render:_=>Qa(_.walletId,t.value)},{key:"network",header:"Network",render:_=>_.network??"All"},{key:"rules",header:"Rules",render:_=>e(Za,{type:_.type,rules:_.rules})},{key:"priority",header:"Priority"},{key:"enabled",header:"Enabled",render:_=>e(W,{variant:_.enabled?"success":"danger",children:_.enabled?"ON":"OFF"})},{key:"actions",header:"Actions",render:_=>e("span",{style:{display:"flex",gap:"0.25rem"},children:[e("button",{class:"btn btn-ghost btn-sm",onClick:$=>{$.stopPropagation(),Ne(_)},children:"Edit"}),e(D,{size:"sm",variant:"danger",onClick:()=>Pe(_),children:"Delete"})]})}];return e("div",{class:"page",children:[e("div",{class:"policy-controls",children:[e("div",{class:"policy-filter-select",children:[e("label",{for:"policy-wallet-filter",children:"Filter by Wallet"}),e("select",{id:"policy-wallet-filter",value:a.value,onChange:_=>{a.value=_.target.value},disabled:i.value,children:[e("option",{value:"__all__",children:"All Policies"}),e("option",{value:"__global__",children:"Global Only"}),t.value.map(_=>e("option",{value:_.id,children:[_.name," (",_.chain,"/",_.network,")"]},_.id))]})]}),!r.value&&e(D,{onClick:()=>{r.value=!0},children:"Create Policy"})]}),r.value&&e("div",{class:"inline-form",children:[e(E,{label:"Type",name:"type",type:"select",value:s.value,onChange:Me,options:Tt}),e(E,{label:"Wallet",name:"walletId",type:"select",value:o.value,onChange:_=>{o.value=_},options:[{label:"Global (no wallet)",value:""},...t.value.map(_=>({label:`${_.name} (${_.chain}/${_.network})`,value:_.id}))]}),e(E,{label:"Network Scope",name:"network",value:b.value,onChange:_=>{b.value=_},placeholder:"e.g. polygon-mainnet (leave empty for all networks)"}),e("div",{class:"policy-form-section",children:[e("div",{class:"policy-form-header",children:[e("label",{children:"Rules"}),e("button",{class:"btn btn-ghost btn-sm json-toggle",onClick:$e,children:d.value?"Switch to Form":"JSON Direct Edit"})]}),d.value?e(E,{label:"",name:"rules",type:"textarea",value:h.value,onChange:_=>{h.value=_},error:k.value??void 0}):e(qn,{type:s.value,rules:c.value,onChange:_=>{c.value=_,Object.keys(p.value).length>0&&(p.value=Xe(s.value,_))},errors:p.value})]}),e(E,{label:"Priority",name:"priority",type:"number",value:N.value,onChange:_=>{N.value=_},min:0,max:999}),e(E,{label:"Enabled",name:"enabled",type:"checkbox",value:y.value,onChange:_=>{y.value=_}}),e("div",{class:"inline-form-actions",children:[e(D,{onClick:ue,loading:m.value,children:"Create"}),e(D,{variant:"secondary",onClick:()=>{r.value=!1,k.value=null},children:"Cancel"})]})]}),e(ge,{columns:me,data:n.value,loading:l.value,emptyMessage:"No policies found"}),e(ce,{open:A.value,title:"Edit Policy",onCancel:()=>{A.value=!1},onConfirm:Re,confirmText:"Save",loading:le.value,children:I.value&&e("div",{children:[e("div",{class:"policy-type-readonly",children:["Type: ",pn(I.value.type)]}),e("div",{class:"policy-form-section",children:[e("div",{class:"policy-form-header",children:[e("label",{children:"Rules"}),e("button",{class:"btn btn-ghost btn-sm json-toggle",onClick:We,children:T.value?"Switch to Form":"JSON Direct Edit"})]}),T.value?e("div",{class:"edit-rules-textarea",children:e(E,{label:"",name:"edit-rules",type:"textarea",value:F.value,onChange:_=>{F.value=_},error:V.value??void 0})}):e(qn,{type:I.value.type,rules:P.value,onChange:_=>{P.value=_,Object.keys(x.value).length>0&&(x.value=Xe(I.value.type,_))},errors:x.value})]}),e(E,{label:"Priority",name:"edit-priority",type:"number",value:R.value,onChange:_=>{R.value=_},min:0,max:999}),e(E,{label:"Enabled",name:"edit-enabled",type:"checkbox",value:q.value,onChange:_=>{q.value=_}})]})}),e(ce,{open:z.value,title:"Delete Policy",onCancel:()=>{z.value=!1},onConfirm:Ee,confirmText:"Delete",confirmVariant:"danger",loading:M.value,children:Z.value&&e("p",{children:["Are you sure you want to delete this"," ",e("strong",{children:pn(Z.value.type)})," policy? This action cannot be undone."]})})]})}function nl(){return e(tl,{})}function tl(){const t=u([]),n=u(!0),a=u(!1),l=u(null),i=u("ADMIN"),r=u(!1),s=u(!1),o=u(null),h=u(!1),c=async()=>{n.value=!0;try{const m=await B(C.ADMIN_TELEGRAM_USERS);t.value=m.users}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{n.value=!1}};ee(()=>{c()},[]);const p=m=>{l.value=m,i.value="ADMIN",a.value=!0},d=async()=>{if(l.value){r.value=!0;try{await we(C.ADMIN_TELEGRAM_USER(l.value.chat_id),{role:i.value}),S("success",`User approved as ${i.value}`),a.value=!1,l.value=null,await c()}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{r.value=!1}}},N=m=>{o.value=m,s.value=!0},y=async()=>{if(o.value){h.value=!0;try{await Se(C.ADMIN_TELEGRAM_USER(o.value.chat_id)),S("success","User deleted"),s.value=!1,o.value=null,await c()}catch(m){const A=m instanceof g?m:new g(0,"UNKNOWN","Unknown error");S("error",O(A.code))}finally{h.value=!1}}},b=m=>m==="PENDING"?"warning":m==="ADMIN"?"success":"info";return e("div",{class:"page",children:[e(ge,{columns:[{key:"chat_id",header:"Chat ID",render:m=>String(m.chat_id)},{key:"username",header:"Username",render:m=>m.username??"-"},{key:"role",header:"Role",render:m=>e(W,{variant:b(m.role),children:m.role})},{key:"registered_at",header:"Registered",render:m=>ae(m.registered_at)},{key:"approved_at",header:"Approved",render:m=>m.approved_at?ae(m.approved_at):"-"},{key:"actions",header:"Actions",render:m=>e("div",{style:{display:"flex",gap:"var(--space-1)"},children:[m.role==="PENDING"&&e(D,{size:"sm",variant:"primary",onClick:()=>p(m),children:"Approve"}),e(D,{size:"sm",variant:"danger",onClick:()=>N(m),children:"Delete"})]})}],data:t.value,loading:n.value,emptyMessage:"No Telegram users registered. Users appear here after sending /start to the bot."}),e(ce,{open:a.value,title:"Approve Telegram User",onCancel:()=>{a.value=!1,l.value=null},onConfirm:d,confirmText:"Approve",confirmVariant:"primary",loading:r.value,children:l.value&&e("div",{children:[e("p",{children:[e("strong",{children:"Chat ID:"})," ",l.value.chat_id,l.value.username&&e("span",{children:[" (",e("strong",{children:["@",l.value.username]}),")"]})]}),e("div",{class:"form-field",style:{marginTop:"var(--space-3)"},children:[e("label",{for:"approve-role",children:"Role"}),e("select",{id:"approve-role",value:i.value,onChange:m=>{i.value=m.target.value},children:[e("option",{value:"ADMIN",children:"ADMIN"}),e("option",{value:"READONLY",children:"READONLY"})]})]})]})}),e(ce,{open:s.value,title:"Delete Telegram User",onCancel:()=>{s.value=!1,o.value=null},onConfirm:y,confirmText:"Delete",confirmVariant:"danger",loading:h.value,children:e("p",{children:"Are you sure you want to remove this user? They will need to /start again to re-register."})})]})}const yn=20;function Yn(){const t=u("channels"),n=u(null),a=u(!0),l=u(!1),i=u(null),r=u(null),s=u(null),o=u(!0),h=u(1),c=u(null),p=async()=>{try{const T=await B(C.ADMIN_NOTIFICATIONS_STATUS);n.value=T}catch(T){const x=T instanceof g?T:new g(0,"UNKNOWN","Unknown error");S("error",O(x.code))}finally{a.value=!1}},d=async T=>{o.value=!0;try{const x=await B(`${C.ADMIN_NOTIFICATIONS_LOG}?page=${T}&pageSize=${yn}`);s.value=x}catch(x){const R=x instanceof g?x:new g(0,"UNKNOWN","Unknown error");S("error",O(R.code))}finally{o.value=!1}},N=async()=>{l.value=!0,r.value=null;try{const x=(await Q(C.ADMIN_NOTIFICATIONS_TEST,{})).results;r.value=x,x.every(q=>q.success)?S("success","Test sent successfully"):S("warning","Some channels failed")}catch(T){const x=T instanceof g?T:new g(0,"UNKNOWN","Unknown error");S("error",O(x.code))}finally{l.value=!1}},y=async T=>{i.value=T,r.value=null;try{const R=(await Q(C.ADMIN_NOTIFICATIONS_TEST,{channel:T})).results;r.value=R,R.every(V=>V.success)?S("success",`Test sent to ${T}`):S("warning",`${T} test failed`)}catch(x){const R=x instanceof g?x:new g(0,"UNKNOWN","Unknown error");S("error",O(R.code))}finally{i.value=null}},b=()=>{h.value>1&&(h.value-=1,d(h.value))},k=()=>{const T=s.value?Math.ceil(s.value.total/yn):1;h.value<T&&(h.value+=1,d(h.value))},m=T=>{c.value=c.value?.id===T.id?null:T};ee(()=>{p(),d(1);const T=setInterval(()=>d(h.value),3e4);return()=>clearInterval(T)},[]);const A=a.value&&!n.value,I=n.value?.channels.some(T=>T.enabled)??!1,F=s.value?Math.max(1,Math.ceil(s.value.total/yn)):1,P=[{key:"eventType",header:"Event Type"},{key:"walletId",header:"Wallet ID",render:T=>T.walletId?T.walletId.slice(0,8)+"...":"—"},{key:"channel",header:"Channel",render:T=>e("span",{style:{textTransform:"capitalize"},children:T.channel})},{key:"status",header:"Status",render:T=>e(W,{variant:T.status==="sent"?"success":"danger",children:T.status})},{key:"createdAt",header:"Time",render:T=>ae(T.createdAt)}];return e("div",{class:"page",children:[e("div",{class:"tab-nav",style:{marginBottom:"var(--space-4)"},children:[e("button",{class:`tab-btn ${t.value==="channels"?"active":""}`,onClick:()=>{t.value="channels"},children:"Channels & Logs"}),e("button",{class:`tab-btn ${t.value==="telegram"?"active":""}`,onClick:()=>{t.value="telegram"},children:"Telegram Users"})]}),t.value==="telegram"?e(nl,{}):e(oe,{children:[e("h2",{children:"Channel Status"}),n.value&&!n.value.enabled&&e("div",{class:"notif-disabled-banner",children:["Notifications are disabled. Set ",e("code",{children:"notifications.enabled = true"})," in config.toml"]}),A?e("div",{class:"channel-grid",children:[1,2,3].map(T=>e("div",{class:"channel-card",children:e("div",{class:"stat-skeleton"})},T))}):e("div",{class:"channel-grid",children:n.value?.channels.map(T=>e("div",{class:"channel-card",children:e("div",{class:"channel-card-header",children:[e("span",{class:"channel-card-name",children:T.name}),e("div",{class:"channel-card-actions",children:[e(W,{variant:T.enabled?"success":"neutral",children:T.enabled?"Connected":"Not Configured"}),T.enabled&&e(D,{variant:"secondary",size:"sm",onClick:()=>y(T.name),loading:i.value===T.name,children:"Test"})]})]})},T.name))}),e("div",{style:{marginTop:"var(--space-4)",marginBottom:"var(--space-6)"},children:[e(D,{onClick:N,loading:l.value,disabled:!I,children:"Test All Channels"}),r.value&&e("div",{class:"test-results",children:r.value.map(T=>e("div",{class:"test-result-item",children:[e("span",{class:T.success?"test-result-success":"test-result-failure",children:T.success?"✓":"✗"}),e("span",{style:{textTransform:"capitalize"},children:T.channel}),!T.success&&T.error&&e("span",{class:"test-result-failure",children:[" - ",T.error]})]},T.channel))})]}),e("h2",{children:"Delivery Log"}),e(ge,{columns:P,data:s.value?.logs??[],loading:o.value,emptyMessage:"No notification logs",onRowClick:m}),c.value&&e("div",{class:"log-message-detail",children:[e("div",{class:"log-message-detail-header",children:[e("strong",{children:c.value.eventType})," via ",e("span",{style:{textTransform:"capitalize"},children:c.value.channel}),e(D,{variant:"ghost",size:"sm",onClick:()=>{c.value=null},children:"Close"})]}),e("div",{class:"log-message-detail-body",children:c.value.message?e("pre",{style:{whiteSpace:"pre-wrap",margin:0,fontSize:"var(--font-size-sm)"},children:c.value.message}):e("span",{class:"text-muted",children:"(No message recorded)"})})]}),e("div",{class:"pagination",children:[e("span",{class:"pagination-info",children:["Page ",h.value," of ",F,s.value?` (${s.value.total} total)`:""]}),e("div",{class:"pagination-buttons",children:[e(D,{variant:"secondary",size:"sm",onClick:b,disabled:h.value<=1,children:"Previous"}),e(D,{variant:"secondary",size:"sm",onClick:k,disabled:h.value>=F,children:"Next"})]})]}),e("div",{class:"config-guidance",children:e("p",{children:"Configure notification channels in Settings → Notifications section. Changes are applied immediately via hot-reload."})})]})]})}function al(){const t=u([]),n=u({}),a=u(!0),l=u(null),i=u(null),r=u(null),s=u(null),o=async()=>{a.value=!0;try{const b=await B(C.WALLETS);t.value=b.items;const k={};await Promise.all(b.items.map(async m=>{try{k[m.id]=await B(C.WALLET_WC_SESSION(m.id))}catch{k[m.id]=null}})),n.value=k}catch(b){const k=b instanceof g?b:new g(0,"UNKNOWN","Unknown error");S("error",O(k.code))}finally{a.value=!1}},h=b=>{r.value&&clearInterval(r.value),r.value=setInterval(async()=>{try{const k=await B(C.WALLET_WC_PAIR_STATUS(b));k.status==="connected"?(r.value&&clearInterval(r.value),r.value=null,l.value=null,i.value=null,n.value={...n.value,[b]:k.session??null},S("success","Wallet connected via WalletConnect")):(k.status==="expired"||k.status==="none")&&(r.value&&clearInterval(r.value),r.value=null,l.value=null,i.value=null,S("error","Pairing expired. Try again."))}catch{}},3e3)},c=async b=>{l.value=b;try{const k=await Q(C.WALLET_WC_PAIR(b));i.value=k,h(b)}catch(k){l.value=null;const m=k instanceof g?k:new g(0,"UNKNOWN","Unknown error");S("error",O(m.code))}},p=async b=>{s.value=b;try{await Se(C.WALLET_WC_SESSION(b)),n.value={...n.value,[b]:null},S("success","WalletConnect session disconnected")}catch(k){const m=k instanceof g?k:new g(0,"UNKNOWN","Unknown error");S("error",O(m.code))}finally{s.value=null}},d=()=>{r.value&&clearInterval(r.value),r.value=null,l.value=null,i.value=null};ee(()=>(o(),()=>{r.value&&clearInterval(r.value)}),[]);const N=t.value.map(b=>({wallet:b,session:n.value[b.id]??null}));return e("div",{class:"page",children:[e("div",{class:"card",style:{marginBottom:"var(--space-4)"},children:e("p",{style:{color:"var(--color-text-secondary)",margin:0},children:"Manage WalletConnect sessions across all wallets. Connect an external wallet (D'CENT, MetaMask, Phantom) for transaction approval via WalletConnect."})}),e(ge,{columns:[{key:"name",header:"Wallet",render:b=>b.wallet.name},{key:"chain",header:"Chain",render:b=>b.wallet.chain},{key:"status",header:"WC Status",render:b=>e(W,{variant:b.session?"success":"neutral",children:b.session?"Connected":"Not Connected"})},{key:"peerName",header:"Peer",render:b=>b.session?.peerName??"--"},{key:"ownerAddress",header:"Owner Address",render:b=>b.session?on(b.session.ownerAddress):"--"},{key:"expiry",header:"Expiry",render:b=>b.session?ae(b.session.expiry):"--"},{key:"actions",header:"Actions",render:b=>b.session?e(D,{size:"sm",variant:"danger",onClick:()=>p(b.wallet.id),loading:s.value===b.wallet.id,children:"Disconnect"}):e(D,{size:"sm",onClick:()=>c(b.wallet.id),loading:l.value===b.wallet.id,children:"Connect"})}],data:N,loading:a.value,emptyMessage:"No wallets found. Create a wallet first."}),e(ce,{open:i.value!==null,title:"Scan QR Code",onCancel:d,children:i.value&&e("div",{style:{textAlign:"center"},children:[e("img",{src:i.value.qrCode,alt:"WalletConnect QR Code",style:{width:"280px",height:"280px",margin:"0 auto"}}),e("p",{style:{marginTop:"var(--space-3)",color:"var(--color-text-secondary)",fontSize:"0.85rem"},children:"Scan with D'CENT, MetaMask, Phantom, or any WalletConnect-compatible wallet"}),e("p",{style:{marginTop:"var(--space-2)",color:"var(--color-text-secondary)",fontSize:"0.75rem"},children:"Waiting for connection..."})]})})]})}const Ze=[{code:"USD",name:"US Dollar",symbol:"$"},{code:"KRW",name:"Korean Won",symbol:"₩"},{code:"JPY",name:"Japanese Yen",symbol:"¥"},{code:"EUR",name:"Euro",symbol:"€"},{code:"GBP",name:"British Pound",symbol:"£"},{code:"CNY",name:"Chinese Yuan",symbol:"¥"},{code:"CAD",name:"Canadian Dollar",symbol:"CA$"},{code:"AUD",name:"Australian Dollar",symbol:"A$"},{code:"CHF",name:"Swiss Franc",symbol:"CHF"},{code:"SGD",name:"Singapore Dollar",symbol:"S$"},{code:"HKD",name:"Hong Kong Dollar",symbol:"HK$"},{code:"INR",name:"Indian Rupee",symbol:"₹"},{code:"TWD",name:"Taiwan Dollar",symbol:"NT$"},{code:"THB",name:"Thai Baht",symbol:"฿"},{code:"MYR",name:"Malaysian Ringgit",symbol:"RM"},{code:"IDR",name:"Indonesian Rupiah",symbol:"Rp"},{code:"PHP",name:"Philippine Peso",symbol:"₱"},{code:"VND",name:"Vietnamese Dong",symbol:"₫"},{code:"BRL",name:"Brazilian Real",symbol:"R$"},{code:"MXN",name:"Mexican Peso",symbol:"MX$"},{code:"CLP",name:"Chilean Peso",symbol:"CL$"},{code:"TRY",name:"Turkish Lira",symbol:"₺"},{code:"PLN",name:"Polish Zloty",symbol:"zł"},{code:"CZK",name:"Czech Koruna",symbol:"Kč"},{code:"HUF",name:"Hungarian Forint",symbol:"Ft"},{code:"SEK",name:"Swedish Krona",symbol:"kr"},{code:"NOK",name:"Norwegian Krone",symbol:"kr"},{code:"DKK",name:"Danish Krone",symbol:"kr"},{code:"NZD",name:"New Zealand Dollar",symbol:"NZ$"},{code:"ZAR",name:"South African Rand",symbol:"R"},{code:"ILS",name:"Israeli Shekel",symbol:"₪"},{code:"SAR",name:"Saudi Riyal",symbol:"SR"},{code:"AED",name:"UAE Dirham",symbol:"AED"},{code:"KWD",name:"Kuwaiti Dinar",symbol:"KD"},{code:"BHD",name:"Bahraini Dinar",symbol:"BD"},{code:"NGN",name:"Nigerian Naira",symbol:"₦"},{code:"RUB",name:"Russian Ruble",symbol:"₽"},{code:"UAH",name:"Ukrainian Hryvnia",symbol:"₴"},{code:"PKR",name:"Pakistani Rupee",symbol:"Rs"},{code:"BDT",name:"Bangladeshi Taka",symbol:"৳"},{code:"LKR",name:"Sri Lankan Rupee",symbol:"Rs"},{code:"MMK",name:"Myanmar Kyat",symbol:"K"},{code:"GEL",name:"Georgian Lari",symbol:"₾"}];function ll({value:t,onChange:n}){const a=u(""),l=u(!1),i=u(null),r=u(!1),s=ct(null),o=Xt(()=>{const c=a.value.toLowerCase();return c?Ze.filter(p=>p.code.toLowerCase().includes(c)||p.name.toLowerCase().includes(c)||p.symbol.includes(c)):Ze});ee(()=>{if(t==="USD"){i.value="1 USD = $1.00";return}r.value=!0,B(`${C.ADMIN_FOREX_RATES}?currencies=${t}`).then(c=>{const p=c.rates[t];i.value=p?.preview??null}).catch(()=>{i.value=null}).finally(()=>{r.value=!1})},[t]),ee(()=>{const c=p=>{s.current&&!s.current.contains(p.target)&&(l.value=!1,a.value="")};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[]);const h=Ze.find(c=>c.code===t)??Ze[0];return e("div",{class:"currency-select",ref:s,children:[e("button",{type:"button",class:"currency-select-trigger",onClick:()=>{l.value=!l.value},children:[e("span",{class:"currency-select-value",children:[h.code," - ",h.name," (",h.symbol,")"]}),e("span",{class:"currency-select-chevron",children:l.value?"▲":"▼"})]}),i.value&&e("div",{class:"currency-rate-preview",children:r.value?"...":i.value}),l.value&&e("div",{class:"currency-select-dropdown",children:[e("input",{type:"text",class:"currency-select-search",placeholder:"Search currency...",value:a.value,onInput:c=>{a.value=c.target.value},autoFocus:!0}),e("div",{class:"currency-select-list",children:[o.value.map(c=>e("button",{type:"button",class:`currency-select-option ${c.code===t?"currency-select-option--active":""}`,onClick:()=>{n(c.code),l.value=!1,a.value=""},children:[e("span",{class:"currency-option-code",children:c.code}),e("span",{class:"currency-option-name",children:c.name}),e("span",{class:"currency-option-symbol",children:c.symbol})]},c.code)),o.value.length===0&&e("div",{class:"currency-select-empty",children:"No currencies found"})]})]})]})}const il=new Set(["notifications.telegram_bot_token","notifications.discord_webhook_url","notifications.slack_webhook_url","telegram.bot_token"]);function rl(t){return il.has(t)}function Y(t){return{enabled:"Enabled",telegram_bot_token:"Telegram Bot Token",telegram_chat_id:"Telegram Chat ID",discord_webhook_url:"Discord Webhook URL",ntfy_server:"Ntfy Server",ntfy_topic:"Ntfy Topic",locale:"Locale",rate_limit_rpm:"Rate Limit (RPM)",solana_mainnet:"Solana Mainnet",solana_devnet:"Solana Devnet",solana_testnet:"Solana Testnet",evm_ethereum_mainnet:"Ethereum Mainnet",evm_ethereum_sepolia:"Ethereum Sepolia",evm_polygon_mainnet:"Polygon Mainnet",evm_polygon_amoy:"Polygon Amoy",evm_arbitrum_mainnet:"Arbitrum Mainnet",evm_arbitrum_sepolia:"Arbitrum Sepolia",evm_optimism_mainnet:"Optimism Mainnet",evm_optimism_sepolia:"Optimism Sepolia",evm_base_mainnet:"Base Mainnet",evm_base_sepolia:"Base Sepolia",evm_default_network:"Default EVM Network",session_ttl:"Session TTL (seconds)",max_sessions_per_wallet:"Max Sessions per Wallet",max_pending_tx:"Max Pending Transactions",rate_limit_global_ip_rpm:"Global IP Rate Limit (RPM)",rate_limit_session_rpm:"Session Rate Limit (RPM)",rate_limit_tx_rpm:"Transaction Rate Limit (RPM)",policy_defaults_delay_seconds:"Policy Delay (seconds)",policy_defaults_approval_timeout:"Approval Timeout (seconds)",default_deny_tokens:"Default Deny: Token Transfers",default_deny_contracts:"Default Deny: Contract Calls",default_deny_spenders:"Default Deny: Token Approvals",project_id:"Project ID",log_level:"Log Level",currency:"Display Currency",consecutive_failures_threshold:"Consecutive Failures Threshold",unusual_activity_threshold:"Unusual Activity Threshold",unusual_activity_window_sec:"Unusual Activity Window (seconds)",idle_timeout_sec:"Idle Timeout (seconds)",idle_check_interval_sec:"Idle Check Interval (seconds)",check_interval_sec:"Check Interval (seconds)",low_balance_threshold_sol:"Low Balance Threshold (SOL)",low_balance_threshold_eth:"Low Balance Threshold (ETH)",cooldown_hours:"Alert Cooldown (hours)",bot_token:"Bot Token"}[t]??t.replace(/_/g," ").replace(/\b\w/g,a=>a.toUpperCase())}function sl(){const t=u({}),n=u({}),a=u(!1),l=u(!0),i=u({}),r=u({}),s=u([]),o=u(!1),h=u([]),c=u(!0),p=u(null),d=u(""),N=u(!1),y=u(null),b=u(!0),k=u(!1),m=u(!1),A=u(!1),I=u(!1),F=u(!1),P=u(""),T=u(!1),x=async()=>{try{const v=await B(C.ADMIN_SETTINGS);t.value=v}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{l.value=!1}},R=async()=>{try{const v=await B(C.ADMIN_KILL_SWITCH);y.value=v}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{b.value=!1}},q=async()=>{try{const v=await B(C.ADMIN_API_KEYS);h.value=v.keys}catch{}finally{c.value=!1}},V=async v=>{N.value=!0;try{await we(C.ADMIN_API_KEY(v),{apiKey:d.value}),S("success",`API key saved for ${v}`),p.value=null,d.value="",await q()}catch(f){const L=f instanceof g?f:new g(0,"UNKNOWN","Unknown error");S("error",O(L.code))}finally{N.value=!1}},le=async v=>{try{await Se(C.ADMIN_API_KEY(v)),S("success",`API key deleted for ${v}`),await q()}catch(f){const L=f instanceof g?f:new g(0,"UNKNOWN","Unknown error");S("error",O(L.code))}};ee(()=>{x(),R(),q()},[]);const z=async()=>{a.value=!0;try{const v=Object.entries(n.value).map(([f,L])=>({key:f,value:L}));await we(C.ADMIN_SETTINGS,{settings:v}),n.value={},await x(),S("success","Settings saved and applied")}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{a.value=!1}},Z=()=>{n.value={}},M=(v,f)=>{const L=String(f);n.value={...n.value,[v]:L}},H=(v,f)=>{const L=`${v}.${f}`;if(n.value[L]!==void 0)return n.value[L];const re=t.value[v];if(!re)return"";const se=re[f];return typeof se=="boolean"?rl(L)?"":String(se):se??""},ie=(v,f)=>{const L=`${v}.${f}`;if(n.value[L]!==void 0)return n.value[L]==="true";const re=t.value[v];if(!re)return!1;const se=re[f];return typeof se=="boolean"?se:se==="true"},ue=(v,f)=>{const L=`${v}.${f}`;if(n.value[L]!==void 0)return!1;const re=t.value[v];return re?re[f]===!0:!1},Ne=async v=>{const f=v.split(".")[1]??"",L=H("rpc",f);if(!L){S("warning","Enter a URL before testing");return}const re=f.startsWith("solana")?"solana":"evm";r.value={...r.value,[v]:!0};try{const se=await Q(C.ADMIN_SETTINGS_TEST_RPC,{url:L,chain:re});i.value={...i.value,[v]:se}}catch{i.value={...i.value,[v]:{success:!1,latencyMs:0,error:"Request failed"}}}finally{r.value={...r.value,[v]:!1}}},Re=async()=>{o.value=!0,s.value=[];try{const v=await Q(C.ADMIN_NOTIFICATIONS_TEST,{});if(s.value=v.results,v.results.length===0)S("info","No notification channels configured");else{const f=v.results.every(L=>L.success);S(f?"success":"warning",f?"All test notifications sent":"Some channels failed")}}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{o.value=!1}},We=async()=>{k.value=!0;try{await Q(C.ADMIN_KILL_SWITCH),S("success","Kill switch activated - all operations suspended"),await R()}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{k.value=!1}},Pe=async()=>{k.value=!0;try{await Q(C.ADMIN_KILL_SWITCH_ESCALATE),S("success","Kill switch escalated to LOCKED"),await R()}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{k.value=!1}},Ee=async()=>{k.value=!0;try{await Q(C.ADMIN_RECOVER),S("success","Kill switch recovered - operations resumed"),await R()}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{k.value=!1}},Me=async()=>{A.value=!0;try{await Q(C.ADMIN_ROTATE_SECRET),m.value=!1,S("success","JWT secret rotated. Old tokens valid for 5 minutes.")}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{A.value=!1}},$e=async()=>{F.value=!0;try{await Q(C.ADMIN_SHUTDOWN),I.value=!1,P.value="",S("info","Shutdown initiated"),T.value=!0}catch(v){const f=v instanceof g?v:new g(0,"UNKNOWN","Unknown error");S("error",O(f.code))}finally{F.value=!1}},me=Object.keys(n.value).length,_=y.value,$=_?.state==="ACTIVE",ne=_?.state==="SUSPENDED",w=_?.state==="LOCKED";function G(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Notifications"}),e("p",{class:"settings-description",children:"Configure notification channels for transaction alerts"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:[e("div",{class:"settings-field-full",children:e(E,{label:"Enabled",name:"notifications.enabled",type:"checkbox",value:ie("notifications","enabled"),onChange:v=>M("notifications.enabled",v)})}),e(E,{label:Y("telegram_bot_token"),name:"notifications.telegram_bot_token",type:"password",value:H("notifications","telegram_bot_token"),onChange:v=>M("notifications.telegram_bot_token",v),placeholder:ue("notifications","telegram_bot_token")?"(configured)":""}),e(E,{label:Y("telegram_chat_id"),name:"notifications.telegram_chat_id",type:"text",value:H("notifications","telegram_chat_id"),onChange:v=>M("notifications.telegram_chat_id",v)}),e(E,{label:Y("discord_webhook_url"),name:"notifications.discord_webhook_url",type:"password",value:H("notifications","discord_webhook_url"),onChange:v=>M("notifications.discord_webhook_url",v),placeholder:ue("notifications","discord_webhook_url")?"(configured)":""}),e(E,{label:Y("ntfy_server"),name:"notifications.ntfy_server",type:"text",value:H("notifications","ntfy_server"),onChange:v=>M("notifications.ntfy_server",v)}),e(E,{label:Y("ntfy_topic"),name:"notifications.ntfy_topic",type:"text",value:H("notifications","ntfy_topic"),onChange:v=>M("notifications.ntfy_topic",v)}),e(E,{label:"Slack Webhook URL",name:"notifications.slack_webhook_url",type:"password",value:H("notifications","slack_webhook_url"),onChange:v=>M("notifications.slack_webhook_url",v),placeholder:ue("notifications","slack_webhook_url")?"(configured)":""}),e(E,{label:Y("locale"),name:"notifications.locale",type:"select",value:H("notifications","locale")||"en",onChange:v=>M("notifications.locale",v),options:[{label:"English",value:"en"},{label:"Korean",value:"ko"}]}),e(E,{label:Y("rate_limit_rpm"),name:"notifications.rate_limit_rpm",type:"number",value:Number(H("notifications","rate_limit_rpm"))||20,onChange:v=>M("notifications.rate_limit_rpm",v),min:1,max:1e3})]}),e("div",{class:"notif-test-section",children:[e(D,{variant:"secondary",size:"sm",onClick:Re,loading:o.value,children:"Test Notification"}),s.value.length>0&&e("div",{class:"test-results",children:s.value.map(v=>e("div",{class:`test-result-item ${v.success?"test-result-success":"test-result-failure"}`,children:[e(W,{variant:v.success?"success":"danger",children:v.success?"OK":"FAIL"}),e("span",{children:v.channel}),v.error&&e("span",{style:"font-size: var(--font-size-xs); color: var(--color-danger);",children:[" - ",v.error]})]},v.channel))})]})]})]})}function Ye({shortKey:v}){const f=`rpc.${v}`,L=i.value[f],re=r.value[f];return e("div",{class:"settings-field-full",children:[e("div",{class:"rpc-field-row",children:[e(E,{label:Y(v),name:f,type:"text",value:H("rpc",v),onChange:se=>M(f,se),placeholder:"https://..."}),e(D,{variant:"ghost",size:"sm",onClick:()=>Ne(f),loading:!!re,children:"Test"})]}),L&&e("div",{class:`rpc-test-result ${L.success?"rpc-test-result--success":"rpc-test-result--failure"}`,children:[e(W,{variant:L.success?"success":"danger",children:L.success?"OK":"FAIL"}),e("span",{children:[L.latencyMs,"ms"]}),L.blockNumber!==void 0&&e("span",{children:[" (block #",L.blockNumber.toLocaleString(),")"]}),L.error&&e("span",{children:[" - ",L.error]})]})]})}const Nt=["solana_mainnet","solana_devnet","solana_testnet"],Et=["evm_ethereum_mainnet","evm_ethereum_sepolia","evm_polygon_mainnet","evm_polygon_amoy","evm_arbitrum_mainnet","evm_arbitrum_sepolia","evm_optimism_mainnet","evm_optimism_sepolia","evm_base_mainnet","evm_base_sepolia"],At=[{label:"Ethereum Mainnet",value:"ethereum-mainnet"},{label:"Ethereum Sepolia",value:"ethereum-sepolia"},{label:"Polygon Mainnet",value:"polygon-mainnet"},{label:"Polygon Amoy",value:"polygon-amoy"},{label:"Arbitrum Mainnet",value:"arbitrum-mainnet"},{label:"Arbitrum Sepolia",value:"arbitrum-sepolia"},{label:"Optimism Mainnet",value:"optimism-mainnet"},{label:"Optimism Sepolia",value:"optimism-sepolia"},{label:"Base Mainnet",value:"base-mainnet"},{label:"Base Sepolia",value:"base-sepolia"}];function kt(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"RPC Endpoints"}),e("p",{class:"settings-description",children:"Configure blockchain RPC URLs for Solana and EVM networks"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-subgroup",children:[e("div",{class:"settings-subgroup-title",children:"Solana"}),e("div",{class:"settings-fields-grid",children:Nt.map(v=>e(Ye,{shortKey:v},v))})]}),e("div",{class:"settings-subgroup",children:[e("div",{class:"settings-subgroup-title",children:"EVM"}),e("div",{class:"settings-fields-grid",children:[Et.map(v=>e(Ye,{shortKey:v},v)),e("div",{class:"settings-field-full",children:e(E,{label:Y("evm_default_network"),name:"rpc.evm_default_network",type:"select",value:H("rpc","evm_default_network")||"ethereum-sepolia",onChange:v=>M("rpc.evm_default_network",v),options:At})})]})]})]})]})}function Ct(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Security Parameters"}),e("p",{class:"settings-description",children:"Session, rate limiting, and policy defaults"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:[{key:"session_ttl",min:300},{key:"max_sessions_per_wallet",min:1,max:100},{key:"max_pending_tx",min:1,max:100},{key:"rate_limit_global_ip_rpm",min:10},{key:"rate_limit_session_rpm",min:10},{key:"rate_limit_tx_rpm",min:1},{key:"policy_defaults_delay_seconds",min:0},{key:"policy_defaults_approval_timeout",min:60}].map(f=>e(E,{label:Y(f.key),name:`security.${f.key}`,type:"number",value:Number(H("security",f.key))||0,onChange:L=>M(`security.${f.key}`,L),min:f.min,max:f.max},f.key))}),e("div",{class:"settings-subgroup",style:{marginTop:"1rem",borderTop:"1px solid var(--border)",paddingTop:"1rem"},children:[e("h4",{style:{margin:"0 0 0.5rem 0",fontSize:"0.875rem",fontWeight:600,color:"var(--text-secondary)"},children:"Default Deny Policies"}),e("p",{class:"settings-description",style:{marginBottom:"0.75rem"},children:"When enabled, transactions are denied if no matching whitelist policy exists. Disable to allow all transactions of that type when no policy is configured."}),e("div",{class:"settings-fields-grid",children:[e(E,{label:Y("default_deny_tokens"),name:"policy.default_deny_tokens",type:"checkbox",value:ie("security","default_deny_tokens"),onChange:f=>M("policy.default_deny_tokens",f)}),e(E,{label:Y("default_deny_contracts"),name:"policy.default_deny_contracts",type:"checkbox",value:ie("security","default_deny_contracts"),onChange:f=>M("policy.default_deny_contracts",f)}),e(E,{label:Y("default_deny_spenders"),name:"policy.default_deny_spenders",type:"checkbox",value:ie("security","default_deny_spenders"),onChange:f=>M("policy.default_deny_spenders",f)})]})]})]})]})}function It(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"WalletConnect"}),e("p",{class:"settings-description",children:"WalletConnect integration for dApp connections"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:e("div",{class:"settings-field-full",children:e(E,{label:Y("project_id"),name:"walletconnect.project_id",type:"text",value:H("walletconnect","project_id"),onChange:v=>M("walletconnect.project_id",v)})})}),e("div",{class:"settings-info-box",children:["Get your project ID from"," ",e("a",{href:"https://cloud.walletconnect.com",target:"_blank",rel:"noopener noreferrer",children:"https://cloud.walletconnect.com"})," ","— Create a free account and project to obtain your project ID."]})]})]})}function Dt(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Telegram Bot"}),e("p",{class:"settings-description",children:"Enable the Telegram Bot for interactive commands (/status, /wallets, /approve, etc.)"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:[e(E,{label:"Bot Enabled",name:"telegram.enabled",type:"select",value:H("telegram","enabled")||"false",onChange:v=>M("telegram.enabled",v),options:[{label:"Yes",value:"true"},{label:"No",value:"false"}]}),e(E,{label:"Bot Token",name:"telegram.bot_token",type:"password",value:H("telegram","bot_token"),onChange:v=>M("telegram.bot_token",v),placeholder:ue("telegram","bot_token")?"(configured)":"Leave empty to use notification token"}),e(E,{label:"Locale",name:"telegram.locale",type:"select",value:H("telegram","locale")||"en",onChange:v=>M("telegram.locale",v),options:[{label:"English",value:"en"},{label:"한국어",value:"ko"}]})]}),e("div",{class:"settings-info-box",children:"The Telegram Bot uses Long Polling for interactive commands. If Bot Token is left empty, it falls back to the Notifications Telegram Bot Token. Enable the bot and configure a token to allow wallet management via Telegram."})]})]})}function Ot(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Display"}),e("p",{class:"settings-description",children:"Configure display currency for USD amount conversion"})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:e("div",{class:"settings-field-full",children:[e("label",{children:Y("currency")}),e(ll,{value:H("display","currency")||"USD",onChange:v=>M("display.currency",v)})]})}),e("div",{class:"settings-info-box",children:"All USD amounts in the dashboard, notifications, and API responses will be converted to the selected currency. Policy evaluation always uses USD. The “≈” prefix indicates an approximate conversion."})]})]})}function Lt(){return c.value?e("div",{class:"settings-loading",children:"Loading API keys..."}):h.value.length===0?null:e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"API Keys"}),e("p",{class:"settings-description",children:"Manage API keys for Action Providers"})]}),e("div",{class:"settings-category-body",children:h.value.map(v=>e("div",{class:"settings-field-row",children:[e("div",{class:"settings-field-label",children:[e("span",{children:v.providerName}),v.requiresApiKey&&!v.hasKey&&e(W,{variant:"warning",children:"Required"})]}),e("div",{class:"settings-field-value",children:p.value===v.providerName?e("div",{class:"api-key-edit-row",children:[e(E,{label:"API Key",type:"password",name:`apikey-${v.providerName}`,value:d.value,onChange:f=>{d.value=String(f)},placeholder:"Enter API key"}),e(D,{onClick:()=>V(v.providerName),loading:N.value,size:"sm",children:"Save"}),e(D,{variant:"ghost",onClick:()=>{p.value=null,d.value=""},size:"sm",children:"Cancel"})]}):e("div",{class:"api-key-display-row",children:[e("span",{class:"api-key-masked",children:v.hasKey?v.maskedKey:"Not set"}),e(D,{variant:"ghost",onClick:()=>{p.value=v.providerName,d.value=""},size:"sm",children:v.hasKey?"Change":"Set"}),v.hasKey&&e(D,{variant:"danger",onClick:()=>le(v.providerName),size:"sm",children:"Delete"})]})})]},v.providerName))})]})}function xt(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Daemon"}),e("p",{class:"settings-description",children:"General daemon configuration"})]}),e("div",{class:"settings-category-body",children:e("div",{class:"settings-fields-grid",children:e(E,{label:Y("log_level"),name:"daemon.log_level",type:"select",value:H("daemon","log_level")||"info",onChange:v=>M("daemon.log_level",v),options:[{label:"debug",value:"debug"},{label:"info",value:"info"},{label:"warn",value:"warn"},{label:"error",value:"error"}]})})})]})}function Rt(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"AutoStop Rules"}),e("p",{class:"settings-description",children:"Automatic protection rules that suspend wallets or trigger Kill Switch on anomalies. Changes apply immediately without daemon restart."})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:[{key:"enabled",type:"checkbox"},{key:"consecutive_failures_threshold",type:"number",min:1,max:100},{key:"unusual_activity_threshold",type:"number",min:5,max:1e3},{key:"unusual_activity_window_sec",type:"number",min:60,max:86400},{key:"idle_timeout_sec",type:"number",min:60,max:604800},{key:"idle_check_interval_sec",type:"number",min:10,max:3600}].map(f=>f.type==="checkbox"?e("div",{class:"settings-field-full",children:e(E,{label:Y(f.key),name:`autostop.${f.key}`,type:"checkbox",value:ie("autostop",f.key),onChange:L=>M(`autostop.${f.key}`,L)})},f.key):e(E,{label:Y(f.key),name:`autostop.${f.key}`,type:"number",value:Number(H("autostop",f.key))||0,onChange:L=>M(`autostop.${f.key}`,L),min:f.min,max:f.max},f.key))}),e("div",{class:"settings-info-box",children:[e("strong",{children:"Consecutive Failures:"})," Suspends wallet after N consecutive failed transactions.",e("br",{}),e("strong",{children:"Unusual Activity:"})," Suspends wallet if transaction count exceeds threshold within the time window.",e("br",{}),e("strong",{children:"Idle Timeout:"})," Revokes sessions with no activity for the configured duration."]})]})]})}function Wt(){return e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Balance Monitoring"}),e("p",{class:"settings-description",children:"Periodic balance checks for all active wallets. Sends LOW_BALANCE alerts when native token balance drops below thresholds. Changes apply immediately."})]}),e("div",{class:"settings-category-body",children:[e("div",{class:"settings-fields-grid",children:[{key:"enabled",type:"checkbox"},{key:"check_interval_sec",type:"number",min:60,max:86400},{key:"low_balance_threshold_sol",type:"number",min:0},{key:"low_balance_threshold_eth",type:"number",min:0},{key:"cooldown_hours",type:"number",min:1,max:168}].map(f=>f.type==="checkbox"?e("div",{class:"settings-field-full",children:e(E,{label:Y(f.key),name:`monitoring.${f.key}`,type:"checkbox",value:ie("monitoring",f.key),onChange:L=>M(`monitoring.${f.key}`,L)})},f.key):e(E,{label:Y(f.key),name:`monitoring.${f.key}`,type:"number",value:Number(H("monitoring",f.key))||0,onChange:L=>M(`monitoring.${f.key}`,L),min:f.min,max:f.max},f.key))}),e("div",{class:"settings-info-box",children:"Monitors all active wallet native token balances (SOL, ETH) at the configured interval. When balance drops below threshold, a LOW_BALANCE notification is sent. Duplicate alerts are suppressed for the cooldown period (per wallet)."})]})]})}return e("div",{class:"page",children:[T.value&&e("div",{class:"shutdown-overlay",children:[e("h2",{children:"Daemon is shutting down..."}),e("p",{children:"You can close this tab."})]}),me>0&&e("div",{class:"settings-save-bar",children:[e("span",{children:[me," unsaved change",me>1?"s":""]}),e("div",{class:"settings-save-bar-actions",children:[e(D,{variant:"ghost",size:"sm",onClick:Z,children:"Discard"}),e(D,{variant:"primary",size:"sm",onClick:z,loading:a.value,children:"Save"})]})]}),l.value?e("div",{class:"empty-state",children:e("p",{children:"Loading settings..."})}):e(oe,{children:[e(G,{}),e(kt,{}),e(Ct,{}),e(It,{}),e(Dt,{}),e(xt,{}),e(Ot,{}),e(Lt,{}),e(Rt,{}),e(Wt,{})]}),e("div",{class:"settings-category",children:[e("div",{class:"settings-category-header",children:[e("h3",{children:"Kill Switch"}),e("p",{class:"settings-description",children:"Emergency stop - suspends all wallet operations immediately. 3-state: ACTIVE (normal) → SUSPENDED (paused) → LOCKED (permanent)."})]}),e("div",{class:"settings-category-body",children:b.value?e("span",{children:"Loading..."}):_?e(oe,{children:[e("div",{class:"ks-state-card",style:{marginBottom:"var(--space-4)"},children:[e(W,{variant:$?"success":w?"danger":"warning",children:_.state}),!$&&_.activatedAt&&e("span",{class:"ks-state-info",children:["Since ",ae(_.activatedAt),_.activatedBy?` by ${_.activatedBy}`:""]})]}),e("div",{style:{display:"flex",gap:"var(--space-2)",flexWrap:"wrap"},children:[$&&e(D,{variant:"danger",onClick:We,loading:k.value,children:"Activate Kill Switch"}),ne&&e(oe,{children:[e(D,{variant:"primary",onClick:Ee,loading:k.value,children:"Recover"}),e(D,{variant:"danger",onClick:Pe,loading:k.value,children:"Escalate to LOCKED"})]}),w&&e(D,{variant:"primary",onClick:Ee,loading:k.value,children:"Recover from LOCKED (5s wait)"})]}),ne&&e("div",{class:"settings-info-box",style:{marginTop:"var(--space-3)"},children:"All wallet operations are suspended. Sessions revoked, transactions cancelled. You can Recover to resume operations, or Escalate to LOCKED for permanent lockdown."}),w&&e("div",{class:"settings-info-box",style:{marginTop:"var(--space-3)",borderColor:"var(--color-danger)"},children:"System is permanently locked. Recovery requires dual-auth (Owner signature + Master password) and has a mandatory 5-second wait period."})]}):null})]}),e("div",{class:"settings-section",children:[e("div",{class:"settings-section-header",children:[e("h3",{children:"JWT Secret Rotation"}),e("p",{class:"settings-description",children:"Invalidate all existing JWT tokens. Old tokens remain valid for 5 minutes."})]}),e("div",{class:"settings-section-body",children:e(D,{variant:"secondary",onClick:()=>{m.value=!0},children:"Rotate JWT Secret"})})]}),e("div",{class:"settings-section settings-section--danger",children:[e("div",{class:"settings-section-header",children:[e("h3",{children:"Danger Zone"}),e("p",{class:"settings-description",children:"Irreversible actions. Proceed with caution."})]}),e("div",{class:"settings-section-body",children:e(D,{variant:"danger",onClick:()=>{I.value=!0},children:"Shutdown Daemon"})})]}),e(ce,{open:m.value,title:"Rotate JWT Secret",onCancel:()=>{m.value=!1},onConfirm:Me,confirmText:"Rotate",confirmVariant:"primary",loading:A.value,children:e("p",{children:"Are you sure you want to rotate the JWT secret? All existing session tokens will remain valid for 5 more minutes, then expire. Wallets will need new sessions."})}),e(ce,{open:I.value,title:"Shutdown Daemon",onCancel:()=>{I.value=!1,P.value=""},onConfirm:$e,confirmText:"Shutdown",confirmVariant:"danger",confirmDisabled:P.value!=="SHUTDOWN",loading:F.value,children:[e("p",{children:"This will gracefully stop the daemon process. All active connections will be terminated."}),e("div",{class:"shutdown-confirm-input",children:[e("label",{children:["Type ",e("strong",{children:"SHUTDOWN"})," to confirm"]}),e("input",{type:"text",value:P.value,onInput:v=>{P.value=v.target.value},placeholder:"SHUTDOWN"})]})]})]})}const De=de(window.location.hash.slice(1)||"/dashboard");window.addEventListener("hashchange",()=>{De.value=window.location.hash.slice(1)||"/dashboard"});const ol={"/dashboard":"Dashboard","/wallets":"Wallets","/sessions":"Sessions","/policies":"Policies","/notifications":"Notifications","/telegram-users":"Telegram Users","/walletconnect":"WalletConnect","/settings":"Settings"};function cl(t){return t.startsWith("/wallets/")?"Wallet Detail":ol[t]??"Dashboard"}const dl=[{path:"/dashboard",label:"Dashboard"},{path:"/wallets",label:"Wallets"},{path:"/sessions",label:"Sessions"},{path:"/policies",label:"Policies"},{path:"/notifications",label:"Notifications"},{path:"/walletconnect",label:"WalletConnect"},{path:"/settings",label:"Settings"}];function ul(){const t=De.value;return t==="/sessions"?e(ka,{}):t==="/policies"?e(el,{}):t==="/notifications"?e(Yn,{}):t==="/telegram-users"?(window.location.hash="#/notifications",e(Yn,{})):t==="/walletconnect"?e(al,{}):t==="/settings"?e(sl,{}):t.startsWith("/wallets")?e(Ea,{}):e(pa,{})}function vl(){return e("div",{class:"layout",children:[e("aside",{class:"sidebar",children:[e("div",{class:"sidebar-brand",children:"WAIaaS"}),e("nav",{class:"sidebar-nav",children:dl.map(t=>{const n=t.path==="/wallets"?De.value.startsWith("/wallets"):De.value===t.path;return e("a",{href:`#${t.path}`,class:`sidebar-link ${n?"active":""}`,children:t.label})})})]}),e("main",{class:"main",children:[e("header",{class:"header",children:[e("h1",{class:"header-title",children:cl(De.value)}),e("button",{class:"btn-logout",onClick:()=>Ln(),children:"Logout"})]}),e("div",{class:"content",children:e(ul,{})})]})]})}const Qe={overlay:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, 0.7)",color:"white",zIndex:9999},content:{textAlign:"center"},title:{fontSize:"var(--font-size-2xl)",fontWeight:"var(--font-weight-bold)",marginBottom:"var(--space-2)"},message:{fontSize:"var(--font-size-base)",color:"var(--color-text-muted)"}};function hl(){return e("div",{style:Qe.overlay,children:e("div",{style:Qe.content,children:[e("h1",{style:Qe.title,children:"Daemon Shutting Down"}),e("p",{style:Qe.message,children:"The daemon is shutting down. Please wait or restart."})]})})}function ml(){return na.value?e(hl,{}):ea.value?e(oe,{children:[e(vl,{}),e(wa,{})]}):e(ra,{})}Ht(e(ml,{}),document.getElementById("app"));
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>WAIaaS Admin</title>
7
+ <script type="module" crossorigin src="/admin/assets/index-CDi1qoXB.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/admin/assets/index-BPoUSH8W.css">
9
+ </head>
10
+ <body>
11
+ <div id="app"></div>
12
+ </body>
13
+ </html>