tapimo 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1160) 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 +12466 -10374
  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 -546
  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 +179 -27
  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 +166 -160
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +27 -7
  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 +201 -149
  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 +629 -299
  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 +116 -116
  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 +113 -108
  96. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  97. package/dist/apps/data/routes/fee-amm.js +41 -21
  98. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  99. package/dist/apps/data/routes/indexer.d.ts +142 -17
  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/receipts.d.ts +235 -235
  104. package/dist/apps/data/routes/rpc.d.ts +507 -33
  105. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  106. package/dist/apps/data/routes/rpc.js +309 -165
  107. package/dist/apps/data/routes/rpc.js.map +1 -1
  108. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  109. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  110. package/dist/apps/data/routes/tokenlist.js +68 -11
  111. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  112. package/dist/apps/data/routes/tokens.d.ts +2 -0
  113. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  114. package/dist/apps/data/routes/tokens.js +26 -14
  115. package/dist/apps/data/routes/tokens.js.map +1 -1
  116. package/dist/apps/data/routes/transfers.d.ts +93 -77
  117. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  118. package/dist/apps/data/routes/transfers.js +9 -7
  119. package/dist/apps/data/routes/transfers.js.map +1 -1
  120. package/dist/apps/data/routes/valuation.d.ts +32 -32
  121. package/dist/apps/data/routes/verified-tokens.d.ts +88 -88
  122. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  123. package/dist/apps/data/routes/verified-tokens.js +64 -20
  124. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  125. package/dist/apps/data/routes/webhooks.d.ts +614 -177
  126. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  127. package/dist/apps/data/routes/webhooks.js +308 -205
  128. package/dist/apps/data/routes/webhooks.js.map +1 -1
  129. package/dist/apps/data/routes/zones.d.ts +31 -31
  130. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  131. package/dist/apps/data/routes/zones.js +20 -12
  132. package/dist/apps/data/routes/zones.js.map +1 -1
  133. package/dist/apps/docs/reference.js +2 -2
  134. package/dist/apps/docs/reference.js.map +1 -1
  135. package/dist/apps/index.d.ts +1 -1
  136. package/dist/apps/index.d.ts.map +1 -1
  137. package/dist/apps/index.js +1 -1
  138. package/dist/apps/index.js.map +1 -1
  139. package/dist/apps/management/App.d.ts +3780 -3402
  140. package/dist/apps/management/App.d.ts.map +1 -1
  141. package/dist/apps/management/App.js +5 -14
  142. package/dist/apps/management/App.js.map +1 -1
  143. package/dist/apps/management/Billing.d.ts +48 -7
  144. package/dist/apps/management/Billing.d.ts.map +1 -1
  145. package/dist/apps/management/Billing.js +204 -25
  146. package/dist/apps/management/Billing.js.map +1 -1
  147. package/dist/apps/management/routes/api-keys.d.ts +317 -215
  148. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  149. package/dist/apps/management/routes/api-keys.js +43 -15
  150. package/dist/apps/management/routes/api-keys.js.map +1 -1
  151. package/dist/apps/management/routes/billing.d.ts +290 -4
  152. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  153. package/dist/apps/management/routes/billing.js +274 -49
  154. package/dist/apps/management/routes/billing.js.map +1 -1
  155. package/dist/apps/management/routes/faucet.d.ts +6 -6
  156. package/dist/apps/management/routes/faucet.js +1 -1
  157. package/dist/apps/management/routes/faucet.js.map +1 -1
  158. package/dist/apps/management/routes/invitations.d.ts +213 -138
  159. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  160. package/dist/apps/management/routes/invitations.js +117 -13
  161. package/dist/apps/management/routes/invitations.js.map +1 -1
  162. package/dist/apps/management/routes/invite-links.d.ts +166 -166
  163. package/dist/apps/management/routes/me.d.ts.map +1 -1
  164. package/dist/apps/management/routes/me.js +6 -2
  165. package/dist/apps/management/routes/me.js.map +1 -1
  166. package/dist/apps/management/routes/members.d.ts +30 -30
  167. package/dist/apps/management/routes/orgs.d.ts +103 -87
  168. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  169. package/dist/apps/management/routes/orgs.js +52 -12
  170. package/dist/apps/management/routes/orgs.js.map +1 -1
  171. package/dist/apps/management/routes/projects.d.ts +125 -125
  172. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  173. package/dist/apps/management/routes/projects.js +6 -1
  174. package/dist/apps/management/routes/projects.js.map +1 -1
  175. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  176. package/dist/apps/management/routes/scopes.js +4 -1
  177. package/dist/apps/management/routes/scopes.js.map +1 -1
  178. package/dist/apps/management/routes/usage.d.ts +24 -24
  179. package/dist/apps/management/routes/usage.js +21 -4
  180. package/dist/apps/management/routes/usage.js.map +1 -1
  181. package/dist/apps/management/routes/verified-token-requests.d.ts +95 -95
  182. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  183. package/dist/apps/management/routes/verified-token-requests.js +7 -9
  184. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  185. package/dist/apps/management/routes/webhooks.d.ts +682 -616
  186. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  187. package/dist/apps/management/routes/webhooks.js +58 -12
  188. package/dist/apps/management/routes/webhooks.js.map +1 -1
  189. package/dist/apps/mcp.d.ts +1 -1
  190. package/dist/apps/mcp.d.ts.map +1 -1
  191. package/dist/apps/mcp.js +23 -10
  192. package/dist/apps/mcp.js.map +1 -1
  193. package/dist/apps/mpp/App.d.ts +44 -44
  194. package/dist/apps/mpp/App.d.ts.map +1 -1
  195. package/dist/apps/mpp/App.js +35 -7
  196. package/dist/apps/mpp/App.js.map +1 -1
  197. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  198. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  199. package/dist/apps/mpp/internal/Adapter.js +30 -1
  200. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  201. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  202. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  203. package/dist/apps/mpp/internal/Policy.js +24 -6
  204. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  205. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  206. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  207. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  208. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  209. package/dist/apps/relay/App.d.ts +2 -0
  210. package/dist/apps/relay/App.d.ts.map +1 -1
  211. package/dist/apps/relay/App.js +134 -75
  212. package/dist/apps/relay/App.js.map +1 -1
  213. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  214. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  215. package/dist/apps/relay/Sponsorships.js +209 -28
  216. package/dist/apps/relay/Sponsorships.js.map +1 -1
  217. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  218. package/dist/apps/routes/Access.d.ts.map +1 -0
  219. package/dist/apps/{funding → routes}/Access.js +4 -4
  220. package/dist/apps/routes/Access.js.map +1 -0
  221. package/dist/apps/{funding → routes}/App.d.ts +418 -124
  222. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  223. package/dist/apps/{funding → routes}/App.js +16 -16
  224. package/dist/apps/routes/App.js.map +1 -0
  225. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  226. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  227. package/dist/apps/routes/Inventory.js.map +1 -0
  228. package/dist/apps/routes/index.d.ts +2 -0
  229. package/dist/apps/routes/index.d.ts.map +1 -0
  230. package/dist/apps/routes/index.js +2 -0
  231. package/dist/apps/routes/index.js.map +1 -0
  232. package/dist/apps/{funding → routes}/routes/chains.d.ts +32 -32
  233. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  234. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  235. package/dist/apps/routes/routes/chains.js.map +1 -0
  236. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +107 -43
  237. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  238. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +497 -222
  239. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  240. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  241. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  242. package/dist/apps/routes/routes/providers.js +57 -0
  243. package/dist/apps/routes/routes/providers.js.map +1 -0
  244. package/dist/apps/{funding → routes}/routes/quotes.d.ts +106 -103
  245. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  246. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  247. package/dist/apps/routes/routes/quotes.js.map +1 -0
  248. package/dist/apps/{funding → routes}/routes/transfers.d.ts +733 -428
  249. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  250. package/dist/apps/routes/routes/transfers.js +1140 -0
  251. package/dist/apps/routes/routes/transfers.js.map +1 -0
  252. package/dist/cli/Cli.d.ts +30 -0
  253. package/dist/cli/Cli.d.ts.map +1 -1
  254. package/dist/cli/commands/admin.d.ts +36 -0
  255. package/dist/cli/commands/admin.d.ts.map +1 -1
  256. package/dist/cli/commands/admin.js +273 -0
  257. package/dist/cli/commands/admin.js.map +1 -1
  258. package/dist/cloudflare.d.ts +16 -14
  259. package/dist/cloudflare.d.ts.map +1 -1
  260. package/dist/cloudflare.js +26 -21
  261. package/dist/cloudflare.js.map +1 -1
  262. package/dist/db/Db.d.ts +63 -21
  263. package/dist/db/Db.d.ts.map +1 -1
  264. package/dist/db/Db.js +1035 -15
  265. package/dist/db/Db.js.map +1 -1
  266. package/dist/db/Schema.d.ts +780 -133
  267. package/dist/db/Schema.d.ts.map +1 -1
  268. package/dist/db/Schema.js +575 -162
  269. package/dist/db/Schema.js.map +1 -1
  270. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  271. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  272. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  273. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  274. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  275. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  276. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  277. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  278. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  279. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  280. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  281. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  282. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  283. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  284. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  285. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  286. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  287. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  288. package/dist/db/tables/apiKeyRevocations.js +98 -0
  289. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  290. package/dist/db/tables/authAccounts.d.ts +47 -0
  291. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  292. package/dist/db/tables/authAccounts.js +72 -0
  293. package/dist/db/tables/authAccounts.js.map +1 -0
  294. package/dist/db/tables/authSessions.d.ts +12 -0
  295. package/dist/db/tables/authSessions.d.ts.map +1 -0
  296. package/dist/db/tables/authSessions.js +2 -0
  297. package/dist/db/tables/authSessions.js.map +1 -0
  298. package/dist/db/tables/authVerifications.d.ts +12 -0
  299. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  300. package/dist/db/tables/authVerifications.js +2 -0
  301. package/dist/db/tables/authVerifications.js.map +1 -0
  302. package/dist/db/tables/invitations.d.ts +17 -1
  303. package/dist/db/tables/invitations.d.ts.map +1 -1
  304. package/dist/db/tables/invitations.js +123 -43
  305. package/dist/db/tables/invitations.js.map +1 -1
  306. package/dist/db/tables/memberships.d.ts +8 -0
  307. package/dist/db/tables/memberships.d.ts.map +1 -1
  308. package/dist/db/tables/memberships.js +51 -2
  309. package/dist/db/tables/memberships.js.map +1 -1
  310. package/dist/db/tables/organizations.d.ts +32 -10
  311. package/dist/db/tables/organizations.d.ts.map +1 -1
  312. package/dist/db/tables/organizations.js +110 -49
  313. package/dist/db/tables/organizations.js.map +1 -1
  314. package/dist/db/tables/projects.d.ts +2 -0
  315. package/dist/db/tables/projects.d.ts.map +1 -1
  316. package/dist/db/tables/projects.js +12 -3
  317. package/dist/db/tables/projects.js.map +1 -1
  318. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  319. package/dist/db/tables/requestUsage.js.map +1 -1
  320. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  321. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  322. package/dist/db/tables/rewardAccounts.js +88 -0
  323. package/dist/db/tables/rewardAccounts.js.map +1 -0
  324. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  325. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  326. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  327. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  328. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  329. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  330. package/dist/db/tables/rewardCampaigns.js +392 -0
  331. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  332. package/dist/db/tables/rewardCredits.d.ts +53 -0
  333. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  334. package/dist/db/tables/rewardCredits.js +63 -0
  335. package/dist/db/tables/rewardCredits.js.map +1 -0
  336. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  337. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  338. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  339. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  340. package/dist/db/tables/rewardRuns.d.ts +188 -0
  341. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  342. package/dist/db/tables/rewardRuns.js +278 -0
  343. package/dist/db/tables/rewardRuns.js.map +1 -0
  344. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  345. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  346. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  347. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  348. package/dist/db/tables/routesCatalog.d.ts +58 -0
  349. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  350. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  351. package/dist/db/tables/routesCatalog.js.map +1 -0
  352. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  353. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  354. package/dist/db/tables/routesDepositAddresses.js +587 -0
  355. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  356. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  357. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  358. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  359. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  360. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  361. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  362. package/dist/db/tables/routesDeposits.js +576 -0
  363. package/dist/db/tables/routesDeposits.js.map +1 -0
  364. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  365. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  366. package/dist/db/tables/routesIdempotency.js +330 -0
  367. package/dist/db/tables/routesIdempotency.js.map +1 -0
  368. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  369. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  370. package/dist/db/tables/routesSubsidies.js +45 -0
  371. package/dist/db/tables/routesSubsidies.js.map +1 -0
  372. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  373. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  374. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  375. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  376. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  377. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  378. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  379. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  380. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  381. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  382. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  383. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  384. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  385. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  386. package/dist/db/tables/{fundingTransferTransactions.js → routesTransferTransactions.js} +31 -13
  387. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  388. package/dist/db/tables/routesTransfers.d.ts +319 -0
  389. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  390. package/dist/db/tables/routesTransfers.js +372 -0
  391. package/dist/db/tables/routesTransfers.js.map +1 -0
  392. package/dist/db/tables/sponsoredTransactions.d.ts +75 -20
  393. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  394. package/dist/db/tables/sponsoredTransactions.js +124 -54
  395. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  396. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  397. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  398. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  399. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  400. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  401. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  402. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  403. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  404. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  405. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  406. package/dist/db/tables/stripeCustomers.js +13 -0
  407. package/dist/db/tables/stripeCustomers.js.map +1 -1
  408. package/dist/db/tables/users.d.ts +17 -1
  409. package/dist/db/tables/users.d.ts.map +1 -1
  410. package/dist/db/tables/users.js +47 -2
  411. package/dist/db/tables/users.js.map +1 -1
  412. package/dist/db/tables/verifiedTokenRequests.d.ts +21 -4
  413. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
  414. package/dist/db/tables/verifiedTokenRequests.js +65 -44
  415. package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
  416. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  417. package/dist/db/tables/webhookQueueEvents.js +5 -1
  418. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  419. package/dist/db/tables/webhookSubscriptions.d.ts +19 -11
  420. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  421. package/dist/db/tables/webhookSubscriptions.js +45 -13
  422. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  423. package/dist/handlers/internal/executionError.d.ts +2 -2
  424. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  425. package/dist/handlers/internal/executionError.js +1 -2
  426. package/dist/handlers/internal/executionError.js.map +1 -1
  427. package/dist/handlers/internal/multisig.d.ts +4 -232
  428. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  429. package/dist/handlers/internal/multisig.js +11 -537
  430. package/dist/handlers/internal/multisig.js.map +1 -1
  431. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  432. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  433. package/dist/handlers/internal/sponsorship.js +13 -9
  434. package/dist/handlers/internal/sponsorship.js.map +1 -1
  435. package/dist/handlers/relay.d.ts +9 -12
  436. package/dist/handlers/relay.d.ts.map +1 -1
  437. package/dist/handlers/relay.js +81 -85
  438. package/dist/handlers/relay.js.map +1 -1
  439. package/dist/index.d.ts +0 -17
  440. package/dist/index.d.ts.map +1 -1
  441. package/dist/index.js +0 -17
  442. package/dist/index.js.map +1 -1
  443. package/dist/internal/AssetResponse.d.ts +12 -0
  444. package/dist/internal/AssetResponse.d.ts.map +1 -0
  445. package/dist/internal/AssetResponse.js +21 -0
  446. package/dist/internal/AssetResponse.js.map +1 -0
  447. package/dist/internal/Auth.d.ts +64 -12
  448. package/dist/internal/Auth.d.ts.map +1 -1
  449. package/dist/internal/Auth.js +631 -180
  450. package/dist/internal/Auth.js.map +1 -1
  451. package/dist/internal/BetterAuth.d.ts +1488 -0
  452. package/dist/internal/BetterAuth.d.ts.map +1 -0
  453. package/dist/internal/BetterAuth.js +253 -0
  454. package/dist/internal/BetterAuth.js.map +1 -0
  455. package/dist/internal/Cache.d.ts +2 -0
  456. package/dist/internal/Cache.d.ts.map +1 -1
  457. package/dist/internal/Cache.js +2 -0
  458. package/dist/internal/Cache.js.map +1 -1
  459. package/dist/internal/EarnRates.d.ts +26 -3
  460. package/dist/internal/EarnRates.d.ts.map +1 -1
  461. package/dist/internal/EarnRates.js +84 -19
  462. package/dist/internal/EarnRates.js.map +1 -1
  463. package/dist/internal/EarnSharePrices.d.ts +120 -0
  464. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  465. package/dist/internal/EarnSharePrices.js +179 -0
  466. package/dist/internal/EarnSharePrices.js.map +1 -0
  467. package/dist/internal/EarnVaults.d.ts +4 -0
  468. package/dist/internal/EarnVaults.d.ts.map +1 -1
  469. package/dist/internal/EarnVaults.js +27 -10
  470. package/dist/internal/EarnVaults.js.map +1 -1
  471. package/dist/internal/Email.d.ts +37 -0
  472. package/dist/internal/Email.d.ts.map +1 -0
  473. package/dist/internal/Email.js +16 -0
  474. package/dist/internal/Email.js.map +1 -0
  475. package/dist/internal/Log.d.ts +32 -28
  476. package/dist/internal/Log.d.ts.map +1 -1
  477. package/dist/internal/Log.js +18 -11
  478. package/dist/internal/Log.js.map +1 -1
  479. package/dist/internal/MetricSink.d.ts +3 -0
  480. package/dist/internal/MetricSink.d.ts.map +1 -1
  481. package/dist/internal/MetricSink.js +67 -8
  482. package/dist/internal/MetricSink.js.map +1 -1
  483. package/dist/internal/Mpp.d.ts.map +1 -1
  484. package/dist/internal/Mpp.js +20 -25
  485. package/dist/internal/Mpp.js.map +1 -1
  486. package/dist/internal/OpenApi.d.ts +26 -3
  487. package/dist/internal/OpenApi.d.ts.map +1 -1
  488. package/dist/internal/OpenApi.js +25 -10
  489. package/dist/internal/OpenApi.js.map +1 -1
  490. package/dist/internal/Provider.d.ts +1 -1
  491. package/dist/internal/Provider.d.ts.map +1 -1
  492. package/dist/internal/RateLimit.d.ts.map +1 -1
  493. package/dist/internal/RateLimit.js +13 -1
  494. package/dist/internal/RateLimit.js.map +1 -1
  495. package/dist/internal/Store.d.ts +16 -0
  496. package/dist/internal/Store.d.ts.map +1 -1
  497. package/dist/internal/Store.js +59 -8
  498. package/dist/internal/Store.js.map +1 -1
  499. package/dist/internal/Tidx.d.ts +9 -2
  500. package/dist/internal/Tidx.d.ts.map +1 -1
  501. package/dist/internal/Tidx.js +78 -11
  502. package/dist/internal/Tidx.js.map +1 -1
  503. package/dist/internal/Timing.d.ts +26 -0
  504. package/dist/internal/Timing.d.ts.map +1 -1
  505. package/dist/internal/Timing.js +63 -5
  506. package/dist/internal/Timing.js.map +1 -1
  507. package/dist/internal/VercelOidc.d.ts +94 -0
  508. package/dist/internal/VercelOidc.d.ts.map +1 -0
  509. package/dist/internal/VercelOidc.js +128 -0
  510. package/dist/internal/VercelOidc.js.map +1 -0
  511. package/dist/internal/VerifiedTokens.d.ts +2 -8
  512. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  513. package/dist/internal/VerifiedTokens.js +24 -24
  514. package/dist/internal/VerifiedTokens.js.map +1 -1
  515. package/dist/internal/Viem.d.ts +30 -2067
  516. package/dist/internal/Viem.d.ts.map +1 -1
  517. package/dist/internal/Viem.js +167 -17
  518. package/dist/internal/Viem.js.map +1 -1
  519. package/dist/internal/Webhooks.d.ts +12 -4
  520. package/dist/internal/Webhooks.d.ts.map +1 -1
  521. package/dist/internal/Webhooks.js +9 -3
  522. package/dist/internal/Webhooks.js.map +1 -1
  523. package/dist/internal/ZoneRpc.d.ts +7 -0
  524. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  525. package/dist/internal/ZoneRpc.js +49 -0
  526. package/dist/internal/ZoneRpc.js.map +1 -0
  527. package/dist/internal/index.d.ts +3 -1
  528. package/dist/internal/index.d.ts.map +1 -1
  529. package/dist/internal/index.js +3 -1
  530. package/dist/internal/index.js.map +1 -1
  531. package/dist/internal/rewards/Audit.d.ts +88 -0
  532. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  533. package/dist/internal/rewards/Audit.js +134 -0
  534. package/dist/internal/rewards/Audit.js.map +1 -0
  535. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  536. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  537. package/dist/internal/rewards/Campaigns.js +531 -0
  538. package/dist/internal/rewards/Campaigns.js.map +1 -0
  539. package/dist/internal/rewards/Credits.d.ts +76 -0
  540. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  541. package/dist/internal/rewards/Credits.js +95 -0
  542. package/dist/internal/rewards/Credits.js.map +1 -0
  543. package/dist/internal/rewards/Events.d.ts +100 -0
  544. package/dist/internal/rewards/Events.d.ts.map +1 -0
  545. package/dist/internal/rewards/Events.js +340 -0
  546. package/dist/internal/rewards/Events.js.map +1 -0
  547. package/dist/internal/rewards/Projection.d.ts +237 -0
  548. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  549. package/dist/internal/rewards/Projection.js +616 -0
  550. package/dist/internal/rewards/Projection.js.map +1 -0
  551. package/dist/internal/rewards/Rates.d.ts +44 -0
  552. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  553. package/dist/internal/rewards/Rates.js +60 -0
  554. package/dist/internal/rewards/Rates.js.map +1 -0
  555. package/dist/internal/rewards/Read.d.ts +158 -0
  556. package/dist/internal/rewards/Read.d.ts.map +1 -0
  557. package/dist/internal/rewards/Read.js +292 -0
  558. package/dist/internal/rewards/Read.js.map +1 -0
  559. package/dist/internal/rewards/Runner.d.ts +164 -0
  560. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  561. package/dist/internal/rewards/Runner.js +1778 -0
  562. package/dist/internal/rewards/Runner.js.map +1 -0
  563. package/dist/internal/rewards/Signer.d.ts +224 -0
  564. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  565. package/dist/internal/rewards/Signer.js +135 -0
  566. package/dist/internal/rewards/Signer.js.map +1 -0
  567. package/dist/internal/rewards/index.d.ts +15 -0
  568. package/dist/internal/rewards/index.d.ts.map +1 -0
  569. package/dist/internal/rewards/index.js +15 -0
  570. package/dist/internal/rewards/index.js.map +1 -0
  571. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  572. package/dist/internal/routes/Action.d.ts.map +1 -0
  573. package/dist/internal/{funding → routes}/Action.js +17 -9
  574. package/dist/internal/routes/Action.js.map +1 -0
  575. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  576. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  577. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  578. package/dist/internal/routes/Catalog.js.map +1 -0
  579. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  580. package/dist/internal/routes/Chain.d.ts.map +1 -0
  581. package/dist/internal/{funding → routes}/Chain.js +3 -3
  582. package/dist/internal/routes/Chain.js.map +1 -0
  583. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  584. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  585. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  586. package/dist/internal/routes/Deposit.js.map +1 -0
  587. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  588. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  589. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  590. package/dist/internal/routes/DepositAddress.js.map +1 -0
  591. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  592. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  593. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -4
  594. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  595. package/dist/internal/routes/Economics.d.ts +25 -0
  596. package/dist/internal/routes/Economics.d.ts.map +1 -0
  597. package/dist/internal/routes/Economics.js +28 -0
  598. package/dist/internal/routes/Economics.js.map +1 -0
  599. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  600. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  601. package/dist/internal/{funding → routes}/Evidence.js +7 -7
  602. package/dist/internal/routes/Evidence.js.map +1 -0
  603. package/dist/internal/routes/Observability.d.ts +154 -0
  604. package/dist/internal/routes/Observability.d.ts.map +1 -0
  605. package/dist/internal/routes/Observability.js +389 -0
  606. package/dist/internal/routes/Observability.js.map +1 -0
  607. package/dist/internal/{funding → routes}/Provider.d.ts +311 -105
  608. package/dist/internal/routes/Provider.d.ts.map +1 -0
  609. package/dist/internal/{funding → routes}/Provider.js +229 -98
  610. package/dist/internal/routes/Provider.js.map +1 -0
  611. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  612. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  613. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  614. package/dist/internal/routes/Reconciliation.js.map +1 -0
  615. package/dist/internal/routes/Route.d.ts +21 -0
  616. package/dist/internal/routes/Route.d.ts.map +1 -0
  617. package/dist/internal/{funding → routes}/Route.js +1 -1
  618. package/dist/internal/routes/Route.js.map +1 -0
  619. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  620. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  621. package/dist/internal/{funding → routes}/SourceObservation.js +8 -8
  622. package/dist/internal/routes/SourceObservation.js.map +1 -0
  623. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  624. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  625. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  626. package/dist/internal/routes/Subsidy.js.map +1 -0
  627. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  628. package/dist/internal/routes/Token.d.ts.map +1 -0
  629. package/dist/internal/{funding → routes}/Token.js +3 -3
  630. package/dist/internal/routes/Token.js.map +1 -0
  631. package/dist/internal/{funding → routes}/Transfer.d.ts +241 -46
  632. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  633. package/dist/internal/routes/Transfer.js +728 -0
  634. package/dist/internal/routes/Transfer.js.map +1 -0
  635. package/dist/internal/{funding → routes}/TransferReconciliation.d.ts +13 -10
  636. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  637. package/dist/internal/routes/TransferReconciliation.js +422 -0
  638. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  639. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  640. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  641. package/dist/internal/routes/TransferSubsidy.js +256 -0
  642. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  643. package/dist/internal/{funding → routes}/TransferWebhook.d.ts +5 -5
  644. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  645. package/dist/internal/{funding → routes}/TransferWebhook.js +3 -3
  646. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  647. package/dist/internal/{funding → routes}/index.d.ts +2 -0
  648. package/dist/internal/routes/index.d.ts.map +1 -0
  649. package/dist/internal/{funding → routes}/index.js +2 -0
  650. package/dist/internal/routes/index.js.map +1 -0
  651. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  652. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  653. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  654. package/dist/internal/routes/providers/across.js.map +1 -0
  655. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  656. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  657. package/dist/internal/{funding → routes}/providers/relay.js +194 -110
  658. package/dist/internal/routes/providers/relay.js.map +1 -0
  659. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  660. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  661. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  662. package/dist/internal/routes/providers/rhino.js.map +1 -0
  663. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  664. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  665. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  666. package/dist/internal/routes/providers/squid.js.map +1 -0
  667. package/dist/internal/{funding → routes}/providers/stargate.d.ts +46 -18
  668. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  669. package/dist/internal/routes/providers/stargate.js +898 -0
  670. package/dist/internal/routes/providers/stargate.js.map +1 -0
  671. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  672. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  673. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  674. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  675. package/dist/internal/webhookDestinations/slack.js +12 -12
  676. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  677. package/dist/providers/index.d.ts +12 -12
  678. package/dist/providers/index.d.ts.map +1 -1
  679. package/dist/providers/index.js +12 -12
  680. package/dist/providers/index.js.map +1 -1
  681. package/dist/server.d.ts +19 -0
  682. package/dist/server.d.ts.map +1 -0
  683. package/dist/server.js +19 -0
  684. package/dist/server.js.map +1 -0
  685. package/package.json +15 -4
  686. package/src/ApiKey.ts +1 -1
  687. package/src/ApiKeys.test.ts +1033 -3
  688. package/src/ApiKeys.ts +489 -48
  689. package/src/App.test-d.ts +1 -1
  690. package/src/App.test.ts +216 -25
  691. package/src/App.ts +334 -31
  692. package/src/Assets.test.ts +2 -2
  693. package/src/Assets.ts +3 -1
  694. package/src/Auth.test-d.ts +1 -1
  695. package/src/Client.test-d.ts +539 -110
  696. package/src/Handler.ts +0 -1
  697. package/src/OpenApi.contract.test.ts +195 -0
  698. package/src/Scope.ts +17 -5
  699. package/src/Webhooks.ts +1 -1
  700. package/src/admin/App.test.ts +30 -2
  701. package/src/admin/App.ts +42 -6
  702. package/src/admin/apps/api-keys.test.ts +267 -5
  703. package/src/admin/apps/api-keys.ts +100 -50
  704. package/src/admin/apps/earn-vaults.test.ts +158 -0
  705. package/src/admin/apps/earn-vaults.ts +679 -6
  706. package/src/admin/apps/organizations.test.ts +306 -17
  707. package/src/admin/apps/organizations.ts +299 -24
  708. package/src/admin/apps/routes-support.test.ts +200 -0
  709. package/src/admin/apps/routes-support.ts +201 -0
  710. package/src/admin/apps/routes.test.ts +450 -0
  711. package/src/admin/apps/routes.ts +896 -0
  712. package/src/admin/apps/scopes.test.ts +15 -5
  713. package/src/admin/apps/subsidies.test.ts +306 -0
  714. package/src/admin/apps/subsidies.ts +457 -0
  715. package/src/admin/apps/verified-tokens.test.ts +40 -3
  716. package/src/admin/apps/verified-tokens.ts +33 -7
  717. package/src/admin/ui/plugin.ts +1 -2
  718. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  719. package/src/admin/ui/src/lib/config.ts +11 -2
  720. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  721. package/src/admin/ui/src/lib/organizations.test.ts +83 -50
  722. package/src/admin/ui/src/lib/organizations.ts +106 -25
  723. package/src/admin/ui/src/lib/query-client.ts +1 -1
  724. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  725. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  726. package/src/admin/ui/src/lib/routes.ts +304 -0
  727. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  728. package/src/admin/ui/src/lib/verified-tokens.ts +24 -9
  729. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  730. package/src/admin/ui/src/routes/__root.tsx +13 -2
  731. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  732. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  733. package/src/admin/ui/src/routes/organizations.tsx +34 -4
  734. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +239 -23
  735. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  736. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  737. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  738. package/src/admin/ui/src/routes/verified-tokens.tsx +64 -20
  739. package/src/admin/ui.generated.ts +202 -188
  740. package/src/analytics/Analytics.test.ts +108 -18
  741. package/src/analytics/Analytics.ts +38 -6
  742. package/src/analytics/tables/requestEvents.test.ts +100 -0
  743. package/src/analytics/tables/requestEvents.ts +10 -1
  744. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  745. package/src/apps/Zones.test.ts +15 -0
  746. package/src/apps/Zones.ts +52 -5
  747. package/src/apps/composition.test.ts +68 -60
  748. package/src/apps/data/App.test.ts +180 -2
  749. package/src/apps/data/App.ts +88 -28
  750. package/src/apps/data/routes/activities.test.ts +419 -7
  751. package/src/apps/data/routes/activities.ts +683 -216
  752. package/src/apps/data/routes/balances.test.ts +2 -2
  753. package/src/apps/data/routes/blocks.test.ts +46 -1
  754. package/src/apps/data/routes/coingecko.test.ts +419 -1
  755. package/src/apps/data/routes/coingecko.ts +309 -253
  756. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  757. package/src/apps/data/routes/earn.test.ts +1294 -17
  758. package/src/apps/data/routes/earn.ts +1838 -321
  759. package/src/apps/data/routes/exchanges.test.ts +12 -15
  760. package/src/apps/data/routes/fee-amm.test.ts +243 -0
  761. package/src/apps/data/routes/fee-amm.ts +201 -162
  762. package/src/apps/data/routes/indexer.test.ts +389 -0
  763. package/src/apps/data/routes/indexer.ts +165 -69
  764. package/src/apps/data/routes/receipts.test.ts +1 -1
  765. package/src/apps/data/routes/rpc.test.ts +384 -8
  766. package/src/apps/data/routes/rpc.ts +452 -227
  767. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  768. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  769. package/src/apps/data/routes/tokenlist.ts +173 -88
  770. package/src/apps/data/routes/tokens.test.ts +93 -3
  771. package/src/apps/data/routes/tokens.ts +39 -23
  772. package/src/apps/data/routes/transactions.test.ts +1 -1
  773. package/src/apps/data/routes/transfers.test.ts +56 -24
  774. package/src/apps/data/routes/transfers.ts +19 -8
  775. package/src/apps/data/routes/valuation.test.ts +1 -1
  776. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  777. package/src/apps/data/routes/verified-tokens.ts +99 -29
  778. package/src/apps/data/routes/webhooks.scan.test.ts +29 -0
  779. package/src/apps/data/routes/webhooks.test.ts +651 -83
  780. package/src/apps/data/routes/webhooks.ts +1113 -868
  781. package/src/apps/data/routes/zones.test.ts +148 -71
  782. package/src/apps/data/routes/zones.ts +71 -55
  783. package/src/apps/docs/reference.ts +2 -2
  784. package/src/apps/index.ts +1 -1
  785. package/src/apps/management/App.ts +9 -51
  786. package/src/apps/management/Billing.test.ts +375 -14
  787. package/src/apps/management/Billing.ts +265 -29
  788. package/src/apps/management/routes/api-keys.test.ts +269 -7
  789. package/src/apps/management/routes/api-keys.ts +61 -20
  790. package/src/apps/management/routes/billing.test.ts +477 -15
  791. package/src/apps/management/routes/billing.ts +377 -50
  792. package/src/apps/management/routes/faucet.test.ts +1 -1
  793. package/src/apps/management/routes/faucet.ts +1 -1
  794. package/src/apps/management/routes/invitations.test.ts +270 -3
  795. package/src/apps/management/routes/invitations.ts +185 -15
  796. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  797. package/src/apps/management/routes/me.test.ts +246 -5
  798. package/src/apps/management/routes/me.ts +7 -2
  799. package/src/apps/management/routes/members.test.ts +108 -0
  800. package/src/apps/management/routes/orgs.test.ts +191 -3
  801. package/src/apps/management/routes/orgs.ts +58 -11
  802. package/src/apps/management/routes/projects.test.ts +33 -3
  803. package/src/apps/management/routes/projects.ts +6 -1
  804. package/src/apps/management/routes/scopes.test.ts +30 -2
  805. package/src/apps/management/routes/scopes.ts +4 -1
  806. package/src/apps/management/routes/usage.test.ts +32 -0
  807. package/src/apps/management/routes/usage.ts +22 -4
  808. package/src/apps/management/routes/verified-token-requests.test.ts +16 -2
  809. package/src/apps/management/routes/verified-token-requests.ts +7 -10
  810. package/src/apps/management/routes/webhooks.test.ts +49 -26
  811. package/src/apps/management/routes/webhooks.ts +78 -22
  812. package/src/apps/mcp.test.ts +113 -30
  813. package/src/apps/mcp.ts +22 -10
  814. package/src/apps/mpp/App.ts +37 -7
  815. package/src/apps/mpp/Mpp.test.ts +49 -8
  816. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  817. package/src/apps/mpp/internal/Adapter.ts +34 -0
  818. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  819. package/src/apps/mpp/internal/Policy.ts +49 -7
  820. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  821. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  822. package/src/apps/relay/App.test.ts +839 -64
  823. package/src/apps/relay/App.ts +148 -81
  824. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  825. package/src/apps/relay/Sponsorships.test.ts +67 -4
  826. package/src/apps/relay/Sponsorships.ts +233 -32
  827. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  828. package/src/apps/{funding → routes}/Access.ts +6 -6
  829. package/src/apps/routes/App.test.ts +165 -0
  830. package/src/apps/routes/App.ts +96 -0
  831. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  832. package/src/apps/routes/index.ts +1 -0
  833. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  834. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  835. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1358 -458
  836. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +566 -246
  837. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  838. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  839. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  840. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  841. package/src/apps/{funding → routes}/routes/transfers.test.ts +1100 -353
  842. package/src/apps/routes/routes/transfers.ts +1332 -0
  843. package/src/cli/Cli.test.ts +1 -1
  844. package/src/cli/commands/admin.test.ts +748 -1
  845. package/src/cli/commands/admin.ts +278 -0
  846. package/src/cloudflare.ts +52 -47
  847. package/src/db/Db.test.ts +245 -2
  848. package/src/db/Db.ts +1485 -34
  849. package/src/db/Schema.ts +729 -228
  850. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  851. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  852. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  853. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  854. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  855. package/src/db/tables/apiKeyRevocations.ts +121 -0
  856. package/src/db/tables/authAccounts.ts +105 -0
  857. package/src/db/tables/authSessions.ts +13 -0
  858. package/src/db/tables/authVerifications.ts +13 -0
  859. package/src/db/tables/invitations.ts +142 -45
  860. package/src/db/tables/memberships.ts +79 -3
  861. package/src/db/tables/organizations.test.ts +690 -13
  862. package/src/db/tables/organizations.ts +139 -55
  863. package/src/db/tables/projects.test.ts +16 -0
  864. package/src/db/tables/projects.ts +13 -3
  865. package/src/db/tables/requestUsage.ts +4 -1
  866. package/src/db/tables/rewardAccounts.ts +178 -0
  867. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  868. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  869. package/src/db/tables/rewardCampaigns.ts +647 -0
  870. package/src/db/tables/rewardCredits.ts +110 -0
  871. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  872. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  873. package/src/db/tables/rewardRuns.ts +514 -0
  874. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  875. package/src/db/tables/routesCatalog.test.ts +185 -0
  876. package/src/db/tables/routesCatalog.ts +163 -0
  877. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  878. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  879. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  880. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  881. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +388 -46
  882. package/src/db/tables/routesDeposits.ts +1062 -0
  883. package/src/db/tables/routesIdempotency.test.ts +796 -0
  884. package/src/db/tables/routesIdempotency.ts +496 -0
  885. package/src/db/tables/routesSubsidies.test.ts +120 -0
  886. package/src/db/tables/routesSubsidies.ts +71 -0
  887. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  888. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  889. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  890. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  891. package/src/db/tables/{fundingTransferTransactions.ts → routesTransferTransactions.ts} +63 -18
  892. package/src/db/tables/routesTransfers.test.ts +338 -0
  893. package/src/db/tables/routesTransfers.ts +662 -0
  894. package/src/db/tables/sponsoredTransactions.test.ts +269 -45
  895. package/src/db/tables/sponsoredTransactions.ts +225 -65
  896. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  897. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  898. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  899. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  900. package/src/db/tables/stripeCustomers.test.ts +85 -0
  901. package/src/db/tables/stripeCustomers.ts +24 -0
  902. package/src/db/tables/users.test.ts +129 -0
  903. package/src/db/tables/users.ts +49 -3
  904. package/src/db/tables/verifiedTokenRequests.test.ts +39 -20
  905. package/src/db/tables/verifiedTokenRequests.ts +80 -44
  906. package/src/db/tables/webhookQueueEvents.ts +8 -1
  907. package/src/db/tables/webhookSubscriptions.ts +95 -20
  908. package/src/handlers/internal/executionError.ts +3 -4
  909. package/src/handlers/internal/multisig.ts +13 -816
  910. package/src/handlers/internal/sponsorship.ts +26 -10
  911. package/src/handlers/relay.test-d.ts +9 -1
  912. package/src/handlers/relay.test.ts +823 -3
  913. package/src/handlers/relay.ts +127 -107
  914. package/src/index.test-d.ts +7 -0
  915. package/src/index.ts +0 -17
  916. package/src/internal/AssetResponse.ts +26 -0
  917. package/src/internal/Auth.test.ts +1656 -9
  918. package/src/internal/Auth.ts +880 -244
  919. package/src/internal/BetterAuth.test.ts +242 -0
  920. package/src/internal/BetterAuth.ts +349 -0
  921. package/src/internal/Cache.ts +2 -0
  922. package/src/internal/EarnRates.test.ts +17 -0
  923. package/src/internal/EarnRates.ts +124 -31
  924. package/src/internal/EarnSharePrices.test.ts +182 -0
  925. package/src/internal/EarnSharePrices.ts +313 -0
  926. package/src/internal/EarnVaults.test.ts +21 -0
  927. package/src/internal/EarnVaults.ts +33 -11
  928. package/src/internal/Email.ts +54 -0
  929. package/src/internal/Idempotency.test.ts +2 -2
  930. package/src/internal/Log.test-d.ts +8 -7
  931. package/src/internal/Log.test.ts +114 -16
  932. package/src/internal/Log.ts +53 -40
  933. package/src/internal/MetricSink.test.ts +313 -26
  934. package/src/internal/MetricSink.ts +73 -8
  935. package/src/internal/Mpp.test.ts +31 -0
  936. package/src/internal/Mpp.ts +21 -24
  937. package/src/internal/OpenApi.ts +45 -12
  938. package/src/internal/Provider.test.ts +1 -1
  939. package/src/internal/Provider.ts +1 -1
  940. package/src/internal/RateLimit.test.ts +21 -3
  941. package/src/internal/RateLimit.ts +12 -1
  942. package/src/internal/Store.test-d.ts +1 -1
  943. package/src/internal/Store.test.ts +151 -8
  944. package/src/internal/Store.ts +76 -9
  945. package/src/internal/Tidx.test.ts +59 -8
  946. package/src/internal/Tidx.ts +86 -14
  947. package/src/internal/Timing.test.ts +77 -0
  948. package/src/internal/Timing.ts +83 -6
  949. package/src/internal/VercelOidc.test.ts +188 -0
  950. package/src/internal/VercelOidc.ts +193 -0
  951. package/src/internal/VerifiedTokens.test.ts +60 -6
  952. package/src/internal/VerifiedTokens.ts +21 -24
  953. package/src/internal/Viem.batch.test.ts +80 -0
  954. package/src/internal/Viem.test.ts +201 -2
  955. package/src/internal/Viem.ts +221 -25
  956. package/src/internal/Webhooks.test.ts +85 -6
  957. package/src/internal/Webhooks.ts +22 -4
  958. package/src/internal/ZoneRpc.ts +50 -0
  959. package/src/internal/exchange/Provider.test.ts +2 -2
  960. package/src/internal/index.test.ts +3 -1
  961. package/src/internal/index.ts +3 -1
  962. package/src/internal/rewards/Audit.ts +231 -0
  963. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  964. package/src/internal/rewards/Campaigns.ts +1205 -0
  965. package/src/internal/rewards/Credits.ts +165 -0
  966. package/src/internal/rewards/Events.local.test.ts +113 -0
  967. package/src/internal/rewards/Events.test.ts +152 -0
  968. package/src/internal/rewards/Events.ts +468 -0
  969. package/src/internal/rewards/Projection.test.ts +681 -0
  970. package/src/internal/rewards/Projection.ts +987 -0
  971. package/src/internal/rewards/Rates.test.ts +171 -0
  972. package/src/internal/rewards/Rates.ts +110 -0
  973. package/src/internal/rewards/Read.test.ts +501 -0
  974. package/src/internal/rewards/Read.ts +476 -0
  975. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  976. package/src/internal/rewards/Runner.states.test.ts +188 -0
  977. package/src/internal/rewards/Runner.test.ts +90 -0
  978. package/src/internal/rewards/Runner.ts +2229 -0
  979. package/src/internal/rewards/Signer.test.ts +79 -0
  980. package/src/internal/rewards/Signer.ts +180 -0
  981. package/src/internal/rewards/index.ts +14 -0
  982. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  983. package/src/internal/{funding → routes}/Action.ts +35 -8
  984. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  985. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  986. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  987. package/src/internal/{funding → routes}/Chain.ts +11 -11
  988. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  989. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  990. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  991. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  992. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  993. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -9
  994. package/src/internal/routes/Economics.test.ts +42 -0
  995. package/src/internal/routes/Economics.ts +47 -0
  996. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  997. package/src/internal/{funding → routes}/Evidence.ts +9 -9
  998. package/src/internal/routes/Observability.test.ts +636 -0
  999. package/src/internal/routes/Observability.ts +668 -0
  1000. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  1001. package/src/internal/{funding → routes}/Provider.ts +489 -186
  1002. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  1003. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  1004. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  1005. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  1006. package/src/internal/{funding → routes}/Route.ts +7 -7
  1007. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  1008. package/src/internal/{funding → routes}/SourceObservation.ts +13 -13
  1009. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  1010. package/src/internal/routes/Subsidy.test.ts +169 -0
  1011. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  1012. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  1013. package/src/internal/{funding → routes}/Token.ts +5 -5
  1014. package/src/internal/routes/Transfer.test.ts +1199 -0
  1015. package/src/internal/routes/Transfer.ts +1206 -0
  1016. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  1017. package/src/internal/routes/TransferReconciliation.ts +527 -0
  1018. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1019. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1020. package/src/internal/{funding → routes}/TransferWebhook.test.ts +13 -13
  1021. package/src/internal/{funding → routes}/TransferWebhook.ts +7 -7
  1022. package/src/internal/{funding → routes}/index.test.ts +5 -3
  1023. package/src/internal/{funding → routes}/index.ts +2 -0
  1024. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1025. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1026. package/src/internal/{funding → routes}/providers/relay.test.ts +224 -32
  1027. package/src/internal/{funding → routes}/providers/relay.ts +228 -121
  1028. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1029. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1030. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1031. package/src/internal/routes/providers/stargate.ts +1276 -0
  1032. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1033. package/src/internal/webhookDestinations/slack.ts +10 -10
  1034. package/src/providers/index.ts +13 -13
  1035. package/src/server.ts +18 -0
  1036. package/dist/apps/funding/Access.d.ts.map +0 -1
  1037. package/dist/apps/funding/Access.js.map +0 -1
  1038. package/dist/apps/funding/App.js.map +0 -1
  1039. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1040. package/dist/apps/funding/Inventory.js.map +0 -1
  1041. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1042. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1043. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1044. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1045. package/dist/apps/funding/index.d.ts +0 -2
  1046. package/dist/apps/funding/index.d.ts.map +0 -1
  1047. package/dist/apps/funding/index.js +0 -2
  1048. package/dist/apps/funding/index.js.map +0 -1
  1049. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1050. package/dist/apps/funding/routes/chains.js.map +0 -1
  1051. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1052. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1053. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1054. package/dist/apps/funding/routes/providers.js +0 -57
  1055. package/dist/apps/funding/routes/providers.js.map +0 -1
  1056. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1057. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1058. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1059. package/dist/apps/funding/routes/transfers.js +0 -828
  1060. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1061. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1062. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1063. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1064. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1065. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1066. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1067. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1068. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1069. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1070. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1071. package/dist/db/tables/fundingDeposits.js +0 -295
  1072. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1073. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1074. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1075. package/dist/db/tables/fundingIdempotency.js +0 -103
  1076. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1077. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1078. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1079. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -53
  1080. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1081. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1082. package/dist/db/tables/fundingTransfers.d.ts +0 -99
  1083. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1084. package/dist/db/tables/fundingTransfers.js +0 -110
  1085. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1086. package/dist/internal/funding/Action.d.ts.map +0 -1
  1087. package/dist/internal/funding/Action.js.map +0 -1
  1088. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1089. package/dist/internal/funding/Catalog.js.map +0 -1
  1090. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1091. package/dist/internal/funding/Chain.js.map +0 -1
  1092. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1093. package/dist/internal/funding/Deposit.js.map +0 -1
  1094. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1095. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1096. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1097. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1098. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1099. package/dist/internal/funding/Evidence.js.map +0 -1
  1100. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1101. package/dist/internal/funding/Provider.js.map +0 -1
  1102. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1103. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1104. package/dist/internal/funding/Route.d.ts +0 -21
  1105. package/dist/internal/funding/Route.d.ts.map +0 -1
  1106. package/dist/internal/funding/Route.js.map +0 -1
  1107. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1108. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1109. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1110. package/dist/internal/funding/Subsidy.js.map +0 -1
  1111. package/dist/internal/funding/Token.d.ts.map +0 -1
  1112. package/dist/internal/funding/Token.js.map +0 -1
  1113. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1114. package/dist/internal/funding/Transfer.js +0 -462
  1115. package/dist/internal/funding/Transfer.js.map +0 -1
  1116. package/dist/internal/funding/TransferReconciliation.d.ts.map +0 -1
  1117. package/dist/internal/funding/TransferReconciliation.js +0 -192
  1118. package/dist/internal/funding/TransferReconciliation.js.map +0 -1
  1119. package/dist/internal/funding/TransferWebhook.d.ts.map +0 -1
  1120. package/dist/internal/funding/TransferWebhook.js.map +0 -1
  1121. package/dist/internal/funding/index.d.ts.map +0 -1
  1122. package/dist/internal/funding/index.js.map +0 -1
  1123. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1124. package/dist/internal/funding/providers/across.js.map +0 -1
  1125. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1126. package/dist/internal/funding/providers/relay.js.map +0 -1
  1127. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1128. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1129. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1130. package/dist/internal/funding/providers/squid.js.map +0 -1
  1131. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1132. package/dist/internal/funding/providers/stargate.js +0 -579
  1133. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1134. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1135. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1136. package/src/apps/funding/App.test.ts +0 -78
  1137. package/src/apps/funding/App.ts +0 -88
  1138. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1139. package/src/apps/funding/index.ts +0 -1
  1140. package/src/apps/funding/routes/transfers.ts +0 -987
  1141. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1142. package/src/db/tables/fundingCatalog.ts +0 -163
  1143. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1144. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1145. package/src/db/tables/fundingDeposits.ts +0 -572
  1146. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1147. package/src/db/tables/fundingIdempotency.ts +0 -180
  1148. package/src/db/tables/fundingTransferTransactions.test.ts +0 -112
  1149. package/src/db/tables/fundingTransfers.test.ts +0 -115
  1150. package/src/db/tables/fundingTransfers.ts +0 -189
  1151. package/src/handlers/internal/multisig.test.ts +0 -818
  1152. package/src/internal/funding/Subsidy.test.ts +0 -75
  1153. package/src/internal/funding/Transfer.test.ts +0 -524
  1154. package/src/internal/funding/Transfer.ts +0 -762
  1155. package/src/internal/funding/TransferReconciliation.test.ts +0 -147
  1156. package/src/internal/funding/TransferReconciliation.ts +0 -264
  1157. package/src/internal/funding/providers/stargate.test.ts +0 -328
  1158. package/src/internal/funding/providers/stargate.ts +0 -856
  1159. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1160. /package/src/internal/{funding → routes}/Route.test.ts +0 -0
