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
@@ -1,8 +1,8 @@
1
1
  import { Address as core_Address, Hash, Hex, Rlp, RpcResponse, Signature } 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'
@@ -291,7 +291,7 @@ export async function handleRawTransaction(options: handleRawTransaction.Options
291
291
  function isCanonical(serialized: Hex.Hex) {
292
292
  try {
293
293
  const envelope = TxEnvelopeTempo.deserialize(serialized as TxEnvelopeTempo.Serialized)
294
- // Fee-payer handoffs encode a sender address or, for multisig senders, the `0x00` marker; parsing recovers `from` either way.
294
+ // Fee-payer handoffs encode a sender address or, for configurable account senders, the `0x00` marker; parsing recovers `from` either way.
295
295
  const slot = (Rlp.toHex(Hex.slice(serialized, 1)) as readonly Hex.Hex[])[11]
296
296
  const serialized_parsed = serialized.startsWith(TxEnvelopeTempo.feePayerMagic)
297
297
  ? TxEnvelopeTempo.serialize(envelope, {
@@ -387,7 +387,7 @@ async function recoverSender(client: Client, serialized: `0x76${string}` | `0x78
387
387
  const payload = TxEnvelopeTempo.getSignPayload(envelope)
388
388
 
389
389
  const sender = await (async () => {
390
- if (signature.type === 'multisig') return verifyMultisig(client, { payload, signature })
390
+ if (signature.type === 'configurable') return verifyConfigurable(client, { payload, signature })
391
391
  if (signature.type !== 'keychain') return recoverSigner(payload, signature)
392
392
  // Tempo rejects V1 access-key signatures, which do not bind the key to its account.
393
393
  if (signature.version !== 'v2')
@@ -418,8 +418,8 @@ async function recoverSender(client: Client, serialized: `0x76${string}` | `0x78
418
418
  const { signature: signature_authorization } = keyAuthorization
419
419
  const payload_authorization = KeyAuthorization.getSignPayload(keyAuthorization)
420
420
  const authorizer =
421
- signature_authorization.type === 'multisig'
422
- ? await verifyMultisig(client, {
421
+ signature_authorization.type === 'configurable'
422
+ ? await verifyConfigurable(client, {
423
423
  payload: payload_authorization,
424
424
  signature: signature_authorization,
425
425
  })
@@ -472,63 +472,63 @@ async function recoverSender(client: Client, serialized: `0x76${string}` | `0x78
472
472
  }
473
473
 
474
474
  /**
475
- * Returns a multisig signature's account once its config matches the on-chain commitment and its
475
+ * Returns a configurable signature's account once its config matches the on-chain commitment and
476
476
  * owner approvals of `payload` reach quorum. Raw signing returns before any node checks them.
477
477
  */
478
- async function verifyMultisig(client: Client, options: verifyMultisig.Options) {
478
+ async function verifyConfigurable(client: Client, options: verifyConfigurable.Options) {
479
479
  const { payload, signature } = options
480
480
  const { account } = signature
481
- const config = MultisigConfig.from(signature.config)
481
+ const config = AccountConfig.from(signature.config)
482
482
  // Caller-token Zone endpoints scope reads to the authorized account.
483
483
  const commitment = await readContract(client, {
484
- ...Actions.multisig.getConfigCommitment.call({ account }),
484
+ ...Actions.accounts.getConfigCommitment.call({ account }),
485
485
  account,
486
486
  })
487
487
  // A version-zero config derives its account; a registered account must match its stored commitment.
488
488
  if (
489
489
  config.version === 0n &&
490
490
  !core_Address.isEqual(
491
- MultisigConfig.getAddress(config, { factory: Addresses.nativeMultisigFactory }),
491
+ AccountConfig.getAddress(config, { factory: Addresses.configurableAccountRecoveryFactory }),
492
492
  account,
493
493
  )
494
494
  )
495
495
  throw new RpcResponse.InvalidParamsError({
496
- message: 'Initial account config does not match the multisig account.',
496
+ message: 'Initial account config does not match the configurable account.',
497
497
  })
498
498
  if (
499
499
  !(config.version === 0n && Hex.toBigInt(commitment) === 0n) &&
500
- commitment.toLowerCase() !== MultisigConfig.getCommitment(config).toLowerCase()
500
+ commitment.toLowerCase() !== AccountConfig.getCommitment(config).toLowerCase()
501
501
  )
502
502
  throw new RpcResponse.InvalidParamsError({
503
503
  message: `Account config does not match account ${account}.`,
504
504
  })
505
505
  const { threshold, weight } = await (async () => {
506
506
  try {
507
- return await MultisigOperation.selectApprovals({
507
+ return await AccountOperation.selectApprovals({
508
508
  account,
509
509
  approvals: signature.signatures.map((approval) => SignatureEnvelope.serialize(approval)),
510
510
  config,
511
- hash: MultisigConfig.getSignPayload({ account, config, payload }),
511
+ hash: AccountConfig.getSignPayload({ account, config, payload }),
512
512
  })
513
513
  } catch (error) {
514
- if (error instanceof MultisigOperation.InvalidApprovalError)
514
+ if (error instanceof AccountOperation.InvalidApprovalError)
515
515
  throw new RpcResponse.InvalidParamsError({ message: error.shortMessage })
516
516
  throw error
517
517
  }
518
518
  })()
519
519
  if (weight < threshold)
520
520
  throw new RpcResponse.InvalidParamsError({
521
- message: 'Multisig account approvals do not reach quorum.',
521
+ message: 'Configurable account approvals do not reach quorum.',
522
522
  })
523
523
  return account
524
524
  }
525
525
 
526
- declare namespace verifyMultisig {
526
+ declare namespace verifyConfigurable {
527
527
  type Options = {
528
528
  /** Sign payload the account's owners approve. */
529
529
  payload: Hex.Hex
530
- /** Multisig signature carrying the account config and owner approvals. */
531
- signature: Extract<SignatureEnvelope.SignatureEnvelope, { type: 'multisig' }>
530
+ /** Configurable signature carrying the account config and owner approvals. */
531
+ signature: Extract<SignatureEnvelope.SignatureEnvelope, { type: 'configurable' }>
532
532
  }
533
533
  }
534
534
 
@@ -801,7 +801,7 @@ describe.skipIf(Runtime.get().mode !== 'localnet')('behavior: raw sponsorship se
801
801
  })
802
802
  })
803
803
 
804
- describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG === 'sha-83f3ccd')(
804
+ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG === 'sha-04e67d3')(
805
805
  'multisig',
806
806
  () => {
807
807
  let client: ReturnType<typeof Relay.getClient>
@@ -812,7 +812,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
812
812
  server = await Relay.createServer(
813
813
  (
814
814
  await Relay.relay({
815
- multisig: { store },
815
+ accounts: { store },
816
816
  tokens: localnetTokens,
817
817
  })
818
818
  ).listener,
@@ -831,7 +831,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
831
831
  test('example: initial configuration', async () => {
832
832
  const owner_1 = Relay.accounts[1]!
833
833
  const owner_2 = Relay.accounts[2]!
834
- const account = Account.fromMultisig({
834
+ const account = Account.fromConfig({
835
835
  address: 'infer',
836
836
  owners: [owner_1.address, owner_2.address],
837
837
  salt: toHex(0x109700, { size: 32 }),
@@ -857,10 +857,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
857
857
  token: Relay.addresses.alphaUsd,
858
858
  })
859
859
  expect({
860
- signatureCount: pending.multisig?.signatureCount,
860
+ signatureCount: pending.operation?.signatureCount,
861
861
  status: pending.status,
862
- threshold: pending.multisig?.threshold,
863
- weight: pending.multisig?.weight,
862
+ threshold: pending.operation?.threshold,
863
+ weight: pending.operation?.weight,
864
864
  }).toMatchInlineSnapshot(`
865
865
  {
866
866
  "signatureCount": 1,
@@ -879,10 +879,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
879
879
  token: Relay.addresses.alphaUsd,
880
880
  } as never)
881
881
  expect({
882
- signatureCount: receipt.multisig?.signatureCount,
882
+ signatureCount: receipt.operation?.signatureCount,
883
883
  status: receipt.status,
884
- threshold: receipt.multisig?.threshold,
885
- weight: receipt.multisig?.weight,
884
+ threshold: receipt.operation?.threshold,
885
+ weight: receipt.operation?.weight,
886
886
  }).toMatchInlineSnapshot(`
887
887
  {
888
888
  "signatureCount": 2,
@@ -903,8 +903,8 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
903
903
  const transaction = await getTransaction(client, {
904
904
  hash: receipt.transactionHash,
905
905
  })
906
- if (transaction.signature?.type !== 'multisig')
907
- throw new Error('Expected a multisig signature.')
906
+ if (transaction.signature?.type !== 'configurable')
907
+ throw new Error('Expected a configurable signature.')
908
908
  expect({
909
909
  account: transaction.signature.account,
910
910
  signatureCount: transaction.signature.signatures.length,
@@ -914,15 +914,15 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
914
914
  {
915
915
  "account": "${account.address.toLowerCase()}",
916
916
  "signatureCount": 2,
917
- "type": "multisig",
917
+ "type": "configurable",
918
918
  "version": 0n,
919
919
  }
920
920
  `)
921
921
  })
922
922
 
923
- test('rejects multisig accounts as owners', () => {
924
- const child = Account.fromMultisig({ owners: [Relay.accounts[3]!] })
925
- expect(() => Account.fromMultisig({ owners: [child as never] })).toThrow()
923
+ test('rejects configurable accounts as owners', () => {
924
+ const child = Account.fromConfig({ owners: [Relay.accounts[3]!] })
925
+ expect(() => Account.fromConfig({ owners: [child as never] })).toThrow()
926
926
  })
927
927
 
928
928
  test('example: weighted quorum', async () => {
@@ -932,7 +932,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
932
932
  const heavy = owners[0]!
933
933
  const light_1 = owners[1]!
934
934
  const light_2 = owners[2]!
935
- const account = Account.fromMultisig({
935
+ const account = Account.fromConfig({
936
936
  address: 'infer',
937
937
  owners: [
938
938
  { owner: heavy.address, weight: 2 },
@@ -959,7 +959,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
959
959
  })
960
960
  expect({
961
961
  status: alicePending.status,
962
- weight: alicePending.multisig?.weight,
962
+ weight: alicePending.operation?.weight,
963
963
  }).toMatchInlineSnapshot(`
964
964
  {
965
965
  "status": "pending",
@@ -1010,7 +1010,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1010
1010
  } as never)
1011
1011
  expect({
1012
1012
  status: bobCarolPending.status,
1013
- weight: bobCarolPending.multisig?.weight,
1013
+ weight: bobCarolPending.operation?.weight,
1014
1014
  }).toMatchInlineSnapshot(`
1015
1015
  {
1016
1016
  "status": "pending",
@@ -1031,12 +1031,12 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1031
1031
  const transaction = await getTransaction(client, {
1032
1032
  hash: receipt.transactionHash,
1033
1033
  })
1034
- if (transaction.signature?.type !== 'multisig')
1035
- throw new Error('Expected a multisig signature.')
1034
+ if (transaction.signature?.type !== 'configurable')
1035
+ throw new Error('Expected a configurable signature.')
1036
1036
  expect({
1037
1037
  signatureCount: transaction.signature.signatures.length,
1038
1038
  status: receipt.status,
1039
- weight: receipt.multisig?.weight,
1039
+ weight: receipt.operation?.weight,
1040
1040
  }).toMatchInlineSnapshot(`
1041
1041
  {
1042
1042
  "signatureCount": 2,
@@ -1055,7 +1055,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1055
1055
  account: feePayerAccount,
1056
1056
  onSponsored: () => ({ subsidized: true }),
1057
1057
  },
1058
- multisig: { store: sponsorStore },
1058
+ accounts: { store: sponsorStore },
1059
1059
  tokens: localnetTokens,
1060
1060
  })
1061
1061
  ).listener,
@@ -1089,7 +1089,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1089
1089
  sponsorship_details: { subsidized: true },
1090
1090
  })
1091
1091
 
1092
- const ownerFirst = Account.fromMultisig({
1092
+ const ownerFirst = Account.fromConfig({
1093
1093
  address: 'infer',
1094
1094
  owners: [owner_1.address, owner_2.address],
1095
1095
  salt: toHex(0x109704, { size: 32 }),
@@ -1110,9 +1110,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1110
1110
  to: recipient.address,
1111
1111
  token: Relay.addresses.alphaUsd,
1112
1112
  })
1113
- if (!ownerFirstPending.multisig) throw new Error('Expected a multisig operation.')
1113
+ if (!ownerFirstPending.operation)
1114
+ throw new Error('Expected a configurable account operation.')
1114
1115
  const ownerFirstTransaction = Transaction.deserialize(
1115
- ownerFirstPending.multisig.transaction,
1116
+ ownerFirstPending.operation.transaction,
1116
1117
  )
1117
1118
  expect({
1118
1119
  feePayerSigned:
@@ -1144,7 +1145,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1144
1145
  }
1145
1146
  `)
1146
1147
 
1147
- const feePayerFirst = Account.fromMultisig({
1148
+ const feePayerFirst = Account.fromConfig({
1148
1149
  address: 'infer',
1149
1150
  owners: [owner_1.address, owner_2.address],
1150
1151
  salt: toHex(0x109705, { size: 32 }),
@@ -1165,9 +1166,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1165
1166
  to: recipient.address,
1166
1167
  token: Relay.addresses.alphaUsd,
1167
1168
  })
1168
- if (!feePayerFirstPending.multisig) throw new Error('Expected a multisig operation.')
1169
+ if (!feePayerFirstPending.operation)
1170
+ throw new Error('Expected a configurable account operation.')
1169
1171
  const feePayerFirstTransaction = Transaction.deserialize(
1170
- feePayerFirstPending.multisig.transaction,
1172
+ feePayerFirstPending.operation.transaction,
1171
1173
  )
1172
1174
  expect({
1173
1175
  feePayerSigned:
@@ -1206,7 +1208,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1206
1208
  test('example: initial config and immediate access key use', async () => {
1207
1209
  const owner_1 = Relay.accounts[3]!
1208
1210
  const owner_2 = Relay.accounts[4]!
1209
- const account = Account.fromMultisig({
1211
+ const account = Account.fromConfig({
1210
1212
  address: 'infer',
1211
1213
  owners: [owner_1, owner_2],
1212
1214
  salt: toHex(0x109706, { size: 32 }),
@@ -1228,10 +1230,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1228
1230
  owner: owner_1,
1229
1231
  })
1230
1232
  expect({
1231
- signatureCount: pending.multisig.signatureCount,
1233
+ signatureCount: pending.operation.signatureCount,
1232
1234
  status: pending.status,
1233
- threshold: pending.multisig.threshold,
1234
- weight: pending.multisig.weight,
1235
+ threshold: pending.operation.threshold,
1236
+ weight: pending.operation.weight,
1235
1237
  }).toMatchInlineSnapshot(`
1236
1238
  {
1237
1239
  "signatureCount": 1,
@@ -1261,13 +1263,13 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1261
1263
  status: receipt.status,
1262
1264
  transactionSignature: transaction.signature?.type,
1263
1265
  version:
1264
- transaction.keyAuthorization?.signature.type === 'multisig'
1266
+ transaction.keyAuthorization?.signature.type === 'configurable'
1265
1267
  ? transaction.keyAuthorization.signature.config.version
1266
1268
  : undefined,
1267
1269
  }).toMatchInlineSnapshot(`
1268
1270
  {
1269
1271
  "from": "${account.address.toLowerCase()}",
1270
- "keyAuthorizationSignature": "multisig",
1272
+ "keyAuthorizationSignature": "configurable",
1271
1273
  "status": "success",
1272
1274
  "transactionSignature": "keychain",
1273
1275
  "version": 0n,
@@ -1278,7 +1280,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1278
1280
  test('example: initial config and subsequent access key use', async () => {
1279
1281
  const owner_1 = Relay.accounts[6]!
1280
1282
  const owner_2 = Relay.accounts[8]!
1281
- const account = Account.fromMultisig({
1283
+ const account = Account.fromConfig({
1282
1284
  address: 'infer',
1283
1285
  owners: [owner_1, owner_2],
1284
1286
  salt: toHex(0x109707, { size: 32 }),
@@ -1330,9 +1332,9 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1330
1332
  transactionSignature: initialTransaction.signature?.type,
1331
1333
  }).toMatchInlineSnapshot(`
1332
1334
  {
1333
- "keyAuthorizationSignature": "multisig",
1335
+ "keyAuthorizationSignature": "configurable",
1334
1336
  "status": "success",
1335
- "transactionSignature": "multisig",
1337
+ "transactionSignature": "configurable",
1336
1338
  }
1337
1339
  `)
1338
1340
 
@@ -1357,7 +1359,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1357
1359
  const owner_1 = Relay.accounts[1]!
1358
1360
  const owner_2 = Relay.accounts[2]!
1359
1361
  const owner_3 = Relay.accounts[3]!
1360
- const account = Account.fromMultisig({
1362
+ const account = Account.fromConfig({
1361
1363
  address: 'infer',
1362
1364
  owners: [owner_1, owner_2],
1363
1365
  salt: toHex(0x109708, { size: 32 }),
@@ -1374,14 +1376,14 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1374
1376
  to: account.address,
1375
1377
  token: Relay.addresses.alphaUsd,
1376
1378
  })
1377
- const { receipt: pending } = await Actions.multisig.updateConfigSync(client, {
1379
+ const { receipt: pending } = await Actions.accounts.updateConfigSync(client, {
1378
1380
  account,
1379
1381
  nextConfig,
1380
1382
  owner: owner_1,
1381
1383
  })
1382
1384
  expect({
1383
1385
  status: pending.status,
1384
- version: pending.multisig?.config.version,
1386
+ version: pending.operation?.config.version,
1385
1387
  }).toMatchInlineSnapshot(`
1386
1388
  {
1387
1389
  "status": "pending",
@@ -1389,7 +1391,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1389
1391
  }
1390
1392
  `)
1391
1393
 
1392
- const { receipt: updateReceipt, ...rotation } = await Actions.multisig.updateConfigSync(
1394
+ const { receipt: updateReceipt, ...rotation } = await Actions.accounts.updateConfigSync(
1393
1395
  client,
1394
1396
  {
1395
1397
  account,
@@ -1412,7 +1414,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1412
1414
  }
1413
1415
  `)
1414
1416
 
1415
- const currentAccount = Account.fromMultisig(account.address)
1417
+ const currentAccount = Account.fromConfig(account.address)
1416
1418
  const { receipt } = await Actions.token.transferSync(client, {
1417
1419
  account: currentAccount,
1418
1420
  amount: 11n,
@@ -1427,7 +1429,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1427
1429
  account: transaction.from,
1428
1430
  status: receipt.status,
1429
1431
  version:
1430
- transaction.signature?.type === 'multisig'
1432
+ transaction.signature?.type === 'configurable'
1431
1433
  ? transaction.signature.config.version
1432
1434
  : undefined,
1433
1435
  }).toMatchInlineSnapshot(`
@@ -1442,7 +1444,7 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1442
1444
  test('behavior: routes pathless approvals to their operation chain', async () => {
1443
1445
  const owner_1 = Relay.accounts[1]!
1444
1446
  const owner_2 = Relay.accounts[2]!
1445
- const account = Account.fromMultisig({
1447
+ const account = Account.fromConfig({
1446
1448
  address: 'infer',
1447
1449
  owners: [owner_1, owner_2],
1448
1450
  salt: toHex(0x109709, { size: 32 }),
@@ -1470,10 +1472,10 @@ describe.runIf(Runtime.get().mode === 'localnet' && process.env.TEMPO_IMAGE_TAG
1470
1472
  await Relay.relay({
1471
1473
  getClient(chainId) {
1472
1474
  if (chainId !== Relay.chain.id)
1473
- throw new Error('Expected the multisig operation chain.')
1475
+ throw new Error('Expected the configurable account operation chain.')
1474
1476
  return getClient(chainId)
1475
1477
  },
1476
- multisig: { store },
1478
+ accounts: { store },
1477
1479
  tokens: localnetTokens,
1478
1480
  })
1479
1481
  ).listener,
@@ -1,7 +1,7 @@
1
1
  import { AbiEvent, Hash, Hex, RpcRequest, RpcResponse } from 'ox'
2
2
  import {
3
+ type AccountOperation,
3
4
  KeyAuthorization,
4
- type MultisigOperation,
5
5
  Transaction as core_Transaction,
6
6
  TxEnvelopeTempo,
7
7
  } from 'ox/tempo'
@@ -30,7 +30,7 @@ import { type Handler, from } from '../Handler.js'
30
30
  import * as Store from '../internal/Store.js'
31
31
  import * as PublicUrl from '../internal/PublicUrl.js'
32
32
  import * as Tip20 from '../internal/Tip20.js'
33
- import * as Multisig from './internal/multisig.js'
33
+ import * as Accounts from './internal/accounts.js'
34
34
  import * as Sponsorship from './internal/sponsorship.js'
35
35
  import * as Utils from './internal/utils.js'
36
36
 
@@ -87,7 +87,7 @@ export function relay(options: relay.Options = {}): Handler {
87
87
  const getClient = getClient_ ?? defaultGetClient({ apiKey })
88
88
  const resolveTokens = resolveTokens_ ?? defaultResolveTokens({ apiKey })
89
89
  const feePayerOptions = options.feePayer
90
- const multisigStore = options.multisig ? Multisig.fromStore(options.multisig.store) : undefined
90
+ const accountsStore = options.accounts ? Accounts.fromStore(options.accounts.store) : undefined
91
91
 
92
92
  const getTokens = async (chainId: number | undefined): Promise<readonly Address[]> => {
93
93
  if (chainId === undefined) return []
@@ -170,9 +170,9 @@ export function relay(options: relay.Options = {}): Handler {
170
170
  )
171
171
  const chainId_request = chainId_path ?? chainId_body
172
172
 
173
- if (multisigStore && Multisig.methods.has(request.method)) {
173
+ if (accountsStore && Accounts.methods.has(request.method)) {
174
174
  let sponsorshipDetails: Sponsorship.SponsorshipDetails | undefined
175
- const handleMultisigRequest = Relay.handleRequest(
175
+ const handleAccountsRequest = Relay.handleRequest(
176
176
  async (inner, requestOptions) => {
177
177
  // Inner calls serve the caller's operation, so they resolve under its method.
178
178
  const client = await getClient(requestOptions?.chainId, { method: request.method })
@@ -186,13 +186,13 @@ export function relay(options: relay.Options = {}): Handler {
186
186
  }
187
187
  return await client.request(inner as never, requestOptions)
188
188
  },
189
- { plugins: [Relay.multisig({ store: multisigStore })] },
189
+ { plugins: [Relay.accounts({ store: accountsStore })] },
190
190
  )
191
191
  try {
192
192
  const hash = (() => {
193
- if (request.method === 'multisig_approveKeyAuthorization') return first?.['hash']
193
+ if (request.method === 'account_approveKeyAuthorization') return first?.['hash']
194
194
  if (
195
- request.method === 'multisig_getOperation' ||
195
+ request.method === 'account_getOperation' ||
196
196
  request.method === 'eth_getTransactionByHash' ||
197
197
  request.method === 'eth_getTransactionReceipt'
198
198
  )
@@ -201,10 +201,10 @@ export function relay(options: relay.Options = {}): Handler {
201
201
  })()
202
202
  const operation =
203
203
  typeof hash === 'string' && Hash.validate(hash)
204
- ? ((await handleMultisigRequest({
205
- method: 'multisig_getOperation',
204
+ ? ((await handleAccountsRequest({
205
+ method: 'account_getOperation',
206
206
  params: [hash],
207
- })) as MultisigOperation.Rpc | null)
207
+ })) as AccountOperation.Rpc | null)
208
208
  : undefined
209
209
  // Stored hashes commit to their payload's chain. Authorize it before coordination can return state or update approvals without upstream access.
210
210
  if (operation) {
@@ -219,9 +219,9 @@ export function relay(options: relay.Options = {}): Handler {
219
219
  await getClient(chainId, { method: request.method })
220
220
  }
221
221
  const result =
222
- request.method === 'multisig_getOperation' && operation !== undefined
222
+ request.method === 'account_getOperation' && operation !== undefined
223
223
  ? operation
224
- : await handleMultisigRequest(
224
+ : await handleAccountsRequest(
225
225
  {
226
226
  method: request.method,
227
227
  params,
@@ -296,11 +296,11 @@ export function relay(options: relay.Options = {}): Handler {
296
296
 
297
297
  const { feePayer: _feePayer, ...normalized } =
298
298
  Utils.normalizeFillTransactionRequest(parameters)
299
- const hasMultisigSimulation =
300
- typeof normalized['multisigSimulation'] === 'object' &&
301
- normalized['multisigSimulation'] !== null
299
+ const hasAccountSimulation =
300
+ typeof normalized['configurableAccountSimulation'] === 'object' &&
301
+ normalized['configurableAccountSimulation'] !== null
302
302
  const shouldDeferFeePayerSignature =
303
- feePayerOptions && multisigStore && hasMultisigSimulation
303
+ feePayerOptions && accountsStore && hasAccountSimulation
304
304
 
305
305
  // When sponsoring, the sponsor's preferred fee token (if set)
306
306
  // overrides whatever the consumer asked for — the sponsor is
@@ -526,7 +526,7 @@ export function relay(options: relay.Options = {}): Handler {
526
526
  })(),
527
527
  // Sign as fee payer (if sponsored and not already signed).
528
528
  (async () => {
529
- // Multisig finalization changes the sender signature. Sign after quorum.
529
+ // Configurable account finalization changes the sender signature. Sign after quorum.
530
530
  if (shouldDeferFeePayerSignature)
531
531
  return { sponsorshipDetails: undefined, transaction: transaction_filled }
532
532
  // Never sign with the managed fee payer for an app-provided
@@ -865,6 +865,13 @@ export namespace relay {
865
865
  }
866
866
 
867
867
  export type Options = from.Options & {
868
+ /** Configurable account coordination. */
869
+ accounts?:
870
+ | {
871
+ /** Authoritative state shared by every relay instance. */
872
+ store: Store.State
873
+ }
874
+ | undefined
868
875
  /**
869
876
  * Tempo API key used by the default RPC clients and token resolver. When
870
877
  * omitted, RPC clients use each chain's default transport.
@@ -881,7 +888,7 @@ export namespace relay {
881
888
  }
882
889
  | undefined
883
890
  /**
884
- * Resolves a viem client from the request or stored multisig operation, synchronously or asynchronously.
891
+ * Resolves a viem client from the request or stored configurable account operation, synchronously or asynchronously.
885
892
  * Receives the JSON-RPC method the client will serve. Defaults to Tempo mainnet and testnet clients.
886
893
  */
887
894
  getClient?:
@@ -916,13 +923,6 @@ export namespace relay {
916
923
  url?: string | undefined
917
924
  }
918
925
  | undefined
919
- /** Native multisig coordination. */
920
- multisig?:
921
- | {
922
- /** Authoritative state shared by every relay instance. */
923
- store: Store.State
924
- }
925
- | undefined
926
926
  /**
927
927
  * Relay features.
928
928
  *
@@ -468,8 +468,12 @@ describe('require', () => {
468
468
  `)
469
469
  })
470
470
 
471
- test('records per-Zone scopes as delegation tags on the principal', async () => {
472
- const zoned = { ...key, scopes: ['data:read', 'zone:421700001:read', 'zone:421700002:write'] }
471
+ test("carries the key record's Zone tags on the principal", async () => {
472
+ const zoned = {
473
+ ...key,
474
+ scopes: ['data:read', 'zone:read', 'zone:421700002:write'],
475
+ zoneTags: [421700001, 421700002],
476
+ }
473
477
  const app = createApp({
474
478
  auth: {
475
479
  apiKey: { resolve: TestApp.resolver({ keys: [{ ...zoned, token }] }) },
@@ -984,7 +984,7 @@ namespace schema {
984
984
  /** Email OTP send body accepted before Better Auth runs; 254 characters is the SMTP path limit. */
985
985
  export const EmailOtpSend = z
986
986
  .object({
987
- email: z.email().check(z.maxLength(254), z.describe('Recipient email address.')),
987
+ email: Schema.Email.check(z.maxLength(254), z.describe('Recipient email address.')),
988
988
  type: z.literal('sign-in').check(z.describe('OTP purpose; only sign-in is supported.')),
989
989
  })
990
990
  .check(z.describe('Email OTP send request.'))
@@ -2385,10 +2385,10 @@ export function require<environment extends Environment = Environment>(
2385
2385
 
2386
2386
  // CLI session tokens are prefixed, so they skip the API-key lookup.
2387
2387
  const cliToken = CliAuth.isToken(credential.token)
2388
- const apiKey_resolved = cliToken
2388
+ const apiKey = cliToken
2389
2389
  ? null
2390
2390
  : await Timing.sum(c as never, 'auth_key', () => auth.apiKey?.resolve(c, credential.token))
2391
- if (!apiKey_resolved) {
2391
+ if (!apiKey) {
2392
2392
  if (unsupportedChain)
2393
2393
  return Response.unsupportedChainId(
2394
2394
  c,
@@ -2427,10 +2427,6 @@ export function require<environment extends Environment = Environment>(
2427
2427
  })
2428
2428
  }
2429
2429
 
2430
- const scopes = Scope.expandAliases(apiKey_resolved.scopes)
2431
- const apiKey =
2432
- scopes === apiKey_resolved.scopes ? apiKey_resolved : { ...apiKey_resolved, scopes }
2433
-
2434
2430
  // Sandbox keys are testnet-only. A sandbox key that explicitly targets
2435
2431
  // mainnet (`?chainId`) is rejected with a clear message rather than
2436
2432
  // steered or downgraded to anonymous, so the caller learns their key does
@@ -2968,8 +2964,6 @@ function payer(c: hono_Context) {
2968
2964
  }
2969
2965
 
2970
2966
  function principalFromApiKey(apiKey: ApiKey.ApiKey): Principal {
2971
- // Explicit record tags win; per-Zone scopes double as tags for keys without them.
2972
- const zoneTags = apiKey.zoneTags ?? Scope.zoneTags(apiKey.scopes)
2973
2967
  return {
2974
2968
  apiKey,
2975
2969
  environment: apiKey.environment,
@@ -2977,7 +2971,7 @@ function principalFromApiKey(apiKey: ApiKey.ApiKey): Principal {
2977
2971
  orgId: apiKey.orgId,
2978
2972
  ...(apiKey.projectId === undefined ? {} : { projectId: apiKey.projectId }),
2979
2973
  type: 'api_key',
2980
- ...(zoneTags === undefined ? {} : { zoneTags }),
2974
+ ...(apiKey.zoneTags === undefined ? {} : { zoneTags: apiKey.zoneTags }),
2981
2975
  }
2982
2976
  }
2983
2977
 
@@ -71,12 +71,10 @@ export namespace schema {
71
71
  /** Annualized share-price growth over one measurement window. */
72
72
  export const Apy = z
73
73
  .strictObject({
74
- asOf: z.iso
75
- .datetime()
76
- .check(
77
- z.describe('UTC instant the rate was measured to, rounded to a 15-minute bucket.'),
78
- z.meta({ examples: ['2026-07-21T09:00:00.000Z'] }),
79
- ),
74
+ asOf: Schema.dateTime().check(
75
+ z.describe('UTC instant the rate was measured to, rounded to a 15-minute bucket.'),
76
+ z.meta({ examples: ['2026-07-21T09:00:00.000Z'] }),
77
+ ),
80
78
  methodology: z
81
79
  .literal(methodology)
82
80
  .check(