tapimo 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/README.md +13 -5
  2. package/dist/ApiKey.d.ts +2 -2
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +2 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +85 -11
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +218 -56
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +12543 -13912
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +4 -5
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +12 -20
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +20 -36
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/admin/App.d.ts +871 -828
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +14 -26
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +93 -186
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +3 -5
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/audit-logs.d.ts +18 -18
  27. package/dist/admin/apps/audit-logs.js +1 -1
  28. package/dist/admin/apps/audit-logs.js.map +1 -1
  29. package/dist/admin/apps/earn-vaults.d.ts +27 -27
  30. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  31. package/dist/admin/apps/earn-vaults.js +11 -5
  32. package/dist/admin/apps/earn-vaults.js.map +1 -1
  33. package/dist/admin/apps/organizations.d.ts +17 -17
  34. package/dist/admin/apps/prop-amms.d.ts +4 -4
  35. package/dist/admin/apps/routes-support.js +1 -38
  36. package/dist/admin/apps/routes-support.js.map +1 -1
  37. package/dist/admin/apps/routes.d.ts +153 -153
  38. package/dist/admin/apps/sentinel.d.ts +4 -4
  39. package/dist/admin/apps/verified-tokens.d.ts +24 -24
  40. package/dist/admin/apps/zone-delegation-requests.d.ts +332 -0
  41. package/dist/admin/apps/zone-delegation-requests.d.ts.map +1 -0
  42. package/dist/admin/apps/zone-delegation-requests.js +200 -0
  43. package/dist/admin/apps/zone-delegation-requests.js.map +1 -0
  44. package/dist/admin/apps/zone-delegations.d.ts +512 -52
  45. package/dist/admin/apps/zone-delegations.d.ts.map +1 -1
  46. package/dist/admin/apps/zone-delegations.js +134 -44
  47. package/dist/admin/apps/zone-delegations.js.map +1 -1
  48. package/dist/admin/index.d.ts +1 -1
  49. package/dist/admin/index.d.ts.map +1 -1
  50. package/dist/admin/index.js +1 -1
  51. package/dist/admin/index.js.map +1 -1
  52. package/dist/admin/ui.generated.d.ts +1 -1
  53. package/dist/admin/ui.generated.d.ts.map +1 -1
  54. package/dist/admin/ui.generated.js +341 -397
  55. package/dist/admin/ui.generated.js.map +1 -1
  56. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  57. package/dist/analytics/tables/requestEvents.js +4 -2
  58. package/dist/analytics/tables/requestEvents.js.map +1 -1
  59. package/dist/apps/data/App.d.ts +11932 -13214
  60. package/dist/apps/data/App.d.ts.map +1 -1
  61. package/dist/apps/data/App.js +32 -13
  62. package/dist/apps/data/App.js.map +1 -1
  63. package/dist/apps/data/ZoneSelection.d.ts +1 -1
  64. package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
  65. package/dist/apps/data/ZoneSelection.js +2 -2
  66. package/dist/apps/data/ZoneSelection.js.map +1 -1
  67. package/dist/apps/data/routes/activities.d.ts +60 -27
  68. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  69. package/dist/apps/data/routes/activities.js +91 -16
  70. package/dist/apps/data/routes/activities.js.map +1 -1
  71. package/dist/apps/data/routes/addresses.d.ts +893 -875
  72. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  73. package/dist/apps/data/routes/balances.d.ts +36 -36
  74. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  75. package/dist/apps/data/routes/balances.js +3 -1
  76. package/dist/apps/data/routes/balances.js.map +1 -1
  77. package/dist/apps/data/routes/blocks.d.ts +40 -40
  78. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  79. package/dist/apps/data/routes/blocks.js +3 -7
  80. package/dist/apps/data/routes/blocks.js.map +1 -1
  81. package/dist/apps/data/routes/coingecko.d.ts +236 -236
  82. package/dist/apps/data/routes/earn-transactions.d.ts +14 -14
  83. package/dist/apps/data/routes/earn.d.ts +261 -1445
  84. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  85. package/dist/apps/data/routes/earn.js +64 -490
  86. package/dist/apps/data/routes/earn.js.map +1 -1
  87. package/dist/apps/data/routes/exchanges.d.ts +144 -144
  88. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  89. package/dist/apps/data/routes/exchanges.js +5 -15
  90. package/dist/apps/data/routes/exchanges.js.map +1 -1
  91. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  92. package/dist/apps/data/routes/fee-amm.js +3 -9
  93. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  94. package/dist/apps/data/routes/indexer.d.ts +13 -13
  95. package/dist/apps/data/routes/receipts.d.ts +53 -53
  96. package/dist/apps/data/routes/receipts.js +1 -1
  97. package/dist/apps/data/routes/receipts.js.map +1 -1
  98. package/dist/apps/data/routes/rpc.d.ts +52 -0
  99. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  100. package/dist/apps/data/routes/rpc.js +19 -18
  101. package/dist/apps/data/routes/rpc.js.map +1 -1
  102. package/dist/apps/data/routes/tokenlist.d.ts +14 -14
  103. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  104. package/dist/apps/data/routes/tokenlist.js +1 -3
  105. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  106. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  107. package/dist/apps/data/routes/tokens.js +7 -5
  108. package/dist/apps/data/routes/tokens.js.map +1 -1
  109. package/dist/apps/data/routes/transactions.d.ts +281 -281
  110. package/dist/apps/data/routes/transactions.js +3 -3
  111. package/dist/apps/data/routes/transactions.js.map +1 -1
  112. package/dist/apps/data/routes/transfers.d.ts +12 -12
  113. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  114. package/dist/apps/data/routes/transfers.js +1 -3
  115. package/dist/apps/data/routes/transfers.js.map +1 -1
  116. package/dist/apps/data/routes/valuation.d.ts +30 -30
  117. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  118. package/dist/apps/data/routes/valuation.js +1 -3
  119. package/dist/apps/data/routes/valuation.js.map +1 -1
  120. package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
  121. package/dist/apps/data/routes/webhooks.d.ts +102 -102
  122. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  123. package/dist/apps/data/routes/webhooks.js +9 -23
  124. package/dist/apps/data/routes/webhooks.js.map +1 -1
  125. package/dist/apps/data/routes/zone-deposits.d.ts +16 -16
  126. package/dist/apps/data/routes/zone-withdrawals.d.ts +31 -31
  127. package/dist/apps/data/routes/zones.d.ts +28 -28
  128. package/dist/apps/management/App.d.ts +18 -102
  129. package/dist/apps/management/App.d.ts.map +1 -1
  130. package/dist/apps/management/App.js +1 -1
  131. package/dist/apps/management/App.js.map +1 -1
  132. package/dist/apps/management/routes/api-keys.d.ts +253 -339
  133. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  134. package/dist/apps/management/routes/api-keys.js +25 -11
  135. package/dist/apps/management/routes/api-keys.js.map +1 -1
  136. package/dist/apps/management/routes/billing.d.ts +92 -92
  137. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  138. package/dist/apps/management/routes/billing.js +5 -13
  139. package/dist/apps/management/routes/billing.js.map +1 -1
  140. package/dist/apps/management/routes/cli.d.ts.map +1 -1
  141. package/dist/apps/management/routes/cli.js +3 -9
  142. package/dist/apps/management/routes/cli.js.map +1 -1
  143. package/dist/apps/management/routes/faucet.d.ts +16 -16
  144. package/dist/apps/management/routes/fee-payer-usage.d.ts +38 -38
  145. package/dist/apps/management/routes/fee-payer-usage.d.ts.map +1 -1
  146. package/dist/apps/management/routes/fee-payer-usage.js +2 -4
  147. package/dist/apps/management/routes/fee-payer-usage.js.map +1 -1
  148. package/dist/apps/management/routes/invitations.d.ts +52 -52
  149. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  150. package/dist/apps/management/routes/invitations.js +4 -12
  151. package/dist/apps/management/routes/invitations.js.map +1 -1
  152. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  153. package/dist/apps/management/routes/invite-links.js +6 -14
  154. package/dist/apps/management/routes/invite-links.js.map +1 -1
  155. package/dist/apps/management/routes/me.d.ts +6 -6
  156. package/dist/apps/management/routes/me.d.ts.map +1 -1
  157. package/dist/apps/management/routes/me.js +3 -7
  158. package/dist/apps/management/routes/me.js.map +1 -1
  159. package/dist/apps/management/routes/members.d.ts +84 -84
  160. package/dist/apps/management/routes/members.d.ts.map +1 -1
  161. package/dist/apps/management/routes/members.js +2 -4
  162. package/dist/apps/management/routes/members.js.map +1 -1
  163. package/dist/apps/management/routes/orgs.d.ts +44 -44
  164. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  165. package/dist/apps/management/routes/orgs.js +2 -6
  166. package/dist/apps/management/routes/orgs.js.map +1 -1
  167. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  168. package/dist/apps/management/routes/projects.js +2 -6
  169. package/dist/apps/management/routes/projects.js.map +1 -1
  170. package/dist/apps/management/routes/route-usage.d.ts +34 -34
  171. package/dist/apps/management/routes/route-usage.d.ts.map +1 -1
  172. package/dist/apps/management/routes/route-usage.js +2 -4
  173. package/dist/apps/management/routes/route-usage.js.map +1 -1
  174. package/dist/apps/management/routes/routes-access-requests.d.ts +120 -91
  175. package/dist/apps/management/routes/routes-access-requests.d.ts.map +1 -1
  176. package/dist/apps/management/routes/routes-access-requests.js +49 -9
  177. package/dist/apps/management/routes/routes-access-requests.js.map +1 -1
  178. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  179. package/dist/apps/management/routes/usage.js +8 -16
  180. package/dist/apps/management/routes/usage.js.map +1 -1
  181. package/dist/apps/management/routes/verified-token-requests.d.ts +39 -39
  182. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  183. package/dist/apps/management/routes/verified-token-requests.js +3 -7
  184. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  185. package/dist/apps/management/routes/webhooks.d.ts +2089 -2089
  186. package/dist/apps/management/routes/zone-delegations.d.ts +14 -17
  187. package/dist/apps/management/routes/zone-delegations.d.ts.map +1 -1
  188. package/dist/apps/management/routes/zone-delegations.js +1 -6
  189. package/dist/apps/management/routes/zone-delegations.js.map +1 -1
  190. package/dist/apps/mpp/App.d.ts +44 -44
  191. package/dist/apps/mpp/App.js +3 -3
  192. package/dist/apps/mpp/App.js.map +1 -1
  193. package/dist/apps/mpp/internal/Adapter.js +1 -1
  194. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  195. package/dist/apps/mpp/internal/Error.d.ts.map +1 -1
  196. package/dist/apps/mpp/internal/Error.js +1 -0
  197. package/dist/apps/mpp/internal/Error.js.map +1 -1
  198. package/dist/apps/mpp/internal/Policy.d.ts +5 -1
  199. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  200. package/dist/apps/mpp/internal/Policy.js +35 -13
  201. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  202. package/dist/apps/relay/App.d.ts +2 -2
  203. package/dist/apps/relay/App.d.ts.map +1 -1
  204. package/dist/apps/relay/App.js +25 -16
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/routes/App.d.ts +311 -311
  207. package/dist/apps/routes/routes/deposit-addresses.d.ts +1099 -1099
  208. package/dist/apps/routes/routes/list.d.ts +74 -74
  209. package/dist/apps/routes/routes/transfers.d.ts +94 -94
  210. package/dist/cli/ApiKeys.d.ts +19 -26
  211. package/dist/cli/ApiKeys.d.ts.map +1 -1
  212. package/dist/db/Db.d.ts +3 -3
  213. package/dist/db/Db.d.ts.map +1 -1
  214. package/dist/db/Db.js +27 -0
  215. package/dist/db/Db.js.map +1 -1
  216. package/dist/db/Schema.d.ts +28 -62
  217. package/dist/db/Schema.d.ts.map +1 -1
  218. package/dist/db/Schema.js +18 -18
  219. package/dist/db/Schema.js.map +1 -1
  220. package/dist/db/tables/rewardRuns.d.ts +21 -0
  221. package/dist/db/tables/rewardRuns.d.ts.map +1 -1
  222. package/dist/db/tables/rewardRuns.js +19 -0
  223. package/dist/db/tables/rewardRuns.js.map +1 -1
  224. package/dist/db/tables/routesAccessRequests.d.ts +13 -0
  225. package/dist/db/tables/routesAccessRequests.d.ts.map +1 -1
  226. package/dist/db/tables/routesAccessRequests.js +12 -0
  227. package/dist/db/tables/routesAccessRequests.js.map +1 -1
  228. package/dist/db/tables/zoneDelegationRequests.d.ts +165 -0
  229. package/dist/db/tables/zoneDelegationRequests.d.ts.map +1 -0
  230. package/dist/db/tables/{zoneKeyRequests.js → zoneDelegationRequests.js} +43 -42
  231. package/dist/db/tables/zoneDelegationRequests.js.map +1 -0
  232. package/dist/db/tables/zoneDelegations.d.ts +11 -5
  233. package/dist/db/tables/zoneDelegations.d.ts.map +1 -1
  234. package/dist/db/tables/zoneDelegations.js +21 -3
  235. package/dist/db/tables/zoneDelegations.js.map +1 -1
  236. package/dist/handlers/internal/accounts.d.ts +7 -0
  237. package/dist/handlers/internal/accounts.d.ts.map +1 -0
  238. package/dist/handlers/internal/{multisig.js → accounts.js} +10 -10
  239. package/dist/handlers/internal/{multisig.js.map → accounts.js.map} +1 -1
  240. package/dist/handlers/internal/sponsorship.js +17 -17
  241. package/dist/handlers/internal/sponsorship.js.map +1 -1
  242. package/dist/handlers/relay.d.ts +6 -6
  243. package/dist/handlers/relay.d.ts.map +1 -1
  244. package/dist/handlers/relay.js +15 -15
  245. package/dist/handlers/relay.js.map +1 -1
  246. package/dist/internal/Auth.d.ts.map +1 -1
  247. package/dist/internal/Auth.js +4 -8
  248. package/dist/internal/Auth.js.map +1 -1
  249. package/dist/internal/EarnRates.d.ts.map +1 -1
  250. package/dist/internal/EarnRates.js +1 -3
  251. package/dist/internal/EarnRates.js.map +1 -1
  252. package/dist/internal/EarnVaults.js +2 -2
  253. package/dist/internal/Log.d.ts +2 -4
  254. package/dist/internal/Log.d.ts.map +1 -1
  255. package/dist/internal/Log.js +0 -3
  256. package/dist/internal/Log.js.map +1 -1
  257. package/dist/internal/Response.d.ts +1 -1
  258. package/dist/internal/Response.d.ts.map +1 -1
  259. package/dist/internal/Response.js +0 -3
  260. package/dist/internal/Response.js.map +1 -1
  261. package/dist/internal/Schema.d.ts +11 -0
  262. package/dist/internal/Schema.d.ts.map +1 -1
  263. package/dist/internal/Schema.js +24 -1
  264. package/dist/internal/Schema.js.map +1 -1
  265. package/dist/internal/ZoneAccess.d.ts +70 -35
  266. package/dist/internal/ZoneAccess.d.ts.map +1 -1
  267. package/dist/internal/ZoneAccess.js +312 -131
  268. package/dist/internal/ZoneAccess.js.map +1 -1
  269. package/dist/internal/ZoneDelegation.d.ts +7 -19
  270. package/dist/internal/ZoneDelegation.d.ts.map +1 -1
  271. package/dist/internal/ZoneDelegation.js +8 -29
  272. package/dist/internal/ZoneDelegation.js.map +1 -1
  273. package/dist/internal/{ZoneKeyApproval.d.ts → ZoneDelegationApproval.d.ts} +3 -5
  274. package/dist/internal/ZoneDelegationApproval.d.ts.map +1 -0
  275. package/dist/internal/ZoneDelegationApproval.js +16 -0
  276. package/dist/internal/ZoneDelegationApproval.js.map +1 -0
  277. package/dist/internal/ZoneKeyRewrite.d.ts +98 -0
  278. package/dist/internal/ZoneKeyRewrite.d.ts.map +1 -0
  279. package/dist/internal/ZoneKeyRewrite.js +151 -0
  280. package/dist/internal/ZoneKeyRewrite.js.map +1 -0
  281. package/dist/internal/rewards/Campaigns.d.ts +2 -0
  282. package/dist/internal/rewards/Campaigns.d.ts.map +1 -1
  283. package/dist/internal/rewards/Campaigns.js.map +1 -1
  284. package/dist/internal/rewards/Distributions.d.ts.map +1 -1
  285. package/dist/internal/rewards/Distributions.js +2 -6
  286. package/dist/internal/rewards/Distributions.js.map +1 -1
  287. package/dist/internal/rewards/Monitor.d.ts +4 -1
  288. package/dist/internal/rewards/Monitor.d.ts.map +1 -1
  289. package/dist/internal/rewards/Monitor.js +19 -2
  290. package/dist/internal/rewards/Monitor.js.map +1 -1
  291. package/dist/internal/rewards/Runner.d.ts.map +1 -1
  292. package/dist/internal/rewards/Runner.js +9 -1
  293. package/dist/internal/rewards/Runner.js.map +1 -1
  294. package/dist/internal/routes/Action.d.ts.map +1 -1
  295. package/dist/internal/routes/Action.js +2 -3
  296. package/dist/internal/routes/Action.js.map +1 -1
  297. package/dist/internal/routes/Deposit.d.ts.map +1 -1
  298. package/dist/internal/routes/Deposit.js +2 -6
  299. package/dist/internal/routes/Deposit.js.map +1 -1
  300. package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
  301. package/dist/internal/routes/DepositAddress.js +4 -10
  302. package/dist/internal/routes/DepositAddress.js.map +1 -1
  303. package/dist/internal/routes/Policy.d.ts.map +1 -1
  304. package/dist/internal/routes/Policy.js +2 -1
  305. package/dist/internal/routes/Policy.js.map +1 -1
  306. package/dist/internal/routes/Provider.js +8 -8
  307. package/dist/internal/routes/Provider.js.map +1 -1
  308. package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
  309. package/dist/internal/routes/Reconciliation.js +3 -2
  310. package/dist/internal/routes/Reconciliation.js.map +1 -1
  311. package/dist/internal/routes/Transfer.d.ts.map +1 -1
  312. package/dist/internal/routes/Transfer.js +4 -12
  313. package/dist/internal/routes/Transfer.js.map +1 -1
  314. package/dist/internal/routes/UniversalDepositAddress.d.ts.map +1 -1
  315. package/dist/internal/routes/UniversalDepositAddress.js +3 -6
  316. package/dist/internal/routes/UniversalDepositAddress.js.map +1 -1
  317. package/dist/internal/routes/providers/SquidOrder.d.ts.map +1 -1
  318. package/dist/internal/routes/providers/SquidOrder.js +3 -2
  319. package/dist/internal/routes/providers/SquidOrder.js.map +1 -1
  320. package/dist/internal/routes/providers/relay.d.ts.map +1 -1
  321. package/dist/internal/routes/providers/relay.js +4 -3
  322. package/dist/internal/routes/providers/relay.js.map +1 -1
  323. package/package.json +20 -5
  324. package/src/ApiKey.ts +2 -2
  325. package/src/ApiKeys.test.ts +284 -51
  326. package/src/ApiKeys.ts +297 -64
  327. package/src/App.ts +4 -5
  328. package/src/Client.test-d.ts +33 -126
  329. package/src/Scope.test.ts +26 -45
  330. package/src/Scope.ts +24 -37
  331. package/src/admin/App.test.ts +51 -4
  332. package/src/admin/App.ts +25 -33
  333. package/src/admin/Mcp.test.ts +2 -1
  334. package/src/admin/apps/api-keys.test.ts +90 -20
  335. package/src/admin/apps/api-keys.ts +5 -8
  336. package/src/admin/apps/audit-logs.ts +1 -1
  337. package/src/admin/apps/earn-vaults.test.ts +19 -19
  338. package/src/admin/apps/earn-vaults.ts +11 -5
  339. package/src/admin/apps/routes-support.test.ts +254 -3
  340. package/src/admin/apps/routes-support.ts +1 -44
  341. package/src/admin/apps/scopes.test.ts +3 -3
  342. package/src/admin/apps/zone-delegation-requests.test.ts +246 -0
  343. package/src/admin/apps/zone-delegation-requests.ts +240 -0
  344. package/src/admin/apps/zone-delegations.test.ts +218 -58
  345. package/src/admin/apps/zone-delegations.ts +146 -46
  346. package/src/admin/index.ts +1 -1
  347. package/src/admin/ui/src/components/ApiKeyForm.tsx +4 -3
  348. package/src/admin/ui/src/lib/config.ts +3 -3
  349. package/src/admin/ui/src/lib/query-client.ts +1 -1
  350. package/src/admin/ui/src/lib/review-queues.ts +10 -10
  351. package/src/admin/ui/src/lib/routes-setup.test.ts +1 -2
  352. package/src/admin/ui/src/lib/routes-setup.ts +3 -5
  353. package/src/admin/ui/src/lib/scopes.test.ts +3 -6
  354. package/src/admin/ui/src/lib/scopes.ts +2 -9
  355. package/src/admin/ui/src/lib/{zone-key-requests.ts → zone-delegation-requests.ts} +27 -31
  356. package/src/admin/ui/src/routeTree.gen.ts +17 -17
  357. package/src/admin/ui/src/routes/__root.tsx +1 -1
  358. package/src/admin/ui/src/routes/api-keys.tsx +2 -15
  359. package/src/admin/ui/src/routes/audit-logs.tsx +2 -2
  360. package/src/admin/ui/src/routes/index.tsx +11 -11
  361. package/src/admin/ui/src/routes/organizations.tsx +3 -1
  362. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +3 -1
  363. package/src/admin/ui/src/routes/organizations_.$orgId_.setup.tsx +1 -3
  364. package/src/admin/ui/src/routes/{zone-key-requests.tsx → zone-delegation-requests.tsx} +228 -172
  365. package/src/admin/ui/vite.config.ts +14 -1
  366. package/src/admin/ui.generated.ts +412 -583
  367. package/src/analytics/tables/requestEvents.test.ts +13 -3
  368. package/src/analytics/tables/requestEvents.ts +4 -3
  369. package/src/apps/data/App.test.ts +72 -35
  370. package/src/apps/data/App.ts +29 -13
  371. package/src/apps/data/ZoneSelection.test.ts +53 -70
  372. package/src/apps/data/ZoneSelection.ts +2 -2
  373. package/src/apps/data/routes/activities.test.ts +140 -6
  374. package/src/apps/data/routes/activities.ts +124 -18
  375. package/src/apps/data/routes/balances.ts +5 -1
  376. package/src/apps/data/routes/blocks.ts +9 -13
  377. package/src/apps/data/routes/earn-transactions.local.test.ts +6 -1
  378. package/src/apps/data/routes/earn-transactions.test.ts +7 -3
  379. package/src/apps/data/routes/earn.bench.ts +0 -14
  380. package/src/apps/data/routes/earn.discovery.test.ts +4 -39
  381. package/src/apps/data/routes/earn.local.test.ts +27 -34
  382. package/src/apps/data/routes/earn.test.ts +172 -490
  383. package/src/apps/data/routes/earn.ts +103 -652
  384. package/src/apps/data/routes/exchanges.ts +20 -30
  385. package/src/apps/data/routes/fee-amm.ts +12 -18
  386. package/src/apps/data/routes/indexer.test.ts +14 -12
  387. package/src/apps/data/routes/receipts.ts +1 -1
  388. package/src/apps/data/routes/rpc.test.ts +23 -18
  389. package/src/apps/data/routes/rpc.ts +21 -21
  390. package/src/apps/data/routes/rpc.zone.test.ts +60 -6
  391. package/src/apps/data/routes/tokenlist.ts +4 -6
  392. package/src/apps/data/routes/tokens.test.ts +20 -0
  393. package/src/apps/data/routes/tokens.ts +10 -5
  394. package/src/apps/data/routes/transactions.ts +3 -3
  395. package/src/apps/data/routes/transfers.ts +4 -6
  396. package/src/apps/data/routes/valuation.test.ts +2 -4
  397. package/src/apps/data/routes/valuation.ts +4 -6
  398. package/src/apps/data/routes/webhooks.test.ts +1 -5
  399. package/src/apps/data/routes/webhooks.ts +30 -44
  400. package/src/apps/data/routes/zones.test.ts +35 -19
  401. package/src/apps/management/App.ts +3 -1
  402. package/src/apps/management/routes/api-keys.test.ts +112 -22
  403. package/src/apps/management/routes/api-keys.ts +30 -15
  404. package/src/apps/management/routes/billing.ts +17 -25
  405. package/src/apps/management/routes/cli.ts +12 -18
  406. package/src/apps/management/routes/fee-payer-usage.ts +5 -4
  407. package/src/apps/management/routes/invitations.ts +16 -21
  408. package/src/apps/management/routes/invite-links.ts +18 -26
  409. package/src/apps/management/routes/me.ts +9 -13
  410. package/src/apps/management/routes/members.ts +5 -7
  411. package/src/apps/management/routes/orgs.ts +8 -12
  412. package/src/apps/management/routes/projects.ts +8 -12
  413. package/src/apps/management/routes/route-usage.ts +5 -4
  414. package/src/apps/management/routes/routes-access-requests.test.ts +64 -2
  415. package/src/apps/management/routes/routes-access-requests.ts +99 -15
  416. package/src/apps/management/routes/scopes.test.ts +3 -3
  417. package/src/apps/management/routes/usage.ts +20 -28
  418. package/src/apps/management/routes/verified-token-requests.ts +9 -13
  419. package/src/apps/management/routes/zone-delegations.test.ts +3 -5
  420. package/src/apps/management/routes/zone-delegations.ts +4 -9
  421. package/src/apps/mpp/App.ts +3 -3
  422. package/src/apps/mpp/Mpp.zone.test.ts +49 -18
  423. package/src/apps/mpp/internal/Adapter.ts +1 -1
  424. package/src/apps/mpp/internal/Error.test.ts +3 -0
  425. package/src/apps/mpp/internal/Error.ts +1 -0
  426. package/src/apps/mpp/internal/Policy.test.ts +9 -8
  427. package/src/apps/mpp/internal/Policy.ts +37 -14
  428. package/src/apps/relay/App.sandbox.test.ts +15 -14
  429. package/src/apps/relay/App.test.ts +120 -61
  430. package/src/apps/relay/App.ts +28 -18
  431. package/src/apps/relay/App.zone-billing.test.ts +9 -4
  432. package/src/apps/routes/App.test.ts +21 -22
  433. package/src/db/Db.ts +34 -3
  434. package/src/db/Schema.ts +26 -26
  435. package/src/db/tables/rewardRuns.ts +39 -0
  436. package/src/db/tables/routesAccessRequests.test.ts +65 -0
  437. package/src/db/tables/routesAccessRequests.ts +25 -0
  438. package/src/db/tables/{zoneKeyRequests.test.ts → zoneDelegationRequests.test.ts} +36 -77
  439. package/src/db/tables/{zoneKeyRequests.ts → zoneDelegationRequests.ts} +69 -52
  440. package/src/db/tables/zoneDelegations.test.ts +5 -6
  441. package/src/db/tables/zoneDelegations.ts +25 -8
  442. package/src/handlers/internal/{multisig.store.test.ts → accounts.store.test.ts} +16 -16
  443. package/src/handlers/internal/{multisig.test.ts → accounts.test.ts} +85 -82
  444. package/src/handlers/internal/{multisig.ts → accounts.ts} +9 -9
  445. package/src/handlers/internal/sponsorship.ts +20 -20
  446. package/src/handlers/relay.test.ts +48 -46
  447. package/src/handlers/relay.ts +26 -26
  448. package/src/internal/Auth.test.ts +6 -2
  449. package/src/internal/Auth.ts +4 -10
  450. package/src/internal/EarnRates.ts +4 -6
  451. package/src/internal/EarnVaults.ts +2 -2
  452. package/src/internal/Log.test-d.ts +1 -0
  453. package/src/internal/Log.test.ts +4 -6
  454. package/src/internal/Log.ts +2 -6
  455. package/src/internal/Response.ts +0 -3
  456. package/src/internal/Schema.test.ts +42 -0
  457. package/src/internal/Schema.ts +36 -1
  458. package/src/internal/ZoneAccess.test.ts +515 -312
  459. package/src/internal/ZoneAccess.ts +410 -158
  460. package/src/internal/ZoneDelegation.test.ts +1 -41
  461. package/src/internal/ZoneDelegation.ts +10 -48
  462. package/src/internal/ZoneDelegationApproval.test.ts +22 -0
  463. package/src/internal/{ZoneKeyApproval.ts → ZoneDelegationApproval.ts} +4 -11
  464. package/src/internal/ZoneKeyRewrite.ts +231 -0
  465. package/src/internal/rewards/Campaigns.ts +2 -0
  466. package/src/internal/rewards/Distributions.ts +8 -12
  467. package/src/internal/rewards/Monitor.test.ts +64 -0
  468. package/src/internal/rewards/Monitor.ts +27 -4
  469. package/src/internal/rewards/Runner.ts +9 -1
  470. package/src/internal/routes/Action.ts +5 -6
  471. package/src/internal/routes/Deposit.ts +8 -12
  472. package/src/internal/routes/DepositAddress.ts +13 -19
  473. package/src/internal/routes/Policy.ts +2 -1
  474. package/src/internal/routes/Provider.ts +8 -8
  475. package/src/internal/routes/Reconciliation.ts +3 -2
  476. package/src/internal/routes/Transfer.ts +16 -24
  477. package/src/internal/routes/UniversalDepositAddress.ts +9 -12
  478. package/src/internal/routes/providers/SquidOrder.ts +3 -2
  479. package/src/internal/routes/providers/relay.ts +4 -3
  480. package/dist/admin/apps/zone-key-requests.d.ts +0 -406
  481. package/dist/admin/apps/zone-key-requests.d.ts.map +0 -1
  482. package/dist/admin/apps/zone-key-requests.js +0 -183
  483. package/dist/admin/apps/zone-key-requests.js.map +0 -1
  484. package/dist/db/tables/zoneKeyRequests.d.ts +0 -289
  485. package/dist/db/tables/zoneKeyRequests.d.ts.map +0 -1
  486. package/dist/db/tables/zoneKeyRequests.js.map +0 -1
  487. package/dist/handlers/internal/multisig.d.ts +0 -7
  488. package/dist/handlers/internal/multisig.d.ts.map +0 -1
  489. package/dist/internal/ZoneKeyApproval.d.ts.map +0 -1
  490. package/dist/internal/ZoneKeyApproval.js +0 -21
  491. package/dist/internal/ZoneKeyApproval.js.map +0 -1
  492. package/src/admin/apps/zone-key-requests.test.ts +0 -272
  493. package/src/admin/apps/zone-key-requests.ts +0 -231
  494. package/src/internal/ZoneKeyApproval.test.ts +0 -46