@@ -0,0 +1,1140 @@
1
+ import { Hono } from 'hono';
2
+ import { etag } from 'hono/etag';
3
+ import { AbiFunction, Hex } from 'ox';
4
+ import { getAddress } from 'viem';
5
+ import * as z from 'zod/mini';
6
+ import * as Db from '../../../db/Db.js';
7
+ import * as RoutesIdempotency from '../../../db/tables/routesIdempotency.js';
8
+ import * as RoutesTransfers from '../../../db/tables/routesTransfers.js';
9
+ import * as Auth from '../../../internal/Auth.js';
10
+ import * as Cache from '../../../internal/Cache.js';
11
+ import * as RoutesCatalog from '../../../internal/routes/Catalog.js';
12
+ import * as RoutesObservability from '../../../internal/routes/Observability.js';
13
+ import * as RoutesProvider from '../../../internal/routes/Provider.js';
14
+ import * as RoutesSubsidy from '../../../internal/routes/Subsidy.js';
15
+ import * as RoutesTransfer from '../../../internal/routes/Transfer.js';
16
+ import * as RoutesTransferSubsidy from '../../../internal/routes/TransferSubsidy.js';
17
+ import * as RoutesTransferReconciliation from '../../../internal/routes/TransferReconciliation.js';
18
+ import * as Idempotency from '../../../internal/Idempotency.js';
19
+ import * as OpenApi from '../../../internal/OpenApi.js';
20
+ import * as Response from '../../../internal/Response.js';
21
+ import * as Schema from '../../../internal/Schema.js';
22
+ import * as Value from '../../../internal/Value.js';
23
+ import * as Access from '../Access.js';
24
+ const maximumSourceTransactionHashes = 10;
25
+ const recipientExample = getAddress(`0x${'11'.repeat(20)}`);
26
+ const senderExample = getAddress(`0x${'22'.repeat(20)}`);
27
+ const stargatePoolExample = '0x8c76e2f6c5ceda9aa7772e7eff30280226c44392';
28
+ const stargateApproveExample = AbiFunction.from('function approve(address spender, uint256 amount)');
29
+ const stargateFeeTokenExample = '0x0cEb237E109eE22374a567c6b09F373C73FA4cBb';
30
+ const stargateSendExample = AbiFunction.from('function send((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, (uint256 nativeFee, uint256 lzTokenFee) fee, address refundAddress)');
31
+ const stargateWrapExample = AbiFunction.from('function wrap(address token, address to, uint256 amount)');
32
+ /** Zod schemas owned by route transfer resources. */
33
+ export var schema;
34
+ (function (schema) {
35
+ /** A durable route transfer. Reads never include the executable `action`. */
36
+ schema.Transfer = RoutesTransfer.schema.RoutesTransfer;
37
+ /** Schemas for the listRoutesTransfers operation. */
38
+ let listRoutesTransfers;
39
+ (function (listRoutesTransfers) {
40
+ /** Query parameters for listing route transfers. */
41
+ listRoutesTransfers.Query = z
42
+ .object({
43
+ cursor: Schema.Cursor,
44
+ include: Schema.totalCountInclude,
45
+ limit: Schema.Limit,
46
+ status: z.optional(RoutesTransfer.schema.Status),
47
+ })
48
+ .check(z.describe('Query parameters for listing route transfers.'));
49
+ /** Paginated route transfer list. */
50
+ listRoutesTransfers.Response = OpenApi.component(z
51
+ .object({
52
+ data: z.array(schema.Transfer).check(z.describe('Route transfers on this page, newest first.')),
53
+ meta: z
54
+ .optional(Schema.CountMeta)
55
+ .check(z.describe('Extra response metadata requested with `include`.')),
56
+ nextCursor: Schema.NextCursor,
57
+ })
58
+ .check(z.describe('A page of route transfers.')), 'RoutesTransferList');
59
+ })(listRoutesTransfers = schema.listRoutesTransfers || (schema.listRoutesTransfers = {}));
60
+ /** Schemas for the createRoutesTransfer operation. */
61
+ let createRoutesTransfer;
62
+ (function (createRoutesTransfer) {
63
+ /** Route transfer creation request body. */
64
+ createRoutesTransfer.Body = RoutesTransfer.schema.CreateRequest;
65
+ /** Required headers for route transfer creation. */
66
+ createRoutesTransfer.Headers = z.object({
67
+ 'idempotency-key': z
68
+ .string()
69
+ .check(z.minLength(1), z.describe('Opaque retry key scoped to the API key. Matching requests replay successful responses for 24 hours; changed input conflicts, in-flight requests block, and failed attempts release the key.'), z.meta({ examples: ['routes_01k1c5j8q8p0be6j5v9m6d1e4r'] })),
70
+ });
71
+ /** The created transfer with its one-time executable action. */
72
+ createRoutesTransfer.Response = RoutesTransfer.schema.CreatedRoutesTransfer;
73
+ })(createRoutesTransfer = schema.createRoutesTransfer || (schema.createRoutesTransfer = {}));
74
+ const destinationCreateFields = {
75
+ amount: RoutesTransfer.schema.CreateRequest.shape.amount,
76
+ mode: RoutesTransfer.schema.CreateRequest.shape.mode,
77
+ recipient: RoutesTransfer.schema.CreateRequest.shape.recipient,
78
+ sender: RoutesTransfer.schema.CreateRequest.shape.sender,
79
+ slippageBps: RoutesTransfer.schema.CreateRequest.shape.slippageBps,
80
+ sourceChain: RoutesTransfer.schema.CreateRequest.shape.sourceChain,
81
+ sourceToken: RoutesTransfer.schema.CreateRequest.shape.sourceToken,
82
+ };
83
+ /** Schemas for the createRoutesTransferVault operation. */
84
+ let createRoutesTransferVault;
85
+ (function (createRoutesTransferVault) {
86
+ /** Route transfer creation request for an Earn vault destination. */
87
+ createRoutesTransferVault.Body = OpenApi.component(z
88
+ .strictObject({
89
+ ...destinationCreateFields,
90
+ vaultAddress: z
91
+ .string()
92
+ .check(z.regex(/^0x[0-9a-fA-F]{40}$/), z.describe('Tempo Earn vault contract address.'), z.meta({ examples: [`0x${'f4'.repeat(20)}`] })),
93
+ })
94
+ .check(z.describe('Vault route transfer creation request.')), 'CreateRoutesTransferVaultRequest');
95
+ /** Required headers for vault route transfer creation. */
96
+ createRoutesTransferVault.Headers = createRoutesTransfer.Headers;
97
+ })(createRoutesTransferVault = schema.createRoutesTransferVault || (schema.createRoutesTransferVault = {}));
98
+ /** Schemas for the createRoutesTransferZone operation. */
99
+ let createRoutesTransferZone;
100
+ (function (createRoutesTransferZone) {
101
+ /** Route transfer creation request for a Zone destination. */
102
+ createRoutesTransferZone.Body = OpenApi.component(z
103
+ .strictObject({
104
+ amount: destinationCreateFields.amount,
105
+ destinationChain: z
106
+ .string()
107
+ .check(z.regex(/^eip155:\d+$/), z.describe('Configured Zone CAIP-2 id.'), z.meta({ examples: ['eip155:1424310003'] })),
108
+ destinationToken: RoutesTransfer.schema.CreateRequest.shape.destinationToken,
109
+ mode: destinationCreateFields.mode,
110
+ recipient: destinationCreateFields.recipient,
111
+ recipientFallback: z
112
+ .string()
113
+ .check(z.regex(/^0x[0-9a-fA-F]{40}$/), z.describe('Public Tempo recipient used if the Zone credit cannot complete.'), z.meta({ examples: [`0x${'22'.repeat(20)}`] })),
114
+ sender: destinationCreateFields.sender,
115
+ slippageBps: destinationCreateFields.slippageBps,
116
+ sourceChain: destinationCreateFields.sourceChain,
117
+ sourceToken: destinationCreateFields.sourceToken,
118
+ })
119
+ .check(z.describe('Zone route transfer creation request.')), 'CreateRoutesTransferZoneRequest');
120
+ /** Required headers for Zone route transfer creation. */
121
+ createRoutesTransferZone.Headers = createRoutesTransfer.Headers;
122
+ })(createRoutesTransferZone = schema.createRoutesTransferZone || (schema.createRoutesTransferZone = {}));
123
+ /** Schemas for the getRoutesTransfer operation. */
124
+ let getRoutesTransfer;
125
+ (function (getRoutesTransfer) {
126
+ /** Path parameters for a route transfer read. */
127
+ getRoutesTransfer.Params = z
128
+ .object({
129
+ id: z
130
+ .string()
131
+ .check(z.describe('Route transfer ID (`rtr_…`).'), z.meta({ examples: ['rtr_001785729600000_2ZPE2gvateYEQ0dQslgvkhjx'] })),
132
+ })
133
+ .check(z.describe('Path parameters for a route transfer request.'));
134
+ /** The route transfer resource, returned directly. */
135
+ getRoutesTransfer.Response = schema.Transfer;
136
+ })(getRoutesTransfer = schema.getRoutesTransfer || (schema.getRoutesTransfer = {}));
137
+ /** Schemas for the registerRoutesTransferSourceTransaction operation. */
138
+ let registerRoutesTransferSourceTransaction;
139
+ (function (registerRoutesTransferSourceTransaction) {
140
+ /** Source transaction registration request body. */
141
+ registerRoutesTransferSourceTransaction.Body = OpenApi.component(z
142
+ .union([
143
+ z.strictObject({
144
+ transactionHash: Schema.hash(`0x${'51'.repeat(32)}`),
145
+ }),
146
+ z.strictObject({
147
+ transactionHashes: z
148
+ .array(Schema.hash(`0x${'52'.repeat(32)}`))
149
+ .check(z.minLength(1), z.maxLength(maximumSourceTransactionHashes), z.describe('Source transactions produced by the prepared calls.')),
150
+ }),
151
+ ])
152
+ .check(z.describe('Source transactions to verify and register for the transfer.')), 'RegisterRoutesTransferSourceTransactionRequest');
153
+ /** Path parameters for source transaction registration. */
154
+ registerRoutesTransferSourceTransaction.Params = getRoutesTransfer.Params;
155
+ /** The transfer after source transaction registration. */
156
+ registerRoutesTransferSourceTransaction.Response = schema.Transfer;
157
+ })(registerRoutesTransferSourceTransaction = schema.registerRoutesTransferSourceTransaction || (schema.registerRoutesTransferSourceTransaction = {}));
158
+ })(schema || (schema = {}));
159
+ const baseChainExample = {
160
+ addressFormat: 'hex',
161
+ id: 'eip155:8453',
162
+ kind: 'evm',
163
+ name: 'Base',
164
+ };
165
+ const baseUsdcExample = {
166
+ address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
167
+ currency: 'USD',
168
+ decimals: 6,
169
+ name: 'USD Coin',
170
+ standard: 'ERC-20',
171
+ symbol: 'USDC',
172
+ tokenKey: 'eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
173
+ verified: true,
174
+ };
175
+ const tempoChainExample = {
176
+ addressFormat: 'hex',
177
+ id: 'eip155:4217',
178
+ kind: 'evm',
179
+ name: 'Tempo',
180
+ };
181
+ const tempoUsdcExample = {
182
+ address: '0x20c000000000000000000000b9537d11c60e8b50',
183
+ currency: 'USD',
184
+ decimals: 6,
185
+ name: 'Bridged USDC (Stargate)',
186
+ standard: 'TIP-20',
187
+ symbol: 'USDC.e',
188
+ tokenKey: 'eip155:4217/erc20:0x20c000000000000000000000b9537d11c60e8b50',
189
+ verified: true,
190
+ };
191
+ const tempoFeeExample = {
192
+ address: '0x20c0000000000000000000000000000000000000',
193
+ currency: 'USD',
194
+ decimals: 6,
195
+ name: 'pathUSD',
196
+ standard: 'TIP-20',
197
+ symbol: 'pathUSD',
198
+ tokenKey: 'eip155:4217/erc20:0x20c0000000000000000000000000000000000000',
199
+ verified: true,
200
+ };
201
+ const routesTransferExample = {
202
+ createdAt: '2026-01-01T00:00:00.000Z',
203
+ destinationAmount: Value.tokenAmount({ baseUnits: '979295', currency: 'USD', decimals: 6 }),
204
+ destinationAmountMin: Value.tokenAmount({ baseUnits: '974398', currency: 'USD', decimals: 6 }),
205
+ destinationAmountRequired: Value.tokenAmount({
206
+ baseUnits: '1000000',
207
+ currency: 'USD',
208
+ decimals: 6,
209
+ }),
210
+ destinationChain: baseChainExample,
211
+ destinationToken: baseUsdcExample,
212
+ fees: [
213
+ {
214
+ amount: Value.tokenAmount({ baseUnits: '10000', currency: 'USD', decimals: 6 }),
215
+ side: 'source',
216
+ token: tempoFeeExample,
217
+ type: 'provider',
218
+ },
219
+ ],
220
+ id: 'rtr_001767225600000_2ZPE2gvateYEQ0dQslgvkhjx',
221
+ method: 'transaction',
222
+ mode: 'exactSource',
223
+ provider: { id: 'stargate', name: 'Stargate' },
224
+ quote: {
225
+ expiresAt: '2026-01-01T00:01:00.000Z',
226
+ sampledAt: '2026-01-01T00:00:00.000Z',
227
+ },
228
+ recipient: recipientExample,
229
+ sender: senderExample,
230
+ sourceAmount: Value.tokenAmount({ baseUnits: '1000000', currency: 'USD', decimals: 6 }),
231
+ sourceChain: tempoChainExample,
232
+ sourceToken: tempoUsdcExample,
233
+ status: 'awaiting-source',
234
+ subsidize: true,
235
+ updatedAt: '2026-01-01T00:00:00.000Z',
236
+ version: 1,
237
+ };
238
+ const registeredRoutesTransferExample = {
239
+ ...routesTransferExample,
240
+ sourceTransactionHashes: [`0x${'51'.repeat(32)}`],
241
+ status: 'processing',
242
+ updatedAt: '2026-01-01T00:00:20.000Z',
243
+ version: 2,
244
+ };
245
+ const listRoutesTransfersResponseExample = {
246
+ data: [routesTransferExample],
247
+ nextCursor: null,
248
+ };
249
+ const createdRoutesTransferExample = {
250
+ action: {
251
+ calls: [
252
+ {
253
+ data: AbiFunction.encodeData(stargateApproveExample, [stargatePoolExample, 1000000n]),
254
+ to: tempoUsdcExample.address,
255
+ value: '0x0',
256
+ },
257
+ {
258
+ data: AbiFunction.encodeData(stargateApproveExample, [stargateFeeTokenExample, 10000n]),
259
+ to: tempoFeeExample.address,
260
+ value: '0x0',
261
+ },
262
+ {
263
+ data: AbiFunction.encodeData(stargateWrapExample, [
264
+ tempoFeeExample.address,
265
+ senderExample,
266
+ 10000n,
267
+ ]),
268
+ to: stargateFeeTokenExample,
269
+ value: '0x0',
270
+ },
271
+ {
272
+ data: AbiFunction.encodeData(stargateApproveExample, [stargatePoolExample, 10000n]),
273
+ to: stargateFeeTokenExample,
274
+ value: '0x0',
275
+ },
276
+ {
277
+ data: AbiFunction.encodeData(stargateSendExample, [
278
+ {
279
+ amountLD: 1000000n,
280
+ composeMsg: '0x',
281
+ dstEid: 30_184,
282
+ extraOptions: '0x',
283
+ minAmountLD: 974398n,
284
+ oftCmd: '0x',
285
+ to: Hex.padLeft(recipientExample, 32),
286
+ },
287
+ { lzTokenFee: 0n, nativeFee: 10000n },
288
+ senderExample,
289
+ ]),
290
+ to: stargatePoolExample,
291
+ value: '0x0',
292
+ },
293
+ ],
294
+ type: 'evm:calls',
295
+ },
296
+ ...routesTransferExample,
297
+ };
298
+ const unimplementedRoutesTransferResponses = (() => {
299
+ const responses = OpenApi.responses({
300
+ errors: {
301
+ 400: { codes: ['body_invalid', 'idempotency_key_required'] },
302
+ 501: {
303
+ codes: ['not_implemented'],
304
+ description: 'This route transfer destination is not implemented.',
305
+ },
306
+ },
307
+ success: {
308
+ description: 'Unused until this destination is implemented.',
309
+ schema: z.never(),
310
+ },
311
+ });
312
+ const { 200: success, 502: upstream, ...errors } = responses;
313
+ void success;
314
+ void upstream;
315
+ return errors;
316
+ })();
317
+ // Replay the exact successful creation response for 24 hours.
318
+ const idempotencyReplayTtlMs = 86_400_000;
319
+ // Pending claims only cover the bounded provider preparation window.
320
+ const idempotencyPendingTtlMs = 60_000;
321
+ const routesEtag = etag();
322
+ const bodyValidation = {
323
+ code: 'body_invalid',
324
+ message: 'Check the request body and try again.',
325
+ };
326
+ const paramValidation = {
327
+ code: 'param_invalid',
328
+ message: 'Check the path parameters and try again.',
329
+ };
330
+ /** Mounts durable route transfer routes. */
331
+ export function transfers(options = {}) {
332
+ return new Hono()
333
+ .get('/v1/routes/transfers', Auth.policy({ apiKey: { scopes: ['routes:read'] } }), OpenApi.validate('query', schema.listRoutesTransfers.Query, {
334
+ code: 'query_invalid',
335
+ message: 'Check the query parameters and try again.',
336
+ }), OpenApi.describeRoute({
337
+ description: 'Lists transfers from newest to oldest.',
338
+ operationId: 'listRoutesTransfers',
339
+ responses: OpenApi.responses({
340
+ errors: {
341
+ 400: { codes: ['query_invalid'] },
342
+ },
343
+ success: {
344
+ description: 'A page of route transfers.',
345
+ example: listRoutesTransfersResponseExample,
346
+ schema: schema.listRoutesTransfers.Response,
347
+ },
348
+ }),
349
+ summary: 'List transfers',
350
+ tags: ['Route Transfers'],
351
+ }), routesEtag, async (c) => {
352
+ if (Auth.narrowAccess)
353
+ return Auth.accessError(c);
354
+ if (OpenApi.narrowValidation)
355
+ return OpenApi.validationError(c, {
356
+ code: 'query_invalid',
357
+ message: 'Check the query parameters and try again.',
358
+ });
359
+ const owner = Access.owner(c);
360
+ if (!owner)
361
+ return Access.unauthorized(c);
362
+ const db = Db.get(c.get('db'));
363
+ const { cursor, include, limit, status } = c.req.valid('query');
364
+ try {
365
+ // `totalCount` is opt-in and capped (a capped subquery shares the
366
+ // list filter); run it concurrently with the page list. Best-effort:
367
+ // a failure omits `meta` rather than failing the page.
368
+ const countPromise = include.includes('totalCount')
369
+ ? RoutesTransfers.count(db, owner, { cap: Schema.countCap, status }).catch(() => {
370
+ c.set('routesTransferCountFailed', true);
371
+ return undefined;
372
+ })
373
+ : undefined;
374
+ // Fetch one extra to detect a further page without a second round-trip.
375
+ const rows = await RoutesTransfers.listByOwner(db, owner, {
376
+ cursor,
377
+ limit: limit + 1,
378
+ status,
379
+ });
380
+ const hasMore = rows.length > limit;
381
+ const data = (hasMore ? rows.slice(0, limit) : rows).map(RoutesTransfer.toPublic);
382
+ const nextCursor = hasMore ? (data[data.length - 1]?.id ?? null) : null;
383
+ const count = countPromise ? await countPromise : undefined;
384
+ c.header('Cache-Control', Cache.policies.feed);
385
+ c.header('Vary', 'Accept-Encoding, Authorization, Tempo-API-Key, X-API-Key');
386
+ return c.json(Response.validated(schema.listRoutesTransfers.Response, {
387
+ data,
388
+ ...(count !== undefined
389
+ ? {
390
+ meta: {
391
+ totalCountCapped: count > Schema.countCap,
392
+ totalCount: Math.min(count, Schema.countCap),
393
+ },
394
+ }
395
+ : {}),
396
+ nextCursor,
397
+ }), 200);
398
+ }
399
+ catch (cause) {
400
+ return Response.upstream(c, cause);
401
+ }
402
+ })
403
+ .get('/v1/routes/transfers/:id{rtr_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['routes:read'] } }), OpenApi.validate('param', schema.getRoutesTransfer.Params, {
404
+ code: 'param_invalid',
405
+ message: 'Check the path parameters and try again.',
406
+ }), OpenApi.describeRoute({
407
+ description: 'Returns a transfer by ID.',
408
+ operationId: 'getRoutesTransfer',
409
+ responses: OpenApi.responses({
410
+ errors: {
411
+ 400: { codes: ['param_invalid'] },
412
+ 404: {
413
+ codes: ['routes_transfer_not_found'],
414
+ description: 'No visible route transfer exists for the identifier.',
415
+ },
416
+ },
417
+ success: {
418
+ description: 'The requested route transfer.',
419
+ example: routesTransferExample,
420
+ schema: schema.getRoutesTransfer.Response,
421
+ },
422
+ }),
423
+ summary: 'Get transfer',
424
+ tags: ['Route Transfers'],
425
+ }), async (c) => {
426
+ if (Auth.narrowAccess)
427
+ return Auth.accessError(c);
428
+ if (OpenApi.narrowValidation)
429
+ return OpenApi.validationError(c, {
430
+ code: 'param_invalid',
431
+ message: 'Check the path parameters and try again.',
432
+ });
433
+ const owner = Access.owner(c);
434
+ if (!owner)
435
+ return Access.unauthorized(c);
436
+ const db = Db.get(c.get('db'));
437
+ const { id } = c.req.valid('param');
438
+ try {
439
+ // Ownership filters in SQL, so absent and foreign rows are the same 404.
440
+ const record = await RoutesTransfers.getOwned(db, owner, id);
441
+ if (!record)
442
+ return Response.error(c, {
443
+ code: 'routes_transfer_not_found',
444
+ message: 'Route transfer not found',
445
+ status: 404,
446
+ });
447
+ c.header('Cache-Control', Cache.policies.noStore);
448
+ c.header('Vary', 'Accept-Encoding, Authorization, Tempo-API-Key, X-API-Key');
449
+ return c.json(Response.validated(schema.getRoutesTransfer.Response, RoutesTransfer.toPublic(record)), 200);
450
+ }
451
+ catch (cause) {
452
+ return Response.upstream(c, cause);
453
+ }
454
+ })
455
+ .post('/v1/routes/transfers/:id{rtr_[A-Za-z0-9_-]+}/source-transactions', Auth.policy({ apiKey: { scopes: ['routes:write'] } }), OpenApi.validate('param', schema.registerRoutesTransferSourceTransaction.Params, paramValidation), OpenApi.validate('json', schema.registerRoutesTransferSourceTransaction.Body, bodyValidation), OpenApi.describeRoute({
456
+ description: 'Registers verified source transactions once per organization, environment, and project.',
457
+ operationId: 'registerRoutesTransferSourceTransaction',
458
+ responses: OpenApi.responses({
459
+ errors: {
460
+ 400: {
461
+ codes: ['body_invalid', 'param_invalid', 'source_transaction_invalid'],
462
+ description: 'The path, body, or submitted source transaction is invalid.',
463
+ },
464
+ 404: {
465
+ codes: ['routes_transfer_not_found'],
466
+ description: 'No visible route transfer exists for the identifier.',
467
+ },
468
+ 409: {
469
+ codes: [
470
+ 'routes_transfer_not_awaiting_source',
471
+ 'source_transaction_conflict',
472
+ 'source_transaction_pending',
473
+ ],
474
+ description: 'The transfer or source transaction cannot be registered yet.',
475
+ },
476
+ 501: {
477
+ codes: ['not_implemented'],
478
+ description: 'Source transaction reconciliation is not configured.',
479
+ },
480
+ 502: {
481
+ codes: ['upstream_error'],
482
+ description: 'Source verification or reconciliation dispatch failed.',
483
+ },
484
+ },
485
+ success: {
486
+ description: 'The transfer with its verified source transactions.',
487
+ example: registeredRoutesTransferExample,
488
+ schema: schema.registerRoutesTransferSourceTransaction.Response,
489
+ },
490
+ }),
491
+ summary: 'Register source transaction',
492
+ tags: ['Route Transfers'],
493
+ }), async (c) => {
494
+ if (Auth.narrowAccess)
495
+ return Auth.accessError(c);
496
+ if (OpenApi.narrowValidation)
497
+ return OpenApi.validationError(c, paramValidation);
498
+ if (OpenApi.narrowValidation)
499
+ return OpenApi.validationError(c, bodyValidation);
500
+ const owner = Access.owner(c);
501
+ if (!owner)
502
+ return Access.unauthorized(c);
503
+ c.header('Cache-Control', Cache.policies.noStore);
504
+ c.header('Vary', 'Accept-Encoding, Authorization, Tempo-API-Key, X-API-Key');
505
+ const dispatch = options.dispatchTransferReconciliation;
506
+ if (!dispatch)
507
+ return Response.error(c, {
508
+ code: 'not_implemented',
509
+ message: 'Source transaction reconciliation is not configured',
510
+ status: 501,
511
+ });
512
+ const db = Db.get(c.get('db'));
513
+ const { id } = c.req.valid('param');
514
+ const body = c.req.valid('json');
515
+ const transactionHashes = [
516
+ ...new Set('transactionHash' in body ? [body.transactionHash] : body.transactionHashes),
517
+ ];
518
+ try {
519
+ const record = await RoutesTransfers.getOwned(db, owner, id);
520
+ if (!record)
521
+ return Response.error(c, {
522
+ code: 'routes_transfer_not_found',
523
+ message: 'Route transfer not found',
524
+ status: 404,
525
+ });
526
+ if (transactionHashes.every((transactionHash) => record.snapshot.sourceTransactionHashes?.some((candidate) => candidate.toLowerCase() === transactionHash))) {
527
+ return c.json(Response.validated(schema.registerRoutesTransferSourceTransaction.Response, RoutesTransfer.toPublic(record)), 200);
528
+ }
529
+ const provider = c
530
+ .get('providers')
531
+ .filter(RoutesProvider.is)
532
+ .find((candidate) => candidate.id === record.providerId);
533
+ if (!provider || !RoutesProvider.canVerifySourceTransaction(provider))
534
+ return Response.error(c, {
535
+ code: 'routes_transfer_not_awaiting_source',
536
+ message: 'Route transfer does not accept source transactions',
537
+ status: 409,
538
+ });
539
+ if (record.status !== 'awaiting-source')
540
+ return Response.error(c, {
541
+ code: 'routes_transfer_not_awaiting_source',
542
+ message: 'Route transfer is not awaiting a source transaction',
543
+ status: 409,
544
+ });
545
+ const catalog = await RoutesCatalog.snapshot(c);
546
+ const destinationChain = catalog.chainsByKey.get(record.snapshot.destinationChain.id);
547
+ const sourceChain = catalog.chainsByKey.get(record.snapshot.sourceChain.id);
548
+ const routeConfiguration = catalog.routesByProvider
549
+ .get(record.providerId)
550
+ ?.find((candidate) => candidate.route.source.chain.id === record.snapshot.sourceChain.id &&
551
+ candidate.route.source.address.toLowerCase() ===
552
+ record.snapshot.sourceToken.address.toLowerCase() &&
553
+ candidate.route.destination.chain.id === record.snapshot.destinationChain.id &&
554
+ candidate.route.destination.address.toLowerCase() ===
555
+ record.snapshot.destinationToken.address.toLowerCase())?.configuration;
556
+ if (!destinationChain || !sourceChain)
557
+ return Response.error(c, {
558
+ code: 'routes_transfer_not_awaiting_source',
559
+ message: 'Route transfer route chains are no longer configured',
560
+ status: 409,
561
+ });
562
+ const attempts = [];
563
+ const verifications = transactionHashes.map(async (transactionHash) => ({
564
+ ...(await RoutesProvider.observe(provider, () => provider.verifySourceTransaction({
565
+ destinationChain,
566
+ providerState: record.providerState ?? undefined,
567
+ routeConfiguration,
568
+ sourceChain,
569
+ transactionHash,
570
+ transfer: record.snapshot,
571
+ }, c.req.raw.signal), {
572
+ onAttempt: (attempt) => attempts.push(attempt),
573
+ operation: 'verifySourceTransaction',
574
+ })),
575
+ transactionHash,
576
+ }));
577
+ const candidates = await Promise.all(verifications)
578
+ .catch(async (cause) => {
579
+ await Promise.allSettled(verifications);
580
+ throw cause;
581
+ })
582
+ .finally(() => {
583
+ if (attempts.length > 0)
584
+ c.set('routesProviderAttempts', attempts);
585
+ });
586
+ const verified = candidates.filter((candidate) => candidate.type === 'verified');
587
+ if (candidates.some((candidate) => candidate.type === 'invalid'))
588
+ return Response.error(c, {
589
+ code: 'source_transaction_invalid',
590
+ message: 'Source transactions do not match the route transfer',
591
+ status: 400,
592
+ });
593
+ if (candidates.some((candidate) => candidate.type === 'pending'))
594
+ return Response.error(c, {
595
+ code: 'source_transaction_pending',
596
+ message: 'A source transaction is not confirmed yet',
597
+ status: 409,
598
+ });
599
+ const evidence = verified[0];
600
+ if (!evidence || verified.length !== 1)
601
+ return Response.error(c, {
602
+ code: 'source_transaction_invalid',
603
+ message: 'Source transactions do not match the route transfer',
604
+ status: 400,
605
+ });
606
+ const registered = await RoutesTransfer.registerSourceTransactions(db, {
607
+ chainId: record.snapshot.sourceChain.id,
608
+ ...(evidence.destinationAmount
609
+ ? {
610
+ destinationAmount: Value.tokenAmount({
611
+ baseUnits: evidence.destinationAmount,
612
+ currency: record.snapshot.destinationToken.currency,
613
+ decimals: record.snapshot.destinationToken.decimals,
614
+ }),
615
+ }
616
+ : {}),
617
+ id: record.id,
618
+ providerState: evidence.providerState ?? {},
619
+ transactionHashes: [
620
+ evidence.transactionHash,
621
+ ...candidates
622
+ .filter((candidate) => candidate.type === 'related')
623
+ .map((candidate) => candidate.transactionHash),
624
+ ],
625
+ });
626
+ if (registered.type === 'not_found')
627
+ return Response.error(c, {
628
+ code: 'routes_transfer_not_found',
629
+ message: 'Route transfer not found',
630
+ status: 404,
631
+ });
632
+ if (registered.type === 'conflict')
633
+ return Response.error(c, {
634
+ code: 'source_transaction_conflict',
635
+ message: 'Source transaction is already assigned to another route transfer',
636
+ status: 409,
637
+ });
638
+ if (registered.type === 'invalid')
639
+ return Response.error(c, {
640
+ code: 'routes_transfer_not_awaiting_source',
641
+ message: 'Route transfer is not awaiting a source transaction',
642
+ status: 409,
643
+ });
644
+ const sourceRoutes = (() => {
645
+ if (registered.type !== 'registered')
646
+ return undefined;
647
+ RoutesObservability.recordTransfer(c.get('metrics'), {
648
+ previous: record,
649
+ record: registered.record,
650
+ });
651
+ return RoutesObservability.transferSourceRoutesInterval({
652
+ record: registered.record,
653
+ });
654
+ })();
655
+ await Promise.all([
656
+ registered.type === 'registered'
657
+ ? dispatch({ transferId: record.id, type: 'routes:transfer:reconcile' })
658
+ : undefined,
659
+ sourceRoutes && options.recordLifecycleInterval
660
+ ? options.recordLifecycleInterval(sourceRoutes)
661
+ : undefined,
662
+ registered.type === 'registered' &&
663
+ options.dispatchTransferUpdates &&
664
+ registered.references.length > 0
665
+ ? options.dispatchTransferUpdates(registered.references)
666
+ : undefined,
667
+ ]);
668
+ return c.json(Response.validated(schema.registerRoutesTransferSourceTransaction.Response, RoutesTransfer.toPublic(registered.record)), 200);
669
+ }
670
+ catch (cause) {
671
+ return Response.upstream(c, cause);
672
+ }
673
+ })
674
+ .post('/v1/routes/transfers', Auth.policy({ apiKey: { scopes: ['routes:write'] } }), OpenApi.validate('header', schema.createRoutesTransfer.Headers, {
675
+ code: 'idempotency_key_required',
676
+ message: 'Route transfer creation requires an `Idempotency-Key` header.',
677
+ }), OpenApi.validate('json', schema.createRoutesTransfer.Body, {
678
+ code: 'body_invalid',
679
+ message: 'Check the request body and try again.',
680
+ }), OpenApi.describeRoute({
681
+ description: 'Creates a durable transfer between supported chains, including optional normalized destination subsidies.',
682
+ operationId: 'createRoutesTransfer',
683
+ responses: OpenApi.responses({
684
+ errors: {
685
+ 400: { codes: ['body_invalid', 'idempotency_key_required'] },
686
+ 403: {
687
+ codes: [
688
+ 'billing_past_due',
689
+ 'billing_required',
690
+ 'routes_subsidy_limit_exceeded',
691
+ 'routes_subsidy_not_enabled',
692
+ ],
693
+ description: 'The requested normalized delivery subsidy is unavailable.',
694
+ },
695
+ 404: {
696
+ codes: ['quote_not_available'],
697
+ description: 'No provider can prepare the requested route.',
698
+ },
699
+ 409: {
700
+ codes: ['idempotency_conflict', 'idempotency_in_progress'],
701
+ description: 'The Idempotency-Key conflicts with an existing or in-flight request.',
702
+ },
703
+ 501: {
704
+ codes: ['not_implemented'],
705
+ description: 'Destination subsidy settlement is not configured.',
706
+ },
707
+ 502: {
708
+ codes: ['upstream_error'],
709
+ description: 'No provider succeeded and at least one failed unexpectedly.',
710
+ },
711
+ 503: {
712
+ codes: ['subsidy_inventory_unavailable', 'subsidy_signer_unavailable'],
713
+ description: 'Destination subsidy capacity is temporarily unavailable.',
714
+ },
715
+ },
716
+ success: {
717
+ description: 'The created route transfer with its one-time executable action.',
718
+ example: createdRoutesTransferExample,
719
+ schema: schema.createRoutesTransfer.Response,
720
+ },
721
+ }),
722
+ summary: 'Create transfer',
723
+ tags: ['Route Transfers'],
724
+ }), async (c) => {
725
+ if (Auth.narrowAccess)
726
+ return Auth.accessError(c);
727
+ if (OpenApi.narrowValidation)
728
+ return OpenApi.validationError(c, {
729
+ code: 'body_invalid',
730
+ message: 'Check the request body and try again.',
731
+ });
732
+ const principal = Auth.getPrincipal(c);
733
+ const owner = Access.owner(c);
734
+ if (!owner || principal?.type !== 'api_key')
735
+ return Access.unauthorized(c);
736
+ c.header('Cache-Control', 'no-store');
737
+ const idempotencyKey = c.req.valid('header')['idempotency-key'];
738
+ const body = c.req.valid('json');
739
+ const subsidize = body.subsidize ?? false;
740
+ if (subsidize && body.mode !== 'exactSource')
741
+ return Response.error(c, {
742
+ code: 'body_invalid',
743
+ message: 'Normalized delivery subsidies require `exactSource` mode.',
744
+ status: 400,
745
+ });
746
+ const db = Db.get(c.get('db'));
747
+ const identity = {
748
+ apiKeyId: principal.id,
749
+ keyHash: Idempotency.inputHash(idempotencyKey),
750
+ requestHash: Idempotency.inputHash(body),
751
+ };
752
+ const claimed = await (async () => {
753
+ try {
754
+ return {
755
+ claim: await RoutesIdempotency.claim(db, {
756
+ ...identity,
757
+ irrevocable: false,
758
+ operation: RoutesIdempotency.operations.transfer,
759
+ orgId: owner.orgId,
760
+ ttlMs: idempotencyPendingTtlMs,
761
+ }),
762
+ type: 'success',
763
+ };
764
+ }
765
+ catch (cause) {
766
+ if (RoutesIdempotency.isOwnerFenceError(cause))
767
+ return { type: 'ownerNotFound' };
768
+ throw cause;
769
+ }
770
+ })();
771
+ if (claimed.type === 'ownerNotFound')
772
+ return ownerNotFound(c);
773
+ const claim = claimed.claim;
774
+ if (claim.type === 'mismatch')
775
+ return Response.error(c, {
776
+ code: 'idempotency_conflict',
777
+ message: 'This Idempotency-Key was already used with different input.',
778
+ status: 409,
779
+ });
780
+ if (claim.type === 'pending')
781
+ return Response.error(c, {
782
+ code: 'idempotency_in_progress',
783
+ message: 'An equivalent route transfer creation is still running.',
784
+ status: 409,
785
+ });
786
+ if (claim.type === 'replay')
787
+ return c.json(Response.validated(schema.createRoutesTransfer.Response, JSON.parse(claim.response)), 200);
788
+ const release = async () => {
789
+ try {
790
+ await RoutesIdempotency.release(db, {
791
+ apiKeyId: identity.apiKeyId,
792
+ createdAt: claim.createdAt,
793
+ keyHash: identity.keyHash,
794
+ });
795
+ }
796
+ catch {
797
+ // The pending claim expires on its own; the response stays authoritative.
798
+ }
799
+ };
800
+ try {
801
+ if (subsidize && !options.transferSubsidy) {
802
+ await release();
803
+ return Response.error(c, {
804
+ code: 'not_implemented',
805
+ message: 'Destination subsidy settlement is not configured.',
806
+ status: 501,
807
+ });
808
+ }
809
+ const subsidyPolicy = subsidize
810
+ ? await RoutesSubsidy.check(db, {
811
+ environment: owner.environment,
812
+ orgId: owner.orgId,
813
+ })
814
+ : undefined;
815
+ if (subsidyPolicy?.type === 'denied') {
816
+ RoutesObservability.recordSubsidyRejection(c.get('metrics'), {
817
+ reason: subsidyPolicy.reason,
818
+ routesEnvironment: owner.environment,
819
+ });
820
+ await release();
821
+ return Response.error(c, {
822
+ code: subsidyPolicy.reason,
823
+ message: RoutesSubsidy.denialMessages[subsidyPolicy.reason],
824
+ status: 403,
825
+ });
826
+ }
827
+ const attempts = [];
828
+ const catalog = await RoutesCatalog.snapshot(c);
829
+ const providers = c.get('providers').filter(RoutesProvider.is);
830
+ const selected = await RoutesProvider.prepareTransfer({
831
+ catalog,
832
+ destinationChain: body.destinationChain ?? `eip155:${c.get('chainId')}`,
833
+ destinationToken: body.destinationToken,
834
+ method: 'transaction',
835
+ mode: body.mode,
836
+ onAttempt: (attempt) => attempts.push(attempt),
837
+ provider: body.provider,
838
+ providers,
839
+ recipient: body.recipient,
840
+ sender: body.sender,
841
+ slippageBps: body.slippageBps,
842
+ sourceAmount: body.amount,
843
+ sourceChain: body.sourceChain,
844
+ sourceToken: body.sourceToken,
845
+ });
846
+ if (attempts.length > 0)
847
+ c.set('routesProviderAttempts', attempts.map(RoutesProvider.formatAttempt));
848
+ if (!selected) {
849
+ await release();
850
+ return quoteNotAvailable(c);
851
+ }
852
+ const { candidate, result } = selected;
853
+ const subsidyDestinationChain = subsidize
854
+ ? catalog.chainsByKey.get(candidate.destinationChain.id)
855
+ : undefined;
856
+ if (subsidize && !subsidyDestinationChain) {
857
+ await release();
858
+ return quoteNotAvailable(c);
859
+ }
860
+ if (subsidize &&
861
+ (candidate.sourceChain.id !== `eip155:${c.get('chainId')}` ||
862
+ !['eip155:1', 'eip155:8453'].includes(candidate.destinationChain.id))) {
863
+ await release();
864
+ return Response.error(c, {
865
+ code: 'body_invalid',
866
+ message: 'Destination subsidies support Tempo transfers to Base or Ethereum.',
867
+ status: 400,
868
+ });
869
+ }
870
+ const destinationAmountRequired = subsidize
871
+ ? RoutesTransferSubsidy.requiredAmount({
872
+ destinationToken: candidate.destinationToken,
873
+ sourceAmount: candidate.sourceAmount.amount,
874
+ sourceToken: candidate.sourceToken,
875
+ })
876
+ : undefined;
877
+ const subsidyAmount = destinationAmountRequired !== undefined &&
878
+ destinationAmountRequired > BigInt(result.destinationAmountMin)
879
+ ? destinationAmountRequired - BigInt(result.destinationAmountMin)
880
+ : 0n;
881
+ if (destinationAmountRequired !== undefined &&
882
+ subsidyPolicy?.type === 'allowed' &&
883
+ (!RoutesSubsidy.supportsGap(subsidyPolicy, {
884
+ amount: subsidyAmount,
885
+ destinationToken: candidate.destinationToken,
886
+ }) ||
887
+ (options.transferSubsidy !== undefined &&
888
+ !RoutesSubsidy.supportsGap(options.transferSubsidy.policy, {
889
+ amount: subsidyAmount,
890
+ destinationToken: candidate.destinationToken,
891
+ })))) {
892
+ await release();
893
+ return Response.error(c, {
894
+ code: 'routes_subsidy_limit_exceeded',
895
+ message: 'The required destination subsidy exceeds the configured limit.',
896
+ status: 403,
897
+ });
898
+ }
899
+ const snapshot = {
900
+ destinationAmount: Value.tokenAmount({
901
+ baseUnits: result.destinationAmount,
902
+ currency: candidate.destinationToken.currency,
903
+ decimals: candidate.destinationToken.decimals,
904
+ }),
905
+ destinationAmountMin: Value.tokenAmount({
906
+ baseUnits: result.destinationAmountMin,
907
+ currency: candidate.destinationToken.currency,
908
+ decimals: candidate.destinationToken.decimals,
909
+ }),
910
+ ...(destinationAmountRequired === undefined
911
+ ? {}
912
+ : {
913
+ destinationAmountRequired: Value.tokenAmount({
914
+ baseUnits: destinationAmountRequired,
915
+ currency: candidate.destinationToken.currency,
916
+ decimals: candidate.destinationToken.decimals,
917
+ }),
918
+ }),
919
+ destinationChain: candidate.destinationChain,
920
+ destinationToken: candidate.destinationToken,
921
+ fees: result.fees.map((fee) => {
922
+ const token = fee.token ??
923
+ (fee.side === 'source' ? candidate.sourceToken : candidate.destinationToken);
924
+ return {
925
+ amount: Value.tokenAmount({
926
+ baseUnits: fee.amount,
927
+ currency: token.currency,
928
+ decimals: token.decimals,
929
+ }),
930
+ side: fee.side,
931
+ token,
932
+ type: 'provider',
933
+ };
934
+ }),
935
+ method: 'transaction',
936
+ mode: body.mode,
937
+ provider: candidate.provider,
938
+ quote: { expiresAt: result.expiresAt, sampledAt: result.sampledAt },
939
+ recipient: selected.recipient,
940
+ sender: selected.sender,
941
+ sourceAmount: Value.tokenAmount({
942
+ baseUnits: candidate.sourceAmount.amount,
943
+ currency: candidate.sourceToken.currency,
944
+ decimals: candidate.sourceToken.decimals,
945
+ }),
946
+ sourceChain: candidate.sourceChain,
947
+ sourceToken: candidate.sourceToken,
948
+ subsidize,
949
+ };
950
+ // The transfer row, its version-1 event, and the replay body commit
951
+ // atomically so a crash cannot leave a claimed key without a replay.
952
+ const created = await db.transaction(async (tx) => {
953
+ const input = {
954
+ apiKeyId: principal.id,
955
+ environment: owner.environment,
956
+ orgId: owner.orgId,
957
+ projectId: owner.projectId,
958
+ providerState: result.correlation || result.providerState
959
+ ? {
960
+ ...result.correlation,
961
+ ...result.providerState,
962
+ }
963
+ : undefined,
964
+ snapshot,
965
+ };
966
+ const { record, references } = subsidize && subsidyAmount > 0n && options.transferSubsidy
967
+ ? await RoutesTransfer.reserveSubsidyCommitmentIn(tx, input, {
968
+ account: options.transferSubsidy.account,
969
+ chainId: candidate.destinationChain.id,
970
+ check: ({ reservations }) => options.transferSubsidy.check({
971
+ amount: subsidyAmount,
972
+ chain: subsidyDestinationChain,
973
+ recipient: getAddress(selected.recipient),
974
+ reservations,
975
+ token: getAddress(candidate.destinationToken.address),
976
+ }),
977
+ subsidyCommitmentAmount: Value.tokenAmount({
978
+ baseUnits: subsidyAmount,
979
+ currency: candidate.destinationToken.currency,
980
+ decimals: candidate.destinationToken.decimals,
981
+ }),
982
+ tokenAddress: candidate.destinationToken.address,
983
+ })
984
+ : await RoutesTransfer.createIn(tx, input);
985
+ const validated = Response.validated(schema.createRoutesTransfer.Response, RoutesTransfer.toCreated(record, result.action));
986
+ const completion = await RoutesIdempotency.complete(tx, {
987
+ apiKeyId: identity.apiKeyId,
988
+ createdAt: claim.createdAt,
989
+ keyHash: identity.keyHash,
990
+ replayTtlMs: idempotencyReplayTtlMs,
991
+ response: JSON.stringify(validated),
992
+ transferId: record.id,
993
+ });
994
+ if (!completion)
995
+ throw new IdempotencyLeaseLostError('Route transfer creation lease was lost.');
996
+ return { record, references, response: validated };
997
+ });
998
+ RoutesObservability.recordTransfer(c.get('metrics'), {
999
+ record: created.record,
1000
+ ...(body.provider === undefined && selected.preparedCount > 1
1001
+ ? { selection: { bestDestinationAmount: selected.bestDestinationAmount } }
1002
+ : {}),
1003
+ });
1004
+ if (options.dispatchTransferUpdates && created.references.length > 0)
1005
+ try {
1006
+ await options.dispatchTransferUpdates(created.references);
1007
+ }
1008
+ catch (cause) {
1009
+ return Response.upstream(c, cause);
1010
+ }
1011
+ return c.json(created.response, 200);
1012
+ }
1013
+ catch (cause) {
1014
+ await release();
1015
+ if (cause instanceof RoutesProvider.InvalidAmountError)
1016
+ return Response.error(c, { code: 'body_invalid', message: 'Invalid `amount`.', status: 400 }); // prettier-ignore
1017
+ if (cause instanceof RoutesProvider.InvalidRecipientAddressError)
1018
+ return Response.error(c, { code: 'body_invalid', message: 'Invalid `recipient`.', status: 400 }); // prettier-ignore
1019
+ if (cause instanceof RoutesProvider.InvalidSenderAddressError)
1020
+ return Response.error(c, { code: 'body_invalid', message: 'Invalid `sender`.', status: 400 }); // prettier-ignore
1021
+ if (cause instanceof RoutesProvider.UnsupportedProviderError)
1022
+ return Response.error(c, { code: 'body_invalid', message: 'Unsupported `provider`.', status: 400 }); // prettier-ignore
1023
+ if (cause instanceof RoutesTransferSubsidy.UnsupportedAmountError ||
1024
+ cause instanceof RoutesTransferSubsidy.UnsupportedTokenError)
1025
+ return Response.error(c, {
1026
+ code: 'body_invalid',
1027
+ message: 'Normalized delivery requires compatible USD token amounts.',
1028
+ status: 400,
1029
+ });
1030
+ if (cause instanceof RoutesProvider.UnsupportedDestinationChainError ||
1031
+ cause instanceof RoutesProvider.UnsupportedSourceChainError)
1032
+ return quoteNotAvailable(c);
1033
+ if (cause instanceof RoutesTransfer.QuoteExpiredError)
1034
+ return quoteNotAvailable(c);
1035
+ if (cause instanceof RoutesProvider.ProviderQuoteError) {
1036
+ if (cause.routesProviderAttempts.length > 0)
1037
+ c.set('routesProviderAttempts', cause.routesProviderAttempts);
1038
+ if (cause.providerFailure)
1039
+ c.set('providerFailure', cause.providerFailure);
1040
+ if (cause.providerFailures)
1041
+ c.set('providerFailures', cause.providerFailures);
1042
+ return Response.error(c, {
1043
+ code: 'upstream_error',
1044
+ message: 'No route provider could prepare the transfer.',
1045
+ status: 502,
1046
+ });
1047
+ }
1048
+ if (cause instanceof RoutesTransferSubsidy.BalanceUnavailableError)
1049
+ return Response.error(c, {
1050
+ code: 'subsidy_inventory_unavailable',
1051
+ message: 'Tempo lacks enough destination token inventory or native gas.',
1052
+ status: 503,
1053
+ });
1054
+ if (cause instanceof RoutesTransferSubsidy.InventoryUpstreamError)
1055
+ return Response.upstream(c, cause);
1056
+ if (cause instanceof RoutesTransfer.OrganizationNotFoundError ||
1057
+ RoutesIdempotency.isOwnerFenceError(cause))
1058
+ return ownerNotFound(c);
1059
+ if (cause instanceof RoutesTransfer.SubsidySignerBlockedError)
1060
+ return Response.error(c, {
1061
+ code: 'subsidy_signer_unavailable',
1062
+ message: 'Destination subsidy settlement is temporarily unavailable.',
1063
+ status: 503,
1064
+ });
1065
+ throw cause;
1066
+ }
1067
+ })
1068
+ .post('/v1/routes/transfers/vault', Auth.policy({ apiKey: { scopes: ['routes:write'] } }), OpenApi.validate('header', schema.createRoutesTransferVault.Headers, {
1069
+ code: 'idempotency_key_required',
1070
+ message: 'Route transfer creation requires an `Idempotency-Key` header.',
1071
+ }), OpenApi.validate('json', schema.createRoutesTransferVault.Body, {
1072
+ code: 'body_invalid',
1073
+ message: 'Check the request body and try again.',
1074
+ }), OpenApi.describeRoute({
1075
+ description: 'Creates a transfer into a Tempo Earn vault.',
1076
+ operationId: 'createRoutesTransferVault',
1077
+ responses: unimplementedRoutesTransferResponses,
1078
+ summary: 'Create transfer into vault',
1079
+ tags: ['Route Transfers'],
1080
+ }), (c) => {
1081
+ if (Auth.narrowAccess)
1082
+ return Auth.accessError(c);
1083
+ if (OpenApi.narrowValidation)
1084
+ return OpenApi.validationError(c, {
1085
+ code: 'body_invalid',
1086
+ message: 'Check the request body and try again.',
1087
+ });
1088
+ c.header('Cache-Control', 'no-store');
1089
+ return Response.error(c, {
1090
+ code: 'not_implemented',
1091
+ message: 'Vault route transfers are not implemented.',
1092
+ status: 501,
1093
+ });
1094
+ })
1095
+ .post('/v1/routes/transfers/zone', Auth.policy({ apiKey: { scopes: ['routes:write'] } }), OpenApi.validate('header', schema.createRoutesTransferZone.Headers, {
1096
+ code: 'idempotency_key_required',
1097
+ message: 'Route transfer creation requires an `Idempotency-Key` header.',
1098
+ }), OpenApi.validate('json', schema.createRoutesTransferZone.Body, {
1099
+ code: 'body_invalid',
1100
+ message: 'Check the request body and try again.',
1101
+ }), OpenApi.describeRoute({
1102
+ description: 'Creates a transfer into a Tempo Zone.',
1103
+ operationId: 'createRoutesTransferZone',
1104
+ responses: unimplementedRoutesTransferResponses,
1105
+ summary: 'Create transfer into zone',
1106
+ tags: ['Route Transfers'],
1107
+ }), (c) => {
1108
+ if (Auth.narrowAccess)
1109
+ return Auth.accessError(c);
1110
+ if (OpenApi.narrowValidation)
1111
+ return OpenApi.validationError(c, {
1112
+ code: 'body_invalid',
1113
+ message: 'Check the request body and try again.',
1114
+ });
1115
+ c.header('Cache-Control', 'no-store');
1116
+ return Response.error(c, {
1117
+ code: 'not_implemented',
1118
+ message: 'Zone route transfers are not implemented.',
1119
+ status: 501,
1120
+ });
1121
+ });
1122
+ }
1123
+ function quoteNotAvailable(c) {
1124
+ return Response.error(c, {
1125
+ code: 'quote_not_available',
1126
+ message: 'No provider can prepare the requested provider route.',
1127
+ status: 404,
1128
+ });
1129
+ }
1130
+ function ownerNotFound(c) {
1131
+ return Response.error(c, {
1132
+ code: 'api_key_forbidden',
1133
+ message: 'API key organization no longer exists.',
1134
+ status: 403,
1135
+ });
1136
+ }
1137
+ class IdempotencyLeaseLostError extends Error {
1138
+ name = 'Routes.IdempotencyLeaseLostError';
1139
+ }
1140
+ //# sourceMappingURL=transfers.js.map