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
@@ -804,7 +804,9 @@ describe('digest', () => {
804
804
  evidence: {
805
805
  appliedTargetRateBps: 400,
806
806
  targetFundingAssets: ['3000000'],
807
+ // A run delivered before `deliveredAt` was recorded keeps its closing-boundary window.
807
808
  treasuryPaidAssets: '250000',
809
+ treasuryPayoutTransactionHash: `0x${'ab'.repeat(32)}`,
808
810
  treasuryPendingAssets: '1000000',
809
811
  },
810
812
  startsAfter: 2_000_000_000,
@@ -831,6 +833,9 @@ describe('digest', () => {
831
833
  "targetFundedAssets": 3000000n,
832
834
  "targetRateBps": 400,
833
835
  "treasuryPaidAssets": 250000n,
836
+ "treasuryPayoutTransactionHashes": [
837
+ "0xabababababababababababababababababababababababababababababababab",
838
+ ],
834
839
  "vaultAddress": "0x1000000000000000000000000000000000000001",
835
840
  "vaultLabel": "Monitor test vault",
836
841
  },
@@ -839,6 +844,65 @@ describe('digest', () => {
839
844
  })
840
845
  })
841
846
 
847
+ describe('digest: late treasury payout', () => {
848
+ test('reports a payout in the window it was delivered, not the one its run closed in', async () => {
849
+ const db = TestApp.database()
850
+ await seedCampaign(db, { chainId: 4217 })
851
+ // The run closed inside the first window and was delivered 200 seconds before its boundary, inside the settling margin.
852
+ await deliver(db, {
853
+ chainId: 4217,
854
+ endsAt: 2_000_000_300,
855
+ evidence: {
856
+ deliveredAt: 2_000_000_500,
857
+ treasuryPaidAssets: '250000',
858
+ treasuryPayoutTransactionHash: `0x${'ab'.repeat(32)}`,
859
+ },
860
+ startsAfter: 2_000_000_000,
861
+ })
862
+ const treasury = (campaigns: Monitor.digest.Campaign[]) =>
863
+ campaigns.map(({ treasuryPaidAssets, treasuryPayoutTransactionHashes }) => ({
864
+ treasuryPaidAssets,
865
+ treasuryPayoutTransactionHashes,
866
+ }))
867
+
868
+ const [closed, delivered] = await Promise.all([
869
+ Monitor.digest(db, { chainId: 4217, now: 2_000_000_700, since: 1_999_986_000 }),
870
+ Monitor.digest(db, { chainId: 4217, now: 2_000_086_400, since: 2_000_000_700 }),
871
+ ])
872
+ expect([treasury(closed), treasury(delivered)]).toStrictEqual([
873
+ [{ treasuryPaidAssets: 0n, treasuryPayoutTransactionHashes: [] }],
874
+ [
875
+ {
876
+ treasuryPaidAssets: 250_000n,
877
+ treasuryPayoutTransactionHashes: [`0x${'ab'.repeat(32)}`],
878
+ },
879
+ ],
880
+ ])
881
+ })
882
+ })
883
+
884
+ describe('digest: paused late treasury payout', () => {
885
+ test('reports a paused campaign payout delivered in the window after its run closed', async () => {
886
+ const db = TestApp.database()
887
+ await seedCampaign(db, { chainId: 4217 })
888
+ await deliver(db, {
889
+ chainId: 4217,
890
+ endsAt: 2_000_000_300,
891
+ evidence: {
892
+ deliveredAt: 2_000_000_500,
893
+ treasuryPaidAssets: '250000',
894
+ treasuryPayoutTransactionHash: `0x${'ab'.repeat(32)}`,
895
+ },
896
+ startsAfter: 2_000_000_000,
897
+ })
898
+ await RewardCampaigns.setPaused(db, { chainId: 4217, paused: true, vaultAddress })
899
+
900
+ await expect(
901
+ Monitor.digest(db, { chainId: 4217, now: 2_000_086_400, since: 2_000_000_400 }),
902
+ ).resolves.toMatchObject([{ runs: 0, treasuryPaidAssets: 250_000n }])
903
+ })
904
+ })
905
+
842
906
  describe('digest: paused', () => {
843
907
  test('keeps runs a paused campaign delivered in the window, then drops it', async () => {
844
908
  const db = TestApp.database()
@@ -1,3 +1,4 @@
1
+ import type { Hex } from 'ox'
1
2
  import { erc20Abi, getAddress, type Address } from 'viem'
2
3
 
3
4
  import * as ApiKey from '../../ApiKey.js'
@@ -12,6 +13,9 @@ import * as Campaigns from './Campaigns.js'
12
13
  const day = 86_400
13
14
  const reminderSeconds = 3_600
14
15
  const lagWarningSeconds = 1_800
16
+ // A delivery transaction cannot outlive its 15-minute queue invocation, so one stamped before a
17
+ // boundary has committed or rolled back by the time a digest reads past this margin.
18
+ const deliverySettlingSeconds = 900
15
19
  const recoveryLeaseSeconds = 300
16
20
  // Cron invocations stop within 15 minutes, so a 30-minute lease never lapses while its holder runs.
17
21
  const digestLeaseSeconds = 1_800
@@ -741,7 +745,7 @@ export function digestBoundary(now: number): number {
741
745
  /** Summarizes each active campaign's runs between two digest boundaries; a paused campaign appears only for runs it delivered. */
742
746
  export async function digest(db: Db.Db, options: digest.Options): Promise<digest.Campaign[]> {
743
747
  const { since } = options
744
- const [campaigns, activity, recent, before] = await Promise.all([
748
+ const [campaigns, activity, recent, before, treasuryPayouts] = await Promise.all([
745
749
  RewardCampaigns.listForChain(db, options),
746
750
  RewardRuns.listDeliveredSince(db, { chainId: options.chainId, since }),
747
751
  // Catch-up runs with old accounting boundaries still show a campaign was active in the window.
@@ -751,13 +755,22 @@ export async function digest(db: Db.Db, options: digest.Options): Promise<digest
751
755
  chainId: options.chainId,
752
756
  deliveredBy: options.now,
753
757
  }),
758
+ // A payout run delivered after its accounting window's digest still reports once, in the window it was delivered.
759
+ RewardRuns.listTreasuryPayoutsDelivered(db, {
760
+ chainId: options.chainId,
761
+ settlingSeconds: deliverySettlingSeconds,
762
+ since,
763
+ until: options.now,
764
+ }),
754
765
  ])
755
766
  // A campaign belongs to the digest when it delivered by the boundary, or was running then (created, started, incomplete).
756
767
  // A paused campaign stays in only for runs it delivered in the window, so pausing never hides them.
757
768
  const active = campaigns.filter((campaign) => {
758
- const ran = (run: (typeof activity)[number]) =>
769
+ const ran = (run: { vaultAddress: string }) =>
759
770
  sameAddress(run.vaultAddress, campaign.vaultAddress)
760
771
  if (activity.some((run) => ran(run) && Number(run.endsAt) < options.now)) return true
772
+ // A payout delivered in the window reports even when its run closed earlier and the campaign is now paused.
773
+ if (treasuryPayouts.some(ran)) return true
761
774
  if (campaign.paused) return false
762
775
  // A replacement promoted after the boundary must not hide the configuration that was running at it.
763
776
  const prior = before.find((run) => sameAddress(run.vaultAddress, campaign.vaultAddress))
@@ -780,6 +793,9 @@ export async function digest(db: Db.Db, options: digest.Options): Promise<digest
780
793
  (run) =>
781
794
  sameAddress(run.vaultAddress, campaign.vaultAddress) && Number(run.endsAt) < options.now,
782
795
  )
796
+ const payouts = treasuryPayouts.filter((run) =>
797
+ sameAddress(run.vaultAddress, campaign.vaultAddress),
798
+ )
783
799
  const [vault, failing] = await Promise.all([
784
800
  EarnVaultRecords.get(db, campaign),
785
801
  RewardMonitorStates.get<failure.State>(db, failureKey(campaign)),
@@ -825,7 +841,12 @@ export async function digest(db: Db.Db, options: digest.Options): Promise<digest
825
841
  staleRates: [...new Set(runs.flatMap((run) => run.evidence?.staleRates ?? []))].sort(),
826
842
  targetFundedAssets: sum(runs.flatMap((run) => run.evidence?.targetFundingAssets ?? [])),
827
843
  ...(targetRate !== undefined ? { targetRateBps: targetRate } : {}),
828
- treasuryPaidAssets: sum(runs.map((run) => run.evidence?.treasuryPaidAssets)),
844
+ treasuryPaidAssets: sum(payouts.map((run) => run.evidence?.treasuryPaidAssets)),
845
+ treasuryPayoutTransactionHashes: payouts.flatMap((run) =>
846
+ run.evidence?.treasuryPayoutTransactionHash
847
+ ? [run.evidence.treasuryPayoutTransactionHash]
848
+ : [],
849
+ ),
829
850
  vaultAddress: getAddress(campaign.vaultAddress),
830
851
  vaultLabel: vault?.label ?? campaign.vaultAddress,
831
852
  }
@@ -866,8 +887,10 @@ export declare namespace digest {
866
887
  targetFundedAssets: bigint
867
888
  /** Latest applied target rate. */
868
889
  targetRateBps?: number | undefined
869
- /** Treasury shares transferred. */
890
+ /** Treasury assets paid by runs delivered in the window. */
870
891
  treasuryPaidAssets: bigint
892
+ /** Treasury payout transactions delivered in the window, oldest first. */
893
+ treasuryPayoutTransactionHashes: readonly Hex.Hex[]
871
894
  /** EarnVault identifying the campaign. */
872
895
  vaultAddress: Address
873
896
  /** Curated vault label. */
@@ -2478,7 +2478,15 @@ async function commit(
2478
2478
  id: runRecord.id,
2479
2479
  patch: {
2480
2480
  error: null,
2481
- ...(current?.evidence ? { evidence: Campaigns.compactEvidence(current.evidence) } : {}),
2481
+ // Lease renewals rewrite `updatedAt` after delivery, so reporting windows read this fixed time.
2482
+ ...(current?.evidence
2483
+ ? {
2484
+ evidence: {
2485
+ ...Campaigns.compactEvidence(current.evidence),
2486
+ deliveredAt: Math.floor(Date.now() / 1_000),
2487
+ },
2488
+ }
2489
+ : {}),
2482
2490
  },
2483
2491
  phase: 'delivered',
2484
2492
  })
@@ -1,6 +1,7 @@
1
1
  import { AbiFunction, Address, type Hex, Solidity } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Schema from '../Schema.js'
4
5
  import * as OpenApi from '../OpenApi.js'
5
6
  import * as Tron from '../Tron.js'
6
7
 
@@ -111,12 +112,10 @@ export namespace schema {
111
112
  z
112
113
  .object({
113
114
  action: EvmCalls,
114
- availableAt: z.iso
115
- .datetime()
116
- .check(
117
- z.describe('Earliest timestamp for fixed-beneficiary recovery.'),
118
- z.meta({ examples: ['2026-10-11T00:00:00.000Z'] }),
119
- ),
115
+ availableAt: Schema.dateTime().check(
116
+ z.describe('Earliest timestamp for fixed-beneficiary recovery.'),
117
+ z.meta({ examples: ['2026-10-11T00:00:00.000Z'] }),
118
+ ),
120
119
  chainId: z
121
120
  .literal('eip155:4217')
122
121
  .check(
@@ -204,12 +204,10 @@ export namespace schema {
204
204
  export const RoutesDeposit = OpenApi.component(
205
205
  z
206
206
  .object({
207
- createdAt: z.iso
208
- .datetime()
209
- .check(
210
- z.describe('When the deposit was first detected (ISO 8601).'),
211
- z.meta({ examples: ['2026-08-04T00:01:00.000Z'] }),
212
- ),
207
+ createdAt: Schema.dateTime().check(
208
+ z.describe('When the deposit was first detected (ISO 8601).'),
209
+ z.meta({ examples: ['2026-08-04T00:01:00.000Z'] }),
210
+ ),
213
211
  depositAddressId: Snapshot.shape.depositAddressId,
214
212
  detectionTrigger: z.optional(DetectionTrigger),
215
213
  destinationAmount: Snapshot.shape.destinationAmount,
@@ -241,12 +239,10 @@ export namespace schema {
241
239
  ),
242
240
  status: Status,
243
241
  statusReason: z.optional(StatusReason),
244
- updatedAt: z.iso
245
- .datetime()
246
- .check(
247
- z.describe('When the deposit last materially changed (ISO 8601).'),
248
- z.meta({ examples: ['2026-08-04T00:02:00.000Z'] }),
249
- ),
242
+ updatedAt: Schema.dateTime().check(
243
+ z.describe('When the deposit last materially changed (ISO 8601).'),
244
+ z.meta({ examples: ['2026-08-04T00:02:00.000Z'] }),
245
+ ),
250
246
  })
251
247
  .check(z.describe('One detected deposit and its delivery status.')),
252
248
  'RoutesDeposit',
@@ -108,12 +108,10 @@ export namespace schema {
108
108
  z
109
109
  .object({
110
110
  address: Snapshot.shape.address,
111
- createdAt: z.iso
112
- .datetime()
113
- .check(
114
- z.describe('When the deposit address was created (ISO 8601).'),
115
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
116
- ),
111
+ createdAt: Schema.dateTime().check(
112
+ z.describe('When the deposit address was created (ISO 8601).'),
113
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
114
+ ),
117
115
  destinationChain: Snapshot.shape.destinationChain,
118
116
  destinationToken: Snapshot.shape.destinationToken,
119
117
  id: z
@@ -129,12 +127,10 @@ export namespace schema {
129
127
  sourceToken: Snapshot.shape.sourceToken,
130
128
  status: PublicStatus,
131
129
  subsidize: Snapshot.shape.subsidize,
132
- updatedAt: z.iso
133
- .datetime()
134
- .check(
135
- z.describe('When the deposit address last materially changed (ISO 8601).'),
136
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
137
- ),
130
+ updatedAt: Schema.dateTime().check(
131
+ z.describe('When the deposit address last materially changed (ISO 8601).'),
132
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
133
+ ),
138
134
  })
139
135
  .check(z.describe('One reusable address for routes a Tempo account.')),
140
136
  'RoutesDepositAddress',
@@ -145,17 +141,15 @@ export namespace schema {
145
141
  z
146
142
  .object({
147
143
  expiresAt: z
148
- .optional(z.iso.datetime())
144
+ .optional(Schema.dateTime())
149
145
  .check(
150
146
  z.describe('Timestamp after which the quoted terms are no longer valid.'),
151
147
  z.meta({ examples: ['2026-01-01T00:01:00Z'] }),
152
148
  ),
153
- sampledAt: z.iso
154
- .datetime()
155
- .check(
156
- z.describe('Timestamp for the live quote request.'),
157
- z.meta({ examples: ['2026-01-01T00:00:00Z'] }),
158
- ),
149
+ sampledAt: Schema.dateTime().check(
150
+ z.describe('Timestamp for the live quote request.'),
151
+ z.meta({ examples: ['2026-01-01T00:00:00Z'] }),
152
+ ),
159
153
  })
160
154
  .check(z.describe('Freshness data for quoted deposit terms.')),
161
155
  'RoutesQuoteDetails',
@@ -1,6 +1,7 @@
1
1
  import { Value } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Schema from '../Schema.js'
4
5
  import type * as Catalog from './Catalog.js'
5
6
 
6
7
  export type Payer = 'tempo' | 'enterprise'
@@ -205,7 +206,7 @@ export namespace schema {
205
206
  z.meta({ examples: ['enterprise'] }),
206
207
  ),
207
208
  subsidyEndsAt: z
208
- .optional(z.iso.datetime({ offset: true }))
209
+ .optional(Schema.dateTime({ offset: true }))
209
210
  .check(
210
211
  z.describe('When Tempo-paid subsidy ends; later subsidies bill the organization.'),
211
212
  z.meta({ examples: ['2027-04-01T00:00:00.000Z'] }),
@@ -183,7 +183,7 @@ export namespace schema {
183
183
  ),
184
184
  destinationAmount: PositiveInteger,
185
185
  destinationAmountMin: PositiveInteger,
186
- expiresAt: z.optional(z.iso.datetime()),
186
+ expiresAt: z.optional(Schema.dateTime()),
187
187
  fees: z.array(
188
188
  z.object({
189
189
  amount: Schema.DecimalString,
@@ -192,7 +192,7 @@ export namespace schema {
192
192
  }),
193
193
  ),
194
194
  providerState: z.optional(z.record(z.string(), z.unknown())),
195
- sampledAt: z.iso.datetime(),
195
+ sampledAt: Schema.dateTime(),
196
196
  })
197
197
 
198
198
  /** Indicative transfer pricing that may omit an executable source action. */
@@ -222,9 +222,9 @@ export namespace schema {
222
222
  .check(z.describe('Private provider correlation retained for reconciliation.')),
223
223
  destinationAmount: PositiveInteger,
224
224
  destinationAmountMin: z.nullable(PositiveInteger),
225
- expiresAt: z.optional(z.iso.datetime()),
225
+ expiresAt: z.optional(Schema.dateTime()),
226
226
  fees: PrepareResult.shape.fees,
227
- sampledAt: z.iso.datetime(),
227
+ sampledAt: Schema.dateTime(),
228
228
  })
229
229
  .check(z.describe('Reusable deposit address and quoted delivery terms returned by a provider.'))
230
230
 
@@ -232,14 +232,14 @@ export namespace schema {
232
232
  export const DepositAddressQuoteResult = z.object({
233
233
  destinationAmount: PositiveInteger,
234
234
  destinationAmountMin: z.nullable(PositiveInteger),
235
- expiresAt: z.optional(z.iso.datetime()),
235
+ expiresAt: z.optional(Schema.dateTime()),
236
236
  fees: PrepareResult.shape.fees,
237
- sampledAt: z.iso.datetime(),
237
+ sampledAt: Schema.dateTime(),
238
238
  })
239
239
 
240
240
  /** One provider request discovered for a reusable deposit address. */
241
241
  export const DepositAddressRequest = z.object({
242
- createdAt: z.iso.datetime(),
242
+ createdAt: Schema.dateTime(),
243
243
  destinationTransactionHashes: z.array(z.string()),
244
244
  id: z.string().check(z.minLength(1)),
245
245
  providerState: z.optional(z.record(z.string(), z.unknown())),
@@ -259,7 +259,7 @@ export namespace schema {
259
259
  sourceUnknown: z.optional(z.literal(true)),
260
260
  // Set when the provider reports a source chain or token the address does not accept; reconciliation records nothing for it.
261
261
  unexpectedSource: z.optional(z.literal(true)),
262
- updatedAt: z.iso.datetime(),
262
+ updatedAt: Schema.dateTime(),
263
263
  })
264
264
 
265
265
  /** One page of provider requests discovered for a reusable address. */
@@ -1,6 +1,7 @@
1
1
  import { Hex, Value as core_Value } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Schema from '../Schema.js'
4
5
  import * as Db from '../../db/Db.js'
5
6
  import * as ApiKeyOwnerTombstones from '../../db/tables/apiKeyOwnerTombstones.js'
6
7
  import * as RoutesDepositAddresses from '../../db/tables/routesDepositAddresses.js'
@@ -825,8 +826,8 @@ async function observeProviderDelivery(options: ReconcileDeliveryOptions) {
825
826
  async function checkpointUnattributed(db: Db.Db, options: checkpointUnattributed.Options) {
826
827
  const parsed = z.safeParse(
827
828
  z.object({
828
- before: z.iso.datetime(),
829
- cursor: z.object({ createdAt: z.iso.datetime(), id: z.string() }),
829
+ before: Schema.dateTime(),
830
+ cursor: z.object({ createdAt: Schema.dateTime(), id: z.string() }),
830
831
  }),
831
832
  options.address.providerState?.['unattributed'],
832
833
  )
@@ -165,18 +165,14 @@ export namespace schema {
165
165
  export const Quote = OpenApi.component(
166
166
  z
167
167
  .object({
168
- expiresAt: z.iso
169
- .datetime()
170
- .check(
171
- z.describe('When the quoted terms stop being executable (ISO 8601).'),
172
- z.meta({ examples: ['2026-07-30T04:01:00.000Z'] }),
173
- ),
174
- sampledAt: z.iso
175
- .datetime()
176
- .check(
177
- z.describe('When the quote was produced (ISO 8601).'),
178
- z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
179
- ),
168
+ expiresAt: Schema.dateTime().check(
169
+ z.describe('When the quoted terms stop being executable (ISO 8601).'),
170
+ z.meta({ examples: ['2026-07-30T04:01:00.000Z'] }),
171
+ ),
172
+ sampledAt: Schema.dateTime().check(
173
+ z.describe('When the quote was produced (ISO 8601).'),
174
+ z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
175
+ ),
180
176
  })
181
177
  .check(z.describe('Freshness and validity window of the selected quote.')),
182
178
  'RoutesTransferQuoteDetails',
@@ -264,12 +260,10 @@ export namespace schema {
264
260
  .check(z.describe('Quote terms and reconciled public fields of a route transfer.'))
265
261
 
266
262
  const routesTransferFields = {
267
- createdAt: z.iso
268
- .datetime()
269
- .check(
270
- z.describe('When the transfer was created (ISO 8601).'),
271
- z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
272
- ),
263
+ createdAt: Schema.dateTime().check(
264
+ z.describe('When the transfer was created (ISO 8601).'),
265
+ z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
266
+ ),
273
267
  destinationAmount: snapshotFields.destinationAmount,
274
268
  destinationAmountMin: snapshotFields.destinationAmountMin,
275
269
  destinationAmountRequired: snapshotFields.destinationAmountRequired,
@@ -299,12 +293,10 @@ export namespace schema {
299
293
  subsidize: snapshotFields.subsidize,
300
294
  status: Status,
301
295
  statusReason: z.optional(StatusReason),
302
- updatedAt: z.iso
303
- .datetime()
304
- .check(
305
- z.describe('When the transfer last materially changed (ISO 8601).'),
306
- z.meta({ examples: ['2026-07-30T04:00:20.000Z'] }),
307
- ),
296
+ updatedAt: Schema.dateTime().check(
297
+ z.describe('When the transfer last materially changed (ISO 8601).'),
298
+ z.meta({ examples: ['2026-07-30T04:00:20.000Z'] }),
299
+ ),
308
300
  version: z
309
301
  .number()
310
302
  .check(
@@ -1,6 +1,7 @@
1
1
  import { Address } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Schema from '../Schema.js'
4
5
  import type * as RoutesDepositAddresses from '../../db/tables/routesDepositAddresses.js'
5
6
  import type * as RoutesUniversalDepositAddresses from '../../db/tables/routesUniversalDepositAddresses.js'
6
7
  import * as Id from '../Id.js'
@@ -156,12 +157,10 @@ export namespace schema {
156
157
  ),
157
158
  z.meta({ examples: [[familyAddressExample]] }),
158
159
  ),
159
- createdAt: z.iso
160
- .datetime()
161
- .check(
162
- z.describe('When the universal deposit address was created (ISO 8601).'),
163
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
164
- ),
160
+ createdAt: Schema.dateTime().check(
161
+ z.describe('When the universal deposit address was created (ISO 8601).'),
162
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
163
+ ),
165
164
  destinationChain: Snapshot.shape.destinationChain,
166
165
  destinationToken: Snapshot.shape.destinationToken,
167
166
  id: z
@@ -174,12 +173,10 @@ export namespace schema {
174
173
  recipient: Snapshot.shape.recipient,
175
174
  status: DepositAddress.schema.PublicStatus,
176
175
  subsidize: Snapshot.shape.subsidize,
177
- updatedAt: z.iso
178
- .datetime()
179
- .check(
180
- z.describe('When the universal deposit address last materially changed (ISO 8601).'),
181
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
182
- ),
176
+ updatedAt: Schema.dateTime().check(
177
+ z.describe('When the universal deposit address last materially changed (ISO 8601).'),
178
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
179
+ ),
183
180
  })
184
181
  .check(
185
182
  z.describe('Reusable deposit addresses accepting every supported source per chain family.'),
@@ -1,6 +1,7 @@
1
1
  import { Address, Hex } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Schema from '../../Schema.js'
4
5
  import * as Provider from '../Provider.js'
5
6
  import * as Stellar from '../Stellar.js'
6
7
  import { ousd, usdce } from 'viem/tokens'
@@ -32,7 +33,7 @@ export namespace schema {
32
33
  export const HorizonRoot = z
33
34
  .object({
34
35
  history_elder_ledger: z.number().check(z.int(), z.gte(1)),
35
- history_latest_ledger_closed_at: z.iso.datetime(),
36
+ history_latest_ledger_closed_at: Schema.dateTime(),
36
37
  network_passphrase: z.literal(Stellar.networkPassphrase),
37
38
  })
38
39
  .check(
@@ -243,7 +244,7 @@ export function sourceAbsence(options: sourceAbsence.Options) {
243
244
  const root = schema.HorizonRoot.safeParse(options.root)
244
245
  const oldest = z
245
246
  .object({
246
- closed_at: z.iso.datetime(),
247
+ closed_at: Schema.dateTime(),
247
248
  sequence: z.number().check(z.int(), z.gte(1)),
248
249
  })
249
250
  .safeParse(options.oldestLedger)
@@ -2,6 +2,7 @@ import { AbiEvent, AbiFunction, Address, Base58, Bytes, Hash, Hex, Value as core
2
2
  import { getBlockNumber, getLogs, getTransaction, getTransactionReceipt } from 'viem/actions'
3
3
  import * as z from 'zod/mini'
4
4
 
5
+ import * as Schema from '../../Schema.js'
5
6
  import * as Db from '../../../db/Db.js'
6
7
  import * as RoutesDepositAddresses from '../../../db/tables/routesDepositAddresses.js'
7
8
  import * as RoutesDepositRequestObservations from '../../../db/tables/routesDepositRequestObservations.js'
@@ -206,7 +207,7 @@ namespace schema {
206
207
  relay: z.object({
207
208
  orderId: z.string().check(z.regex(/^0x[0-9a-fA-F]{64}$/)),
208
209
  sourceDepository: z.string().check(z.regex(/^0x[0-9a-fA-F]{40}$/)),
209
- sourceObservedAt: z.iso.datetime(),
210
+ sourceObservedAt: Schema.dateTime(),
210
211
  sourceSweepTransactionHash: z.string().check(z.regex(/^0x[0-9a-fA-F]{64}$/)),
211
212
  }),
212
213
  })
@@ -233,7 +234,7 @@ namespace schema {
233
234
  continuation: z.optional(z.string().check(z.minLength(1))),
234
235
  requests: z.array(
235
236
  z.object({
236
- createdAt: z.iso.datetime(),
237
+ createdAt: Schema.dateTime(),
237
238
  data: z.optional(
238
239
  z.object({
239
240
  feeSponsorship: z.nullish(
@@ -295,7 +296,7 @@ namespace schema {
295
296
  ),
296
297
  ),
297
298
  status: z.string().check(z.minLength(1)),
298
- updatedAt: z.iso.datetime(),
299
+ updatedAt: Schema.dateTime(),
299
300
  }),
300
301
  ),
301
302
  })