@@ -5,19 +5,19 @@ import { tempoLocalnet } from 'viem/tempo/chains'
5
5
  import * as Handler from '../../Handler.js'
6
6
  import * as Log from '../../internal/Log.js'
7
7
  import * as StateStore from '../../internal/Store.js'
8
- import * as Multisig from './multisig.js'
8
+ import * as Accounts from './accounts.js'
9
9
 
10
10
  describe('fromStore', () => {
11
11
  test('requires atomic state', () => {
12
12
  const { swap: _, ...state } = StateStore.memory()
13
- expect(() => Multisig.fromStore(state)).toThrowErrorMatchingInlineSnapshot(
14
- `[Error: Multisig coordination requires an atomic state store.]`,
13
+ expect(() => Accounts.fromStore(state)).toThrowErrorMatchingInlineSnapshot(
14
+ `[Error: Configurable account coordination requires an atomic state store.]`,
15
15
  )
16
16
  })
17
17
 
18
18
  test('preserves concurrent compare-and-set', async () => {
19
19
  const state = StateStore.memory()
20
- const a = Multisig.fromStore(state)
20
+ const a = Accounts.fromStore(state)
21
21
  const results = await Promise.all([
22
22
  a.compareAndSet('operation', null, 'a'),
23
23
  a.compareAndSet('operation', null, 'b'),
@@ -35,7 +35,7 @@ describe('fromStore', () => {
35
35
  test('honors absolute expiration', async () => {
36
36
  vi.useFakeTimers()
37
37
  try {
38
- const store = Multisig.fromStore(StateStore.memory())
38
+ const store = Accounts.fromStore(StateStore.memory())
39
39
  await store.compareAndSet('lease', null, 'a', { expiresAt: Date.now() + 100 })
40
40
  await vi.advanceTimersByTimeAsync(101)
41
41
  expect(await store.getItem('lease')).toBeNull()
@@ -52,7 +52,7 @@ describe('relay', () => {
52
52
  test('serves unknown operations without forwarding them to the node', async () => {
53
53
  const handler = Handler.relay({
54
54
  getClient: () => client,
55
- multisig: { store: StateStore.memory() },
55
+ accounts: { store: StateStore.memory() },
56
56
  })
57
57
  const response = await handler.fetch(
58
58
  new Request('http://relay/', {
@@ -60,7 +60,7 @@ describe('relay', () => {
60
60
  body: JSON.stringify({
61
61
  id: 42,
62
62
  jsonrpc: '2.0',
63
- method: 'multisig_getOperation',
63
+ method: 'account_getOperation',
64
64
  params: [Hex.random(32)],
65
65
  }),
66
66
  }),
@@ -77,14 +77,14 @@ describe('relay', () => {
77
77
  test('rejects invalid parameters across the five methods', async () => {
78
78
  const handler = Handler.relay({
79
79
  getClient: () => client,
80
- multisig: { store: StateStore.memory() },
80
+ accounts: { store: StateStore.memory() },
81
81
  })
82
82
  for (const method of [
83
- 'multisig_approveRawTransaction',
84
- 'multisig_approveRawTransactionSync',
85
- 'multisig_approveKeyAuthorization',
86
- 'multisig_getConfig',
87
- 'multisig_getOperation',
83
+ 'account_approveRawTransaction',
84
+ 'account_approveRawTransactionSync',
85
+ 'account_approveKeyAuthorization',
86
+ 'account_getConfig',
87
+ 'account_getOperation',
88
88
  ]) {
89
89
  const response = await handler.fetch(
90
90
  new Request('http://relay/', {
@@ -100,15 +100,15 @@ describe('relay', () => {
100
100
  const state = StateStore.memory()
101
101
  const hash = Hex.random(32)
102
102
  // Operation lookup keys are part of the persisted Viem coordinator format.
103
- await state.put(`multisig:v2:multisig:operation:${hash}`, 'invalid')
104
- const handler = Handler.relay({ getClient: () => client, multisig: { store: state } })
103
+ await state.put(`accounts:v1:configurableAccount:operation:${hash}`, 'invalid')
104
+ const handler = Handler.relay({ getClient: () => client, accounts: { store: state } })
105
105
  const response = await handler.fetch(
106
106
  new Request('http://relay/', {
107
107
  method: 'POST',
108
108
  body: JSON.stringify({
109
109
  id: 1,
110
110
  jsonrpc: '2.0',
111
- method: 'multisig_getOperation',
111
+ method: 'account_getOperation',
112
112
  params: [hash],
113
113
  }),
114
114
  }),
@@ -1,8 +1,8 @@
1
1
  import { Hex, Rlp } from 'ox'
2
2
  import {
3
+ AccountConfig,
4
+ AccountOperation,
3
5
  KeyAuthorization,
4
- MultisigConfig,
5
- MultisigOperation,
6
6
  SignatureEnvelope,
7
7
  TxEnvelopeTempo,
8
8
  } from 'ox/tempo'
@@ -20,7 +20,7 @@ import * as StateStore from '../../internal/Store.js'
20
20
 
21
21
  const owners = Accounts.create(inject('tempoTestMnemonic'))
22
22
  const chain = defineChain({ ...tempoLocalnet, id: 1337 })
23
- const client = createClient({ chain, transport: http(inject('tempoMultisigRpcUrl')) })
23
+ const client = createClient({ chain, transport: http(inject('tempoAccountsRpcUrl')) })
24
24
  const feeToken = '0x20c0000000000000000000000000000000000000'
25
25
 
26
26
  beforeAll(async () => {
@@ -30,18 +30,18 @@ beforeAll(async () => {
30
30
  describe('relay', () => {
31
31
  test('serves all five TIP-1101 methods and keeps submitted hashes distinct', async () => {
32
32
  const relay = fixture()
33
- const account = multisig()
33
+ const account = configurable()
34
34
  const config = {
35
- ...MultisigConfig.toRpc(account.config!),
35
+ ...AccountConfig.toRpc(account.config!),
36
36
  owners: account.config!.owners.map(({ owner, weight }) => ({
37
37
  owner: owner.toLowerCase(),
38
38
  weight,
39
39
  })),
40
40
  }
41
- expect(await relay.rpc('multisig_getConfig', [{ address: account.address }])).toBeNull()
42
- expect(await relay.rpc('multisig_getOperation', [Hex.random(32)])).toBeNull()
41
+ expect(await relay.rpc('account_getConfig', [{ address: account.address }])).toBeNull()
42
+ expect(await relay.rpc('account_getOperation', [Hex.random(32)])).toBeNull()
43
43
  const first = await approval(account, [owners[1]])
44
- const hash = (await relay.rpc('multisig_approveRawTransaction', [first])) as Hex.Hex
44
+ const hash = (await relay.rpc('account_approveRawTransaction', [first])) as Hex.Hex
45
45
  const pending = await relay.operation(hash)
46
46
  expect(pending).toMatchObject({
47
47
  hash,
@@ -52,13 +52,13 @@ describe('relay', () => {
52
52
  threshold: 2,
53
53
  })
54
54
  expect(pending.config.version).toBe('0x0')
55
- expect(await relay.rpc('multisig_getConfig', [{ address: account.address }])).toEqual(config)
55
+ expect(await relay.rpc('account_getConfig', [{ address: account.address }])).toEqual(config)
56
56
  expect(await relay.rpc('eth_getTransactionReceipt', [hash])).toBeNull()
57
57
  const second = await approval(account, [owners[2]])
58
- const complete = (await relay.rpc('multisig_approveRawTransactionSync', [
58
+ const complete = (await relay.rpc('account_approveRawTransactionSync', [
59
59
  second,
60
60
  1000,
61
- ])) as MultisigOperation.TransactionRpc
61
+ ])) as AccountOperation.TransactionRpc
62
62
  expect(complete).toMatchObject({ hash, status: 'success', signatureCount: 2, weight: 2 })
63
63
  expect(complete.transactionHash).not.toBe(hash)
64
64
  const receipt = await getTransactionReceipt(client, { hash: complete.transactionHash! })
@@ -67,13 +67,13 @@ describe('relay', () => {
67
67
  status: 'success',
68
68
  feePayer: owners[0].address.toLowerCase(),
69
69
  })
70
- expect(await relay.rpc('multisig_approveRawTransaction', [first])).toBe(hash)
70
+ expect(await relay.rpc('account_approveRawTransaction', [first])).toBe(hash)
71
71
  expect(await relay.operation(hash)).toEqual(complete)
72
72
  expect(await relay.rpc('eth_getTransactionReceipt', [hash])).toMatchObject({
73
73
  transactionHash: complete.transactionHash,
74
- multisig: { hash },
74
+ operation: { hash },
75
75
  })
76
- expect(await relay.rpc('multisig_getConfig', [{ address: account.address }])).toEqual(config)
76
+ expect(await relay.rpc('account_getConfig', [{ address: account.address }])).toEqual(config)
77
77
 
78
78
  const key = KeyAuthorization.from({
79
79
  account: account.address,
@@ -81,13 +81,13 @@ describe('relay', () => {
81
81
  chainId: BigInt(chain.id),
82
82
  type: 'secp256k1',
83
83
  })
84
- const keyHash = MultisigConfig.getSignPayload({
84
+ const keyHash = AccountConfig.getSignPayload({
85
85
  account: account.address,
86
86
  config: account.config!,
87
87
  payload: KeyAuthorization.getSignPayload(key),
88
88
  })
89
89
  const signed = KeyAuthorization.from(key, {
90
- signature: SignatureEnvelope.from<SignatureEnvelope.Multisig>({
90
+ signature: SignatureEnvelope.from<SignatureEnvelope.Configurable>({
91
91
  account: account.address,
92
92
  config: account.config!,
93
93
  signatures: [
@@ -97,20 +97,20 @@ describe('relay', () => {
97
97
  ],
98
98
  }),
99
99
  })
100
- const keyPending = (await relay.rpc('multisig_approveKeyAuthorization', [
100
+ const keyPending = (await relay.rpc('account_approveKeyAuthorization', [
101
101
  { keyAuthorization: KeyAuthorization.toRpc(signed) },
102
- ])) as MultisigOperation.KeyAuthorizationRpc
102
+ ])) as AccountOperation.KeyAuthorizationRpc
103
103
  expect(keyPending).toMatchObject({ hash: keyHash, status: 'pending', type: 'keyAuthorization' })
104
104
  const nonce = await client.request({
105
105
  method: 'eth_getTransactionCount',
106
106
  params: [account.address, 'latest'],
107
107
  })
108
- const keySuccess = (await relay.rpc('multisig_approveKeyAuthorization', [
108
+ const keySuccess = (await relay.rpc('account_approveKeyAuthorization', [
109
109
  { hash: keyHash, signature: await owners[2].sign({ hash: keyHash }) },
110
- ])) as MultisigOperation.KeyAuthorizationRpc
110
+ ])) as AccountOperation.KeyAuthorizationRpc
111
111
  expect(keySuccess).toMatchObject({ hash: keyHash, status: 'success', signatureCount: 2 })
112
112
  expect(KeyAuthorization.deserialize(keySuccess.keyAuthorization).signature?.type).toBe(
113
- 'multisig',
113
+ 'configurable',
114
114
  )
115
115
  expect(await relay.operation(keyHash)).toEqual(keySuccess)
116
116
  expect(
@@ -126,11 +126,11 @@ describe('relay', () => {
126
126
  const wallet = createClient({
127
127
  chain,
128
128
  transport: withRelay(
129
- http(inject('tempoMultisigRpcUrl')),
129
+ http(inject('tempoAccountsRpcUrl')),
130
130
  custom({ request: ({ method, params }) => relay.rpc(method, params ?? []) }),
131
131
  ),
132
132
  })
133
- const account = multisig()
133
+ const account = configurable()
134
134
  const pending = await sendTransactionSync(wallet, {
135
135
  account,
136
136
  calls: [{ to: account.address, value: 0n }],
@@ -150,13 +150,13 @@ describe('relay', () => {
150
150
  const store = StateStore.memory()
151
151
  const a = fixture({ store })
152
152
  const b = fixture({ store })
153
- const account = multisig(3)
153
+ const account = configurable(3)
154
154
  const first = await approval(account, [owners[1]])
155
155
  const second = await approval(account, [owners[2]])
156
156
  const hashes = await Promise.all([
157
- a.rpc('multisig_approveRawTransaction', [first]),
158
- b.rpc('multisig_approveRawTransaction', [second]),
159
- a.rpc('multisig_approveRawTransaction', [first]),
157
+ a.rpc('account_approveRawTransaction', [first]),
158
+ b.rpc('account_approveRawTransaction', [second]),
159
+ a.rpc('account_approveRawTransaction', [first]),
160
160
  ])
161
161
  expect(new Set(hashes).size).toBe(1)
162
162
  expect(await a.operation(hashes[0] as Hex.Hex)).toMatchObject({
@@ -166,11 +166,11 @@ describe('relay', () => {
166
166
  })
167
167
  })
168
168
 
169
- test.each(['multisig_approveRawTransaction', 'eth_sendRawTransaction'])(
169
+ test.each(['account_approveRawTransaction', 'eth_sendRawTransaction'])(
170
170
  'selects a weighted quorum and submits asynchronously via %s',
171
171
  async (method) => {
172
172
  const relay = fixture()
173
- const account = Account.fromMultisig({
173
+ const account = Account.fromConfig({
174
174
  owners: [
175
175
  { owner: owners[1].address, weight: 2 },
176
176
  { owner: owners[2].address, weight: 1 },
@@ -192,29 +192,29 @@ describe('relay', () => {
192
192
 
193
193
  test('rejects positive-version configs for an unregistered account', async () => {
194
194
  const relay = fixture()
195
- const initial = multisig()
196
- const account = Account.fromMultisig({
195
+ const initial = configurable()
196
+ const account = Account.fromConfig({
197
197
  ...initial.config!,
198
198
  address: initial.address,
199
199
  version: 1n,
200
200
  })
201
201
  await expect(
202
- relay.rpc('multisig_approveRawTransaction', [await approval(account, [owners[1]])]),
202
+ relay.rpc('account_approveRawTransaction', [await approval(account, [owners[1]])]),
203
203
  ).rejects.toMatchObject({ code: -32602 })
204
204
  expect((await relay.store.list()).keys).toEqual([])
205
205
  })
206
206
 
207
207
  test('validates cached configurations before returning them', async () => {
208
208
  const relay = fixture()
209
- const account = multisig()
210
- await relay.rpc('multisig_approveRawTransaction', [await approval(account, [owners[1]])])
209
+ const account = configurable()
210
+ await relay.rpc('account_approveRawTransaction', [await approval(account, [owners[1]])])
211
211
  const { keys } = await relay.store.list()
212
212
  const key = keys.find(
213
213
  ({ name }) => name.includes(':config:') && name.endsWith(`0x${'00'.repeat(32)}`),
214
214
  )!
215
215
  await relay.store.put(key.name, '{}')
216
216
  await expect(
217
- relay.rpc('multisig_getConfig', [{ address: account.address }]),
217
+ relay.rpc('account_getConfig', [{ address: account.address }]),
218
218
  ).rejects.toMatchObject({ code: -32603 })
219
219
  })
220
220
 
@@ -222,15 +222,15 @@ describe('relay', () => {
222
222
  const store = StateStore.memory()
223
223
  const rejected = fixture({ store, validate: async () => false })
224
224
  const accepted = fixture({ store })
225
- const account = multisig()
225
+ const account = configurable()
226
226
  const first = await approval(account, [owners[1]])
227
227
  const second = await approval(account, [owners[2]])
228
- const hash = (await rejected.rpc('multisig_approveRawTransaction', [first])) as Hex.Hex
229
- await expect(
230
- rejected.rpc('multisig_approveRawTransactionSync', [second]),
231
- ).rejects.toMatchObject({ code: -32602, message: 'Sponsorship rejected.' })
228
+ const hash = (await rejected.rpc('account_approveRawTransaction', [first])) as Hex.Hex
229
+ await expect(rejected.rpc('account_approveRawTransactionSync', [second])).rejects.toMatchObject(
230
+ { code: -32602, message: 'Sponsorship rejected.' },
231
+ )
232
232
  expect(await accepted.operation(hash)).toMatchObject({ status: 'pending', signatureCount: 2 })
233
- expect(await accepted.rpc('multisig_approveRawTransactionSync', [second])).toMatchObject({
233
+ expect(await accepted.rpc('account_approveRawTransactionSync', [second])).toMatchObject({
234
234
  status: 'success',
235
235
  })
236
236
  })
@@ -238,15 +238,15 @@ describe('relay', () => {
238
238
  test('rejects malformed requests and non-owner approvals', async () => {
239
239
  const relay = fixture()
240
240
  for (const [method, params] of [
241
- ['multisig_approveRawTransaction', ['0x76']],
242
- ['multisig_approveRawTransactionSync', ['0x']],
243
- ['multisig_approveKeyAuthorization', [{ hash: Hex.random(32), signature: '0x' }]],
244
- ['multisig_getConfig', [{ address: 'invalid' }]],
245
- ['multisig_getOperation', ['0x']],
241
+ ['account_approveRawTransaction', ['0x76']],
242
+ ['account_approveRawTransactionSync', ['0x']],
243
+ ['account_approveKeyAuthorization', [{ hash: Hex.random(32), signature: '0x' }]],
244
+ ['account_getConfig', [{ address: 'invalid' }]],
245
+ ['account_getOperation', ['0x']],
246
246
  ] as const)
247
247
  await expect(relay.rpc(method, params)).rejects.toMatchObject({ code: -32602 })
248
248
  await expect(
249
- relay.rpc('multisig_approveRawTransaction', [await approval(multisig(), [owners[4]])]),
249
+ relay.rpc('account_approveRawTransaction', [await approval(configurable(), [owners[4]])]),
250
250
  ).rejects.toMatchObject({ code: -32602 })
251
251
  })
252
252
 
@@ -254,7 +254,7 @@ describe('relay', () => {
254
254
  'retains partial approvals without broadcasting via %s',
255
255
  async (method) => {
256
256
  const relay = fixture()
257
- const account = multisig()
257
+ const account = configurable()
258
258
  const partial = await approval(account, [owners[1]])
259
259
  const result = (await relay.rpc(method, [partial])) as
260
260
  | Hex.Hex
@@ -281,31 +281,31 @@ describe('relay', () => {
281
281
  test('rejects chain mismatches before collecting approvals', async () => {
282
282
  const relay = fixture()
283
283
  await expect(
284
- relay.rpc('multisig_approveRawTransaction', [await approval(multisig(), [owners[1]])], 1),
284
+ relay.rpc('account_approveRawTransaction', [await approval(configurable(), [owners[1]])], 1),
285
285
  ).rejects.toMatchObject({ code: -32602, message: 'Conflicting chain ids.' })
286
286
  expect((await relay.store.list()).keys).toEqual([])
287
287
  })
288
288
 
289
289
  test('reports corrupt stored state as an observable server error', async () => {
290
290
  const relay = fixture()
291
- const hash = (await relay.rpc('multisig_approveRawTransaction', [
292
- await approval(multisig(), [owners[1]]),
291
+ const hash = (await relay.rpc('account_approveRawTransaction', [
292
+ await approval(configurable(), [owners[1]]),
293
293
  ])) as Hex.Hex
294
294
  const { keys } = await relay.store.list()
295
295
  const key = keys.find(({ name }) => name.endsWith(hash.toLowerCase()))!
296
296
  await relay.store.put(key.name, 'invalid')
297
- const response = await relay.response('multisig_getOperation', [hash])
297
+ const response = await relay.response('account_getOperation', [hash])
298
298
  expect(response).toMatchObject({ error: { code: -32603 } })
299
299
  expect(Log.rpcErrors(response)).toMatchObject({ serverErrors: 1 })
300
300
  })
301
301
  })
302
302
 
303
303
  describe('raw sponsorship', () => {
304
- test('sponsors a multisig fee-payer handoff its owners approved', async () => {
305
- const account = multisig(1)
304
+ test('sponsors a configurable account fee-payer handoff its owners approved', async () => {
305
+ const account = configurable(1)
306
306
  const relay = fixture()
307
307
  const serialized = await handoff({ account, signers: [owners[1]] })
308
- // Fee-payer serialization writes the `0x00` marker instead of a sender for multisig signatures.
308
+ // Fee-payer serialization writes the `0x00` marker instead of a sender for configurable account signatures.
309
309
  expect((Rlp.toHex(Hex.slice(serialized, 1)) as readonly Hex.Hex[])[11]).toBe('0x00')
310
310
 
311
311
  const result = (await relay.rpc('eth_signRawTransaction', [serialized])) as `0x76${string}`
@@ -316,23 +316,23 @@ describe('raw sponsorship', () => {
316
316
  test.each([
317
317
  {
318
318
  name: 'approvals below quorum',
319
- account: () => multisig(2),
320
- message: 'Multisig account approvals do not reach quorum.',
319
+ account: () => configurable(2),
320
+ message: 'Configurable account approvals do not reach quorum.',
321
321
  signers: () => [owners[1]],
322
322
  },
323
323
  {
324
324
  name: 'a non-owner approval',
325
- account: () => multisig(1),
326
- message: 'Invalid multisig approval: signature is from non-owner <address>.',
325
+ account: () => configurable(1),
326
+ message: 'Invalid operation approval: signature is from non-owner <address>.',
327
327
  signers: () => [owners[4]],
328
328
  },
329
329
  {
330
330
  name: 'a config that does not derive its account',
331
- account: () => ({ ...multisig(1), address: `0x${'ab'.repeat(20)}` as const }),
332
- message: 'Initial account config does not match the multisig account.',
331
+ account: () => ({ ...configurable(1), address: `0x${'ab'.repeat(20)}` as const }),
332
+ message: 'Initial account config does not match the configurable account.',
333
333
  signers: () => [owners[1]],
334
334
  },
335
- ])('rejects a multisig handoff with $name', async ({ account, message, signers }) => {
335
+ ])('rejects a configurable account handoff with $name', async ({ account, message, signers }) => {
336
336
  const relay = fixture()
337
337
 
338
338
  const { error } = await relay.response('eth_signRawTransaction', [
@@ -342,8 +342,8 @@ describe('raw sponsorship', () => {
342
342
  expect(error?.message.replace(/0x[0-9a-f]{40}/i, '<address>')).toBe(message)
343
343
  })
344
344
 
345
- test('sponsors an access key a multisig account authorized in the same transaction', async () => {
346
- const account = multisig(1)
345
+ test('sponsors an access key a configurable account authorized in the same transaction', async () => {
346
+ const account = configurable(1)
347
347
  const relay = fixture()
348
348
 
349
349
  const result = (await relay.rpc('eth_signRawTransaction', [
@@ -353,8 +353,8 @@ describe('raw sponsorship', () => {
353
353
  expect(TxEnvelopeTempo.deserialize(result as never).from).toBe(account.address.toLowerCase())
354
354
  })
355
355
 
356
- test('rejects an access key a non-owner authorized for a multisig account', async () => {
357
- const account = multisig(1)
356
+ test('rejects an access key a non-owner authorized for a configurable account', async () => {
357
+ const account = configurable(1)
358
358
  const relay = fixture()
359
359
 
360
360
  const { error } = await relay.response('eth_signRawTransaction', [
@@ -362,20 +362,23 @@ describe('raw sponsorship', () => {
362
362
  ])
363
363
 
364
364
  expect(error?.message.replace(/0x[0-9a-f]{40}/i, '<address>')).toMatchInlineSnapshot(
365
- `"Invalid multisig approval: signature is from non-owner <address>."`,
365
+ `"Invalid operation approval: signature is from non-owner <address>."`,
366
366
  )
367
367
  })
368
368
  })
369
369
 
370
- function multisig(threshold = 2) {
371
- return Account.fromMultisig({
370
+ function configurable(threshold = 2) {
371
+ return Account.fromConfig({
372
372
  owners: [owners[1].address, owners[2].address, owners[3].address],
373
373
  salt: Hex.random(32),
374
374
  threshold,
375
375
  })
376
376
  }
377
377
 
378
- async function approval(account: Account.MultisigAccount, signers: readonly Accounts.Account[]) {
378
+ async function approval(
379
+ account: Account.ConfigurableAccount,
380
+ signers: readonly Accounts.Account[],
381
+ ) {
379
382
  const transaction = TxEnvelopeTempo.from({
380
383
  calls: [{ to: account.address, value: 0n }],
381
384
  chainId: chain.id,
@@ -386,7 +389,7 @@ async function approval(account: Account.MultisigAccount, signers: readonly Acco
386
389
  maxPriorityFeePerGas: 0n,
387
390
  nonce: 0n,
388
391
  })
389
- const hash = MultisigConfig.getSignPayload({
392
+ const hash = AccountConfig.getSignPayload({
390
393
  account: account.address,
391
394
  config: account.config!,
392
395
  payload: TxEnvelopeTempo.getSignPayload(transaction),
@@ -396,7 +399,7 @@ async function approval(account: Account.MultisigAccount, signers: readonly Acco
396
399
  .sort((a, b) => a.address.toLowerCase().localeCompare(b.address.toLowerCase()))
397
400
  .map(async (owner) => {
398
401
  const signature = SignatureEnvelope.from(await owner.sign({ hash }))
399
- if (signature.type === 'multisig' || signature.type === 'keychain')
402
+ if (signature.type === 'configurable' || signature.type === 'keychain')
400
403
  throw new Error('Expected a primitive owner.')
401
404
  return signature
402
405
  }),
@@ -418,7 +421,7 @@ function fixture(options: fixture.Options = {}) {
418
421
  ...(options.validate ? { validate: options.validate } : {}),
419
422
  },
420
423
  getClient: () => client,
421
- multisig: { store },
424
+ accounts: { store },
422
425
  })
423
426
  async function response(method: string, params: readonly unknown[], chainId: number = chain.id) {
424
427
  return (await (
@@ -438,7 +441,7 @@ function fixture(options: fixture.Options = {}) {
438
441
  }
439
442
  return {
440
443
  operation: (hash: Hex.Hex) =>
441
- rpc('multisig_getOperation', [hash]) as Promise<MultisigOperation.Rpc>,
444
+ rpc('account_getOperation', [hash]) as Promise<AccountOperation.Rpc>,
442
445
  response,
443
446
  rpc,
444
447
  store,
@@ -479,9 +482,9 @@ async function handoff(options: handoff.Options) {
479
482
 
480
483
  declare namespace handoff {
481
484
  type Options = {
482
- /** Multisig account the handoff is sent from. */
483
- account: Account.MultisigAccount
484
- /** Owners whose approvals the multisig signature carries. */
485
+ /** Configurable account the handoff is sent from. */
486
+ account: Account.ConfigurableAccount
487
+ /** Owners whose approvals the configurable signature carries. */
485
488
  signers: readonly Accounts.Account[]
486
489
  }
487
490
  }
@@ -535,10 +538,10 @@ async function keyHandoff(options: handoff.Options) {
535
538
  })
536
539
  }
537
540
 
538
- /** Returns a multisig signature carrying `signers`' approvals of `payload` for `account`. */
541
+ /** Returns a configurable signature carrying `signers`' approvals of `payload` for `account`. */
539
542
  async function approve(options: approve.Options) {
540
543
  const { account, payload, signers } = options
541
- const hash = MultisigConfig.getSignPayload({
544
+ const hash = AccountConfig.getSignPayload({
542
545
  account: account.address,
543
546
  config: account.config!,
544
547
  payload,
@@ -548,7 +551,7 @@ async function approve(options: approve.Options) {
548
551
  .sort((a, b) => a.address.toLowerCase().localeCompare(b.address.toLowerCase()))
549
552
  .map(async (owner) => {
550
553
  const signature = SignatureEnvelope.from(await owner.sign({ hash }))
551
- if (signature.type === 'multisig' || signature.type === 'keychain')
554
+ if (signature.type === 'configurable' || signature.type === 'keychain')
552
555
  throw new Error('Expected a primitive owner.')
553
556
  return signature
554
557
  }),
@@ -562,8 +565,8 @@ async function approve(options: approve.Options) {
562
565
 
563
566
  declare namespace approve {
564
567
  type Options = {
565
- /** Multisig account whose owners approve `payload`. */
566
- account: Account.MultisigAccount
568
+ /** Configurable account whose owners approve `payload`. */
569
+ account: Account.ConfigurableAccount
567
570
  /** Sign payload the owners approve. */
568
571
  payload: Hex.Hex
569
572
  /** Owners whose approvals the signature carries. */
@@ -2,23 +2,23 @@ import { Store } from 'viem/tempo'
2
2
 
3
3
  import type * as core_Store from '../../internal/Store.js'
4
4
 
5
- /** Methods the relay answers through stored multisig coordination when a multisig store is configured. */
5
+ /** Methods the relay answers through stored configurable account coordination when an account store is configured. */
6
6
  export const methods = new Set([
7
7
  'eth_getTransactionByHash',
8
8
  'eth_getTransactionReceipt',
9
9
  'eth_sendRawTransaction',
10
10
  'eth_sendRawTransactionSync',
11
- 'multisig_approveKeyAuthorization',
12
- 'multisig_approveRawTransaction',
13
- 'multisig_approveRawTransactionSync',
14
- 'multisig_getConfig',
15
- 'multisig_getOperation',
11
+ 'account_approveKeyAuthorization',
12
+ 'account_approveRawTransaction',
13
+ 'account_approveRawTransactionSync',
14
+ 'account_getConfig',
15
+ 'account_getOperation',
16
16
  ])
17
17
 
18
- /** Adapts Tempo API state to Viem's atomic multisig store. */
18
+ /** Adapts Tempo API state to Viem's atomic configurable account store. */
19
19
  export function fromStore(store: core_Store.State): Store.Atomic {
20
20
  const swap = store.swap?.bind(store)
21
- if (!swap) throw new Error('Multisig coordination requires an atomic state store.')
21
+ if (!swap) throw new Error('Configurable account coordination requires an atomic state store.')
22
22
 
23
23
  return Store.from(
24
24
  {
@@ -31,6 +31,6 @@ export function fromStore(store: core_Store.State): Store.Atomic {
31
31
  removeItem: (key) => store.delete(key),
32
32
  setItem: (key, value) => store.put(key, value),
33
33
  },
34
- { key: 'multisig:v2' },
34
+ { key: 'accounts:v1' },
35
35
  )
36
36
  }