tapimo 0.14.0 → 0.15.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 (1141) hide show
  1. package/README.md +7 -4
  2. package/dist/ApiKey.js +1 -1
  3. package/dist/ApiKey.js.map +1 -1
  4. package/dist/ApiKeys.d.ts +95 -14
  5. package/dist/ApiKeys.d.ts.map +1 -1
  6. package/dist/ApiKeys.js +360 -49
  7. package/dist/ApiKeys.js.map +1 -1
  8. package/dist/App.d.ts +12457 -10365
  9. package/dist/App.d.ts.map +1 -1
  10. package/dist/App.js +300 -22
  11. package/dist/App.js.map +1 -1
  12. package/dist/Assets.d.ts.map +1 -1
  13. package/dist/Assets.js +2 -1
  14. package/dist/Assets.js.map +1 -1
  15. package/dist/Handler.d.ts +0 -1
  16. package/dist/Handler.d.ts.map +1 -1
  17. package/dist/Handler.js +0 -1
  18. package/dist/Handler.js.map +1 -1
  19. package/dist/Scope.d.ts +13 -5
  20. package/dist/Scope.d.ts.map +1 -1
  21. package/dist/Scope.js +16 -5
  22. package/dist/Scope.js.map +1 -1
  23. package/dist/Webhooks.js +1 -1
  24. package/dist/Webhooks.js.map +1 -1
  25. package/dist/admin/App.d.ts +3057 -549
  26. package/dist/admin/App.d.ts.map +1 -1
  27. package/dist/admin/App.js +26 -5
  28. package/dist/admin/App.js.map +1 -1
  29. package/dist/admin/apps/api-keys.d.ts +159 -7
  30. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  31. package/dist/admin/apps/api-keys.js +95 -43
  32. package/dist/admin/apps/api-keys.js.map +1 -1
  33. package/dist/admin/apps/earn-vaults.d.ts +1398 -0
  34. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  35. package/dist/admin/apps/earn-vaults.js +463 -7
  36. package/dist/admin/apps/earn-vaults.js.map +1 -1
  37. package/dist/admin/apps/organizations.d.ts +267 -15
  38. package/dist/admin/apps/organizations.d.ts.map +1 -1
  39. package/dist/admin/apps/organizations.js +241 -25
  40. package/dist/admin/apps/organizations.js.map +1 -1
  41. package/dist/admin/apps/routes-support.d.ts +95 -0
  42. package/dist/admin/apps/routes-support.d.ts.map +1 -0
  43. package/dist/admin/apps/routes-support.js +151 -0
  44. package/dist/admin/apps/routes-support.js.map +1 -0
  45. package/dist/admin/apps/routes.d.ts +2764 -0
  46. package/dist/admin/apps/routes.d.ts.map +1 -0
  47. package/dist/admin/apps/routes.js +728 -0
  48. package/dist/admin/apps/routes.js.map +1 -0
  49. package/dist/admin/apps/subsidies.d.ts +501 -0
  50. package/dist/admin/apps/subsidies.d.ts.map +1 -0
  51. package/dist/admin/apps/subsidies.js +384 -0
  52. package/dist/admin/apps/subsidies.js.map +1 -0
  53. package/dist/admin/apps/verified-tokens.d.ts +88 -88
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +3 -3
  56. package/dist/admin/apps/verified-tokens.js.map +1 -1
  57. package/dist/admin/ui.generated.d.ts +1 -1
  58. package/dist/admin/ui.generated.d.ts.map +1 -1
  59. package/dist/admin/ui.generated.js +129 -69
  60. package/dist/admin/ui.generated.js.map +1 -1
  61. package/dist/analytics/Analytics.d.ts +5 -2
  62. package/dist/analytics/Analytics.d.ts.map +1 -1
  63. package/dist/analytics/Analytics.js +31 -1
  64. package/dist/analytics/Analytics.js.map +1 -1
  65. package/dist/analytics/tables/requestEvents.d.ts +2 -1
  66. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  67. package/dist/analytics/tables/requestEvents.js +10 -1
  68. package/dist/analytics/tables/requestEvents.js.map +1 -1
  69. package/dist/analytics/tables/routesLifecycleIntervals.d.ts +72 -0
  70. package/dist/analytics/tables/routesLifecycleIntervals.d.ts.map +1 -0
  71. package/dist/analytics/tables/routesLifecycleIntervals.js +56 -0
  72. package/dist/analytics/tables/routesLifecycleIntervals.js.map +1 -0
  73. package/dist/apps/Zones.d.ts +21 -12526
  74. package/dist/apps/Zones.d.ts.map +1 -1
  75. package/dist/apps/Zones.js +37 -5
  76. package/dist/apps/Zones.js.map +1 -1
  77. package/dist/apps/data/App.d.ts +3971 -2595
  78. package/dist/apps/data/App.d.ts.map +1 -1
  79. package/dist/apps/data/App.js +76 -21
  80. package/dist/apps/data/App.js.map +1 -1
  81. package/dist/apps/data/routes/activities.d.ts +364 -34
  82. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  83. package/dist/apps/data/routes/activities.js +495 -190
  84. package/dist/apps/data/routes/activities.js.map +1 -1
  85. package/dist/apps/data/routes/addresses.d.ts +72 -0
  86. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  87. package/dist/apps/data/routes/blocks.d.ts +37 -37
  88. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  89. package/dist/apps/data/routes/coingecko.js +47 -21
  90. package/dist/apps/data/routes/coingecko.js.map +1 -1
  91. package/dist/apps/data/routes/earn.d.ts +1450 -337
  92. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  93. package/dist/apps/data/routes/earn.js +1226 -144
  94. package/dist/apps/data/routes/earn.js.map +1 -1
  95. package/dist/apps/data/routes/fee-amm.d.ts +5 -0
  96. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  97. package/dist/apps/data/routes/fee-amm.js +31 -19
  98. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  99. package/dist/apps/data/routes/indexer.d.ts +125 -0
  100. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  101. package/dist/apps/data/routes/indexer.js +83 -27
  102. package/dist/apps/data/routes/indexer.js.map +1 -1
  103. package/dist/apps/data/routes/rpc.d.ts +507 -33
  104. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  105. package/dist/apps/data/routes/rpc.js +266 -156
  106. package/dist/apps/data/routes/rpc.js.map +1 -1
  107. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  108. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  109. package/dist/apps/data/routes/tokenlist.js +68 -11
  110. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  111. package/dist/apps/data/routes/tokens.d.ts +2 -0
  112. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  113. package/dist/apps/data/routes/tokens.js +26 -14
  114. package/dist/apps/data/routes/tokens.js.map +1 -1
  115. package/dist/apps/data/routes/transfers.d.ts +28 -12
  116. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  117. package/dist/apps/data/routes/transfers.js +9 -7
  118. package/dist/apps/data/routes/transfers.js.map +1 -1
  119. package/dist/apps/data/routes/valuation.d.ts +30 -30
  120. package/dist/apps/data/routes/verified-tokens.d.ts +9 -9
  121. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  122. package/dist/apps/data/routes/verified-tokens.js +64 -20
  123. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  124. package/dist/apps/data/routes/webhooks.d.ts +613 -176
  125. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  126. package/dist/apps/data/routes/webhooks.js +291 -195
  127. package/dist/apps/data/routes/webhooks.js.map +1 -1
  128. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  129. package/dist/apps/data/routes/zones.js +20 -12
  130. package/dist/apps/data/routes/zones.js.map +1 -1
  131. package/dist/apps/docs/reference.js +2 -2
  132. package/dist/apps/docs/reference.js.map +1 -1
  133. package/dist/apps/index.d.ts +1 -1
  134. package/dist/apps/index.d.ts.map +1 -1
  135. package/dist/apps/index.js +1 -1
  136. package/dist/apps/index.js.map +1 -1
  137. package/dist/apps/management/App.d.ts +3763 -3385
  138. package/dist/apps/management/App.d.ts.map +1 -1
  139. package/dist/apps/management/App.js +5 -14
  140. package/dist/apps/management/App.js.map +1 -1
  141. package/dist/apps/management/Billing.d.ts +48 -7
  142. package/dist/apps/management/Billing.d.ts.map +1 -1
  143. package/dist/apps/management/Billing.js +204 -25
  144. package/dist/apps/management/Billing.js.map +1 -1
  145. package/dist/apps/management/routes/api-keys.d.ts +106 -4
  146. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  147. package/dist/apps/management/routes/api-keys.js +43 -15
  148. package/dist/apps/management/routes/api-keys.js.map +1 -1
  149. package/dist/apps/management/routes/billing.d.ts +290 -4
  150. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  151. package/dist/apps/management/routes/billing.js +274 -49
  152. package/dist/apps/management/routes/billing.js.map +1 -1
  153. package/dist/apps/management/routes/faucet.d.ts +6 -6
  154. package/dist/apps/management/routes/faucet.js +1 -1
  155. package/dist/apps/management/routes/faucet.js.map +1 -1
  156. package/dist/apps/management/routes/invitations.d.ts +77 -2
  157. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  158. package/dist/apps/management/routes/invitations.js +117 -13
  159. package/dist/apps/management/routes/invitations.js.map +1 -1
  160. package/dist/apps/management/routes/invite-links.d.ts +4 -4
  161. package/dist/apps/management/routes/me.d.ts.map +1 -1
  162. package/dist/apps/management/routes/me.js +6 -2
  163. package/dist/apps/management/routes/me.js.map +1 -1
  164. package/dist/apps/management/routes/members.d.ts +30 -30
  165. package/dist/apps/management/routes/orgs.d.ts +18 -2
  166. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  167. package/dist/apps/management/routes/orgs.js +52 -12
  168. package/dist/apps/management/routes/orgs.js.map +1 -1
  169. package/dist/apps/management/routes/projects.d.ts +4 -4
  170. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  171. package/dist/apps/management/routes/projects.js +6 -1
  172. package/dist/apps/management/routes/projects.js.map +1 -1
  173. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  174. package/dist/apps/management/routes/scopes.js +4 -1
  175. package/dist/apps/management/routes/scopes.js.map +1 -1
  176. package/dist/apps/management/routes/usage.d.ts +24 -24
  177. package/dist/apps/management/routes/usage.js +21 -4
  178. package/dist/apps/management/routes/usage.js.map +1 -1
  179. package/dist/apps/management/routes/verified-token-requests.d.ts +2 -2
  180. package/dist/apps/management/routes/webhooks.d.ts +280 -214
  181. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  182. package/dist/apps/management/routes/webhooks.js +58 -12
  183. package/dist/apps/management/routes/webhooks.js.map +1 -1
  184. package/dist/apps/mcp.d.ts +1 -1
  185. package/dist/apps/mcp.js +7 -7
  186. package/dist/apps/mcp.js.map +1 -1
  187. package/dist/apps/mpp/App.d.ts.map +1 -1
  188. package/dist/apps/mpp/App.js +35 -7
  189. package/dist/apps/mpp/App.js.map +1 -1
  190. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  191. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  192. package/dist/apps/mpp/internal/Adapter.js +30 -1
  193. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  194. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  195. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  196. package/dist/apps/mpp/internal/Policy.js +24 -6
  197. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  198. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  199. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  200. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  201. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  202. package/dist/apps/relay/App.d.ts +2 -0
  203. package/dist/apps/relay/App.d.ts.map +1 -1
  204. package/dist/apps/relay/App.js +134 -75
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  208. package/dist/apps/relay/Sponsorships.js +209 -28
  209. package/dist/apps/relay/Sponsorships.js.map +1 -1
  210. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  211. package/dist/apps/routes/Access.d.ts.map +1 -0
  212. package/dist/apps/{funding → routes}/Access.js +4 -4
  213. package/dist/apps/routes/Access.js.map +1 -0
  214. package/dist/apps/{funding → routes}/App.d.ts +418 -124
  215. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  216. package/dist/apps/{funding → routes}/App.js +16 -16
  217. package/dist/apps/routes/App.js.map +1 -0
  218. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  219. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  220. package/dist/apps/routes/Inventory.js.map +1 -0
  221. package/dist/apps/routes/index.d.ts +2 -0
  222. package/dist/apps/routes/index.d.ts.map +1 -0
  223. package/dist/apps/routes/index.js +2 -0
  224. package/dist/apps/routes/index.js.map +1 -0
  225. package/dist/apps/{funding → routes}/routes/chains.d.ts +7 -7
  226. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  227. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  228. package/dist/apps/routes/routes/chains.js.map +1 -0
  229. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +107 -43
  230. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  231. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +497 -222
  232. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  233. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  234. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  235. package/dist/apps/routes/routes/providers.js +57 -0
  236. package/dist/apps/routes/routes/providers.js.map +1 -0
  237. package/dist/apps/{funding → routes}/routes/quotes.d.ts +19 -16
  238. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  239. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  240. package/dist/apps/routes/routes/quotes.js.map +1 -0
  241. package/dist/apps/{funding → routes}/routes/transfers.d.ts +379 -74
  242. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  243. package/dist/apps/routes/routes/transfers.js +1140 -0
  244. package/dist/apps/routes/routes/transfers.js.map +1 -0
  245. package/dist/cli/Cli.d.ts +30 -0
  246. package/dist/cli/Cli.d.ts.map +1 -1
  247. package/dist/cli/commands/admin.d.ts +36 -0
  248. package/dist/cli/commands/admin.d.ts.map +1 -1
  249. package/dist/cli/commands/admin.js +273 -0
  250. package/dist/cli/commands/admin.js.map +1 -1
  251. package/dist/cloudflare.d.ts +16 -14
  252. package/dist/cloudflare.d.ts.map +1 -1
  253. package/dist/cloudflare.js +26 -21
  254. package/dist/cloudflare.js.map +1 -1
  255. package/dist/db/Db.d.ts +63 -21
  256. package/dist/db/Db.d.ts.map +1 -1
  257. package/dist/db/Db.js +1030 -15
  258. package/dist/db/Db.js.map +1 -1
  259. package/dist/db/Schema.d.ts +780 -133
  260. package/dist/db/Schema.d.ts.map +1 -1
  261. package/dist/db/Schema.js +575 -162
  262. package/dist/db/Schema.js.map +1 -1
  263. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  264. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  265. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  266. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  267. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  268. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  269. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  270. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  271. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  272. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  273. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  274. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  275. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  276. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  277. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  278. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  279. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  280. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  281. package/dist/db/tables/apiKeyRevocations.js +98 -0
  282. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  283. package/dist/db/tables/authAccounts.d.ts +47 -0
  284. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  285. package/dist/db/tables/authAccounts.js +72 -0
  286. package/dist/db/tables/authAccounts.js.map +1 -0
  287. package/dist/db/tables/authSessions.d.ts +12 -0
  288. package/dist/db/tables/authSessions.d.ts.map +1 -0
  289. package/dist/db/tables/authSessions.js +2 -0
  290. package/dist/db/tables/authSessions.js.map +1 -0
  291. package/dist/db/tables/authVerifications.d.ts +12 -0
  292. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  293. package/dist/db/tables/authVerifications.js +2 -0
  294. package/dist/db/tables/authVerifications.js.map +1 -0
  295. package/dist/db/tables/invitations.d.ts +17 -1
  296. package/dist/db/tables/invitations.d.ts.map +1 -1
  297. package/dist/db/tables/invitations.js +123 -43
  298. package/dist/db/tables/invitations.js.map +1 -1
  299. package/dist/db/tables/memberships.d.ts +8 -0
  300. package/dist/db/tables/memberships.d.ts.map +1 -1
  301. package/dist/db/tables/memberships.js +51 -2
  302. package/dist/db/tables/memberships.js.map +1 -1
  303. package/dist/db/tables/organizations.d.ts +32 -10
  304. package/dist/db/tables/organizations.d.ts.map +1 -1
  305. package/dist/db/tables/organizations.js +110 -49
  306. package/dist/db/tables/organizations.js.map +1 -1
  307. package/dist/db/tables/projects.d.ts +2 -0
  308. package/dist/db/tables/projects.d.ts.map +1 -1
  309. package/dist/db/tables/projects.js +12 -3
  310. package/dist/db/tables/projects.js.map +1 -1
  311. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  312. package/dist/db/tables/requestUsage.js.map +1 -1
  313. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  314. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  315. package/dist/db/tables/rewardAccounts.js +88 -0
  316. package/dist/db/tables/rewardAccounts.js.map +1 -0
  317. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  318. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  319. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  320. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  321. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  322. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  323. package/dist/db/tables/rewardCampaigns.js +392 -0
  324. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  325. package/dist/db/tables/rewardCredits.d.ts +53 -0
  326. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  327. package/dist/db/tables/rewardCredits.js +63 -0
  328. package/dist/db/tables/rewardCredits.js.map +1 -0
  329. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  330. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  331. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  332. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  333. package/dist/db/tables/rewardRuns.d.ts +188 -0
  334. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  335. package/dist/db/tables/rewardRuns.js +278 -0
  336. package/dist/db/tables/rewardRuns.js.map +1 -0
  337. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  338. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  339. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  340. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  341. package/dist/db/tables/routesCatalog.d.ts +58 -0
  342. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  343. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  344. package/dist/db/tables/routesCatalog.js.map +1 -0
  345. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  346. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  347. package/dist/db/tables/routesDepositAddresses.js +587 -0
  348. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  349. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  350. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  351. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  352. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  353. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  354. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  355. package/dist/db/tables/routesDeposits.js +576 -0
  356. package/dist/db/tables/routesDeposits.js.map +1 -0
  357. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  358. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  359. package/dist/db/tables/routesIdempotency.js +330 -0
  360. package/dist/db/tables/routesIdempotency.js.map +1 -0
  361. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  362. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  363. package/dist/db/tables/routesSubsidies.js +45 -0
  364. package/dist/db/tables/routesSubsidies.js.map +1 -0
  365. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  366. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  367. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  368. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  369. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  370. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  371. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  372. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  373. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  374. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  375. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  376. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  377. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  378. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  379. package/dist/db/tables/{fundingTransferTransactions.js → routesTransferTransactions.js} +31 -13
  380. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  381. package/dist/db/tables/routesTransfers.d.ts +319 -0
  382. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  383. package/dist/db/tables/routesTransfers.js +372 -0
  384. package/dist/db/tables/routesTransfers.js.map +1 -0
  385. package/dist/db/tables/sponsoredTransactions.d.ts +75 -20
  386. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  387. package/dist/db/tables/sponsoredTransactions.js +124 -54
  388. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  389. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  390. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  391. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  392. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  393. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  394. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  395. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  396. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  397. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  398. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  399. package/dist/db/tables/stripeCustomers.js +13 -0
  400. package/dist/db/tables/stripeCustomers.js.map +1 -1
  401. package/dist/db/tables/users.d.ts +17 -1
  402. package/dist/db/tables/users.d.ts.map +1 -1
  403. package/dist/db/tables/users.js +47 -2
  404. package/dist/db/tables/users.js.map +1 -1
  405. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  406. package/dist/db/tables/webhookQueueEvents.js +5 -1
  407. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  408. package/dist/db/tables/webhookSubscriptions.d.ts +19 -11
  409. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  410. package/dist/db/tables/webhookSubscriptions.js +45 -13
  411. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  412. package/dist/handlers/internal/executionError.d.ts +2 -2
  413. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  414. package/dist/handlers/internal/executionError.js +1 -2
  415. package/dist/handlers/internal/executionError.js.map +1 -1
  416. package/dist/handlers/internal/multisig.d.ts +4 -232
  417. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  418. package/dist/handlers/internal/multisig.js +11 -537
  419. package/dist/handlers/internal/multisig.js.map +1 -1
  420. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  421. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  422. package/dist/handlers/internal/sponsorship.js +13 -9
  423. package/dist/handlers/internal/sponsorship.js.map +1 -1
  424. package/dist/handlers/relay.d.ts +9 -12
  425. package/dist/handlers/relay.d.ts.map +1 -1
  426. package/dist/handlers/relay.js +81 -85
  427. package/dist/handlers/relay.js.map +1 -1
  428. package/dist/index.d.ts +0 -17
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +0 -17
  431. package/dist/index.js.map +1 -1
  432. package/dist/internal/AssetResponse.d.ts +12 -0
  433. package/dist/internal/AssetResponse.d.ts.map +1 -0
  434. package/dist/internal/AssetResponse.js +21 -0
  435. package/dist/internal/AssetResponse.js.map +1 -0
  436. package/dist/internal/Auth.d.ts +48 -12
  437. package/dist/internal/Auth.d.ts.map +1 -1
  438. package/dist/internal/Auth.js +603 -175
  439. package/dist/internal/Auth.js.map +1 -1
  440. package/dist/internal/BetterAuth.d.ts +1488 -0
  441. package/dist/internal/BetterAuth.d.ts.map +1 -0
  442. package/dist/internal/BetterAuth.js +253 -0
  443. package/dist/internal/BetterAuth.js.map +1 -0
  444. package/dist/internal/Cache.d.ts +2 -0
  445. package/dist/internal/Cache.d.ts.map +1 -1
  446. package/dist/internal/Cache.js +2 -0
  447. package/dist/internal/Cache.js.map +1 -1
  448. package/dist/internal/EarnRates.d.ts +26 -3
  449. package/dist/internal/EarnRates.d.ts.map +1 -1
  450. package/dist/internal/EarnRates.js +84 -19
  451. package/dist/internal/EarnRates.js.map +1 -1
  452. package/dist/internal/EarnSharePrices.d.ts +120 -0
  453. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  454. package/dist/internal/EarnSharePrices.js +179 -0
  455. package/dist/internal/EarnSharePrices.js.map +1 -0
  456. package/dist/internal/EarnVaults.d.ts +4 -0
  457. package/dist/internal/EarnVaults.d.ts.map +1 -1
  458. package/dist/internal/EarnVaults.js +27 -10
  459. package/dist/internal/EarnVaults.js.map +1 -1
  460. package/dist/internal/Email.d.ts +37 -0
  461. package/dist/internal/Email.d.ts.map +1 -0
  462. package/dist/internal/Email.js +16 -0
  463. package/dist/internal/Email.js.map +1 -0
  464. package/dist/internal/Log.d.ts +32 -28
  465. package/dist/internal/Log.d.ts.map +1 -1
  466. package/dist/internal/Log.js +18 -11
  467. package/dist/internal/Log.js.map +1 -1
  468. package/dist/internal/MetricSink.d.ts +3 -0
  469. package/dist/internal/MetricSink.d.ts.map +1 -1
  470. package/dist/internal/MetricSink.js +67 -8
  471. package/dist/internal/MetricSink.js.map +1 -1
  472. package/dist/internal/Mpp.d.ts.map +1 -1
  473. package/dist/internal/Mpp.js +20 -25
  474. package/dist/internal/Mpp.js.map +1 -1
  475. package/dist/internal/OpenApi.d.ts +26 -3
  476. package/dist/internal/OpenApi.d.ts.map +1 -1
  477. package/dist/internal/OpenApi.js +25 -10
  478. package/dist/internal/OpenApi.js.map +1 -1
  479. package/dist/internal/Provider.d.ts +1 -1
  480. package/dist/internal/Provider.d.ts.map +1 -1
  481. package/dist/internal/RateLimit.d.ts.map +1 -1
  482. package/dist/internal/RateLimit.js +13 -1
  483. package/dist/internal/RateLimit.js.map +1 -1
  484. package/dist/internal/Store.d.ts +16 -0
  485. package/dist/internal/Store.d.ts.map +1 -1
  486. package/dist/internal/Store.js +59 -8
  487. package/dist/internal/Store.js.map +1 -1
  488. package/dist/internal/Tidx.d.ts +9 -2
  489. package/dist/internal/Tidx.d.ts.map +1 -1
  490. package/dist/internal/Tidx.js +78 -11
  491. package/dist/internal/Tidx.js.map +1 -1
  492. package/dist/internal/Timing.d.ts +26 -0
  493. package/dist/internal/Timing.d.ts.map +1 -1
  494. package/dist/internal/Timing.js +63 -5
  495. package/dist/internal/Timing.js.map +1 -1
  496. package/dist/internal/VercelOidc.d.ts +94 -0
  497. package/dist/internal/VercelOidc.d.ts.map +1 -0
  498. package/dist/internal/VercelOidc.js +128 -0
  499. package/dist/internal/VercelOidc.js.map +1 -0
  500. package/dist/internal/VerifiedTokens.d.ts +2 -8
  501. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  502. package/dist/internal/VerifiedTokens.js +24 -24
  503. package/dist/internal/VerifiedTokens.js.map +1 -1
  504. package/dist/internal/Viem.d.ts +30 -2067
  505. package/dist/internal/Viem.d.ts.map +1 -1
  506. package/dist/internal/Viem.js +167 -17
  507. package/dist/internal/Viem.js.map +1 -1
  508. package/dist/internal/Webhooks.d.ts +12 -4
  509. package/dist/internal/Webhooks.d.ts.map +1 -1
  510. package/dist/internal/Webhooks.js +9 -3
  511. package/dist/internal/Webhooks.js.map +1 -1
  512. package/dist/internal/ZoneRpc.d.ts +7 -0
  513. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  514. package/dist/internal/ZoneRpc.js +49 -0
  515. package/dist/internal/ZoneRpc.js.map +1 -0
  516. package/dist/internal/index.d.ts +3 -1
  517. package/dist/internal/index.d.ts.map +1 -1
  518. package/dist/internal/index.js +3 -1
  519. package/dist/internal/index.js.map +1 -1
  520. package/dist/internal/rewards/Audit.d.ts +88 -0
  521. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  522. package/dist/internal/rewards/Audit.js +134 -0
  523. package/dist/internal/rewards/Audit.js.map +1 -0
  524. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  525. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  526. package/dist/internal/rewards/Campaigns.js +531 -0
  527. package/dist/internal/rewards/Campaigns.js.map +1 -0
  528. package/dist/internal/rewards/Credits.d.ts +76 -0
  529. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  530. package/dist/internal/rewards/Credits.js +95 -0
  531. package/dist/internal/rewards/Credits.js.map +1 -0
  532. package/dist/internal/rewards/Events.d.ts +100 -0
  533. package/dist/internal/rewards/Events.d.ts.map +1 -0
  534. package/dist/internal/rewards/Events.js +340 -0
  535. package/dist/internal/rewards/Events.js.map +1 -0
  536. package/dist/internal/rewards/Projection.d.ts +237 -0
  537. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  538. package/dist/internal/rewards/Projection.js +616 -0
  539. package/dist/internal/rewards/Projection.js.map +1 -0
  540. package/dist/internal/rewards/Rates.d.ts +44 -0
  541. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  542. package/dist/internal/rewards/Rates.js +60 -0
  543. package/dist/internal/rewards/Rates.js.map +1 -0
  544. package/dist/internal/rewards/Read.d.ts +158 -0
  545. package/dist/internal/rewards/Read.d.ts.map +1 -0
  546. package/dist/internal/rewards/Read.js +292 -0
  547. package/dist/internal/rewards/Read.js.map +1 -0
  548. package/dist/internal/rewards/Runner.d.ts +164 -0
  549. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  550. package/dist/internal/rewards/Runner.js +1778 -0
  551. package/dist/internal/rewards/Runner.js.map +1 -0
  552. package/dist/internal/rewards/Signer.d.ts +224 -0
  553. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  554. package/dist/internal/rewards/Signer.js +135 -0
  555. package/dist/internal/rewards/Signer.js.map +1 -0
  556. package/dist/internal/rewards/index.d.ts +15 -0
  557. package/dist/internal/rewards/index.d.ts.map +1 -0
  558. package/dist/internal/rewards/index.js +15 -0
  559. package/dist/internal/rewards/index.js.map +1 -0
  560. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  561. package/dist/internal/routes/Action.d.ts.map +1 -0
  562. package/dist/internal/{funding → routes}/Action.js +17 -9
  563. package/dist/internal/routes/Action.js.map +1 -0
  564. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  565. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  566. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  567. package/dist/internal/routes/Catalog.js.map +1 -0
  568. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  569. package/dist/internal/routes/Chain.d.ts.map +1 -0
  570. package/dist/internal/{funding → routes}/Chain.js +3 -3
  571. package/dist/internal/routes/Chain.js.map +1 -0
  572. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  573. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  574. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  575. package/dist/internal/routes/Deposit.js.map +1 -0
  576. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  577. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  578. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  579. package/dist/internal/routes/DepositAddress.js.map +1 -0
  580. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  581. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  582. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -4
  583. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  584. package/dist/internal/routes/Economics.d.ts +25 -0
  585. package/dist/internal/routes/Economics.d.ts.map +1 -0
  586. package/dist/internal/routes/Economics.js +28 -0
  587. package/dist/internal/routes/Economics.js.map +1 -0
  588. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  589. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  590. package/dist/internal/{funding → routes}/Evidence.js +7 -7
  591. package/dist/internal/routes/Evidence.js.map +1 -0
  592. package/dist/internal/routes/Observability.d.ts +154 -0
  593. package/dist/internal/routes/Observability.d.ts.map +1 -0
  594. package/dist/internal/routes/Observability.js +389 -0
  595. package/dist/internal/routes/Observability.js.map +1 -0
  596. package/dist/internal/{funding → routes}/Provider.d.ts +311 -105
  597. package/dist/internal/routes/Provider.d.ts.map +1 -0
  598. package/dist/internal/{funding → routes}/Provider.js +229 -98
  599. package/dist/internal/routes/Provider.js.map +1 -0
  600. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  601. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  602. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  603. package/dist/internal/routes/Reconciliation.js.map +1 -0
  604. package/dist/internal/routes/Route.d.ts +21 -0
  605. package/dist/internal/routes/Route.d.ts.map +1 -0
  606. package/dist/internal/{funding → routes}/Route.js +1 -1
  607. package/dist/internal/routes/Route.js.map +1 -0
  608. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  609. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  610. package/dist/internal/{funding → routes}/SourceObservation.js +8 -8
  611. package/dist/internal/routes/SourceObservation.js.map +1 -0
  612. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  613. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  614. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  615. package/dist/internal/routes/Subsidy.js.map +1 -0
  616. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  617. package/dist/internal/routes/Token.d.ts.map +1 -0
  618. package/dist/internal/{funding → routes}/Token.js +3 -3
  619. package/dist/internal/routes/Token.js.map +1 -0
  620. package/dist/internal/{funding → routes}/Transfer.d.ts +241 -46
  621. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  622. package/dist/internal/routes/Transfer.js +728 -0
  623. package/dist/internal/routes/Transfer.js.map +1 -0
  624. package/dist/internal/{funding → routes}/TransferReconciliation.d.ts +13 -10
  625. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  626. package/dist/internal/routes/TransferReconciliation.js +422 -0
  627. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  628. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  629. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  630. package/dist/internal/routes/TransferSubsidy.js +256 -0
  631. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  632. package/dist/internal/{funding → routes}/TransferWebhook.d.ts +5 -5
  633. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  634. package/dist/internal/{funding → routes}/TransferWebhook.js +3 -3
  635. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  636. package/dist/internal/{funding → routes}/index.d.ts +2 -0
  637. package/dist/internal/routes/index.d.ts.map +1 -0
  638. package/dist/internal/{funding → routes}/index.js +2 -0
  639. package/dist/internal/routes/index.js.map +1 -0
  640. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  641. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  642. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  643. package/dist/internal/routes/providers/across.js.map +1 -0
  644. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  645. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  646. package/dist/internal/{funding → routes}/providers/relay.js +194 -110
  647. package/dist/internal/routes/providers/relay.js.map +1 -0
  648. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  649. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  650. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  651. package/dist/internal/routes/providers/rhino.js.map +1 -0
  652. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  653. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  654. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  655. package/dist/internal/routes/providers/squid.js.map +1 -0
  656. package/dist/internal/{funding → routes}/providers/stargate.d.ts +46 -18
  657. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  658. package/dist/internal/routes/providers/stargate.js +898 -0
  659. package/dist/internal/routes/providers/stargate.js.map +1 -0
  660. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  661. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  662. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  663. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  664. package/dist/internal/webhookDestinations/slack.js +12 -12
  665. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  666. package/dist/providers/index.d.ts +12 -12
  667. package/dist/providers/index.d.ts.map +1 -1
  668. package/dist/providers/index.js +12 -12
  669. package/dist/providers/index.js.map +1 -1
  670. package/dist/server.d.ts +19 -0
  671. package/dist/server.d.ts.map +1 -0
  672. package/dist/server.js +19 -0
  673. package/dist/server.js.map +1 -0
  674. package/package.json +15 -4
  675. package/src/ApiKey.ts +1 -1
  676. package/src/ApiKeys.test.ts +1033 -3
  677. package/src/ApiKeys.ts +489 -48
  678. package/src/App.test-d.ts +1 -1
  679. package/src/App.test.ts +216 -25
  680. package/src/App.ts +334 -31
  681. package/src/Assets.test.ts +2 -2
  682. package/src/Assets.ts +3 -1
  683. package/src/Auth.test-d.ts +1 -1
  684. package/src/Client.test-d.ts +539 -110
  685. package/src/Handler.ts +0 -1
  686. package/src/OpenApi.contract.test.ts +195 -0
  687. package/src/Scope.ts +17 -5
  688. package/src/Webhooks.ts +1 -1
  689. package/src/admin/App.test.ts +30 -2
  690. package/src/admin/App.ts +42 -6
  691. package/src/admin/apps/api-keys.test.ts +267 -5
  692. package/src/admin/apps/api-keys.ts +100 -50
  693. package/src/admin/apps/earn-vaults.test.ts +158 -0
  694. package/src/admin/apps/earn-vaults.ts +679 -6
  695. package/src/admin/apps/organizations.test.ts +306 -17
  696. package/src/admin/apps/organizations.ts +299 -24
  697. package/src/admin/apps/routes-support.test.ts +200 -0
  698. package/src/admin/apps/routes-support.ts +201 -0
  699. package/src/admin/apps/routes.test.ts +450 -0
  700. package/src/admin/apps/routes.ts +896 -0
  701. package/src/admin/apps/scopes.test.ts +15 -5
  702. package/src/admin/apps/subsidies.test.ts +306 -0
  703. package/src/admin/apps/subsidies.ts +457 -0
  704. package/src/admin/apps/verified-tokens.test.ts +8 -3
  705. package/src/admin/apps/verified-tokens.ts +3 -3
  706. package/src/admin/ui/plugin.ts +1 -2
  707. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  708. package/src/admin/ui/src/lib/config.ts +11 -2
  709. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  710. package/src/admin/ui/src/lib/organizations.test.ts +83 -50
  711. package/src/admin/ui/src/lib/organizations.ts +106 -25
  712. package/src/admin/ui/src/lib/query-client.ts +1 -1
  713. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  714. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  715. package/src/admin/ui/src/lib/routes.ts +304 -0
  716. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  717. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  718. package/src/admin/ui/src/routes/__root.tsx +12 -1
  719. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  720. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  721. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +239 -23
  722. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  723. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  724. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  725. package/src/admin/ui.generated.ts +144 -69
  726. package/src/analytics/Analytics.test.ts +108 -18
  727. package/src/analytics/Analytics.ts +38 -6
  728. package/src/analytics/tables/requestEvents.test.ts +100 -0
  729. package/src/analytics/tables/requestEvents.ts +10 -1
  730. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  731. package/src/apps/Zones.test.ts +15 -0
  732. package/src/apps/Zones.ts +52 -5
  733. package/src/apps/composition.test.ts +68 -60
  734. package/src/apps/data/App.test.ts +154 -2
  735. package/src/apps/data/App.ts +88 -28
  736. package/src/apps/data/routes/activities.test.ts +419 -7
  737. package/src/apps/data/routes/activities.ts +683 -216
  738. package/src/apps/data/routes/balances.test.ts +2 -2
  739. package/src/apps/data/routes/blocks.test.ts +46 -1
  740. package/src/apps/data/routes/coingecko.test.ts +419 -1
  741. package/src/apps/data/routes/coingecko.ts +309 -253
  742. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  743. package/src/apps/data/routes/earn.test.ts +1294 -17
  744. package/src/apps/data/routes/earn.ts +1838 -321
  745. package/src/apps/data/routes/exchanges.test.ts +12 -15
  746. package/src/apps/data/routes/fee-amm.test.ts +224 -0
  747. package/src/apps/data/routes/fee-amm.ts +191 -160
  748. package/src/apps/data/routes/indexer.test.ts +389 -0
  749. package/src/apps/data/routes/indexer.ts +165 -69
  750. package/src/apps/data/routes/receipts.test.ts +1 -1
  751. package/src/apps/data/routes/rpc.test.ts +352 -8
  752. package/src/apps/data/routes/rpc.ts +407 -219
  753. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  754. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  755. package/src/apps/data/routes/tokenlist.ts +173 -88
  756. package/src/apps/data/routes/tokens.test.ts +93 -3
  757. package/src/apps/data/routes/tokens.ts +39 -23
  758. package/src/apps/data/routes/transactions.test.ts +1 -1
  759. package/src/apps/data/routes/transfers.test.ts +56 -24
  760. package/src/apps/data/routes/transfers.ts +19 -8
  761. package/src/apps/data/routes/valuation.test.ts +1 -1
  762. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  763. package/src/apps/data/routes/verified-tokens.ts +99 -29
  764. package/src/apps/data/routes/webhooks.test.ts +645 -83
  765. package/src/apps/data/routes/webhooks.ts +1089 -857
  766. package/src/apps/data/routes/zones.test.ts +148 -71
  767. package/src/apps/data/routes/zones.ts +71 -55
  768. package/src/apps/docs/reference.ts +2 -2
  769. package/src/apps/index.ts +1 -1
  770. package/src/apps/management/App.ts +9 -51
  771. package/src/apps/management/Billing.test.ts +375 -14
  772. package/src/apps/management/Billing.ts +265 -29
  773. package/src/apps/management/routes/api-keys.test.ts +269 -7
  774. package/src/apps/management/routes/api-keys.ts +61 -20
  775. package/src/apps/management/routes/billing.test.ts +477 -15
  776. package/src/apps/management/routes/billing.ts +377 -50
  777. package/src/apps/management/routes/faucet.test.ts +1 -1
  778. package/src/apps/management/routes/faucet.ts +1 -1
  779. package/src/apps/management/routes/invitations.test.ts +270 -3
  780. package/src/apps/management/routes/invitations.ts +185 -15
  781. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  782. package/src/apps/management/routes/me.test.ts +246 -5
  783. package/src/apps/management/routes/me.ts +7 -2
  784. package/src/apps/management/routes/members.test.ts +108 -0
  785. package/src/apps/management/routes/orgs.test.ts +191 -3
  786. package/src/apps/management/routes/orgs.ts +58 -11
  787. package/src/apps/management/routes/projects.test.ts +33 -3
  788. package/src/apps/management/routes/projects.ts +6 -1
  789. package/src/apps/management/routes/scopes.test.ts +30 -2
  790. package/src/apps/management/routes/scopes.ts +4 -1
  791. package/src/apps/management/routes/usage.test.ts +32 -0
  792. package/src/apps/management/routes/usage.ts +22 -4
  793. package/src/apps/management/routes/webhooks.test.ts +49 -26
  794. package/src/apps/management/routes/webhooks.ts +78 -22
  795. package/src/apps/mcp.test.ts +6 -6
  796. package/src/apps/mcp.ts +7 -7
  797. package/src/apps/mpp/App.ts +37 -7
  798. package/src/apps/mpp/Mpp.test.ts +49 -8
  799. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  800. package/src/apps/mpp/internal/Adapter.ts +34 -0
  801. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  802. package/src/apps/mpp/internal/Policy.ts +49 -7
  803. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  804. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  805. package/src/apps/relay/App.test.ts +839 -64
  806. package/src/apps/relay/App.ts +148 -81
  807. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  808. package/src/apps/relay/Sponsorships.test.ts +67 -4
  809. package/src/apps/relay/Sponsorships.ts +233 -32
  810. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  811. package/src/apps/{funding → routes}/Access.ts +6 -6
  812. package/src/apps/routes/App.test.ts +165 -0
  813. package/src/apps/routes/App.ts +96 -0
  814. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  815. package/src/apps/routes/index.ts +1 -0
  816. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  817. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  818. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1358 -458
  819. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +566 -246
  820. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  821. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  822. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  823. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  824. package/src/apps/{funding → routes}/routes/transfers.test.ts +1100 -353
  825. package/src/apps/routes/routes/transfers.ts +1332 -0
  826. package/src/cli/Cli.test.ts +1 -1
  827. package/src/cli/commands/admin.test.ts +748 -1
  828. package/src/cli/commands/admin.ts +278 -0
  829. package/src/cloudflare.ts +52 -47
  830. package/src/db/Db.test.ts +245 -2
  831. package/src/db/Db.ts +1476 -34
  832. package/src/db/Schema.ts +729 -228
  833. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  834. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  835. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  836. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  837. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  838. package/src/db/tables/apiKeyRevocations.ts +121 -0
  839. package/src/db/tables/authAccounts.ts +105 -0
  840. package/src/db/tables/authSessions.ts +13 -0
  841. package/src/db/tables/authVerifications.ts +13 -0
  842. package/src/db/tables/invitations.ts +142 -45
  843. package/src/db/tables/memberships.ts +79 -3
  844. package/src/db/tables/organizations.test.ts +690 -13
  845. package/src/db/tables/organizations.ts +139 -55
  846. package/src/db/tables/projects.test.ts +16 -0
  847. package/src/db/tables/projects.ts +13 -3
  848. package/src/db/tables/requestUsage.ts +4 -1
  849. package/src/db/tables/rewardAccounts.ts +178 -0
  850. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  851. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  852. package/src/db/tables/rewardCampaigns.ts +647 -0
  853. package/src/db/tables/rewardCredits.ts +110 -0
  854. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  855. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  856. package/src/db/tables/rewardRuns.ts +514 -0
  857. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  858. package/src/db/tables/routesCatalog.test.ts +185 -0
  859. package/src/db/tables/routesCatalog.ts +163 -0
  860. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  861. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  862. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  863. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  864. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +316 -46
  865. package/src/db/tables/routesDeposits.ts +1062 -0
  866. package/src/db/tables/routesIdempotency.test.ts +796 -0
  867. package/src/db/tables/routesIdempotency.ts +496 -0
  868. package/src/db/tables/routesSubsidies.test.ts +120 -0
  869. package/src/db/tables/routesSubsidies.ts +71 -0
  870. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  871. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  872. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  873. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  874. package/src/db/tables/{fundingTransferTransactions.ts → routesTransferTransactions.ts} +63 -18
  875. package/src/db/tables/routesTransfers.test.ts +338 -0
  876. package/src/db/tables/routesTransfers.ts +662 -0
  877. package/src/db/tables/sponsoredTransactions.test.ts +269 -45
  878. package/src/db/tables/sponsoredTransactions.ts +225 -65
  879. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  880. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  881. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  882. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  883. package/src/db/tables/stripeCustomers.test.ts +85 -0
  884. package/src/db/tables/stripeCustomers.ts +24 -0
  885. package/src/db/tables/users.test.ts +129 -0
  886. package/src/db/tables/users.ts +49 -3
  887. package/src/db/tables/webhookQueueEvents.ts +8 -1
  888. package/src/db/tables/webhookSubscriptions.ts +95 -20
  889. package/src/handlers/internal/executionError.ts +3 -4
  890. package/src/handlers/internal/multisig.ts +13 -816
  891. package/src/handlers/internal/sponsorship.ts +26 -10
  892. package/src/handlers/relay.test-d.ts +9 -1
  893. package/src/handlers/relay.test.ts +823 -3
  894. package/src/handlers/relay.ts +127 -107
  895. package/src/index.test-d.ts +7 -0
  896. package/src/index.ts +0 -17
  897. package/src/internal/AssetResponse.ts +26 -0
  898. package/src/internal/Auth.test.ts +1564 -9
  899. package/src/internal/Auth.ts +833 -239
  900. package/src/internal/BetterAuth.test.ts +242 -0
  901. package/src/internal/BetterAuth.ts +349 -0
  902. package/src/internal/Cache.ts +2 -0
  903. package/src/internal/EarnRates.test.ts +17 -0
  904. package/src/internal/EarnRates.ts +124 -31
  905. package/src/internal/EarnSharePrices.test.ts +182 -0
  906. package/src/internal/EarnSharePrices.ts +313 -0
  907. package/src/internal/EarnVaults.test.ts +21 -0
  908. package/src/internal/EarnVaults.ts +33 -11
  909. package/src/internal/Email.ts +54 -0
  910. package/src/internal/Idempotency.test.ts +2 -2
  911. package/src/internal/Log.test-d.ts +8 -7
  912. package/src/internal/Log.test.ts +114 -16
  913. package/src/internal/Log.ts +53 -40
  914. package/src/internal/MetricSink.test.ts +313 -26
  915. package/src/internal/MetricSink.ts +73 -8
  916. package/src/internal/Mpp.test.ts +31 -0
  917. package/src/internal/Mpp.ts +21 -24
  918. package/src/internal/OpenApi.ts +45 -12
  919. package/src/internal/Provider.test.ts +1 -1
  920. package/src/internal/Provider.ts +1 -1
  921. package/src/internal/RateLimit.test.ts +21 -3
  922. package/src/internal/RateLimit.ts +12 -1
  923. package/src/internal/Store.test-d.ts +1 -1
  924. package/src/internal/Store.test.ts +151 -8
  925. package/src/internal/Store.ts +76 -9
  926. package/src/internal/Tidx.test.ts +59 -8
  927. package/src/internal/Tidx.ts +86 -14
  928. package/src/internal/Timing.test.ts +77 -0
  929. package/src/internal/Timing.ts +83 -6
  930. package/src/internal/VercelOidc.test.ts +188 -0
  931. package/src/internal/VercelOidc.ts +193 -0
  932. package/src/internal/VerifiedTokens.test.ts +60 -6
  933. package/src/internal/VerifiedTokens.ts +21 -24
  934. package/src/internal/Viem.batch.test.ts +80 -0
  935. package/src/internal/Viem.test.ts +201 -2
  936. package/src/internal/Viem.ts +221 -25
  937. package/src/internal/Webhooks.test.ts +85 -6
  938. package/src/internal/Webhooks.ts +22 -4
  939. package/src/internal/ZoneRpc.ts +50 -0
  940. package/src/internal/exchange/Provider.test.ts +2 -2
  941. package/src/internal/index.test.ts +3 -1
  942. package/src/internal/index.ts +3 -1
  943. package/src/internal/rewards/Audit.ts +231 -0
  944. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  945. package/src/internal/rewards/Campaigns.ts +1205 -0
  946. package/src/internal/rewards/Credits.ts +165 -0
  947. package/src/internal/rewards/Events.local.test.ts +113 -0
  948. package/src/internal/rewards/Events.test.ts +152 -0
  949. package/src/internal/rewards/Events.ts +468 -0
  950. package/src/internal/rewards/Projection.test.ts +681 -0
  951. package/src/internal/rewards/Projection.ts +987 -0
  952. package/src/internal/rewards/Rates.test.ts +171 -0
  953. package/src/internal/rewards/Rates.ts +110 -0
  954. package/src/internal/rewards/Read.test.ts +501 -0
  955. package/src/internal/rewards/Read.ts +476 -0
  956. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  957. package/src/internal/rewards/Runner.states.test.ts +188 -0
  958. package/src/internal/rewards/Runner.test.ts +90 -0
  959. package/src/internal/rewards/Runner.ts +2229 -0
  960. package/src/internal/rewards/Signer.test.ts +79 -0
  961. package/src/internal/rewards/Signer.ts +180 -0
  962. package/src/internal/rewards/index.ts +14 -0
  963. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  964. package/src/internal/{funding → routes}/Action.ts +35 -8
  965. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  966. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  967. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  968. package/src/internal/{funding → routes}/Chain.ts +11 -11
  969. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  970. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  971. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  972. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  973. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  974. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -9
  975. package/src/internal/routes/Economics.test.ts +42 -0
  976. package/src/internal/routes/Economics.ts +47 -0
  977. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  978. package/src/internal/{funding → routes}/Evidence.ts +9 -9
  979. package/src/internal/routes/Observability.test.ts +636 -0
  980. package/src/internal/routes/Observability.ts +668 -0
  981. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  982. package/src/internal/{funding → routes}/Provider.ts +489 -186
  983. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  984. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  985. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  986. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  987. package/src/internal/{funding → routes}/Route.ts +7 -7
  988. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  989. package/src/internal/{funding → routes}/SourceObservation.ts +13 -13
  990. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  991. package/src/internal/routes/Subsidy.test.ts +169 -0
  992. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  993. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  994. package/src/internal/{funding → routes}/Token.ts +5 -5
  995. package/src/internal/routes/Transfer.test.ts +1199 -0
  996. package/src/internal/routes/Transfer.ts +1206 -0
  997. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  998. package/src/internal/routes/TransferReconciliation.ts +527 -0
  999. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1000. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1001. package/src/internal/{funding → routes}/TransferWebhook.test.ts +13 -13
  1002. package/src/internal/{funding → routes}/TransferWebhook.ts +7 -7
  1003. package/src/internal/{funding → routes}/index.test.ts +5 -3
  1004. package/src/internal/{funding → routes}/index.ts +2 -0
  1005. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1006. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1007. package/src/internal/{funding → routes}/providers/relay.test.ts +165 -32
  1008. package/src/internal/{funding → routes}/providers/relay.ts +228 -121
  1009. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1010. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1011. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1012. package/src/internal/routes/providers/stargate.ts +1276 -0
  1013. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1014. package/src/internal/webhookDestinations/slack.ts +10 -10
  1015. package/src/providers/index.ts +13 -13
  1016. package/src/server.ts +18 -0
  1017. package/dist/apps/funding/Access.d.ts.map +0 -1
  1018. package/dist/apps/funding/Access.js.map +0 -1
  1019. package/dist/apps/funding/App.js.map +0 -1
  1020. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1021. package/dist/apps/funding/Inventory.js.map +0 -1
  1022. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1023. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1024. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1025. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1026. package/dist/apps/funding/index.d.ts +0 -2
  1027. package/dist/apps/funding/index.d.ts.map +0 -1
  1028. package/dist/apps/funding/index.js +0 -2
  1029. package/dist/apps/funding/index.js.map +0 -1
  1030. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1031. package/dist/apps/funding/routes/chains.js.map +0 -1
  1032. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1033. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1034. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1035. package/dist/apps/funding/routes/providers.js +0 -57
  1036. package/dist/apps/funding/routes/providers.js.map +0 -1
  1037. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1038. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1039. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1040. package/dist/apps/funding/routes/transfers.js +0 -828
  1041. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1042. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1043. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1044. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1045. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1046. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1047. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1048. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1049. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1050. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1051. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1052. package/dist/db/tables/fundingDeposits.js +0 -295
  1053. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1054. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1055. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1056. package/dist/db/tables/fundingIdempotency.js +0 -103
  1057. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1058. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1059. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1060. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -53
  1061. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1062. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1063. package/dist/db/tables/fundingTransfers.d.ts +0 -99
  1064. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1065. package/dist/db/tables/fundingTransfers.js +0 -110
  1066. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1067. package/dist/internal/funding/Action.d.ts.map +0 -1
  1068. package/dist/internal/funding/Action.js.map +0 -1
  1069. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1070. package/dist/internal/funding/Catalog.js.map +0 -1
  1071. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1072. package/dist/internal/funding/Chain.js.map +0 -1
  1073. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1074. package/dist/internal/funding/Deposit.js.map +0 -1
  1075. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1076. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1077. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1078. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1079. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1080. package/dist/internal/funding/Evidence.js.map +0 -1
  1081. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1082. package/dist/internal/funding/Provider.js.map +0 -1
  1083. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1084. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1085. package/dist/internal/funding/Route.d.ts +0 -21
  1086. package/dist/internal/funding/Route.d.ts.map +0 -1
  1087. package/dist/internal/funding/Route.js.map +0 -1
  1088. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1089. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1090. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1091. package/dist/internal/funding/Subsidy.js.map +0 -1
  1092. package/dist/internal/funding/Token.d.ts.map +0 -1
  1093. package/dist/internal/funding/Token.js.map +0 -1
  1094. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1095. package/dist/internal/funding/Transfer.js +0 -462
  1096. package/dist/internal/funding/Transfer.js.map +0 -1
  1097. package/dist/internal/funding/TransferReconciliation.d.ts.map +0 -1
  1098. package/dist/internal/funding/TransferReconciliation.js +0 -192
  1099. package/dist/internal/funding/TransferReconciliation.js.map +0 -1
  1100. package/dist/internal/funding/TransferWebhook.d.ts.map +0 -1
  1101. package/dist/internal/funding/TransferWebhook.js.map +0 -1
  1102. package/dist/internal/funding/index.d.ts.map +0 -1
  1103. package/dist/internal/funding/index.js.map +0 -1
  1104. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1105. package/dist/internal/funding/providers/across.js.map +0 -1
  1106. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1107. package/dist/internal/funding/providers/relay.js.map +0 -1
  1108. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1109. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1110. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1111. package/dist/internal/funding/providers/squid.js.map +0 -1
  1112. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1113. package/dist/internal/funding/providers/stargate.js +0 -579
  1114. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1115. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1116. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1117. package/src/apps/funding/App.test.ts +0 -78
  1118. package/src/apps/funding/App.ts +0 -88
  1119. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1120. package/src/apps/funding/index.ts +0 -1
  1121. package/src/apps/funding/routes/transfers.ts +0 -987
  1122. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1123. package/src/db/tables/fundingCatalog.ts +0 -163
  1124. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1125. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1126. package/src/db/tables/fundingDeposits.ts +0 -572
  1127. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1128. package/src/db/tables/fundingIdempotency.ts +0 -180
  1129. package/src/db/tables/fundingTransferTransactions.test.ts +0 -112
  1130. package/src/db/tables/fundingTransfers.test.ts +0 -115
  1131. package/src/db/tables/fundingTransfers.ts +0 -189
  1132. package/src/handlers/internal/multisig.test.ts +0 -818
  1133. package/src/internal/funding/Subsidy.test.ts +0 -75
  1134. package/src/internal/funding/Transfer.test.ts +0 -524
  1135. package/src/internal/funding/Transfer.ts +0 -762
  1136. package/src/internal/funding/TransferReconciliation.test.ts +0 -147
  1137. package/src/internal/funding/TransferReconciliation.ts +0 -264
  1138. package/src/internal/funding/providers/stargate.test.ts +0 -328
  1139. package/src/internal/funding/providers/stargate.ts +0 -856
  1140. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1141. /package/src/internal/{funding → routes}/Route.test.ts +0 -0
