tapimo 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1143) 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 +21383 -18056
  9. package/dist/App.d.ts.map +1 -1
  10. package/dist/App.js +301 -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 +2 -2
  24. package/dist/Webhooks.js.map +1 -1
  25. package/dist/admin/App.d.ts +3936 -1337
  26. package/dist/admin/App.d.ts.map +1 -1
  27. package/dist/admin/App.js +26 -5
  28. package/dist/admin/App.js.map +1 -1
  29. package/dist/admin/apps/api-keys.d.ts +159 -7
  30. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  31. package/dist/admin/apps/api-keys.js +95 -43
  32. package/dist/admin/apps/api-keys.js.map +1 -1
  33. package/dist/admin/apps/earn-vaults.d.ts +1446 -0
  34. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  35. package/dist/admin/apps/earn-vaults.js +465 -8
  36. package/dist/admin/apps/earn-vaults.js.map +1 -1
  37. package/dist/admin/apps/organizations.d.ts +344 -3
  38. package/dist/admin/apps/organizations.d.ts.map +1 -1
  39. package/dist/admin/apps/organizations.js +288 -10
  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 +16 -16
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +3 -3
  56. package/dist/admin/apps/verified-tokens.js.map +1 -1
  57. package/dist/admin/ui.generated.d.ts +1 -1
  58. package/dist/admin/ui.generated.d.ts.map +1 -1
  59. package/dist/admin/ui.generated.js +129 -69
  60. package/dist/admin/ui.generated.js.map +1 -1
  61. package/dist/analytics/Analytics.d.ts +5 -2
  62. package/dist/analytics/Analytics.d.ts.map +1 -1
  63. package/dist/analytics/Analytics.js +31 -1
  64. package/dist/analytics/Analytics.js.map +1 -1
  65. package/dist/analytics/tables/requestEvents.d.ts +2 -1
  66. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  67. package/dist/analytics/tables/requestEvents.js +10 -1
  68. package/dist/analytics/tables/requestEvents.js.map +1 -1
  69. package/dist/analytics/tables/routesLifecycleIntervals.d.ts +72 -0
  70. package/dist/analytics/tables/routesLifecycleIntervals.d.ts.map +1 -0
  71. package/dist/analytics/tables/routesLifecycleIntervals.js +56 -0
  72. package/dist/analytics/tables/routesLifecycleIntervals.js.map +1 -0
  73. package/dist/apps/Zones.d.ts +21 -12526
  74. package/dist/apps/Zones.d.ts.map +1 -1
  75. package/dist/apps/Zones.js +40 -8
  76. package/dist/apps/Zones.js.map +1 -1
  77. package/dist/apps/data/App.d.ts +4310 -2548
  78. package/dist/apps/data/App.d.ts.map +1 -1
  79. package/dist/apps/data/App.js +86 -26
  80. package/dist/apps/data/App.js.map +1 -1
  81. package/dist/apps/data/routes/activities.d.ts +364 -34
  82. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  83. package/dist/apps/data/routes/activities.js +495 -190
  84. package/dist/apps/data/routes/activities.js.map +1 -1
  85. package/dist/apps/data/routes/addresses.d.ts +94 -22
  86. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  87. package/dist/apps/data/routes/blocks.d.ts +37 -37
  88. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  89. package/dist/apps/data/routes/coingecko.js +47 -21
  90. package/dist/apps/data/routes/coingecko.js.map +1 -1
  91. package/dist/apps/data/routes/earn.d.ts +1641 -352
  92. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  93. package/dist/apps/data/routes/earn.js +1561 -120
  94. package/dist/apps/data/routes/earn.js.map +1 -1
  95. package/dist/apps/data/routes/exchanges.d.ts +15 -0
  96. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  97. package/dist/apps/data/routes/exchanges.js +180 -114
  98. package/dist/apps/data/routes/exchanges.js.map +1 -1
  99. package/dist/apps/data/routes/fee-amm.d.ts +5 -0
  100. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  101. package/dist/apps/data/routes/fee-amm.js +49 -38
  102. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  103. package/dist/apps/data/routes/indexer.d.ts +125 -0
  104. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  105. package/dist/apps/data/routes/indexer.js +83 -27
  106. package/dist/apps/data/routes/indexer.js.map +1 -1
  107. package/dist/apps/data/routes/rpc.d.ts +507 -33
  108. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  109. package/dist/apps/data/routes/rpc.js +266 -156
  110. package/dist/apps/data/routes/rpc.js.map +1 -1
  111. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  112. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  113. package/dist/apps/data/routes/tokenlist.js +68 -11
  114. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  115. package/dist/apps/data/routes/tokens.d.ts +95 -93
  116. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  117. package/dist/apps/data/routes/tokens.js +26 -14
  118. package/dist/apps/data/routes/tokens.js.map +1 -1
  119. package/dist/apps/data/routes/transfers.d.ts +16 -0
  120. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  121. package/dist/apps/data/routes/transfers.js +9 -7
  122. package/dist/apps/data/routes/transfers.js.map +1 -1
  123. package/dist/apps/data/routes/verified-tokens.d.ts +4 -4
  124. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  125. package/dist/apps/data/routes/verified-tokens.js +64 -20
  126. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  127. package/dist/apps/data/routes/webhooks.d.ts +1210 -70
  128. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  129. package/dist/apps/data/routes/webhooks.js +301 -163
  130. package/dist/apps/data/routes/webhooks.js.map +1 -1
  131. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  132. package/dist/apps/data/routes/zones.js +20 -12
  133. package/dist/apps/data/routes/zones.js.map +1 -1
  134. package/dist/apps/docs/reference.js +2 -2
  135. package/dist/apps/docs/reference.js.map +1 -1
  136. package/dist/apps/index.d.ts +1 -1
  137. package/dist/apps/index.d.ts.map +1 -1
  138. package/dist/apps/index.js +1 -1
  139. package/dist/apps/index.js.map +1 -1
  140. package/dist/apps/management/App.d.ts +4119 -3297
  141. package/dist/apps/management/App.d.ts.map +1 -1
  142. package/dist/apps/management/App.js +5 -14
  143. package/dist/apps/management/App.js.map +1 -1
  144. package/dist/apps/management/Billing.d.ts +49 -8
  145. package/dist/apps/management/Billing.d.ts.map +1 -1
  146. package/dist/apps/management/Billing.js +221 -26
  147. package/dist/apps/management/Billing.js.map +1 -1
  148. package/dist/apps/management/routes/api-keys.d.ts +174 -72
  149. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  150. package/dist/apps/management/routes/api-keys.js +43 -15
  151. package/dist/apps/management/routes/api-keys.js.map +1 -1
  152. package/dist/apps/management/routes/billing.d.ts +364 -78
  153. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  154. package/dist/apps/management/routes/billing.js +274 -49
  155. package/dist/apps/management/routes/billing.js.map +1 -1
  156. package/dist/apps/management/routes/faucet.d.ts +6 -6
  157. package/dist/apps/management/routes/faucet.js +1 -1
  158. package/dist/apps/management/routes/faucet.js.map +1 -1
  159. package/dist/apps/management/routes/invitations.d.ts +99 -24
  160. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  161. package/dist/apps/management/routes/invitations.js +117 -13
  162. package/dist/apps/management/routes/invitations.js.map +1 -1
  163. package/dist/apps/management/routes/invite-links.d.ts +42 -42
  164. package/dist/apps/management/routes/me.d.ts.map +1 -1
  165. package/dist/apps/management/routes/me.js +6 -2
  166. package/dist/apps/management/routes/me.js.map +1 -1
  167. package/dist/apps/management/routes/members.d.ts +16 -16
  168. package/dist/apps/management/routes/orgs.d.ts +36 -20
  169. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  170. package/dist/apps/management/routes/orgs.js +52 -12
  171. package/dist/apps/management/routes/orgs.js.map +1 -1
  172. package/dist/apps/management/routes/projects.d.ts +40 -40
  173. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  174. package/dist/apps/management/routes/projects.js +6 -1
  175. package/dist/apps/management/routes/projects.js.map +1 -1
  176. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  177. package/dist/apps/management/routes/scopes.js +4 -1
  178. package/dist/apps/management/routes/scopes.js.map +1 -1
  179. package/dist/apps/management/routes/usage.d.ts +8 -8
  180. package/dist/apps/management/routes/usage.js +21 -4
  181. package/dist/apps/management/routes/usage.js.map +1 -1
  182. package/dist/apps/management/routes/verified-token-requests.d.ts +16 -16
  183. package/dist/apps/management/routes/webhooks.d.ts +931 -215
  184. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  185. package/dist/apps/management/routes/webhooks.js +71 -25
  186. package/dist/apps/management/routes/webhooks.js.map +1 -1
  187. package/dist/apps/mcp.d.ts +1 -1
  188. package/dist/apps/mcp.js +7 -7
  189. package/dist/apps/mcp.js.map +1 -1
  190. package/dist/apps/mpp/App.d.ts.map +1 -1
  191. package/dist/apps/mpp/App.js +35 -7
  192. package/dist/apps/mpp/App.js.map +1 -1
  193. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  194. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  195. package/dist/apps/mpp/internal/Adapter.js +30 -1
  196. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  197. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  198. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  199. package/dist/apps/mpp/internal/Policy.js +24 -6
  200. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  201. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  202. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  203. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  204. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  205. package/dist/apps/relay/App.d.ts +2 -0
  206. package/dist/apps/relay/App.d.ts.map +1 -1
  207. package/dist/apps/relay/App.js +177 -26
  208. package/dist/apps/relay/App.js.map +1 -1
  209. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  210. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  211. package/dist/apps/relay/Sponsorships.js +232 -25
  212. package/dist/apps/relay/Sponsorships.js.map +1 -1
  213. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  214. package/dist/apps/routes/Access.d.ts.map +1 -0
  215. package/dist/apps/{funding → routes}/Access.js +4 -4
  216. package/dist/apps/routes/Access.js.map +1 -0
  217. package/dist/apps/{funding → routes}/App.d.ts +841 -136
  218. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  219. package/dist/apps/{funding → routes}/App.js +17 -17
  220. package/dist/apps/routes/App.js.map +1 -0
  221. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  222. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  223. package/dist/apps/routes/Inventory.js.map +1 -0
  224. package/dist/apps/routes/index.d.ts +2 -0
  225. package/dist/apps/routes/index.d.ts.map +1 -0
  226. package/dist/apps/routes/index.js +2 -0
  227. package/dist/apps/routes/index.js.map +1 -0
  228. package/dist/apps/{funding → routes}/routes/chains.d.ts +7 -7
  229. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  230. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  231. package/dist/apps/routes/routes/chains.js.map +1 -0
  232. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +123 -59
  233. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  234. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +498 -223
  235. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  236. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  237. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  238. package/dist/apps/routes/routes/providers.js +57 -0
  239. package/dist/apps/routes/routes/providers.js.map +1 -0
  240. package/dist/apps/{funding → routes}/routes/quotes.d.ts +19 -16
  241. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  242. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  243. package/dist/apps/routes/routes/quotes.js.map +1 -0
  244. package/dist/apps/{funding → routes}/routes/transfers.d.ts +957 -71
  245. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  246. package/dist/apps/routes/routes/transfers.js +1140 -0
  247. package/dist/apps/routes/routes/transfers.js.map +1 -0
  248. package/dist/cli/Cli.d.ts +30 -0
  249. package/dist/cli/Cli.d.ts.map +1 -1
  250. package/dist/cli/commands/admin.d.ts +36 -0
  251. package/dist/cli/commands/admin.d.ts.map +1 -1
  252. package/dist/cli/commands/admin.js +273 -0
  253. package/dist/cli/commands/admin.js.map +1 -1
  254. package/dist/cloudflare.d.ts +16 -14
  255. package/dist/cloudflare.d.ts.map +1 -1
  256. package/dist/cloudflare.js +26 -21
  257. package/dist/cloudflare.js.map +1 -1
  258. package/dist/db/Db.d.ts +63 -21
  259. package/dist/db/Db.d.ts.map +1 -1
  260. package/dist/db/Db.js +1052 -15
  261. package/dist/db/Db.js.map +1 -1
  262. package/dist/db/Schema.d.ts +785 -133
  263. package/dist/db/Schema.d.ts.map +1 -1
  264. package/dist/db/Schema.js +590 -162
  265. package/dist/db/Schema.js.map +1 -1
  266. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  267. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  268. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  269. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  270. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  271. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  272. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  273. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  274. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  275. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  276. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  277. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  278. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  279. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  280. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  281. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  282. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  283. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  284. package/dist/db/tables/apiKeyRevocations.js +98 -0
  285. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  286. package/dist/db/tables/authAccounts.d.ts +47 -0
  287. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  288. package/dist/db/tables/authAccounts.js +72 -0
  289. package/dist/db/tables/authAccounts.js.map +1 -0
  290. package/dist/db/tables/authSessions.d.ts +12 -0
  291. package/dist/db/tables/authSessions.d.ts.map +1 -0
  292. package/dist/db/tables/authSessions.js +2 -0
  293. package/dist/db/tables/authSessions.js.map +1 -0
  294. package/dist/db/tables/authVerifications.d.ts +12 -0
  295. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  296. package/dist/db/tables/authVerifications.js +2 -0
  297. package/dist/db/tables/authVerifications.js.map +1 -0
  298. package/dist/db/tables/invitations.d.ts +17 -1
  299. package/dist/db/tables/invitations.d.ts.map +1 -1
  300. package/dist/db/tables/invitations.js +123 -43
  301. package/dist/db/tables/invitations.js.map +1 -1
  302. package/dist/db/tables/memberships.d.ts +8 -0
  303. package/dist/db/tables/memberships.d.ts.map +1 -1
  304. package/dist/db/tables/memberships.js +51 -2
  305. package/dist/db/tables/memberships.js.map +1 -1
  306. package/dist/db/tables/organizations.d.ts +51 -5
  307. package/dist/db/tables/organizations.d.ts.map +1 -1
  308. package/dist/db/tables/organizations.js +135 -47
  309. package/dist/db/tables/organizations.js.map +1 -1
  310. package/dist/db/tables/projects.d.ts +27 -1
  311. package/dist/db/tables/projects.d.ts.map +1 -1
  312. package/dist/db/tables/projects.js +38 -3
  313. package/dist/db/tables/projects.js.map +1 -1
  314. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  315. package/dist/db/tables/requestUsage.js.map +1 -1
  316. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  317. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  318. package/dist/db/tables/rewardAccounts.js +88 -0
  319. package/dist/db/tables/rewardAccounts.js.map +1 -0
  320. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  321. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  322. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  323. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  324. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  325. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  326. package/dist/db/tables/rewardCampaigns.js +392 -0
  327. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  328. package/dist/db/tables/rewardCredits.d.ts +53 -0
  329. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  330. package/dist/db/tables/rewardCredits.js +63 -0
  331. package/dist/db/tables/rewardCredits.js.map +1 -0
  332. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  333. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  334. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  335. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  336. package/dist/db/tables/rewardRuns.d.ts +188 -0
  337. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  338. package/dist/db/tables/rewardRuns.js +278 -0
  339. package/dist/db/tables/rewardRuns.js.map +1 -0
  340. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  341. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  342. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  343. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  344. package/dist/db/tables/routesCatalog.d.ts +58 -0
  345. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  346. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  347. package/dist/db/tables/routesCatalog.js.map +1 -0
  348. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  349. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  350. package/dist/db/tables/routesDepositAddresses.js +587 -0
  351. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  352. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  353. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  354. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  355. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  356. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  357. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  358. package/dist/db/tables/routesDeposits.js +576 -0
  359. package/dist/db/tables/routesDeposits.js.map +1 -0
  360. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  361. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  362. package/dist/db/tables/routesIdempotency.js +330 -0
  363. package/dist/db/tables/routesIdempotency.js.map +1 -0
  364. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  365. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  366. package/dist/db/tables/routesSubsidies.js +45 -0
  367. package/dist/db/tables/routesSubsidies.js.map +1 -0
  368. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  369. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  370. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  371. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  372. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  373. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  374. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  375. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  376. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  377. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  378. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  379. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  380. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  381. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  382. package/dist/db/tables/routesTransferTransactions.js +86 -0
  383. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  384. package/dist/db/tables/routesTransfers.d.ts +319 -0
  385. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  386. package/dist/db/tables/routesTransfers.js +372 -0
  387. package/dist/db/tables/routesTransfers.js.map +1 -0
  388. package/dist/db/tables/sponsoredTransactions.d.ts +112 -13
  389. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  390. package/dist/db/tables/sponsoredTransactions.js +241 -38
  391. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  392. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  393. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  394. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  395. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  396. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  397. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  398. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  399. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  400. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  401. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  402. package/dist/db/tables/stripeCustomers.js +13 -0
  403. package/dist/db/tables/stripeCustomers.js.map +1 -1
  404. package/dist/db/tables/users.d.ts +17 -1
  405. package/dist/db/tables/users.d.ts.map +1 -1
  406. package/dist/db/tables/users.js +47 -2
  407. package/dist/db/tables/users.js.map +1 -1
  408. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  409. package/dist/db/tables/webhookQueueEvents.js +5 -1
  410. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  411. package/dist/db/tables/webhookSubscriptions.d.ts +22 -10
  412. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  413. package/dist/db/tables/webhookSubscriptions.js +50 -15
  414. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  415. package/dist/handlers/internal/executionError.d.ts +2 -2
  416. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  417. package/dist/handlers/internal/executionError.js +1 -2
  418. package/dist/handlers/internal/executionError.js.map +1 -1
  419. package/dist/handlers/internal/multisig.d.ts +4 -232
  420. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  421. package/dist/handlers/internal/multisig.js +11 -537
  422. package/dist/handlers/internal/multisig.js.map +1 -1
  423. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  424. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  425. package/dist/handlers/internal/sponsorship.js +13 -9
  426. package/dist/handlers/internal/sponsorship.js.map +1 -1
  427. package/dist/handlers/relay.d.ts +9 -12
  428. package/dist/handlers/relay.d.ts.map +1 -1
  429. package/dist/handlers/relay.js +81 -85
  430. package/dist/handlers/relay.js.map +1 -1
  431. package/dist/index.d.ts +0 -17
  432. package/dist/index.d.ts.map +1 -1
  433. package/dist/index.js +0 -17
  434. package/dist/index.js.map +1 -1
  435. package/dist/internal/AssetResponse.d.ts +12 -0
  436. package/dist/internal/AssetResponse.d.ts.map +1 -0
  437. package/dist/internal/AssetResponse.js +21 -0
  438. package/dist/internal/AssetResponse.js.map +1 -0
  439. package/dist/internal/Auth.d.ts +48 -12
  440. package/dist/internal/Auth.d.ts.map +1 -1
  441. package/dist/internal/Auth.js +603 -175
  442. package/dist/internal/Auth.js.map +1 -1
  443. package/dist/internal/BetterAuth.d.ts +1488 -0
  444. package/dist/internal/BetterAuth.d.ts.map +1 -0
  445. package/dist/internal/BetterAuth.js +253 -0
  446. package/dist/internal/BetterAuth.js.map +1 -0
  447. package/dist/internal/Cache.d.ts +2 -0
  448. package/dist/internal/Cache.d.ts.map +1 -1
  449. package/dist/internal/Cache.js +2 -0
  450. package/dist/internal/Cache.js.map +1 -1
  451. package/dist/internal/EarnRates.d.ts +26 -3
  452. package/dist/internal/EarnRates.d.ts.map +1 -1
  453. package/dist/internal/EarnRates.js +84 -19
  454. package/dist/internal/EarnRates.js.map +1 -1
  455. package/dist/internal/EarnSharePrices.d.ts +120 -0
  456. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  457. package/dist/internal/EarnSharePrices.js +179 -0
  458. package/dist/internal/EarnSharePrices.js.map +1 -0
  459. package/dist/internal/EarnVaults.d.ts +4 -0
  460. package/dist/internal/EarnVaults.d.ts.map +1 -1
  461. package/dist/internal/EarnVaults.js +31 -14
  462. package/dist/internal/EarnVaults.js.map +1 -1
  463. package/dist/internal/Email.d.ts +37 -0
  464. package/dist/internal/Email.d.ts.map +1 -0
  465. package/dist/internal/Email.js +16 -0
  466. package/dist/internal/Email.js.map +1 -0
  467. package/dist/internal/Log.d.ts +32 -28
  468. package/dist/internal/Log.d.ts.map +1 -1
  469. package/dist/internal/Log.js +18 -11
  470. package/dist/internal/Log.js.map +1 -1
  471. package/dist/internal/MetricSink.d.ts +3 -0
  472. package/dist/internal/MetricSink.d.ts.map +1 -1
  473. package/dist/internal/MetricSink.js +67 -8
  474. package/dist/internal/MetricSink.js.map +1 -1
  475. package/dist/internal/Mpp.d.ts.map +1 -1
  476. package/dist/internal/Mpp.js +20 -25
  477. package/dist/internal/Mpp.js.map +1 -1
  478. package/dist/internal/OpenApi.d.ts +26 -3
  479. package/dist/internal/OpenApi.d.ts.map +1 -1
  480. package/dist/internal/OpenApi.js +25 -10
  481. package/dist/internal/OpenApi.js.map +1 -1
  482. package/dist/internal/Provider.d.ts +1 -1
  483. package/dist/internal/Provider.d.ts.map +1 -1
  484. package/dist/internal/RateLimit.d.ts.map +1 -1
  485. package/dist/internal/RateLimit.js +13 -1
  486. package/dist/internal/RateLimit.js.map +1 -1
  487. package/dist/internal/Store.d.ts +16 -0
  488. package/dist/internal/Store.d.ts.map +1 -1
  489. package/dist/internal/Store.js +59 -8
  490. package/dist/internal/Store.js.map +1 -1
  491. package/dist/internal/Tidx.d.ts +9 -2
  492. package/dist/internal/Tidx.d.ts.map +1 -1
  493. package/dist/internal/Tidx.js +78 -11
  494. package/dist/internal/Tidx.js.map +1 -1
  495. package/dist/internal/Timing.d.ts +26 -0
  496. package/dist/internal/Timing.d.ts.map +1 -1
  497. package/dist/internal/Timing.js +63 -5
  498. package/dist/internal/Timing.js.map +1 -1
  499. package/dist/internal/VercelOidc.d.ts +94 -0
  500. package/dist/internal/VercelOidc.d.ts.map +1 -0
  501. package/dist/internal/VercelOidc.js +128 -0
  502. package/dist/internal/VercelOidc.js.map +1 -0
  503. package/dist/internal/VerifiedTokens.d.ts +2 -8
  504. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  505. package/dist/internal/VerifiedTokens.js +24 -24
  506. package/dist/internal/VerifiedTokens.js.map +1 -1
  507. package/dist/internal/Viem.d.ts +46 -2068
  508. package/dist/internal/Viem.d.ts.map +1 -1
  509. package/dist/internal/Viem.js +171 -11
  510. package/dist/internal/Viem.js.map +1 -1
  511. package/dist/internal/Webhooks.d.ts +12 -4
  512. package/dist/internal/Webhooks.d.ts.map +1 -1
  513. package/dist/internal/Webhooks.js +9 -3
  514. package/dist/internal/Webhooks.js.map +1 -1
  515. package/dist/internal/ZoneRpc.d.ts +7 -0
  516. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  517. package/dist/internal/ZoneRpc.js +49 -0
  518. package/dist/internal/ZoneRpc.js.map +1 -0
  519. package/dist/internal/index.d.ts +3 -1
  520. package/dist/internal/index.d.ts.map +1 -1
  521. package/dist/internal/index.js +3 -1
  522. package/dist/internal/index.js.map +1 -1
  523. package/dist/internal/rewards/Audit.d.ts +88 -0
  524. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  525. package/dist/internal/rewards/Audit.js +134 -0
  526. package/dist/internal/rewards/Audit.js.map +1 -0
  527. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  528. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  529. package/dist/internal/rewards/Campaigns.js +531 -0
  530. package/dist/internal/rewards/Campaigns.js.map +1 -0
  531. package/dist/internal/rewards/Credits.d.ts +76 -0
  532. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  533. package/dist/internal/rewards/Credits.js +95 -0
  534. package/dist/internal/rewards/Credits.js.map +1 -0
  535. package/dist/internal/rewards/Events.d.ts +100 -0
  536. package/dist/internal/rewards/Events.d.ts.map +1 -0
  537. package/dist/internal/rewards/Events.js +340 -0
  538. package/dist/internal/rewards/Events.js.map +1 -0
  539. package/dist/internal/rewards/Projection.d.ts +237 -0
  540. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  541. package/dist/internal/rewards/Projection.js +616 -0
  542. package/dist/internal/rewards/Projection.js.map +1 -0
  543. package/dist/internal/rewards/Rates.d.ts +44 -0
  544. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  545. package/dist/internal/rewards/Rates.js +60 -0
  546. package/dist/internal/rewards/Rates.js.map +1 -0
  547. package/dist/internal/rewards/Read.d.ts +158 -0
  548. package/dist/internal/rewards/Read.d.ts.map +1 -0
  549. package/dist/internal/rewards/Read.js +292 -0
  550. package/dist/internal/rewards/Read.js.map +1 -0
  551. package/dist/internal/rewards/Runner.d.ts +164 -0
  552. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  553. package/dist/internal/rewards/Runner.js +1778 -0
  554. package/dist/internal/rewards/Runner.js.map +1 -0
  555. package/dist/internal/rewards/Signer.d.ts +224 -0
  556. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  557. package/dist/internal/rewards/Signer.js +135 -0
  558. package/dist/internal/rewards/Signer.js.map +1 -0
  559. package/dist/internal/rewards/index.d.ts +15 -0
  560. package/dist/internal/rewards/index.d.ts.map +1 -0
  561. package/dist/internal/rewards/index.js +15 -0
  562. package/dist/internal/rewards/index.js.map +1 -0
  563. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  564. package/dist/internal/routes/Action.d.ts.map +1 -0
  565. package/dist/internal/{funding → routes}/Action.js +17 -9
  566. package/dist/internal/routes/Action.js.map +1 -0
  567. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  568. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  569. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  570. package/dist/internal/routes/Catalog.js.map +1 -0
  571. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  572. package/dist/internal/routes/Chain.d.ts.map +1 -0
  573. package/dist/internal/{funding → routes}/Chain.js +3 -3
  574. package/dist/internal/routes/Chain.js.map +1 -0
  575. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  576. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  577. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  578. package/dist/internal/routes/Deposit.js.map +1 -0
  579. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  580. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  581. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  582. package/dist/internal/routes/DepositAddress.js.map +1 -0
  583. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  584. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  585. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -3
  586. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  587. package/dist/internal/routes/Economics.d.ts +25 -0
  588. package/dist/internal/routes/Economics.d.ts.map +1 -0
  589. package/dist/internal/routes/Economics.js +28 -0
  590. package/dist/internal/routes/Economics.js.map +1 -0
  591. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  592. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  593. package/dist/internal/{funding → routes}/Evidence.js +9 -17
  594. package/dist/internal/routes/Evidence.js.map +1 -0
  595. package/dist/internal/routes/Observability.d.ts +154 -0
  596. package/dist/internal/routes/Observability.d.ts.map +1 -0
  597. package/dist/internal/routes/Observability.js +389 -0
  598. package/dist/internal/routes/Observability.js.map +1 -0
  599. package/dist/internal/{funding → routes}/Provider.d.ts +350 -104
  600. package/dist/internal/routes/Provider.d.ts.map +1 -0
  601. package/dist/internal/{funding → routes}/Provider.js +233 -97
  602. package/dist/internal/routes/Provider.js.map +1 -0
  603. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  604. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  605. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  606. package/dist/internal/routes/Reconciliation.js.map +1 -0
  607. package/dist/internal/routes/Route.d.ts +21 -0
  608. package/dist/internal/routes/Route.d.ts.map +1 -0
  609. package/dist/internal/{funding → routes}/Route.js +1 -1
  610. package/dist/internal/routes/Route.js.map +1 -0
  611. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  612. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  613. package/dist/internal/{funding → routes}/SourceObservation.js +13 -15
  614. package/dist/internal/routes/SourceObservation.js.map +1 -0
  615. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  616. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  617. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  618. package/dist/internal/routes/Subsidy.js.map +1 -0
  619. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  620. package/dist/internal/routes/Token.d.ts.map +1 -0
  621. package/dist/internal/{funding → routes}/Token.js +3 -3
  622. package/dist/internal/routes/Token.js.map +1 -0
  623. package/dist/internal/{funding → routes}/Transfer.d.ts +324 -34
  624. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  625. package/dist/internal/routes/Transfer.js +728 -0
  626. package/dist/internal/routes/Transfer.js.map +1 -0
  627. package/dist/internal/routes/TransferReconciliation.d.ts +55 -0
  628. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  629. package/dist/internal/routes/TransferReconciliation.js +422 -0
  630. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  631. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  632. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  633. package/dist/internal/routes/TransferSubsidy.js +256 -0
  634. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  635. package/dist/internal/routes/TransferWebhook.d.ts +21 -0
  636. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  637. package/dist/internal/routes/TransferWebhook.js +43 -0
  638. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  639. package/dist/internal/{funding → routes}/index.d.ts +3 -0
  640. package/dist/internal/routes/index.d.ts.map +1 -0
  641. package/dist/internal/{funding → routes}/index.js +3 -0
  642. package/dist/internal/routes/index.js.map +1 -0
  643. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  644. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  645. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  646. package/dist/internal/routes/providers/across.js.map +1 -0
  647. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  648. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  649. package/dist/internal/{funding → routes}/providers/relay.js +197 -122
  650. package/dist/internal/routes/providers/relay.js.map +1 -0
  651. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  652. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  653. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  654. package/dist/internal/routes/providers/rhino.js.map +1 -0
  655. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  656. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  657. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  658. package/dist/internal/routes/providers/squid.js.map +1 -0
  659. package/dist/internal/routes/providers/stargate.d.ts +165 -0
  660. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  661. package/dist/internal/routes/providers/stargate.js +898 -0
  662. package/dist/internal/routes/providers/stargate.js.map +1 -0
  663. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  664. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  665. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  666. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  667. package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
  668. package/dist/internal/webhookDestinations/slack.js +22 -6
  669. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  670. package/dist/providers/index.d.ts +12 -12
  671. package/dist/providers/index.d.ts.map +1 -1
  672. package/dist/providers/index.js +12 -12
  673. package/dist/providers/index.js.map +1 -1
  674. package/dist/server.d.ts +19 -0
  675. package/dist/server.d.ts.map +1 -0
  676. package/dist/server.js +19 -0
  677. package/dist/server.js.map +1 -0
  678. package/package.json +15 -4
  679. package/src/ApiKey.ts +1 -1
  680. package/src/ApiKeys.test.ts +1033 -3
  681. package/src/ApiKeys.ts +489 -48
  682. package/src/App.test-d.ts +1 -1
  683. package/src/App.test.ts +216 -25
  684. package/src/App.ts +335 -31
  685. package/src/Assets.test.ts +2 -2
  686. package/src/Assets.ts +3 -1
  687. package/src/Auth.test-d.ts +1 -1
  688. package/src/Client.test-d.ts +611 -101
  689. package/src/Handler.ts +0 -1
  690. package/src/OpenApi.contract.test.ts +195 -0
  691. package/src/Scope.ts +17 -5
  692. package/src/Webhooks.ts +2 -2
  693. package/src/admin/App.test.ts +30 -2
  694. package/src/admin/App.ts +42 -6
  695. package/src/admin/apps/api-keys.test.ts +267 -5
  696. package/src/admin/apps/api-keys.ts +100 -50
  697. package/src/admin/apps/earn-vaults.test.ts +158 -0
  698. package/src/admin/apps/earn-vaults.ts +681 -7
  699. package/src/admin/apps/organizations.test.ts +342 -1
  700. package/src/admin/apps/organizations.ts +368 -8
  701. package/src/admin/apps/routes-support.test.ts +200 -0
  702. package/src/admin/apps/routes-support.ts +201 -0
  703. package/src/admin/apps/routes.test.ts +450 -0
  704. package/src/admin/apps/routes.ts +896 -0
  705. package/src/admin/apps/scopes.test.ts +15 -5
  706. package/src/admin/apps/subsidies.test.ts +306 -0
  707. package/src/admin/apps/subsidies.ts +457 -0
  708. package/src/admin/apps/verified-tokens.test.ts +8 -3
  709. package/src/admin/apps/verified-tokens.ts +3 -3
  710. package/src/admin/ui/plugin.ts +1 -2
  711. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  712. package/src/admin/ui/src/lib/config.ts +11 -2
  713. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  714. package/src/admin/ui/src/lib/organizations.test.ts +147 -3
  715. package/src/admin/ui/src/lib/organizations.ts +136 -0
  716. package/src/admin/ui/src/lib/query-client.ts +1 -1
  717. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  718. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  719. package/src/admin/ui/src/lib/routes.ts +304 -0
  720. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  721. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  722. package/src/admin/ui/src/routes/__root.tsx +12 -1
  723. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  724. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  725. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +334 -2
  726. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  727. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  728. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  729. package/src/admin/ui.generated.ts +144 -69
  730. package/src/analytics/Analytics.test.ts +108 -18
  731. package/src/analytics/Analytics.ts +38 -6
  732. package/src/analytics/tables/requestEvents.test.ts +100 -0
  733. package/src/analytics/tables/requestEvents.ts +10 -1
  734. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  735. package/src/apps/Zones.test.ts +18 -3
  736. package/src/apps/Zones.ts +55 -8
  737. package/src/apps/composition.test.ts +68 -59
  738. package/src/apps/data/App.test.ts +154 -2
  739. package/src/apps/data/App.ts +102 -33
  740. package/src/apps/data/routes/activities.test.ts +419 -7
  741. package/src/apps/data/routes/activities.ts +683 -216
  742. package/src/apps/data/routes/balances.test.ts +2 -2
  743. package/src/apps/data/routes/blocks.test.ts +46 -1
  744. package/src/apps/data/routes/coingecko.test.ts +419 -1
  745. package/src/apps/data/routes/coingecko.ts +309 -253
  746. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  747. package/src/apps/data/routes/earn.test.ts +1661 -29
  748. package/src/apps/data/routes/earn.ts +2314 -328
  749. package/src/apps/data/routes/exchanges.test.ts +752 -30
  750. package/src/apps/data/routes/exchanges.ts +954 -753
  751. package/src/apps/data/routes/fee-amm.test.ts +224 -0
  752. package/src/apps/data/routes/fee-amm.ts +208 -178
  753. package/src/apps/data/routes/indexer.test.ts +389 -0
  754. package/src/apps/data/routes/indexer.ts +165 -69
  755. package/src/apps/data/routes/receipts.test.ts +1 -1
  756. package/src/apps/data/routes/rpc.test.ts +352 -8
  757. package/src/apps/data/routes/rpc.ts +407 -219
  758. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  759. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  760. package/src/apps/data/routes/tokenlist.ts +173 -88
  761. package/src/apps/data/routes/tokens.test.ts +93 -3
  762. package/src/apps/data/routes/tokens.ts +39 -23
  763. package/src/apps/data/routes/transactions.test.ts +1 -1
  764. package/src/apps/data/routes/transfers.test.ts +56 -24
  765. package/src/apps/data/routes/transfers.ts +19 -8
  766. package/src/apps/data/routes/valuation.test.ts +1 -1
  767. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  768. package/src/apps/data/routes/verified-tokens.ts +99 -29
  769. package/src/apps/data/routes/webhooks.test.ts +659 -81
  770. package/src/apps/data/routes/webhooks.ts +1104 -817
  771. package/src/apps/data/routes/zones.test.ts +148 -71
  772. package/src/apps/data/routes/zones.ts +71 -55
  773. package/src/apps/docs/reference.ts +2 -2
  774. package/src/apps/index.ts +1 -1
  775. package/src/apps/management/App.ts +9 -51
  776. package/src/apps/management/Billing.test.ts +375 -14
  777. package/src/apps/management/Billing.ts +283 -34
  778. package/src/apps/management/routes/api-keys.test.ts +269 -7
  779. package/src/apps/management/routes/api-keys.ts +61 -20
  780. package/src/apps/management/routes/billing.test.ts +477 -15
  781. package/src/apps/management/routes/billing.ts +377 -50
  782. package/src/apps/management/routes/faucet.test.ts +1 -1
  783. package/src/apps/management/routes/faucet.ts +1 -1
  784. package/src/apps/management/routes/invitations.test.ts +270 -3
  785. package/src/apps/management/routes/invitations.ts +185 -15
  786. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  787. package/src/apps/management/routes/me.test.ts +246 -5
  788. package/src/apps/management/routes/me.ts +7 -2
  789. package/src/apps/management/routes/members.test.ts +108 -0
  790. package/src/apps/management/routes/orgs.test.ts +191 -3
  791. package/src/apps/management/routes/orgs.ts +58 -11
  792. package/src/apps/management/routes/projects.test.ts +33 -3
  793. package/src/apps/management/routes/projects.ts +6 -1
  794. package/src/apps/management/routes/scopes.test.ts +30 -2
  795. package/src/apps/management/routes/scopes.ts +4 -1
  796. package/src/apps/management/routes/usage.test.ts +32 -0
  797. package/src/apps/management/routes/usage.ts +22 -4
  798. package/src/apps/management/routes/webhooks.test.ts +49 -26
  799. package/src/apps/management/routes/webhooks.ts +93 -38
  800. package/src/apps/mcp.test.ts +6 -6
  801. package/src/apps/mcp.ts +7 -7
  802. package/src/apps/mpp/App.ts +37 -7
  803. package/src/apps/mpp/Mpp.test.ts +49 -8
  804. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  805. package/src/apps/mpp/internal/Adapter.ts +34 -0
  806. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  807. package/src/apps/mpp/internal/Policy.ts +49 -7
  808. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  809. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  810. package/src/apps/relay/App.test.ts +1024 -38
  811. package/src/apps/relay/App.ts +228 -32
  812. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  813. package/src/apps/relay/Sponsorships.test.ts +67 -4
  814. package/src/apps/relay/Sponsorships.ts +253 -29
  815. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  816. package/src/apps/{funding → routes}/Access.ts +6 -6
  817. package/src/apps/routes/App.test.ts +165 -0
  818. package/src/apps/routes/App.ts +96 -0
  819. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  820. package/src/apps/routes/index.ts +1 -0
  821. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  822. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  823. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1362 -462
  824. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +568 -248
  825. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  826. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  827. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  828. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  829. package/src/apps/routes/routes/transfers.test.ts +2876 -0
  830. package/src/apps/routes/routes/transfers.ts +1332 -0
  831. package/src/cli/Cli.test.ts +1 -1
  832. package/src/cli/commands/admin.test.ts +748 -1
  833. package/src/cli/commands/admin.ts +278 -0
  834. package/src/cloudflare.ts +52 -47
  835. package/src/db/Db.test.ts +245 -2
  836. package/src/db/Db.ts +1511 -34
  837. package/src/db/Schema.ts +744 -228
  838. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  839. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  840. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  841. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  842. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  843. package/src/db/tables/apiKeyRevocations.ts +121 -0
  844. package/src/db/tables/authAccounts.ts +105 -0
  845. package/src/db/tables/authSessions.ts +13 -0
  846. package/src/db/tables/authVerifications.ts +13 -0
  847. package/src/db/tables/invitations.ts +142 -45
  848. package/src/db/tables/memberships.ts +79 -3
  849. package/src/db/tables/organizations.test.ts +725 -7
  850. package/src/db/tables/organizations.ts +182 -49
  851. package/src/db/tables/projects.test.ts +71 -0
  852. package/src/db/tables/projects.ts +59 -4
  853. package/src/db/tables/requestUsage.ts +4 -1
  854. package/src/db/tables/rewardAccounts.ts +178 -0
  855. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  856. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  857. package/src/db/tables/rewardCampaigns.ts +647 -0
  858. package/src/db/tables/rewardCredits.ts +110 -0
  859. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  860. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  861. package/src/db/tables/rewardRuns.ts +514 -0
  862. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  863. package/src/db/tables/routesCatalog.test.ts +185 -0
  864. package/src/db/tables/routesCatalog.ts +163 -0
  865. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  866. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  867. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  868. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  869. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +316 -46
  870. package/src/db/tables/routesDeposits.ts +1062 -0
  871. package/src/db/tables/routesIdempotency.test.ts +796 -0
  872. package/src/db/tables/routesIdempotency.ts +496 -0
  873. package/src/db/tables/routesSubsidies.test.ts +120 -0
  874. package/src/db/tables/routesSubsidies.ts +71 -0
  875. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  876. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  877. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  878. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  879. package/src/db/tables/routesTransferTransactions.ts +158 -0
  880. package/src/db/tables/routesTransfers.test.ts +338 -0
  881. package/src/db/tables/routesTransfers.ts +662 -0
  882. package/src/db/tables/sponsoredTransactions.test.ts +563 -1
  883. package/src/db/tables/sponsoredTransactions.ts +386 -42
  884. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  885. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  886. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  887. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  888. package/src/db/tables/stripeCustomers.test.ts +85 -0
  889. package/src/db/tables/stripeCustomers.ts +24 -0
  890. package/src/db/tables/users.test.ts +129 -0
  891. package/src/db/tables/users.ts +49 -3
  892. package/src/db/tables/webhookQueueEvents.ts +8 -1
  893. package/src/db/tables/webhookSubscriptions.ts +103 -21
  894. package/src/handlers/internal/executionError.ts +3 -4
  895. package/src/handlers/internal/multisig.ts +13 -816
  896. package/src/handlers/internal/sponsorship.ts +26 -10
  897. package/src/handlers/relay.test-d.ts +9 -1
  898. package/src/handlers/relay.test.ts +823 -3
  899. package/src/handlers/relay.ts +127 -107
  900. package/src/index.test-d.ts +7 -0
  901. package/src/index.ts +0 -17
  902. package/src/internal/AssetResponse.ts +26 -0
  903. package/src/internal/Auth.test.ts +1564 -9
  904. package/src/internal/Auth.ts +833 -239
  905. package/src/internal/BetterAuth.test.ts +242 -0
  906. package/src/internal/BetterAuth.ts +349 -0
  907. package/src/internal/Cache.ts +2 -0
  908. package/src/internal/EarnRates.test.ts +17 -0
  909. package/src/internal/EarnRates.ts +124 -31
  910. package/src/internal/EarnSharePrices.test.ts +182 -0
  911. package/src/internal/EarnSharePrices.ts +313 -0
  912. package/src/internal/EarnVaults.test.ts +21 -0
  913. package/src/internal/EarnVaults.ts +37 -15
  914. package/src/internal/Email.ts +54 -0
  915. package/src/internal/Idempotency.test.ts +2 -2
  916. package/src/internal/Log.test-d.ts +10 -7
  917. package/src/internal/Log.test.ts +114 -16
  918. package/src/internal/Log.ts +55 -40
  919. package/src/internal/MetricSink.test.ts +313 -26
  920. package/src/internal/MetricSink.ts +73 -8
  921. package/src/internal/Mpp.test.ts +31 -0
  922. package/src/internal/Mpp.ts +21 -24
  923. package/src/internal/OpenApi.ts +45 -12
  924. package/src/internal/Provider.test.ts +1 -1
  925. package/src/internal/Provider.ts +1 -1
  926. package/src/internal/RateLimit.test.ts +21 -3
  927. package/src/internal/RateLimit.ts +12 -1
  928. package/src/internal/Store.test-d.ts +1 -1
  929. package/src/internal/Store.test.ts +151 -8
  930. package/src/internal/Store.ts +76 -9
  931. package/src/internal/Tidx.test.ts +59 -8
  932. package/src/internal/Tidx.ts +86 -14
  933. package/src/internal/Timing.test.ts +77 -0
  934. package/src/internal/Timing.ts +83 -6
  935. package/src/internal/VercelOidc.test.ts +188 -0
  936. package/src/internal/VercelOidc.ts +193 -0
  937. package/src/internal/VerifiedTokens.test.ts +60 -6
  938. package/src/internal/VerifiedTokens.ts +21 -24
  939. package/src/internal/Viem.batch.test.ts +80 -0
  940. package/src/internal/Viem.test.ts +201 -2
  941. package/src/internal/Viem.ts +249 -17
  942. package/src/internal/Webhooks.test.ts +125 -1
  943. package/src/internal/Webhooks.ts +22 -4
  944. package/src/internal/ZoneRpc.ts +50 -0
  945. package/src/internal/exchange/Provider.test.ts +2 -2
  946. package/src/internal/index.test.ts +3 -1
  947. package/src/internal/index.ts +3 -1
  948. package/src/internal/rewards/Audit.ts +231 -0
  949. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  950. package/src/internal/rewards/Campaigns.ts +1205 -0
  951. package/src/internal/rewards/Credits.ts +165 -0
  952. package/src/internal/rewards/Events.local.test.ts +113 -0
  953. package/src/internal/rewards/Events.test.ts +152 -0
  954. package/src/internal/rewards/Events.ts +468 -0
  955. package/src/internal/rewards/Projection.test.ts +681 -0
  956. package/src/internal/rewards/Projection.ts +987 -0
  957. package/src/internal/rewards/Rates.test.ts +171 -0
  958. package/src/internal/rewards/Rates.ts +110 -0
  959. package/src/internal/rewards/Read.test.ts +501 -0
  960. package/src/internal/rewards/Read.ts +476 -0
  961. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  962. package/src/internal/rewards/Runner.states.test.ts +188 -0
  963. package/src/internal/rewards/Runner.test.ts +90 -0
  964. package/src/internal/rewards/Runner.ts +2229 -0
  965. package/src/internal/rewards/Signer.test.ts +79 -0
  966. package/src/internal/rewards/Signer.ts +180 -0
  967. package/src/internal/rewards/index.ts +14 -0
  968. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  969. package/src/internal/{funding → routes}/Action.ts +35 -8
  970. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  971. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  972. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  973. package/src/internal/{funding → routes}/Chain.ts +11 -11
  974. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  975. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  976. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  977. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  978. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  979. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -8
  980. package/src/internal/routes/Economics.test.ts +42 -0
  981. package/src/internal/routes/Economics.ts +47 -0
  982. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  983. package/src/internal/{funding → routes}/Evidence.ts +11 -22
  984. package/src/internal/routes/Observability.test.ts +636 -0
  985. package/src/internal/routes/Observability.ts +668 -0
  986. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  987. package/src/internal/{funding → routes}/Provider.ts +531 -185
  988. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  989. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  990. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  991. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  992. package/src/internal/{funding → routes}/Route.ts +7 -7
  993. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  994. package/src/internal/{funding → routes}/SourceObservation.ts +18 -22
  995. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  996. package/src/internal/routes/Subsidy.test.ts +169 -0
  997. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  998. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  999. package/src/internal/{funding → routes}/Token.ts +5 -5
  1000. package/src/internal/routes/Transfer.test.ts +1199 -0
  1001. package/src/internal/routes/Transfer.ts +1206 -0
  1002. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  1003. package/src/internal/routes/TransferReconciliation.ts +527 -0
  1004. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1005. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1006. package/src/internal/routes/TransferWebhook.test.ts +128 -0
  1007. package/src/internal/routes/TransferWebhook.ts +67 -0
  1008. package/src/internal/{funding → routes}/index.test.ts +6 -3
  1009. package/src/internal/{funding → routes}/index.ts +3 -0
  1010. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1011. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1012. package/src/internal/{funding → routes}/providers/relay.test.ts +165 -32
  1013. package/src/internal/{funding → routes}/providers/relay.ts +231 -136
  1014. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1015. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1016. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1017. package/src/internal/routes/providers/stargate.ts +1276 -0
  1018. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1019. package/src/internal/webhookDestinations/slack.ts +20 -5
  1020. package/src/providers/index.ts +13 -13
  1021. package/src/server.ts +18 -0
  1022. package/dist/apps/funding/Access.d.ts.map +0 -1
  1023. package/dist/apps/funding/Access.js.map +0 -1
  1024. package/dist/apps/funding/App.js.map +0 -1
  1025. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1026. package/dist/apps/funding/Inventory.js.map +0 -1
  1027. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1028. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1029. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1030. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1031. package/dist/apps/funding/index.d.ts +0 -2
  1032. package/dist/apps/funding/index.d.ts.map +0 -1
  1033. package/dist/apps/funding/index.js +0 -2
  1034. package/dist/apps/funding/index.js.map +0 -1
  1035. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1036. package/dist/apps/funding/routes/chains.js.map +0 -1
  1037. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1038. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1039. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1040. package/dist/apps/funding/routes/providers.js +0 -57
  1041. package/dist/apps/funding/routes/providers.js.map +0 -1
  1042. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1043. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1044. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1045. package/dist/apps/funding/routes/transfers.js +0 -622
  1046. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1047. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1048. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1049. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1050. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1051. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1052. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1053. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1054. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1055. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1056. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1057. package/dist/db/tables/fundingDeposits.js +0 -295
  1058. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1059. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1060. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1061. package/dist/db/tables/fundingIdempotency.js +0 -103
  1062. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1063. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1064. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1065. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -15
  1066. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1067. package/dist/db/tables/fundingTransferTransactions.js +0 -27
  1068. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1069. package/dist/db/tables/fundingTransfers.d.ts +0 -82
  1070. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1071. package/dist/db/tables/fundingTransfers.js +0 -89
  1072. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1073. package/dist/internal/funding/Action.d.ts.map +0 -1
  1074. package/dist/internal/funding/Action.js.map +0 -1
  1075. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1076. package/dist/internal/funding/Catalog.js.map +0 -1
  1077. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1078. package/dist/internal/funding/Chain.js.map +0 -1
  1079. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1080. package/dist/internal/funding/Deposit.js.map +0 -1
  1081. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1082. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1083. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1084. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1085. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1086. package/dist/internal/funding/Evidence.js.map +0 -1
  1087. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1088. package/dist/internal/funding/Provider.js.map +0 -1
  1089. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1090. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1091. package/dist/internal/funding/Route.d.ts +0 -21
  1092. package/dist/internal/funding/Route.d.ts.map +0 -1
  1093. package/dist/internal/funding/Route.js.map +0 -1
  1094. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1095. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1096. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1097. package/dist/internal/funding/Subsidy.js.map +0 -1
  1098. package/dist/internal/funding/Token.d.ts.map +0 -1
  1099. package/dist/internal/funding/Token.js.map +0 -1
  1100. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1101. package/dist/internal/funding/Transfer.js +0 -334
  1102. package/dist/internal/funding/Transfer.js.map +0 -1
  1103. package/dist/internal/funding/index.d.ts.map +0 -1
  1104. package/dist/internal/funding/index.js.map +0 -1
  1105. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1106. package/dist/internal/funding/providers/across.js.map +0 -1
  1107. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1108. package/dist/internal/funding/providers/relay.js.map +0 -1
  1109. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1110. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1111. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1112. package/dist/internal/funding/providers/squid.js.map +0 -1
  1113. package/dist/internal/funding/providers/stargate.d.ts +0 -38
  1114. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1115. package/dist/internal/funding/providers/stargate.js +0 -277
  1116. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1117. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1118. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1119. package/src/apps/funding/App.test.ts +0 -78
  1120. package/src/apps/funding/App.ts +0 -78
  1121. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1122. package/src/apps/funding/index.ts +0 -1
  1123. package/src/apps/funding/routes/transfers.test.ts +0 -1638
  1124. package/src/apps/funding/routes/transfers.ts +0 -721
  1125. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1126. package/src/db/tables/fundingCatalog.ts +0 -163
  1127. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1128. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1129. package/src/db/tables/fundingDeposits.ts +0 -572
  1130. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1131. package/src/db/tables/fundingIdempotency.ts +0 -180
  1132. package/src/db/tables/fundingTransferTransactions.test.ts +0 -69
  1133. package/src/db/tables/fundingTransferTransactions.ts +0 -37
  1134. package/src/db/tables/fundingTransfers.test.ts +0 -89
  1135. package/src/db/tables/fundingTransfers.ts +0 -153
  1136. package/src/handlers/internal/multisig.test.ts +0 -818
  1137. package/src/internal/funding/Subsidy.test.ts +0 -75
  1138. package/src/internal/funding/Transfer.test.ts +0 -369
  1139. package/src/internal/funding/Transfer.ts +0 -545
  1140. package/src/internal/funding/providers/stargate.test.ts +0 -163
  1141. package/src/internal/funding/providers/stargate.ts +0 -409
  1142. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1143. /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