@@ -1,6 +1,6 @@
1
- import * as TestFunding from '../../../test/Funding.js'
2
- import * as FundingCatalog from './Catalog.js'
3
- import * as FundingProvider from './Provider.js'
1
+ import * as TestRoutes from '../../../test/Routes.js'
2
+ import * as RoutesCatalog from './Catalog.js'
3
+ import * as RoutesProvider from './Provider.js'
4
4
  import * as Across from './providers/across.js'
5
5
  import * as Relay from './providers/relay.js'
6
6
  import * as Rhino from './providers/rhino.js'
@@ -14,7 +14,7 @@ const providers = [
14
14
  integratorId: '0xdead',
15
15
  userAddress: '0x1111111111111111111111111111111111111111',
16
16
  }),
17
- Relay.relay({ userAddresses: TestFunding.relayQuoteUsers }),
17
+ Relay.relay({ userAddresses: TestRoutes.relayQuoteUsers }),
18
18
  Rhino.rhino(),
19
19
  Squid.squid({
20
20
  integratorId: 'squid-integrator-id',
@@ -25,7 +25,8 @@ const providers = [
25
25
  ] as const
26
26
 
27
27
  const baseUsdcRequest = {
28
- catalog: TestFunding.snapshot,
28
+ catalog: TestRoutes.snapshot,
29
+ destinationChain: 'tempo',
29
30
  provider: 'relay',
30
31
  sourceAmount: '1000000',
31
32
  sourceAmountUnits: 'baseUnits',
@@ -35,7 +36,7 @@ const baseUsdcRequest = {
35
36
 
36
37
  const depositAddressOptions = {
37
38
  amount: '100000000',
38
- catalog: TestFunding.snapshot,
39
+ catalog: TestRoutes.snapshot,
39
40
  destinationChainId: 4217,
40
41
  destinationToken: '0x20c00000000000000000000014f22ca97301eb73',
41
42
  recipient: `0x${'11'.repeat(20)}`,
@@ -46,8 +47,8 @@ const depositAddressOptions = {
46
47
  } as const
47
48
 
48
49
  const prepareOptions = {
49
- catalog: TestFunding.snapshot,
50
- destinationChainId: 4217,
50
+ catalog: TestRoutes.snapshot,
51
+ destinationChain: 'tempo',
51
52
  destinationToken: '0x20c0000000000000000000000000000000000000',
52
53
  method: 'transaction',
53
54
  mode: 'exactSource',
@@ -59,41 +60,257 @@ const prepareOptions = {
59
60
  } as const
60
61
 
61
62
  describe('from', () => {
62
- test('registers the funding provider type', () => {
63
- expect(providers[0]?.type).toBe('funding')
63
+ test('registers the route provider type', () => {
64
+ expect(providers[0]?.type).toBe('routes')
64
65
  })
65
66
 
66
67
  test('rejects provider ids that are not normalized', () => {
67
68
  expect(() =>
68
- FundingProvider.from({
69
+ RoutesProvider.from({
69
70
  getQuote: async () => ({ sampledAt: '2026-01-01T00:00:00Z', status: 'unavailable' }),
70
71
  id: ' Relay ',
71
72
  name: 'Relay',
72
73
  }),
73
74
  ).toThrowErrorMatchingInlineSnapshot(
74
- `[FundingProvider.ProviderConfigurationError: Provider ids must be lowercase and trimmed.]`,
75
+ `[RoutesProvider.ProviderConfigurationError: Provider ids must be lowercase and trimmed.]`,
75
76
  )
76
77
  })
77
78
  })
78
79
 
79
80
  describe('is', () => {
80
- test('requires the funding quote capability', () => {
81
+ test('requires the route quote capability', () => {
81
82
  expect(
82
- FundingProvider.is({
83
+ RoutesProvider.is({
83
84
  id: 'incomplete',
84
85
  name: 'Incomplete',
85
- type: 'funding',
86
+ type: 'routes',
86
87
  }),
87
88
  ).toBe(false)
88
- expect(FundingProvider.is(providers[0])).toBe(true)
89
+ expect(RoutesProvider.is(providers[0])).toBe(true)
90
+ })
91
+ })
92
+
93
+ describe('canReconcileTransfer', () => {
94
+ test('requires source and destination verification', () => {
95
+ expect(RoutesProvider.canReconcileTransfer(Stargate.stargate())).toBe(true)
96
+ expect(RoutesProvider.canReconcileTransfer(Relay.relay())).toBe(false)
97
+ })
98
+ })
99
+
100
+ describe('observe', () => {
101
+ test('reports successful and failed provider calls without changing their behavior', async () => {
102
+ const attempts: RoutesProvider.ProviderAttemptResult[] = []
103
+ const provider = { id: 'relay' }
104
+ const result = await RoutesProvider.observe(provider, async () => 'value', {
105
+ onAttempt: (attempt) => attempts.push(attempt),
106
+ operation: 'listDepositAddressRequests',
107
+ })
108
+ const cause = new RoutesProvider.ProviderResponseError(503, null)
109
+ const rejected = RoutesProvider.observe(
110
+ provider,
111
+ async () => {
112
+ throw cause
113
+ },
114
+ {
115
+ onAttempt: (attempt) => attempts.push(attempt),
116
+ operation: 'verifyDestinationDelivery',
117
+ },
118
+ )
119
+
120
+ await expect(rejected).rejects.toBe(cause)
121
+ expect({
122
+ attempts: attempts.map(({ durationMs: _durationMs, ...attempt }) => attempt),
123
+ result,
124
+ }).toMatchInlineSnapshot(`
125
+ {
126
+ "attempts": [
127
+ {
128
+ "id": "relay",
129
+ "operation": "listDepositAddressRequests",
130
+ "outcome": "success",
131
+ },
132
+ {
133
+ "failure": "http",
134
+ "id": "relay",
135
+ "operation": "verifyDestinationDelivery",
136
+ "outcome": "failed",
137
+ },
138
+ ],
139
+ "result": "value",
140
+ }
141
+ `)
142
+ })
143
+
144
+ test('ignores observation callback failures', async () => {
145
+ await expect(
146
+ RoutesProvider.observe({ id: 'relay' }, async () => 'value', {
147
+ onAttempt: () => {
148
+ throw new Error('metrics unavailable')
149
+ },
150
+ operation: 'receiveWebhook',
151
+ }),
152
+ ).resolves.toBe('value')
153
+ })
154
+ })
155
+
156
+ describe('formatAttempt', () => {
157
+ test('retains bounded failure details', () => {
158
+ expect(
159
+ RoutesProvider.formatAttempt({
160
+ cause: new RoutesProvider.ProviderTimeoutError(),
161
+ durationMs: 10,
162
+ operation: 'verifySourceTransaction',
163
+ outcome: 'failed',
164
+ provider: { id: 'stargate' },
165
+ }),
166
+ ).toMatchInlineSnapshot(`
167
+ {
168
+ "durationMs": 10,
169
+ "failure": "timeout",
170
+ "id": "stargate",
171
+ "operation": "verifySourceTransaction",
172
+ "outcome": "failed",
173
+ }
174
+ `)
175
+ })
176
+
177
+ test('classifies webhook validation failures as payload failures', () => {
178
+ expect(
179
+ [
180
+ new RoutesProvider.WebhookAuthenticationError(),
181
+ new RoutesProvider.WebhookPayloadError(),
182
+ ].map((cause) =>
183
+ RoutesProvider.formatAttempt({
184
+ cause,
185
+ durationMs: 10,
186
+ operation: 'receiveWebhook',
187
+ outcome: 'failed',
188
+ provider: { id: 'relay' },
189
+ }),
190
+ ),
191
+ ).toMatchInlineSnapshot(`
192
+ [
193
+ {
194
+ "durationMs": 10,
195
+ "failure": "payload",
196
+ "id": "relay",
197
+ "operation": "receiveWebhook",
198
+ "outcome": "failed",
199
+ },
200
+ {
201
+ "durationMs": 10,
202
+ "failure": "payload",
203
+ "id": "relay",
204
+ "operation": "receiveWebhook",
205
+ "outcome": "failed",
206
+ },
207
+ ]
208
+ `)
89
209
  })
90
210
  })
91
211
 
92
212
  describe('getQuotes', () => {
213
+ test('reports bounded request outcomes and quote ages', async () => {
214
+ const results: RoutesProvider.QuoteRequestResult[] = []
215
+ const onResult = (result: RoutesProvider.QuoteRequestResult) => results.push(result)
216
+ const available = withGetQuote('relay', async () => ({
217
+ destinationAmount: '990000',
218
+ sampledAt: new Date(Date.now() - 1_000).toISOString(),
219
+ status: 'available',
220
+ }))
221
+ const unavailable = withGetQuote('relay', async () => ({
222
+ sampledAt: new Date().toISOString(),
223
+ status: 'unavailable',
224
+ }))
225
+ const failed = withGetQuote('relay', async () => {
226
+ throw new Error('upstream unavailable')
227
+ })
228
+
229
+ await RoutesProvider.getQuotes({
230
+ ...baseUsdcRequest,
231
+ onResult,
232
+ providers: [available],
233
+ })
234
+ await RoutesProvider.getQuotes({
235
+ ...baseUsdcRequest,
236
+ onResult,
237
+ providers: [unavailable],
238
+ })
239
+ await RoutesProvider.getQuotes({
240
+ ...baseUsdcRequest,
241
+ onResult,
242
+ provider: undefined,
243
+ providers: [],
244
+ })
245
+ await expect(
246
+ RoutesProvider.getQuotes({
247
+ ...baseUsdcRequest,
248
+ onResult,
249
+ providers: [failed],
250
+ }),
251
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.ProviderQuoteError]`)
252
+
253
+ expect(results).toEqual([
254
+ {
255
+ candidateCount: 1,
256
+ outcome: 'available',
257
+ quotes: [
258
+ {
259
+ ageMs: expect.any(Number),
260
+ customerValueLossBps: 100,
261
+ destinationChain: 'eip155:4217',
262
+ destinationToken: 'eip155:4217/erc20:0x20c000000000000000000000b9537d11c60e8b50',
263
+ futureSkewMs: 0,
264
+ provider: 'relay',
265
+ sourceChain: 'eip155:8453',
266
+ sourceToken: 'eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
267
+ },
268
+ ],
269
+ },
270
+ { candidateCount: 1, outcome: 'unavailable', quotes: [] },
271
+ { candidateCount: 0, outcome: 'unsupported', quotes: [] },
272
+ { candidateCount: 1, outcome: 'failed', quotes: [] },
273
+ ])
274
+ expect(results[0]?.quotes[0]?.ageMs).toBeGreaterThanOrEqual(1_000)
275
+ })
276
+
277
+ test('reports provider timestamps ahead of the API clock', async () => {
278
+ const results: RoutesProvider.QuoteRequestResult[] = []
279
+ vi.useFakeTimers({ now: new Date('2026-01-01T00:00:00.000Z'), toFake: ['Date'] })
280
+ try {
281
+ await RoutesProvider.getQuotes({
282
+ ...baseUsdcRequest,
283
+ onResult: (result) => results.push(result),
284
+ providers: [
285
+ withGetQuote('relay', async () => ({
286
+ destinationAmount: '990000',
287
+ sampledAt: '2026-01-01T00:00:05.000Z',
288
+ status: 'available',
289
+ })),
290
+ ],
291
+ })
292
+
293
+ expect(results[0]?.quotes).toEqual([
294
+ {
295
+ ageMs: 0,
296
+ customerValueLossBps: 100,
297
+ destinationChain: 'eip155:4217',
298
+ destinationToken: 'eip155:4217/erc20:0x20c000000000000000000000b9537d11c60e8b50',
299
+ futureSkewMs: 5_000,
300
+ provider: 'relay',
301
+ sourceChain: 'eip155:8453',
302
+ sourceToken: 'eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
303
+ },
304
+ ])
305
+ } finally {
306
+ vi.useRealTimers()
307
+ }
308
+ })
309
+
93
310
  test('returns normalized successful provider quotes', async () => {
94
- const attempts: FundingProvider.ProviderAttempt[] = []
95
- let seen: FundingProvider.getQuote.Parameters | undefined
96
- const quotes = await FundingProvider.getQuotes({
311
+ const attempts: RoutesProvider.ProviderAttempt[] = []
312
+ let seen: RoutesProvider.getQuote.Parameters | undefined
313
+ const quotes = await RoutesProvider.getQuotes({
97
314
  ...baseUsdcRequest,
98
315
  onAttempt: (attempt) => attempts.push(attempt),
99
316
  providers: [
@@ -132,10 +349,7 @@ describe('getQuotes', () => {
132
349
  formatted: '0.98',
133
350
  },
134
351
  id: 'base-usdc-tempo-usdce-relay',
135
- quality: {
136
- liquiditySource: 'providerQuote',
137
- tier: 'liquid',
138
- },
352
+ quality: { tier: 'liquid' },
139
353
  quote: { sampledAt: '2026-01-01T00:00:00Z' },
140
354
  sourceAmount: {
141
355
  baseUnits: '1000000',
@@ -151,8 +365,8 @@ describe('getQuotes', () => {
151
365
  })
152
366
 
153
367
  test('omits provider-declared unavailable quotes', async () => {
154
- const attempts: FundingProvider.ProviderAttempt[] = []
155
- const quotes = FundingProvider.getQuotes({
368
+ const attempts: RoutesProvider.ProviderAttempt[] = []
369
+ const quotes = RoutesProvider.getQuotes({
156
370
  ...baseUsdcRequest,
157
371
  onAttempt: (attempt) => attempts.push(attempt),
158
372
  providers: [
@@ -170,8 +384,8 @@ describe('getQuotes', () => {
170
384
  })
171
385
 
172
386
  test('rejects provider failures when no quote succeeds', async () => {
173
- const attempts: FundingProvider.ProviderAttempt[] = []
174
- const quotes = FundingProvider.getQuotes({
387
+ const attempts: RoutesProvider.ProviderAttempt[] = []
388
+ const quotes = RoutesProvider.getQuotes({
175
389
  ...baseUsdcRequest,
176
390
  onAttempt: (attempt) => attempts.push(attempt),
177
391
  providers: [
@@ -184,7 +398,7 @@ describe('getQuotes', () => {
184
398
  const cause = await quotes.catch((error: unknown) => error)
185
399
  expect(cause).toMatchObject({
186
400
  failures: [{ cause: expect.any(Error), provider: { id: 'relay' } }],
187
- fundingProviderAttempts: [
401
+ routesProviderAttempts: [
188
402
  {
189
403
  durationMs: expect.any(Number),
190
404
  failure: 'unknown',
@@ -193,7 +407,7 @@ describe('getQuotes', () => {
193
407
  outcome: 'failed',
194
408
  },
195
409
  ],
196
- name: 'FundingProvider.ProviderQuoteError',
410
+ name: 'RoutesProvider.ProviderQuoteError',
197
411
  providerFailure: { failure: 'unknown', id: 'relay', operation: 'getQuote' },
198
412
  })
199
413
  expect(attempts.map(stableAttempt)).toEqual([
@@ -207,8 +421,8 @@ describe('getQuotes', () => {
207
421
  })
208
422
 
209
423
  test('records thin quotes separately from available quotes', async () => {
210
- const attempts: FundingProvider.ProviderAttempt[] = []
211
- const quotes = await FundingProvider.getQuotes({
424
+ const attempts: RoutesProvider.ProviderAttempt[] = []
425
+ const quotes = await RoutesProvider.getQuotes({
212
426
  ...baseUsdcRequest,
213
427
  onAttempt: (attempt) => attempts.push(attempt),
214
428
  providers: [
@@ -227,7 +441,7 @@ describe('getQuotes', () => {
227
441
  })
228
442
 
229
443
  test('rejects successful provider responses without output amounts', async () => {
230
- const quotes = FundingProvider.getQuotes({
444
+ const quotes = RoutesProvider.getQuotes({
231
445
  ...baseUsdcRequest,
232
446
  providers: [
233
447
  withGetQuote('relay', async () => ({
@@ -238,12 +452,12 @@ describe('getQuotes', () => {
238
452
  })
239
453
 
240
454
  await expect(quotes).rejects.toThrowErrorMatchingInlineSnapshot(
241
- `[FundingProvider.ProviderQuoteError]`,
455
+ `[RoutesProvider.ProviderQuoteError]`,
242
456
  )
243
457
  })
244
458
 
245
459
  test('rejects provider responses outside the shared schema', async () => {
246
- const quotes = FundingProvider.getQuotes({
460
+ const quotes = RoutesProvider.getQuotes({
247
461
  ...baseUsdcRequest,
248
462
  providers: [
249
463
  withGetQuote(
@@ -270,7 +484,7 @@ describe('getQuotes', () => {
270
484
  ])(
271
485
  'rejects invalid successful amounts %#',
272
486
  async ({ destinationAmountMin, destinationAmount }) => {
273
- const quotes = FundingProvider.getQuotes({
487
+ const quotes = RoutesProvider.getQuotes({
274
488
  ...baseUsdcRequest,
275
489
  providers: [
276
490
  withGetQuote('relay', async () => ({
@@ -291,7 +505,7 @@ describe('getQuotes', () => {
291
505
  test('allows provider quotes within the default deadline', async () => {
292
506
  vi.useFakeTimers()
293
507
  try {
294
- const quotes = FundingProvider.getQuotes({
508
+ const quotes = RoutesProvider.getQuotes({
295
509
  ...baseUsdcRequest,
296
510
  providers: [
297
511
  withGetQuote(
@@ -321,9 +535,9 @@ describe('getQuotes', () => {
321
535
  })
322
536
 
323
537
  test('aborts providers that exceed the quote deadline', async () => {
324
- const attempts: FundingProvider.ProviderAttempt[] = []
538
+ const attempts: RoutesProvider.ProviderAttempt[] = []
325
539
  let aborted = false
326
- const quotes = FundingProvider.getQuotes({
540
+ const quotes = RoutesProvider.getQuotes({
327
541
  ...baseUsdcRequest,
328
542
  providerTimeoutMs: 1,
329
543
  providers: [
@@ -331,19 +545,19 @@ describe('getQuotes', () => {
331
545
  signal.addEventListener('abort', () => {
332
546
  aborted = true
333
547
  })
334
- return new Promise<FundingProvider.getQuote.ReturnType>(() => {})
548
+ return new Promise<RoutesProvider.getQuote.ReturnType>(() => {})
335
549
  }),
336
550
  ],
337
551
  onAttempt: (attempt) => attempts.push(attempt),
338
552
  })
339
553
 
340
554
  await expect(quotes).rejects.toThrowErrorMatchingInlineSnapshot(
341
- `[FundingProvider.ProviderQuoteError]`,
555
+ `[RoutesProvider.ProviderQuoteError]`,
342
556
  )
343
557
  expect(aborted).toBe(true)
344
558
  expect(attempts.map(stableAttempt)).toEqual([
345
559
  {
346
- cause: expect.any(FundingProvider.ProviderTimeoutError),
560
+ cause: expect.any(RoutesProvider.ProviderTimeoutError),
347
561
  operation: 'getQuote',
348
562
  outcome: 'failed',
349
563
  provider: 'relay',
@@ -352,8 +566,8 @@ describe('getQuotes', () => {
352
566
  })
353
567
 
354
568
  test('passes cache policy through to providers', async () => {
355
- let seen: FundingProvider.getQuote.Parameters | undefined
356
- await FundingProvider.getQuotes({
569
+ let seen: RoutesProvider.getQuote.Parameters | undefined
570
+ await RoutesProvider.getQuotes({
357
571
  ...baseUsdcRequest,
358
572
  cache: { bypass: true },
359
573
  providers: [
@@ -368,8 +582,8 @@ describe('getQuotes', () => {
368
582
  })
369
583
 
370
584
  test('returns successful quotes when another provider fails', async () => {
371
- const attempts: FundingProvider.ProviderAttempt[] = []
372
- const quotes = await FundingProvider.getQuotes({
585
+ const attempts: RoutesProvider.ProviderAttempt[] = []
586
+ const quotes = await RoutesProvider.getQuotes({
373
587
  ...baseUsdcRequest,
374
588
  onAttempt: (attempt) => attempts.push(attempt),
375
589
  provider: undefined,
@@ -398,7 +612,7 @@ describe('getQuotes', () => {
398
612
  ])
399
613
  })
400
614
 
401
- test('does not let attempt observers change quote outcomes', async () => {
615
+ test('does not let observers change quote outcomes', async () => {
402
616
  const providers_success = [
403
617
  withGetQuote('relay', async () => ({
404
618
  destinationAmount: '990000',
@@ -407,46 +621,52 @@ describe('getQuotes', () => {
407
621
  })),
408
622
  ]
409
623
  await expect(
410
- FundingProvider.getQuotes({
624
+ RoutesProvider.getQuotes({
411
625
  ...baseUsdcRequest,
412
626
  onAttempt() {
413
627
  throw new Error('observer failed')
414
628
  },
629
+ onResult() {
630
+ throw new Error('observer failed')
631
+ },
415
632
  providers: providers_success,
416
633
  }),
417
634
  ).resolves.toHaveLength(1)
418
635
 
419
636
  await expect(
420
- FundingProvider.getQuotes({
637
+ RoutesProvider.getQuotes({
421
638
  ...baseUsdcRequest,
422
639
  onAttempt() {
423
640
  throw new Error('observer failed')
424
641
  },
642
+ onResult() {
643
+ throw new Error('observer failed')
644
+ },
425
645
  providers: [
426
646
  withGetQuote('relay', async () => {
427
647
  throw new Error('provider failed')
428
648
  }),
429
649
  ],
430
650
  }),
431
- ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingProvider.ProviderQuoteError]`)
651
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.ProviderQuoteError]`)
432
652
  })
433
653
  })
434
654
 
435
655
  describe('createDepositAddress', () => {
436
656
  test('rejects invalid base-unit amounts', async () => {
437
657
  await expect(
438
- FundingProvider.createDepositAddress({
658
+ RoutesProvider.createDepositAddress({
439
659
  ...depositAddressOptions,
440
660
  amount: '10.5',
441
661
  providers: [withCreateDepositAddress('relay', async () => depositAddressResult())],
442
662
  }),
443
- ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingProvider.InvalidAmountError]`)
663
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.InvalidAmountError]`)
444
664
  })
445
665
 
446
666
  test('provisions one deterministic capability-enabled candidate', async () => {
447
- const attempts: FundingProvider.ProviderAttempt[] = []
448
- let seen: FundingProvider.createDepositAddress.Parameters | undefined
449
- const selection = await FundingProvider.createDepositAddress({
667
+ const attempts: RoutesProvider.ProviderAttempt[] = []
668
+ let seen: RoutesProvider.createDepositAddress.Parameters | undefined
669
+ const selection = await RoutesProvider.createDepositAddress({
450
670
  ...depositAddressOptions,
451
671
  onAttempt: (attempt) => attempts.push(attempt),
452
672
  providers: [
@@ -489,14 +709,14 @@ describe('createDepositAddress', () => {
489
709
  })
490
710
 
491
711
  test('returns no selection when the provider reports no route', async () => {
492
- const attempts: FundingProvider.ProviderAttempt[] = []
712
+ const attempts: RoutesProvider.ProviderAttempt[] = []
493
713
  await expect(
494
- FundingProvider.createDepositAddress({
714
+ RoutesProvider.createDepositAddress({
495
715
  ...depositAddressOptions,
496
716
  onAttempt: (attempt) => attempts.push(attempt),
497
717
  providers: [
498
718
  withCreateDepositAddress('relay', async () => {
499
- throw new FundingProvider.ProviderUnavailableError()
719
+ throw new RoutesProvider.ProviderUnavailableError()
500
720
  }),
501
721
  ],
502
722
  }),
@@ -508,7 +728,7 @@ describe('createDepositAddress', () => {
508
728
 
509
729
  test('rejects malformed provider responses', async () => {
510
730
  await expect(
511
- FundingProvider.createDepositAddress({
731
+ RoutesProvider.createDepositAddress({
512
732
  ...depositAddressOptions,
513
733
  providers: [
514
734
  withCreateDepositAddress('relay', async () => ({
@@ -528,7 +748,7 @@ describe('createDepositAddress', () => {
528
748
 
529
749
  test('rejects provider addresses that do not match the source chain', async () => {
530
750
  await expect(
531
- FundingProvider.createDepositAddress({
751
+ RoutesProvider.createDepositAddress({
532
752
  ...depositAddressOptions,
533
753
  providers: [
534
754
  withCreateDepositAddress('relay', async () => ({
@@ -544,7 +764,7 @@ describe('createDepositAddress', () => {
544
764
 
545
765
  test('rejects provider minimums above the estimated destination amount', async () => {
546
766
  await expect(
547
- FundingProvider.createDepositAddress({
767
+ RoutesProvider.createDepositAddress({
548
768
  ...depositAddressOptions,
549
769
  providers: [
550
770
  withCreateDepositAddress('relay', async () => ({
@@ -560,7 +780,7 @@ describe('createDepositAddress', () => {
560
780
 
561
781
  test('rejects expired provider terms', async () => {
562
782
  await expect(
563
- FundingProvider.createDepositAddress({
783
+ RoutesProvider.createDepositAddress({
564
784
  ...depositAddressOptions,
565
785
  providers: [
566
786
  withCreateDepositAddress('relay', async () => ({
@@ -576,7 +796,7 @@ describe('createDepositAddress', () => {
576
796
 
577
797
  test('rejects invalid refund addresses before calling the provider', async () => {
578
798
  await expect(
579
- FundingProvider.createDepositAddress({
799
+ RoutesProvider.createDepositAddress({
580
800
  ...depositAddressOptions,
581
801
  providers: [
582
802
  withCreateDepositAddress('relay', async () => {
@@ -585,7 +805,7 @@ describe('createDepositAddress', () => {
585
805
  ],
586
806
  refundAddress: `0x${'11'.repeat(20)}`,
587
807
  }),
588
- ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingProvider.InvalidRefundAddressError]`)
808
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.InvalidRefundAddressError]`)
589
809
  })
590
810
  })
591
811
 
@@ -651,9 +871,9 @@ describe('getDepositAddressCandidates', () => {
651
871
 
652
872
  expect(
653
873
  routes.map((route) => {
654
- const candidate = FundingProvider.getDepositAddressCandidates({
874
+ const candidate = RoutesProvider.getDepositAddressCandidates({
655
875
  ...route,
656
- catalog: TestFunding.snapshot,
876
+ catalog: TestRoutes.snapshot,
657
877
  destinationChainId: 4217,
658
878
  providers: [providers[1]!],
659
879
  })[0]?.candidate
@@ -727,19 +947,19 @@ describe('getDepositAddressCandidates', () => {
727
947
  })
728
948
 
729
949
  test('requires both catalog and provider capability', () => {
730
- const quoteOnly = FundingProvider.from({
950
+ const quoteOnly = RoutesProvider.from({
731
951
  getQuote: (input, signal) => providers[1]!.getQuote(input, signal),
732
952
  id: 'relay',
733
953
  name: 'Relay',
734
954
  })
735
955
  expect(
736
- FundingProvider.getDepositAddressCandidates({
956
+ RoutesProvider.getDepositAddressCandidates({
737
957
  ...depositAddressOptions,
738
958
  providers: [quoteOnly],
739
959
  }),
740
960
  ).toEqual([])
741
961
  expect(
742
- FundingProvider.getDepositAddressCandidates({
962
+ RoutesProvider.getDepositAddressCandidates({
743
963
  ...depositAddressOptions,
744
964
  providers: [providers[1]!],
745
965
  }),
@@ -748,8 +968,21 @@ describe('getDepositAddressCandidates', () => {
748
968
  })
749
969
 
750
970
  describe('prepareTransfer', () => {
971
+ test.each([
972
+ ['recipient', { recipient: 'invalid' }, 'RoutesProvider.InvalidRecipientAddressError'],
973
+ ['sender', { sender: 'invalid' }, 'RoutesProvider.InvalidSenderAddressError'],
974
+ ] as const)('validates the %s against its route chain', async (_field, input, name) => {
975
+ await expect(
976
+ RoutesProvider.prepareTransfer({
977
+ ...prepareOptions,
978
+ ...input,
979
+ providers: [withPrepareTransfer('relay', async () => preparedResult())],
980
+ }),
981
+ ).rejects.toMatchObject({ name })
982
+ })
983
+
751
984
  test('validates preparation results at the provider boundary', async () => {
752
- const transfer = FundingProvider.prepareTransfer({
985
+ const transfer = RoutesProvider.prepareTransfer({
753
986
  ...prepareOptions,
754
987
  providers: [
755
988
  withPrepareTransfer(
@@ -760,14 +993,18 @@ describe('prepareTransfer', () => {
760
993
  })
761
994
 
762
995
  await expect(transfer).rejects.toMatchObject({
763
- providerFailure: { failure: 'payload', id: 'relay', operation: 'prepareTransfer' },
996
+ providerFailure: {
997
+ failure: 'payload',
998
+ id: 'relay',
999
+ operation: 'prepareTransfer',
1000
+ },
764
1001
  })
765
1002
  })
766
1003
 
767
1004
  test('enforces provider-style slippage rounding', async () => {
768
- const inputs: FundingProvider.prepareTransfer.Parameters[] = []
1005
+ const inputs: RoutesProvider.prepareTransfer.Parameters[] = []
769
1006
  const prepare = (destinationAmountMin: string) =>
770
- FundingProvider.prepareTransfer({
1007
+ RoutesProvider.prepareTransfer({
771
1008
  ...prepareOptions,
772
1009
  providers: [
773
1010
  withPrepareTransfer('relay', async (input) => {
@@ -786,6 +1023,8 @@ describe('prepareTransfer', () => {
786
1023
  providerFailure: { failure: 'payload', id: 'relay', operation: 'prepareTransfer' },
787
1024
  })
788
1025
  await expect(prepare('9999')).resolves.toMatchObject({
1026
+ bestDestinationAmount: '10001',
1027
+ preparedCount: 1,
789
1028
  result: { destinationAmount: '10001', destinationAmountMin: '9999' },
790
1029
  })
791
1030
  await expect(prepare('10000')).resolves.toMatchObject({
@@ -802,7 +1041,7 @@ describe('prepareTransfer', () => {
802
1041
  vi.setSystemTime(new Date('2026-01-01T00:01:00.000Z'))
803
1042
  try {
804
1043
  await expect(
805
- FundingProvider.prepareTransfer({
1044
+ RoutesProvider.prepareTransfer({
806
1045
  ...prepareOptions,
807
1046
  providers: [
808
1047
  withPrepareTransfer('relay', async () => ({ ...preparedResult(), ...quote })),
@@ -817,14 +1056,14 @@ describe('prepareTransfer', () => {
817
1056
  })
818
1057
 
819
1058
  test('returns no selection when every provider confirms unavailability', async () => {
820
- const attempts: FundingProvider.ProviderAttempt[] = []
1059
+ const attempts: RoutesProvider.ProviderAttempt[] = []
821
1060
  await expect(
822
- FundingProvider.prepareTransfer({
1061
+ RoutesProvider.prepareTransfer({
823
1062
  ...prepareOptions,
824
1063
  onAttempt: (attempt) => attempts.push(attempt),
825
1064
  providers: [
826
1065
  withPrepareTransfer('relay', async () => {
827
- throw new FundingProvider.ProviderUnavailableError()
1066
+ throw new RoutesProvider.ProviderUnavailableError()
828
1067
  }),
829
1068
  ],
830
1069
  }),
@@ -837,7 +1076,7 @@ describe('prepareTransfer', () => {
837
1076
  test('accepts preparations without correlation', async () => {
838
1077
  const { correlation: _correlation, ...result } = preparedResult()
839
1078
  const spender = `0x${'44'.repeat(20)}`
840
- const selected = FundingProvider.prepareTransfer({
1079
+ const selected = RoutesProvider.prepareTransfer({
841
1080
  ...prepareOptions,
842
1081
  providers: [
843
1082
  withPrepareTransfer('relay', async () => {
@@ -864,24 +1103,72 @@ describe('prepareTransfer', () => {
864
1103
  })
865
1104
 
866
1105
  describe('getPrepareCandidates', () => {
1106
+ test('selects Tempo as the source for an outbound destination chain', () => {
1107
+ const inbound = TestRoutes.data.routes.find(
1108
+ (route) =>
1109
+ route.providerId === 'stargate' &&
1110
+ route.sourceChainId === 'eip155:8453' &&
1111
+ route.sourceTokenId === 'usdc' &&
1112
+ route.destinationTokenId === 'usdce' &&
1113
+ route.capabilities?.transfer,
1114
+ )!
1115
+ const catalog = RoutesCatalog.compile({
1116
+ catalog: {
1117
+ id: 'default',
1118
+ updatedAt: '2026-01-01T00:00:00.000Z',
1119
+ version: 'outbound-transfer',
1120
+ },
1121
+ ...TestRoutes.data,
1122
+ routes: [
1123
+ ...TestRoutes.data.routes,
1124
+ {
1125
+ ...inbound,
1126
+ destinationChainId: inbound.sourceChainId,
1127
+ destinationTokenId: inbound.sourceTokenId,
1128
+ sourceChainId: inbound.destinationChainId,
1129
+ sourceTokenId: inbound.destinationTokenId,
1130
+ },
1131
+ ],
1132
+ })
1133
+
1134
+ const [selected] = RoutesProvider.getPrepareCandidates({
1135
+ catalog,
1136
+ destinationChain: 'base',
1137
+ destinationToken: 'USDC',
1138
+ method: 'transaction',
1139
+ mode: 'exactSource',
1140
+ providers: [withPrepareTransfer('stargate', async () => preparedResult())],
1141
+ sourceAmount: '1000000',
1142
+ sourceChain: 'tempo',
1143
+ sourceToken: 'USDC.e',
1144
+ })
1145
+
1146
+ expect(selected?.candidate).toMatchObject({
1147
+ destinationChain: { id: 'eip155:8453' },
1148
+ destinationToken: { symbol: 'USDC' },
1149
+ sourceChain: { id: 'eip155:4217' },
1150
+ sourceToken: { symbol: 'USDC.e' },
1151
+ })
1152
+ })
1153
+
867
1154
  test('restricts candidates to the requested provider', () => {
868
1155
  const relay = withPrepareTransfer('relay', async () => preparedResult())
869
1156
  const stargate = withPrepareTransfer('stargate', async () => preparedResult())
870
- const route = TestFunding.data.routes.find(
1157
+ const route = TestRoutes.data.routes.find(
871
1158
  (entry) => entry.providerId === 'relay' && entry.capabilities?.transfer,
872
1159
  )!
873
- const catalog = FundingCatalog.compile({
1160
+ const catalog = RoutesCatalog.compile({
874
1161
  catalog: {
875
1162
  id: 'default',
876
1163
  updatedAt: '2026-01-01T00:00:00.000Z',
877
1164
  version: 'test',
878
1165
  },
879
- ...TestFunding.data,
880
- routes: [...TestFunding.data.routes, { ...route, providerId: 'stargate' }],
1166
+ ...TestRoutes.data,
1167
+ routes: [...TestRoutes.data.routes, { ...route, providerId: 'stargate' }],
881
1168
  })
882
1169
 
883
1170
  expect(
884
- FundingProvider.getPrepareCandidates({
1171
+ RoutesProvider.getPrepareCandidates({
885
1172
  ...prepareOptions,
886
1173
  catalog,
887
1174
  provider: 'stargate',
@@ -893,30 +1180,30 @@ describe('getPrepareCandidates', () => {
893
1180
  test('restricts candidates to the selected destination chain', () => {
894
1181
  const provider = withPrepareTransfer('relay', async () => preparedResult())
895
1182
  expect(
896
- FundingProvider.getPrepareCandidates({
1183
+ RoutesProvider.getPrepareCandidates({
897
1184
  ...prepareOptions,
898
- destinationChainId: 4217,
1185
+ destinationChain: 'tempo',
899
1186
  providers: [provider],
900
1187
  }),
901
1188
  ).toHaveLength(1)
902
- expect(
903
- FundingProvider.getPrepareCandidates({
1189
+ expect(() =>
1190
+ RoutesProvider.getPrepareCandidates({
904
1191
  ...prepareOptions,
905
- destinationChainId: 421700001,
1192
+ destinationChain: 'eip155:421700001',
906
1193
  providers: [provider],
907
1194
  }),
908
- ).toEqual([])
1195
+ ).toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.UnsupportedDestinationChainError]`)
909
1196
  })
910
1197
 
911
1198
  test('uses transfer modes without treating deposit addresses as transfers', () => {
912
- const catalog = FundingCatalog.compile({
1199
+ const catalog = RoutesCatalog.compile({
913
1200
  catalog: {
914
1201
  id: 'default',
915
1202
  updatedAt: '2026-01-01T00:00:00.000Z',
916
1203
  version: 'test',
917
1204
  },
918
- ...TestFunding.data,
919
- routes: TestFunding.data.routes.map((route) =>
1205
+ ...TestRoutes.data,
1206
+ routes: TestRoutes.data.routes.map((route) =>
920
1207
  route.capabilities
921
1208
  ? {
922
1209
  ...route,
@@ -930,7 +1217,7 @@ describe('getPrepareCandidates', () => {
930
1217
  })
931
1218
  const provider = withPrepareTransfer('relay', async () => preparedResult())
932
1219
  const candidates = (mode: 'exactDestination' | 'exactSource') =>
933
- FundingProvider.getPrepareCandidates({
1220
+ RoutesProvider.getPrepareCandidates({
934
1221
  ...prepareOptions,
935
1222
  catalog,
936
1223
  mode,
@@ -940,19 +1227,19 @@ describe('getPrepareCandidates', () => {
940
1227
  expect(candidates('exactDestination')).toHaveLength(1)
941
1228
  expect(candidates('exactSource')).toEqual([])
942
1229
 
943
- const depositAddressOnly = FundingCatalog.compile({
1230
+ const depositAddressOnly = RoutesCatalog.compile({
944
1231
  catalog: {
945
1232
  id: 'default',
946
1233
  updatedAt: '2026-01-01T00:00:00.000Z',
947
1234
  version: 'test',
948
1235
  },
949
- ...TestFunding.data,
950
- routes: TestFunding.data.routes.map((route) =>
1236
+ ...TestRoutes.data,
1237
+ routes: TestRoutes.data.routes.map((route) =>
951
1238
  route.capabilities ? { ...route, capabilities: { depositAddress: true } } : route,
952
1239
  ),
953
1240
  })
954
1241
  expect(
955
- FundingProvider.getPrepareCandidates({
1242
+ RoutesProvider.getPrepareCandidates({
956
1243
  ...prepareOptions,
957
1244
  catalog: depositAddressOnly,
958
1245
  providers: [provider],
@@ -961,21 +1248,21 @@ describe('getPrepareCandidates', () => {
961
1248
  })
962
1249
  })
963
1250
 
964
- function stableAttempt(attempt: FundingProvider.ProviderAttempt) {
1251
+ function stableAttempt(attempt: RoutesProvider.ProviderAttempt) {
965
1252
  const { durationMs: _durationMs, provider, ...rest } = attempt
966
1253
  return { ...rest, provider: provider.id }
967
1254
  }
968
1255
 
969
1256
  function withGetQuote(
970
- id: FundingProvider.ProviderId,
971
- getQuote: FundingProvider.Provider['getQuote'],
1257
+ id: RoutesProvider.ProviderId,
1258
+ getQuote: RoutesProvider.Provider['getQuote'],
972
1259
  ) {
973
1260
  const provider = providers.find((entry) => entry.id === id)
974
1261
  if (!provider) throw new Error(`Missing ${id} provider`)
975
- return FundingProvider.from({ ...provider, getQuote })
1262
+ return RoutesProvider.from({ ...provider, getQuote })
976
1263
  }
977
1264
 
978
- function depositAddressResult(): FundingProvider.createDepositAddress.ReturnType {
1265
+ function depositAddressResult(): RoutesProvider.createDepositAddress.ReturnType {
979
1266
  return {
980
1267
  address: 'TJRabPrwbZy45sbavfcjinPJC18kjpRTv8',
981
1268
  correlation: { requestId: 'request_1' },
@@ -987,15 +1274,15 @@ function depositAddressResult(): FundingProvider.createDepositAddress.ReturnType
987
1274
  }
988
1275
 
989
1276
  function withCreateDepositAddress(
990
- id: FundingProvider.ProviderId,
991
- createDepositAddress: NonNullable<FundingProvider.Provider['createDepositAddress']>,
1277
+ id: RoutesProvider.ProviderId,
1278
+ createDepositAddress: NonNullable<RoutesProvider.Provider['createDepositAddress']>,
992
1279
  ) {
993
1280
  const provider = providers.find((entry) => entry.id === id)
994
1281
  if (!provider) throw new Error(`Missing ${id} provider`)
995
- return FundingProvider.from({ ...provider, createDepositAddress })
1282
+ return RoutesProvider.from({ ...provider, createDepositAddress })
996
1283
  }
997
1284
 
998
- function preparedResult(): FundingProvider.prepareTransfer.ReturnType {
1285
+ function preparedResult(): RoutesProvider.prepareTransfer.ReturnType {
999
1286
  return {
1000
1287
  action: {
1001
1288
  calls: [{ data: '0xe8017952', to: `0x${'44'.repeat(20)}`, value: '0x0' }],
@@ -1010,17 +1297,17 @@ function preparedResult(): FundingProvider.prepareTransfer.ReturnType {
1010
1297
  }
1011
1298
 
1012
1299
  function withPrepareTransfer(
1013
- id: FundingProvider.ProviderId,
1014
- prepareTransfer: NonNullable<FundingProvider.Provider['prepareTransfer']>,
1300
+ id: RoutesProvider.ProviderId,
1301
+ prepareTransfer: NonNullable<RoutesProvider.Provider['prepareTransfer']>,
1015
1302
  ) {
1016
1303
  const provider = providers.find((entry) => entry.id === id)
1017
1304
  if (!provider) throw new Error(`Missing ${id} provider`)
1018
- return FundingProvider.from({ ...provider, prepareTransfer })
1305
+ return RoutesProvider.from({ ...provider, prepareTransfer })
1019
1306
  }
1020
1307
 
1021
1308
  describe('getChains', () => {
1022
1309
  test('derives custom chain and token inventory from provider routes', () => {
1023
- const catalog = FundingCatalog.compile({
1310
+ const catalog = RoutesCatalog.compile({
1024
1311
  catalog: {
1025
1312
  id: 'default',
1026
1313
  updatedAt: '2026-01-01T00:00:00.000Z',
@@ -1086,7 +1373,7 @@ describe('getChains', () => {
1086
1373
  },
1087
1374
  ],
1088
1375
  })
1089
- const provider = FundingProvider.from({
1376
+ const provider = RoutesProvider.from({
1090
1377
  id: 'custom',
1091
1378
  name: 'Custom',
1092
1379
  async getQuote() {
@@ -1094,7 +1381,7 @@ describe('getChains', () => {
1094
1381
  },
1095
1382
  })
1096
1383
 
1097
- expect(FundingProvider.getChains({ catalog, providers: [provider] })).toMatchInlineSnapshot(`
1384
+ expect(RoutesProvider.getChains({ catalog, providers: [provider] })).toMatchInlineSnapshot(`
1098
1385
  [
1099
1386
  {
1100
1387
  "addressFormat": "hex",
@@ -1120,7 +1407,7 @@ describe('getChains', () => {
1120
1407
 
1121
1408
  test('returns only chain and token inputs with quote inventory', () => {
1122
1409
  expect(
1123
- FundingProvider.getChains({ catalog: TestFunding.snapshot, providers }).map(
1410
+ RoutesProvider.getChains({ catalog: TestRoutes.snapshot, providers }).map(
1124
1411
  (chain) => chain.id,
1125
1412
  ),
1126
1413
  ).toEqual([
@@ -1130,11 +1417,12 @@ describe('getChains', () => {
1130
1417
  'eip155:137',
1131
1418
  'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
1132
1419
  'tron:0x2b6653dc',
1420
+ 'eip155:4217',
1133
1421
  ])
1134
1422
  })
1135
1423
 
1136
1424
  test('uses chain-specific token keys for non-EVM inventory', () => {
1137
- const chains = FundingProvider.getChains({ catalog: TestFunding.snapshot, providers })
1425
+ const chains = RoutesProvider.getChains({ catalog: TestRoutes.snapshot, providers })
1138
1426
  expect(chains.find((chain) => chain.kind === 'solana')?.tokens[0]?.tokenKey).toBe(
1139
1427
  'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
1140
1428
  )
@@ -1145,18 +1433,66 @@ describe('getChains', () => {
1145
1433
  })
1146
1434
 
1147
1435
  describe('getQuoteCandidates', () => {
1436
+ test('selects Tempo as the source for an outbound destination chain', () => {
1437
+ const inbound = TestRoutes.data.routes.find(
1438
+ (route) =>
1439
+ route.providerId === 'relay' &&
1440
+ route.sourceChainId === 'eip155:8453' &&
1441
+ route.sourceTokenId === 'usdc' &&
1442
+ route.destinationTokenId === 'usdce',
1443
+ )!
1444
+ const catalog = RoutesCatalog.compile({
1445
+ catalog: {
1446
+ id: 'default',
1447
+ updatedAt: '2026-01-01T00:00:00.000Z',
1448
+ version: 'outbound',
1449
+ },
1450
+ ...TestRoutes.data,
1451
+ routes: [
1452
+ ...TestRoutes.data.routes,
1453
+ {
1454
+ ...inbound,
1455
+ destinationChainId: inbound.sourceChainId,
1456
+ destinationTokenId: inbound.sourceTokenId,
1457
+ sourceChainId: inbound.destinationChainId,
1458
+ sourceTokenId: inbound.destinationTokenId,
1459
+ },
1460
+ ],
1461
+ })
1462
+
1463
+ const [candidate] = RoutesProvider.getQuoteCandidates({
1464
+ catalog,
1465
+ destinationChain: 'base',
1466
+ destinationToken: 'USDC',
1467
+ provider: 'relay',
1468
+ providers,
1469
+ sourceAmount: '1000000',
1470
+ sourceAmountUnits: 'baseUnits',
1471
+ sourceChain: 'tempo',
1472
+ sourceToken: 'USDC.e',
1473
+ })
1474
+
1475
+ expect(candidate).toMatchObject({
1476
+ destinationChain: { id: 'eip155:8453' },
1477
+ destinationToken: { symbol: 'USDC' },
1478
+ id: 'tempo-usdce-base-usdc-relay',
1479
+ sourceChain: { id: 'eip155:4217' },
1480
+ sourceToken: { symbol: 'USDC.e' },
1481
+ })
1482
+ })
1483
+
1148
1484
  test('validates base-unit syntax without configured providers', () => {
1149
1485
  expect(() =>
1150
- FundingProvider.getQuoteCandidates({
1486
+ RoutesProvider.getQuoteCandidates({
1151
1487
  ...baseUsdcRequest,
1152
1488
  providers: [],
1153
1489
  sourceAmount: '1.5',
1154
1490
  }),
1155
- ).toThrowErrorMatchingInlineSnapshot(`[FundingProvider.InvalidAmountError]`)
1491
+ ).toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.InvalidAmountError]`)
1156
1492
  })
1157
1493
 
1158
1494
  test('converts decimal source amounts with token precision', () => {
1159
- const [candidate] = FundingProvider.getQuoteCandidates({
1495
+ const [candidate] = RoutesProvider.getQuoteCandidates({
1160
1496
  ...baseUsdcRequest,
1161
1497
  sourceAmount: '1.25',
1162
1498
  sourceAmountUnits: 'decimal',
@@ -1167,7 +1503,7 @@ describe('getQuoteCandidates', () => {
1167
1503
  })
1168
1504
 
1169
1505
  test('carries provider route configuration without duplicating token metadata', () => {
1170
- const [candidate] = FundingProvider.getQuoteCandidates({
1506
+ const [candidate] = RoutesProvider.getQuoteCandidates({
1171
1507
  ...baseUsdcRequest,
1172
1508
  provider: 'stargate',
1173
1509
  providers,
@@ -1180,20 +1516,20 @@ describe('getQuoteCandidates', () => {
1180
1516
  })
1181
1517
 
1182
1518
  test('resolves normalized catalog aliases', () => {
1183
- const catalog = FundingCatalog.compile({
1519
+ const catalog = RoutesCatalog.compile({
1184
1520
  catalog: {
1185
1521
  id: 'default',
1186
1522
  updatedAt: '2026-01-01T00:00:00.000Z',
1187
1523
  version: 'aliases',
1188
1524
  },
1189
- ...TestFunding.data,
1190
- chains: TestFunding.data.chains.map((chain) =>
1525
+ ...TestRoutes.data,
1526
+ chains: TestRoutes.data.chains.map((chain) =>
1191
1527
  chain.id === 'eip155:56' ? { ...chain, aliases: ['BSC'] } : chain,
1192
1528
  ),
1193
1529
  })
1194
1530
 
1195
1531
  expect(
1196
- FundingProvider.getQuoteCandidates({
1532
+ RoutesProvider.getQuoteCandidates({
1197
1533
  ...baseUsdcRequest,
1198
1534
  catalog,
1199
1535
  providers,
@@ -1204,15 +1540,15 @@ describe('getQuoteCandidates', () => {
1204
1540
 
1205
1541
  test('uses canonical token slugs in quote ids', () => {
1206
1542
  const bridgedAddress = '0x1111111111111111111111111111111111111111'
1207
- const catalog = FundingCatalog.compile({
1543
+ const catalog = RoutesCatalog.compile({
1208
1544
  catalog: {
1209
1545
  id: 'default',
1210
1546
  updatedAt: '2026-01-01T00:00:00.000Z',
1211
1547
  version: 'duplicate-symbols',
1212
1548
  },
1213
- ...TestFunding.data,
1549
+ ...TestRoutes.data,
1214
1550
  chainTokens: [
1215
- ...TestFunding.data.chainTokens,
1551
+ ...TestRoutes.data.chainTokens,
1216
1552
  {
1217
1553
  address: bridgedAddress,
1218
1554
  chainId: 'eip155:8453',
@@ -1223,7 +1559,7 @@ describe('getQuoteCandidates', () => {
1223
1559
  },
1224
1560
  ],
1225
1561
  routes: [
1226
- ...TestFunding.data.routes,
1562
+ ...TestRoutes.data.routes,
1227
1563
  {
1228
1564
  destinationChainId: 'eip155:4217',
1229
1565
  destinationTokenId: 'usdce',
@@ -1233,7 +1569,7 @@ describe('getQuoteCandidates', () => {
1233
1569
  },
1234
1570
  ],
1235
1571
  tokens: [
1236
- ...TestFunding.data.tokens,
1572
+ ...TestRoutes.data.tokens,
1237
1573
  {
1238
1574
  currency: 'USD',
1239
1575
  id: 'usdc-bridged',
@@ -1243,15 +1579,15 @@ describe('getQuoteCandidates', () => {
1243
1579
  ],
1244
1580
  })
1245
1581
  const ids = [
1246
- FundingProvider.getQuoteCandidates({
1582
+ RoutesProvider.getQuoteCandidates({
1247
1583
  ...baseUsdcRequest,
1248
1584
  catalog,
1249
1585
  providers,
1250
- sourceToken: TestFunding.data.chainTokens.find(
1586
+ sourceToken: TestRoutes.data.chainTokens.find(
1251
1587
  (token) => token.chainId === 'eip155:8453' && token.tokenId === 'usdc',
1252
1588
  )!.address,
1253
1589
  })[0]?.id,
1254
- FundingProvider.getQuoteCandidates({
1590
+ RoutesProvider.getQuoteCandidates({
1255
1591
  ...baseUsdcRequest,
1256
1592
  catalog,
1257
1593
  providers,
@@ -1264,18 +1600,18 @@ describe('getQuoteCandidates', () => {
1264
1600
 
1265
1601
  test('rejects decimal source amounts beyond token precision', () => {
1266
1602
  expect(() =>
1267
- FundingProvider.getQuoteCandidates({
1603
+ RoutesProvider.getQuoteCandidates({
1268
1604
  ...baseUsdcRequest,
1269
1605
  sourceAmount: '1.0000001',
1270
1606
  sourceAmountUnits: 'decimal',
1271
1607
  providers,
1272
1608
  }),
1273
- ).toThrowErrorMatchingInlineSnapshot(`[FundingProvider.InvalidAmountError]`)
1609
+ ).toThrowErrorMatchingInlineSnapshot(`[RoutesProvider.InvalidAmountError]`)
1274
1610
  })
1275
1611
 
1276
1612
  test('round-trips the advertised Solana chain and token ids', () => {
1277
- const [candidate] = FundingProvider.getQuoteCandidates({
1278
- catalog: TestFunding.snapshot,
1613
+ const [candidate] = RoutesProvider.getQuoteCandidates({
1614
+ catalog: TestRoutes.snapshot,
1279
1615
  providers,
1280
1616
  provider: 'rhino',
1281
1617
  sourceAmount: '1000000',
@@ -1290,8 +1626,8 @@ describe('getQuoteCandidates', () => {
1290
1626
 
1291
1627
  test('keeps non-EVM token identifiers case-sensitive', () => {
1292
1628
  expect(
1293
- FundingProvider.getQuoteCandidates({
1294
- catalog: TestFunding.snapshot,
1629
+ RoutesProvider.getQuoteCandidates({
1630
+ catalog: TestRoutes.snapshot,
1295
1631
  providers,
1296
1632
  provider: 'rhino',
1297
1633
  sourceAmount: '1000000',
@@ -1303,8 +1639,8 @@ describe('getQuoteCandidates', () => {
1303
1639
  })
1304
1640
 
1305
1641
  test('resolves the complete Tron token key', () => {
1306
- const [candidate] = FundingProvider.getQuoteCandidates({
1307
- catalog: TestFunding.snapshot,
1642
+ const [candidate] = RoutesProvider.getQuoteCandidates({
1643
+ catalog: TestRoutes.snapshot,
1308
1644
  providers,
1309
1645
  destinationToken: 'USDT0',
1310
1646
  provider: 'rhino',
@@ -1319,8 +1655,8 @@ describe('getQuoteCandidates', () => {
1319
1655
 
1320
1656
  test('selects proven Squid stablecoin corridors', () => {
1321
1657
  const candidates = [
1322
- FundingProvider.getQuoteCandidates({
1323
- catalog: TestFunding.snapshot,
1658
+ RoutesProvider.getQuoteCandidates({
1659
+ catalog: TestRoutes.snapshot,
1324
1660
  providers,
1325
1661
  destinationToken: 'USDC.e',
1326
1662
  provider: 'squid',
@@ -1329,8 +1665,8 @@ describe('getQuoteCandidates', () => {
1329
1665
  sourceChain: 'base',
1330
1666
  sourceToken: 'USDC',
1331
1667
  })[0],
1332
- FundingProvider.getQuoteCandidates({
1333
- catalog: TestFunding.snapshot,
1668
+ RoutesProvider.getQuoteCandidates({
1669
+ catalog: TestRoutes.snapshot,
1334
1670
  providers,
1335
1671
  destinationToken: 'USDT0',
1336
1672
  provider: 'squid',
@@ -1349,8 +1685,8 @@ describe('getQuoteCandidates', () => {
1349
1685
 
1350
1686
  test('selects proven Symbiosis stablecoin corridors', () => {
1351
1687
  const candidates = [
1352
- FundingProvider.getQuoteCandidates({
1353
- catalog: TestFunding.snapshot,
1688
+ RoutesProvider.getQuoteCandidates({
1689
+ catalog: TestRoutes.snapshot,
1354
1690
  providers,
1355
1691
  destinationToken: 'USDC.e',
1356
1692
  provider: 'symbiosis',
@@ -1359,8 +1695,8 @@ describe('getQuoteCandidates', () => {
1359
1695
  sourceChain: 'base',
1360
1696
  sourceToken: 'USDC',
1361
1697
  })[0],
1362
- FundingProvider.getQuoteCandidates({
1363
- catalog: TestFunding.snapshot,
1698
+ RoutesProvider.getQuoteCandidates({
1699
+ catalog: TestRoutes.snapshot,
1364
1700
  providers,
1365
1701
  destinationToken: 'USDT0',
1366
1702
  provider: 'symbiosis',
@@ -1369,8 +1705,8 @@ describe('getQuoteCandidates', () => {
1369
1705
  sourceChain: 'ethereum',
1370
1706
  sourceToken: 'USDT',
1371
1707
  })[0],
1372
- FundingProvider.getQuoteCandidates({
1373
- catalog: TestFunding.snapshot,
1708
+ RoutesProvider.getQuoteCandidates({
1709
+ catalog: TestRoutes.snapshot,
1374
1710
  providers,
1375
1711
  destinationToken: 'USDT0',
1376
1712
  provider: 'symbiosis',
@@ -1391,7 +1727,7 @@ describe('getQuoteCandidates', () => {
1391
1727
 
1392
1728
  describe('getProviders', () => {
1393
1729
  test('lists supplied providers', () => {
1394
- expect(FundingProvider.getProviders({ catalog: TestFunding.snapshot, providers }))
1730
+ expect(RoutesProvider.getProviders({ catalog: TestRoutes.snapshot, providers }))
1395
1731
  .toMatchInlineSnapshot(`
1396
1732
  [
1397
1733
  {
@@ -1423,19 +1759,19 @@ describe('getProviders', () => {
1423
1759
  })
1424
1760
 
1425
1761
  test('ignores routes for unregistered provider ids', () => {
1426
- const catalog = FundingCatalog.compile({
1762
+ const catalog = RoutesCatalog.compile({
1427
1763
  catalog: {
1428
1764
  id: 'default',
1429
1765
  updatedAt: '2026-01-01T00:00:00.000Z',
1430
1766
  version: 'test',
1431
1767
  },
1432
- ...TestFunding.data,
1433
- routes: [{ ...TestFunding.data.routes[0]!, providerId: 'unknown' }],
1768
+ ...TestRoutes.data,
1769
+ routes: [{ ...TestRoutes.data.routes[0]!, providerId: 'unknown' }],
1434
1770
  })
1435
1771
 
1436
1772
  expect({
1437
- chains: FundingProvider.getChains({ catalog, providers: [providers[1]!] }),
1438
- providers: FundingProvider.getProviders({ catalog, providers: [providers[1]!] }),
1773
+ chains: RoutesProvider.getChains({ catalog, providers: [providers[1]!] }),
1774
+ providers: RoutesProvider.getProviders({ catalog, providers: [providers[1]!] }),
1439
1775
  }).toEqual({ chains: [], providers: [] })
1440
1776
  })
1441
1777
  })