tapimo 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1141) hide show
  1. package/README.md +7 -4
  2. package/dist/ApiKey.js +1 -1
  3. package/dist/ApiKey.js.map +1 -1
  4. package/dist/ApiKeys.d.ts +95 -14
  5. package/dist/ApiKeys.d.ts.map +1 -1
  6. package/dist/ApiKeys.js +360 -49
  7. package/dist/ApiKeys.js.map +1 -1
  8. package/dist/App.d.ts +12457 -10365
  9. package/dist/App.d.ts.map +1 -1
  10. package/dist/App.js +300 -22
  11. package/dist/App.js.map +1 -1
  12. package/dist/Assets.d.ts.map +1 -1
  13. package/dist/Assets.js +2 -1
  14. package/dist/Assets.js.map +1 -1
  15. package/dist/Handler.d.ts +0 -1
  16. package/dist/Handler.d.ts.map +1 -1
  17. package/dist/Handler.js +0 -1
  18. package/dist/Handler.js.map +1 -1
  19. package/dist/Scope.d.ts +13 -5
  20. package/dist/Scope.d.ts.map +1 -1
  21. package/dist/Scope.js +16 -5
  22. package/dist/Scope.js.map +1 -1
  23. package/dist/Webhooks.js +1 -1
  24. package/dist/Webhooks.js.map +1 -1
  25. package/dist/admin/App.d.ts +3057 -549
  26. package/dist/admin/App.d.ts.map +1 -1
  27. package/dist/admin/App.js +26 -5
  28. package/dist/admin/App.js.map +1 -1
  29. package/dist/admin/apps/api-keys.d.ts +159 -7
  30. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  31. package/dist/admin/apps/api-keys.js +95 -43
  32. package/dist/admin/apps/api-keys.js.map +1 -1
  33. package/dist/admin/apps/earn-vaults.d.ts +1398 -0
  34. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  35. package/dist/admin/apps/earn-vaults.js +463 -7
  36. package/dist/admin/apps/earn-vaults.js.map +1 -1
  37. package/dist/admin/apps/organizations.d.ts +267 -15
  38. package/dist/admin/apps/organizations.d.ts.map +1 -1
  39. package/dist/admin/apps/organizations.js +241 -25
  40. package/dist/admin/apps/organizations.js.map +1 -1
  41. package/dist/admin/apps/routes-support.d.ts +95 -0
  42. package/dist/admin/apps/routes-support.d.ts.map +1 -0
  43. package/dist/admin/apps/routes-support.js +151 -0
  44. package/dist/admin/apps/routes-support.js.map +1 -0
  45. package/dist/admin/apps/routes.d.ts +2764 -0
  46. package/dist/admin/apps/routes.d.ts.map +1 -0
  47. package/dist/admin/apps/routes.js +728 -0
  48. package/dist/admin/apps/routes.js.map +1 -0
  49. package/dist/admin/apps/subsidies.d.ts +501 -0
  50. package/dist/admin/apps/subsidies.d.ts.map +1 -0
  51. package/dist/admin/apps/subsidies.js +384 -0
  52. package/dist/admin/apps/subsidies.js.map +1 -0
  53. package/dist/admin/apps/verified-tokens.d.ts +88 -88
  54. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  55. package/dist/admin/apps/verified-tokens.js +3 -3
  56. package/dist/admin/apps/verified-tokens.js.map +1 -1
  57. package/dist/admin/ui.generated.d.ts +1 -1
  58. package/dist/admin/ui.generated.d.ts.map +1 -1
  59. package/dist/admin/ui.generated.js +129 -69
  60. package/dist/admin/ui.generated.js.map +1 -1
  61. package/dist/analytics/Analytics.d.ts +5 -2
  62. package/dist/analytics/Analytics.d.ts.map +1 -1
  63. package/dist/analytics/Analytics.js +31 -1
  64. package/dist/analytics/Analytics.js.map +1 -1
  65. package/dist/analytics/tables/requestEvents.d.ts +2 -1
  66. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  67. package/dist/analytics/tables/requestEvents.js +10 -1
  68. package/dist/analytics/tables/requestEvents.js.map +1 -1
  69. package/dist/analytics/tables/routesLifecycleIntervals.d.ts +72 -0
  70. package/dist/analytics/tables/routesLifecycleIntervals.d.ts.map +1 -0
  71. package/dist/analytics/tables/routesLifecycleIntervals.js +56 -0
  72. package/dist/analytics/tables/routesLifecycleIntervals.js.map +1 -0
  73. package/dist/apps/Zones.d.ts +21 -12526
  74. package/dist/apps/Zones.d.ts.map +1 -1
  75. package/dist/apps/Zones.js +37 -5
  76. package/dist/apps/Zones.js.map +1 -1
  77. package/dist/apps/data/App.d.ts +3971 -2595
  78. package/dist/apps/data/App.d.ts.map +1 -1
  79. package/dist/apps/data/App.js +76 -21
  80. package/dist/apps/data/App.js.map +1 -1
  81. package/dist/apps/data/routes/activities.d.ts +364 -34
  82. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  83. package/dist/apps/data/routes/activities.js +495 -190
  84. package/dist/apps/data/routes/activities.js.map +1 -1
  85. package/dist/apps/data/routes/addresses.d.ts +72 -0
  86. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  87. package/dist/apps/data/routes/blocks.d.ts +37 -37
  88. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  89. package/dist/apps/data/routes/coingecko.js +47 -21
  90. package/dist/apps/data/routes/coingecko.js.map +1 -1
  91. package/dist/apps/data/routes/earn.d.ts +1450 -337
  92. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  93. package/dist/apps/data/routes/earn.js +1226 -144
  94. package/dist/apps/data/routes/earn.js.map +1 -1
  95. package/dist/apps/data/routes/fee-amm.d.ts +5 -0
  96. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  97. package/dist/apps/data/routes/fee-amm.js +31 -19
  98. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  99. package/dist/apps/data/routes/indexer.d.ts +125 -0
  100. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  101. package/dist/apps/data/routes/indexer.js +83 -27
  102. package/dist/apps/data/routes/indexer.js.map +1 -1
  103. package/dist/apps/data/routes/rpc.d.ts +507 -33
  104. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  105. package/dist/apps/data/routes/rpc.js +266 -156
  106. package/dist/apps/data/routes/rpc.js.map +1 -1
  107. package/dist/apps/data/routes/tokenlist.d.ts +47 -15
  108. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  109. package/dist/apps/data/routes/tokenlist.js +68 -11
  110. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  111. package/dist/apps/data/routes/tokens.d.ts +2 -0
  112. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  113. package/dist/apps/data/routes/tokens.js +26 -14
  114. package/dist/apps/data/routes/tokens.js.map +1 -1
  115. package/dist/apps/data/routes/transfers.d.ts +28 -12
  116. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  117. package/dist/apps/data/routes/transfers.js +9 -7
  118. package/dist/apps/data/routes/transfers.js.map +1 -1
  119. package/dist/apps/data/routes/valuation.d.ts +30 -30
  120. package/dist/apps/data/routes/verified-tokens.d.ts +9 -9
  121. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  122. package/dist/apps/data/routes/verified-tokens.js +64 -20
  123. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  124. package/dist/apps/data/routes/webhooks.d.ts +613 -176
  125. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  126. package/dist/apps/data/routes/webhooks.js +291 -195
  127. package/dist/apps/data/routes/webhooks.js.map +1 -1
  128. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  129. package/dist/apps/data/routes/zones.js +20 -12
  130. package/dist/apps/data/routes/zones.js.map +1 -1
  131. package/dist/apps/docs/reference.js +2 -2
  132. package/dist/apps/docs/reference.js.map +1 -1
  133. package/dist/apps/index.d.ts +1 -1
  134. package/dist/apps/index.d.ts.map +1 -1
  135. package/dist/apps/index.js +1 -1
  136. package/dist/apps/index.js.map +1 -1
  137. package/dist/apps/management/App.d.ts +3763 -3385
  138. package/dist/apps/management/App.d.ts.map +1 -1
  139. package/dist/apps/management/App.js +5 -14
  140. package/dist/apps/management/App.js.map +1 -1
  141. package/dist/apps/management/Billing.d.ts +48 -7
  142. package/dist/apps/management/Billing.d.ts.map +1 -1
  143. package/dist/apps/management/Billing.js +204 -25
  144. package/dist/apps/management/Billing.js.map +1 -1
  145. package/dist/apps/management/routes/api-keys.d.ts +106 -4
  146. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  147. package/dist/apps/management/routes/api-keys.js +43 -15
  148. package/dist/apps/management/routes/api-keys.js.map +1 -1
  149. package/dist/apps/management/routes/billing.d.ts +290 -4
  150. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  151. package/dist/apps/management/routes/billing.js +274 -49
  152. package/dist/apps/management/routes/billing.js.map +1 -1
  153. package/dist/apps/management/routes/faucet.d.ts +6 -6
  154. package/dist/apps/management/routes/faucet.js +1 -1
  155. package/dist/apps/management/routes/faucet.js.map +1 -1
  156. package/dist/apps/management/routes/invitations.d.ts +77 -2
  157. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  158. package/dist/apps/management/routes/invitations.js +117 -13
  159. package/dist/apps/management/routes/invitations.js.map +1 -1
  160. package/dist/apps/management/routes/invite-links.d.ts +4 -4
  161. package/dist/apps/management/routes/me.d.ts.map +1 -1
  162. package/dist/apps/management/routes/me.js +6 -2
  163. package/dist/apps/management/routes/me.js.map +1 -1
  164. package/dist/apps/management/routes/members.d.ts +30 -30
  165. package/dist/apps/management/routes/orgs.d.ts +18 -2
  166. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  167. package/dist/apps/management/routes/orgs.js +52 -12
  168. package/dist/apps/management/routes/orgs.js.map +1 -1
  169. package/dist/apps/management/routes/projects.d.ts +4 -4
  170. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  171. package/dist/apps/management/routes/projects.js +6 -1
  172. package/dist/apps/management/routes/projects.js.map +1 -1
  173. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  174. package/dist/apps/management/routes/scopes.js +4 -1
  175. package/dist/apps/management/routes/scopes.js.map +1 -1
  176. package/dist/apps/management/routes/usage.d.ts +24 -24
  177. package/dist/apps/management/routes/usage.js +21 -4
  178. package/dist/apps/management/routes/usage.js.map +1 -1
  179. package/dist/apps/management/routes/verified-token-requests.d.ts +2 -2
  180. package/dist/apps/management/routes/webhooks.d.ts +280 -214
  181. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  182. package/dist/apps/management/routes/webhooks.js +58 -12
  183. package/dist/apps/management/routes/webhooks.js.map +1 -1
  184. package/dist/apps/mcp.d.ts +1 -1
  185. package/dist/apps/mcp.js +7 -7
  186. package/dist/apps/mcp.js.map +1 -1
  187. package/dist/apps/mpp/App.d.ts.map +1 -1
  188. package/dist/apps/mpp/App.js +35 -7
  189. package/dist/apps/mpp/App.js.map +1 -1
  190. package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
  191. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  192. package/dist/apps/mpp/internal/Adapter.js +30 -1
  193. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  194. package/dist/apps/mpp/internal/Policy.d.ts +22 -4
  195. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
  196. package/dist/apps/mpp/internal/Policy.js +24 -6
  197. package/dist/apps/mpp/internal/Policy.js.map +1 -1
  198. package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
  199. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
  200. package/dist/apps/mpp/internal/Sponsorship.js +6 -3
  201. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
  202. package/dist/apps/relay/App.d.ts +2 -0
  203. package/dist/apps/relay/App.d.ts.map +1 -1
  204. package/dist/apps/relay/App.js +134 -75
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/relay/Sponsorships.d.ts +5 -3
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  208. package/dist/apps/relay/Sponsorships.js +209 -28
  209. package/dist/apps/relay/Sponsorships.js.map +1 -1
  210. package/dist/apps/{funding → routes}/Access.d.ts +4 -4
  211. package/dist/apps/routes/Access.d.ts.map +1 -0
  212. package/dist/apps/{funding → routes}/Access.js +4 -4
  213. package/dist/apps/routes/Access.js.map +1 -0
  214. package/dist/apps/{funding → routes}/App.d.ts +418 -124
  215. package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
  216. package/dist/apps/{funding → routes}/App.js +16 -16
  217. package/dist/apps/routes/App.js.map +1 -0
  218. package/dist/apps/routes/Inventory.d.ts.map +1 -0
  219. package/dist/apps/{funding → routes}/Inventory.js +2 -2
  220. package/dist/apps/routes/Inventory.js.map +1 -0
  221. package/dist/apps/routes/index.d.ts +2 -0
  222. package/dist/apps/routes/index.d.ts.map +1 -0
  223. package/dist/apps/routes/index.js +2 -0
  224. package/dist/apps/routes/index.js.map +1 -0
  225. package/dist/apps/{funding → routes}/routes/chains.d.ts +7 -7
  226. package/dist/apps/routes/routes/chains.d.ts.map +1 -0
  227. package/dist/apps/{funding → routes}/routes/chains.js +25 -25
  228. package/dist/apps/routes/routes/chains.js.map +1 -0
  229. package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +107 -43
  230. package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
  231. package/dist/apps/{funding → routes}/routes/deposit-addresses.js +497 -222
  232. package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
  233. package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
  234. package/dist/apps/routes/routes/providers.d.ts.map +1 -0
  235. package/dist/apps/routes/routes/providers.js +57 -0
  236. package/dist/apps/routes/routes/providers.js.map +1 -0
  237. package/dist/apps/{funding → routes}/routes/quotes.d.ts +19 -16
  238. package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
  239. package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
  240. package/dist/apps/routes/routes/quotes.js.map +1 -0
  241. package/dist/apps/{funding → routes}/routes/transfers.d.ts +379 -74
  242. package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
  243. package/dist/apps/routes/routes/transfers.js +1140 -0
  244. package/dist/apps/routes/routes/transfers.js.map +1 -0
  245. package/dist/cli/Cli.d.ts +30 -0
  246. package/dist/cli/Cli.d.ts.map +1 -1
  247. package/dist/cli/commands/admin.d.ts +36 -0
  248. package/dist/cli/commands/admin.d.ts.map +1 -1
  249. package/dist/cli/commands/admin.js +273 -0
  250. package/dist/cli/commands/admin.js.map +1 -1
  251. package/dist/cloudflare.d.ts +16 -14
  252. package/dist/cloudflare.d.ts.map +1 -1
  253. package/dist/cloudflare.js +26 -21
  254. package/dist/cloudflare.js.map +1 -1
  255. package/dist/db/Db.d.ts +63 -21
  256. package/dist/db/Db.d.ts.map +1 -1
  257. package/dist/db/Db.js +1030 -15
  258. package/dist/db/Db.js.map +1 -1
  259. package/dist/db/Schema.d.ts +780 -133
  260. package/dist/db/Schema.d.ts.map +1 -1
  261. package/dist/db/Schema.js +575 -162
  262. package/dist/db/Schema.js.map +1 -1
  263. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
  264. package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
  265. package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
  266. package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
  267. package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
  268. package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
  269. package/dist/db/tables/apiKeyAdmissions.js +142 -0
  270. package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
  271. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
  272. package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
  273. package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
  274. package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
  275. package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
  276. package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
  277. package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
  278. package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
  279. package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
  280. package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
  281. package/dist/db/tables/apiKeyRevocations.js +98 -0
  282. package/dist/db/tables/apiKeyRevocations.js.map +1 -0
  283. package/dist/db/tables/authAccounts.d.ts +47 -0
  284. package/dist/db/tables/authAccounts.d.ts.map +1 -0
  285. package/dist/db/tables/authAccounts.js +72 -0
  286. package/dist/db/tables/authAccounts.js.map +1 -0
  287. package/dist/db/tables/authSessions.d.ts +12 -0
  288. package/dist/db/tables/authSessions.d.ts.map +1 -0
  289. package/dist/db/tables/authSessions.js +2 -0
  290. package/dist/db/tables/authSessions.js.map +1 -0
  291. package/dist/db/tables/authVerifications.d.ts +12 -0
  292. package/dist/db/tables/authVerifications.d.ts.map +1 -0
  293. package/dist/db/tables/authVerifications.js +2 -0
  294. package/dist/db/tables/authVerifications.js.map +1 -0
  295. package/dist/db/tables/invitations.d.ts +17 -1
  296. package/dist/db/tables/invitations.d.ts.map +1 -1
  297. package/dist/db/tables/invitations.js +123 -43
  298. package/dist/db/tables/invitations.js.map +1 -1
  299. package/dist/db/tables/memberships.d.ts +8 -0
  300. package/dist/db/tables/memberships.d.ts.map +1 -1
  301. package/dist/db/tables/memberships.js +51 -2
  302. package/dist/db/tables/memberships.js.map +1 -1
  303. package/dist/db/tables/organizations.d.ts +32 -10
  304. package/dist/db/tables/organizations.d.ts.map +1 -1
  305. package/dist/db/tables/organizations.js +110 -49
  306. package/dist/db/tables/organizations.js.map +1 -1
  307. package/dist/db/tables/projects.d.ts +2 -0
  308. package/dist/db/tables/projects.d.ts.map +1 -1
  309. package/dist/db/tables/projects.js +12 -3
  310. package/dist/db/tables/projects.js.map +1 -1
  311. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  312. package/dist/db/tables/requestUsage.js.map +1 -1
  313. package/dist/db/tables/rewardAccounts.d.ts +86 -0
  314. package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
  315. package/dist/db/tables/rewardAccounts.js +88 -0
  316. package/dist/db/tables/rewardAccounts.js.map +1 -0
  317. package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
  318. package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
  319. package/dist/db/tables/rewardCampaignDistributors.js +30 -0
  320. package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
  321. package/dist/db/tables/rewardCampaigns.d.ts +171 -0
  322. package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
  323. package/dist/db/tables/rewardCampaigns.js +392 -0
  324. package/dist/db/tables/rewardCampaigns.js.map +1 -0
  325. package/dist/db/tables/rewardCredits.d.ts +53 -0
  326. package/dist/db/tables/rewardCredits.d.ts.map +1 -0
  327. package/dist/db/tables/rewardCredits.js +63 -0
  328. package/dist/db/tables/rewardCredits.js.map +1 -0
  329. package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
  330. package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
  331. package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
  332. package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
  333. package/dist/db/tables/rewardRuns.d.ts +188 -0
  334. package/dist/db/tables/rewardRuns.d.ts.map +1 -0
  335. package/dist/db/tables/rewardRuns.js +278 -0
  336. package/dist/db/tables/rewardRuns.js.map +1 -0
  337. package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
  338. package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
  339. package/dist/db/tables/rewardTransactionAttempts.js +163 -0
  340. package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
  341. package/dist/db/tables/routesCatalog.d.ts +58 -0
  342. package/dist/db/tables/routesCatalog.d.ts.map +1 -0
  343. package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
  344. package/dist/db/tables/routesCatalog.js.map +1 -0
  345. package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
  346. package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
  347. package/dist/db/tables/routesDepositAddresses.js +587 -0
  348. package/dist/db/tables/routesDepositAddresses.js.map +1 -0
  349. package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
  350. package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
  351. package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
  352. package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
  353. package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
  354. package/dist/db/tables/routesDeposits.d.ts.map +1 -0
  355. package/dist/db/tables/routesDeposits.js +576 -0
  356. package/dist/db/tables/routesDeposits.js.map +1 -0
  357. package/dist/db/tables/routesIdempotency.d.ts +166 -0
  358. package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
  359. package/dist/db/tables/routesIdempotency.js +330 -0
  360. package/dist/db/tables/routesIdempotency.js.map +1 -0
  361. package/dist/db/tables/routesSubsidies.d.ts +27 -0
  362. package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
  363. package/dist/db/tables/routesSubsidies.js +45 -0
  364. package/dist/db/tables/routesSubsidies.js.map +1 -0
  365. package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
  366. package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
  367. package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
  368. package/dist/db/tables/routesTransferEvents.js.map +1 -0
  369. package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
  370. package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
  371. package/dist/db/tables/routesTransferSubsidies.js +17 -0
  372. package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
  373. package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
  374. package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
  375. package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
  376. package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
  377. package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
  378. package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
  379. package/dist/db/tables/{fundingTransferTransactions.js → routesTransferTransactions.js} +31 -13
  380. package/dist/db/tables/routesTransferTransactions.js.map +1 -0
  381. package/dist/db/tables/routesTransfers.d.ts +319 -0
  382. package/dist/db/tables/routesTransfers.d.ts.map +1 -0
  383. package/dist/db/tables/routesTransfers.js +372 -0
  384. package/dist/db/tables/routesTransfers.js.map +1 -0
  385. package/dist/db/tables/sponsoredTransactions.d.ts +75 -20
  386. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  387. package/dist/db/tables/sponsoredTransactions.js +124 -54
  388. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  389. package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
  390. package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
  391. package/dist/db/tables/sponsorshipAttributions.js +77 -0
  392. package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
  393. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
  394. package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
  395. package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
  396. package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
  397. package/dist/db/tables/stripeCustomers.d.ts +11 -0
  398. package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
  399. package/dist/db/tables/stripeCustomers.js +13 -0
  400. package/dist/db/tables/stripeCustomers.js.map +1 -1
  401. package/dist/db/tables/users.d.ts +17 -1
  402. package/dist/db/tables/users.d.ts.map +1 -1
  403. package/dist/db/tables/users.js +47 -2
  404. package/dist/db/tables/users.js.map +1 -1
  405. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  406. package/dist/db/tables/webhookQueueEvents.js +5 -1
  407. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  408. package/dist/db/tables/webhookSubscriptions.d.ts +19 -11
  409. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  410. package/dist/db/tables/webhookSubscriptions.js +45 -13
  411. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  412. package/dist/handlers/internal/executionError.d.ts +2 -2
  413. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  414. package/dist/handlers/internal/executionError.js +1 -2
  415. package/dist/handlers/internal/executionError.js.map +1 -1
  416. package/dist/handlers/internal/multisig.d.ts +4 -232
  417. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  418. package/dist/handlers/internal/multisig.js +11 -537
  419. package/dist/handlers/internal/multisig.js.map +1 -1
  420. package/dist/handlers/internal/sponsorship.d.ts +19 -8
  421. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  422. package/dist/handlers/internal/sponsorship.js +13 -9
  423. package/dist/handlers/internal/sponsorship.js.map +1 -1
  424. package/dist/handlers/relay.d.ts +9 -12
  425. package/dist/handlers/relay.d.ts.map +1 -1
  426. package/dist/handlers/relay.js +81 -85
  427. package/dist/handlers/relay.js.map +1 -1
  428. package/dist/index.d.ts +0 -17
  429. package/dist/index.d.ts.map +1 -1
  430. package/dist/index.js +0 -17
  431. package/dist/index.js.map +1 -1
  432. package/dist/internal/AssetResponse.d.ts +12 -0
  433. package/dist/internal/AssetResponse.d.ts.map +1 -0
  434. package/dist/internal/AssetResponse.js +21 -0
  435. package/dist/internal/AssetResponse.js.map +1 -0
  436. package/dist/internal/Auth.d.ts +48 -12
  437. package/dist/internal/Auth.d.ts.map +1 -1
  438. package/dist/internal/Auth.js +603 -175
  439. package/dist/internal/Auth.js.map +1 -1
  440. package/dist/internal/BetterAuth.d.ts +1488 -0
  441. package/dist/internal/BetterAuth.d.ts.map +1 -0
  442. package/dist/internal/BetterAuth.js +253 -0
  443. package/dist/internal/BetterAuth.js.map +1 -0
  444. package/dist/internal/Cache.d.ts +2 -0
  445. package/dist/internal/Cache.d.ts.map +1 -1
  446. package/dist/internal/Cache.js +2 -0
  447. package/dist/internal/Cache.js.map +1 -1
  448. package/dist/internal/EarnRates.d.ts +26 -3
  449. package/dist/internal/EarnRates.d.ts.map +1 -1
  450. package/dist/internal/EarnRates.js +84 -19
  451. package/dist/internal/EarnRates.js.map +1 -1
  452. package/dist/internal/EarnSharePrices.d.ts +120 -0
  453. package/dist/internal/EarnSharePrices.d.ts.map +1 -0
  454. package/dist/internal/EarnSharePrices.js +179 -0
  455. package/dist/internal/EarnSharePrices.js.map +1 -0
  456. package/dist/internal/EarnVaults.d.ts +4 -0
  457. package/dist/internal/EarnVaults.d.ts.map +1 -1
  458. package/dist/internal/EarnVaults.js +27 -10
  459. package/dist/internal/EarnVaults.js.map +1 -1
  460. package/dist/internal/Email.d.ts +37 -0
  461. package/dist/internal/Email.d.ts.map +1 -0
  462. package/dist/internal/Email.js +16 -0
  463. package/dist/internal/Email.js.map +1 -0
  464. package/dist/internal/Log.d.ts +32 -28
  465. package/dist/internal/Log.d.ts.map +1 -1
  466. package/dist/internal/Log.js +18 -11
  467. package/dist/internal/Log.js.map +1 -1
  468. package/dist/internal/MetricSink.d.ts +3 -0
  469. package/dist/internal/MetricSink.d.ts.map +1 -1
  470. package/dist/internal/MetricSink.js +67 -8
  471. package/dist/internal/MetricSink.js.map +1 -1
  472. package/dist/internal/Mpp.d.ts.map +1 -1
  473. package/dist/internal/Mpp.js +20 -25
  474. package/dist/internal/Mpp.js.map +1 -1
  475. package/dist/internal/OpenApi.d.ts +26 -3
  476. package/dist/internal/OpenApi.d.ts.map +1 -1
  477. package/dist/internal/OpenApi.js +25 -10
  478. package/dist/internal/OpenApi.js.map +1 -1
  479. package/dist/internal/Provider.d.ts +1 -1
  480. package/dist/internal/Provider.d.ts.map +1 -1
  481. package/dist/internal/RateLimit.d.ts.map +1 -1
  482. package/dist/internal/RateLimit.js +13 -1
  483. package/dist/internal/RateLimit.js.map +1 -1
  484. package/dist/internal/Store.d.ts +16 -0
  485. package/dist/internal/Store.d.ts.map +1 -1
  486. package/dist/internal/Store.js +59 -8
  487. package/dist/internal/Store.js.map +1 -1
  488. package/dist/internal/Tidx.d.ts +9 -2
  489. package/dist/internal/Tidx.d.ts.map +1 -1
  490. package/dist/internal/Tidx.js +78 -11
  491. package/dist/internal/Tidx.js.map +1 -1
  492. package/dist/internal/Timing.d.ts +26 -0
  493. package/dist/internal/Timing.d.ts.map +1 -1
  494. package/dist/internal/Timing.js +63 -5
  495. package/dist/internal/Timing.js.map +1 -1
  496. package/dist/internal/VercelOidc.d.ts +94 -0
  497. package/dist/internal/VercelOidc.d.ts.map +1 -0
  498. package/dist/internal/VercelOidc.js +128 -0
  499. package/dist/internal/VercelOidc.js.map +1 -0
  500. package/dist/internal/VerifiedTokens.d.ts +2 -8
  501. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  502. package/dist/internal/VerifiedTokens.js +24 -24
  503. package/dist/internal/VerifiedTokens.js.map +1 -1
  504. package/dist/internal/Viem.d.ts +30 -2067
  505. package/dist/internal/Viem.d.ts.map +1 -1
  506. package/dist/internal/Viem.js +167 -17
  507. package/dist/internal/Viem.js.map +1 -1
  508. package/dist/internal/Webhooks.d.ts +12 -4
  509. package/dist/internal/Webhooks.d.ts.map +1 -1
  510. package/dist/internal/Webhooks.js +9 -3
  511. package/dist/internal/Webhooks.js.map +1 -1
  512. package/dist/internal/ZoneRpc.d.ts +7 -0
  513. package/dist/internal/ZoneRpc.d.ts.map +1 -0
  514. package/dist/internal/ZoneRpc.js +49 -0
  515. package/dist/internal/ZoneRpc.js.map +1 -0
  516. package/dist/internal/index.d.ts +3 -1
  517. package/dist/internal/index.d.ts.map +1 -1
  518. package/dist/internal/index.js +3 -1
  519. package/dist/internal/index.js.map +1 -1
  520. package/dist/internal/rewards/Audit.d.ts +88 -0
  521. package/dist/internal/rewards/Audit.d.ts.map +1 -0
  522. package/dist/internal/rewards/Audit.js +134 -0
  523. package/dist/internal/rewards/Audit.js.map +1 -0
  524. package/dist/internal/rewards/Campaigns.d.ts +572 -0
  525. package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
  526. package/dist/internal/rewards/Campaigns.js +531 -0
  527. package/dist/internal/rewards/Campaigns.js.map +1 -0
  528. package/dist/internal/rewards/Credits.d.ts +76 -0
  529. package/dist/internal/rewards/Credits.d.ts.map +1 -0
  530. package/dist/internal/rewards/Credits.js +95 -0
  531. package/dist/internal/rewards/Credits.js.map +1 -0
  532. package/dist/internal/rewards/Events.d.ts +100 -0
  533. package/dist/internal/rewards/Events.d.ts.map +1 -0
  534. package/dist/internal/rewards/Events.js +340 -0
  535. package/dist/internal/rewards/Events.js.map +1 -0
  536. package/dist/internal/rewards/Projection.d.ts +237 -0
  537. package/dist/internal/rewards/Projection.d.ts.map +1 -0
  538. package/dist/internal/rewards/Projection.js +616 -0
  539. package/dist/internal/rewards/Projection.js.map +1 -0
  540. package/dist/internal/rewards/Rates.d.ts +44 -0
  541. package/dist/internal/rewards/Rates.d.ts.map +1 -0
  542. package/dist/internal/rewards/Rates.js +60 -0
  543. package/dist/internal/rewards/Rates.js.map +1 -0
  544. package/dist/internal/rewards/Read.d.ts +158 -0
  545. package/dist/internal/rewards/Read.d.ts.map +1 -0
  546. package/dist/internal/rewards/Read.js +292 -0
  547. package/dist/internal/rewards/Read.js.map +1 -0
  548. package/dist/internal/rewards/Runner.d.ts +164 -0
  549. package/dist/internal/rewards/Runner.d.ts.map +1 -0
  550. package/dist/internal/rewards/Runner.js +1778 -0
  551. package/dist/internal/rewards/Runner.js.map +1 -0
  552. package/dist/internal/rewards/Signer.d.ts +224 -0
  553. package/dist/internal/rewards/Signer.d.ts.map +1 -0
  554. package/dist/internal/rewards/Signer.js +135 -0
  555. package/dist/internal/rewards/Signer.js.map +1 -0
  556. package/dist/internal/rewards/index.d.ts +15 -0
  557. package/dist/internal/rewards/index.d.ts.map +1 -0
  558. package/dist/internal/rewards/index.js +15 -0
  559. package/dist/internal/rewards/index.js.map +1 -0
  560. package/dist/internal/{funding → routes}/Action.d.ts +12 -1
  561. package/dist/internal/routes/Action.d.ts.map +1 -0
  562. package/dist/internal/{funding → routes}/Action.js +17 -9
  563. package/dist/internal/routes/Action.js.map +1 -0
  564. package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
  565. package/dist/internal/routes/Catalog.d.ts.map +1 -0
  566. package/dist/internal/{funding → routes}/Catalog.js +29 -29
  567. package/dist/internal/routes/Catalog.js.map +1 -0
  568. package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
  569. package/dist/internal/routes/Chain.d.ts.map +1 -0
  570. package/dist/internal/{funding → routes}/Chain.js +3 -3
  571. package/dist/internal/routes/Chain.js.map +1 -0
  572. package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
  573. package/dist/internal/routes/Deposit.d.ts.map +1 -0
  574. package/dist/internal/{funding → routes}/Deposit.js +60 -27
  575. package/dist/internal/routes/Deposit.js.map +1 -0
  576. package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
  577. package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
  578. package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
  579. package/dist/internal/routes/DepositAddress.js.map +1 -0
  580. package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
  581. package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
  582. package/dist/internal/{funding → routes}/DepositWebhook.js +4 -4
  583. package/dist/internal/routes/DepositWebhook.js.map +1 -0
  584. package/dist/internal/routes/Economics.d.ts +25 -0
  585. package/dist/internal/routes/Economics.d.ts.map +1 -0
  586. package/dist/internal/routes/Economics.js +28 -0
  587. package/dist/internal/routes/Economics.js.map +1 -0
  588. package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
  589. package/dist/internal/routes/Evidence.d.ts.map +1 -0
  590. package/dist/internal/{funding → routes}/Evidence.js +7 -7
  591. package/dist/internal/routes/Evidence.js.map +1 -0
  592. package/dist/internal/routes/Observability.d.ts +154 -0
  593. package/dist/internal/routes/Observability.d.ts.map +1 -0
  594. package/dist/internal/routes/Observability.js +389 -0
  595. package/dist/internal/routes/Observability.js.map +1 -0
  596. package/dist/internal/{funding → routes}/Provider.d.ts +311 -105
  597. package/dist/internal/routes/Provider.d.ts.map +1 -0
  598. package/dist/internal/{funding → routes}/Provider.js +229 -98
  599. package/dist/internal/routes/Provider.js.map +1 -0
  600. package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
  601. package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
  602. package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
  603. package/dist/internal/routes/Reconciliation.js.map +1 -0
  604. package/dist/internal/routes/Route.d.ts +21 -0
  605. package/dist/internal/routes/Route.d.ts.map +1 -0
  606. package/dist/internal/{funding → routes}/Route.js +1 -1
  607. package/dist/internal/routes/Route.js.map +1 -0
  608. package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
  609. package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
  610. package/dist/internal/{funding → routes}/SourceObservation.js +8 -8
  611. package/dist/internal/routes/SourceObservation.js.map +1 -0
  612. package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
  613. package/dist/internal/routes/Subsidy.d.ts.map +1 -0
  614. package/dist/internal/{funding → routes}/Subsidy.js +43 -3
  615. package/dist/internal/routes/Subsidy.js.map +1 -0
  616. package/dist/internal/{funding → routes}/Token.d.ts +4 -4
  617. package/dist/internal/routes/Token.d.ts.map +1 -0
  618. package/dist/internal/{funding → routes}/Token.js +3 -3
  619. package/dist/internal/routes/Token.js.map +1 -0
  620. package/dist/internal/{funding → routes}/Transfer.d.ts +241 -46
  621. package/dist/internal/routes/Transfer.d.ts.map +1 -0
  622. package/dist/internal/routes/Transfer.js +728 -0
  623. package/dist/internal/routes/Transfer.js.map +1 -0
  624. package/dist/internal/{funding → routes}/TransferReconciliation.d.ts +13 -10
  625. package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
  626. package/dist/internal/routes/TransferReconciliation.js +422 -0
  627. package/dist/internal/routes/TransferReconciliation.js.map +1 -0
  628. package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
  629. package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
  630. package/dist/internal/routes/TransferSubsidy.js +256 -0
  631. package/dist/internal/routes/TransferSubsidy.js.map +1 -0
  632. package/dist/internal/{funding → routes}/TransferWebhook.d.ts +5 -5
  633. package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
  634. package/dist/internal/{funding → routes}/TransferWebhook.js +3 -3
  635. package/dist/internal/routes/TransferWebhook.js.map +1 -0
  636. package/dist/internal/{funding → routes}/index.d.ts +2 -0
  637. package/dist/internal/routes/index.d.ts.map +1 -0
  638. package/dist/internal/{funding → routes}/index.js +2 -0
  639. package/dist/internal/routes/index.js.map +1 -0
  640. package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
  641. package/dist/internal/routes/providers/across.d.ts.map +1 -0
  642. package/dist/internal/{funding → routes}/providers/across.js +13 -13
  643. package/dist/internal/routes/providers/across.js.map +1 -0
  644. package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
  645. package/dist/internal/routes/providers/relay.d.ts.map +1 -0
  646. package/dist/internal/{funding → routes}/providers/relay.js +194 -110
  647. package/dist/internal/routes/providers/relay.js.map +1 -0
  648. package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
  649. package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
  650. package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
  651. package/dist/internal/routes/providers/rhino.js.map +1 -0
  652. package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
  653. package/dist/internal/routes/providers/squid.d.ts.map +1 -0
  654. package/dist/internal/{funding → routes}/providers/squid.js +14 -14
  655. package/dist/internal/routes/providers/squid.js.map +1 -0
  656. package/dist/internal/{funding → routes}/providers/stargate.d.ts +46 -18
  657. package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
  658. package/dist/internal/routes/providers/stargate.js +898 -0
  659. package/dist/internal/routes/providers/stargate.js.map +1 -0
  660. package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
  661. package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
  662. package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
  663. package/dist/internal/routes/providers/symbiosis.js.map +1 -0
  664. package/dist/internal/webhookDestinations/slack.js +12 -12
  665. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  666. package/dist/providers/index.d.ts +12 -12
  667. package/dist/providers/index.d.ts.map +1 -1
  668. package/dist/providers/index.js +12 -12
  669. package/dist/providers/index.js.map +1 -1
  670. package/dist/server.d.ts +19 -0
  671. package/dist/server.d.ts.map +1 -0
  672. package/dist/server.js +19 -0
  673. package/dist/server.js.map +1 -0
  674. package/package.json +15 -4
  675. package/src/ApiKey.ts +1 -1
  676. package/src/ApiKeys.test.ts +1033 -3
  677. package/src/ApiKeys.ts +489 -48
  678. package/src/App.test-d.ts +1 -1
  679. package/src/App.test.ts +216 -25
  680. package/src/App.ts +334 -31
  681. package/src/Assets.test.ts +2 -2
  682. package/src/Assets.ts +3 -1
  683. package/src/Auth.test-d.ts +1 -1
  684. package/src/Client.test-d.ts +539 -110
  685. package/src/Handler.ts +0 -1
  686. package/src/OpenApi.contract.test.ts +195 -0
  687. package/src/Scope.ts +17 -5
  688. package/src/Webhooks.ts +1 -1
  689. package/src/admin/App.test.ts +30 -2
  690. package/src/admin/App.ts +42 -6
  691. package/src/admin/apps/api-keys.test.ts +267 -5
  692. package/src/admin/apps/api-keys.ts +100 -50
  693. package/src/admin/apps/earn-vaults.test.ts +158 -0
  694. package/src/admin/apps/earn-vaults.ts +679 -6
  695. package/src/admin/apps/organizations.test.ts +306 -17
  696. package/src/admin/apps/organizations.ts +299 -24
  697. package/src/admin/apps/routes-support.test.ts +200 -0
  698. package/src/admin/apps/routes-support.ts +201 -0
  699. package/src/admin/apps/routes.test.ts +450 -0
  700. package/src/admin/apps/routes.ts +896 -0
  701. package/src/admin/apps/scopes.test.ts +15 -5
  702. package/src/admin/apps/subsidies.test.ts +306 -0
  703. package/src/admin/apps/subsidies.ts +457 -0
  704. package/src/admin/apps/verified-tokens.test.ts +8 -3
  705. package/src/admin/apps/verified-tokens.ts +3 -3
  706. package/src/admin/ui/plugin.ts +1 -2
  707. package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
  708. package/src/admin/ui/src/lib/config.ts +11 -2
  709. package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
  710. package/src/admin/ui/src/lib/organizations.test.ts +83 -50
  711. package/src/admin/ui/src/lib/organizations.ts +106 -25
  712. package/src/admin/ui/src/lib/query-client.ts +1 -1
  713. package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
  714. package/src/admin/ui/src/lib/routes.test.ts +88 -0
  715. package/src/admin/ui/src/lib/routes.ts +304 -0
  716. package/src/admin/ui/src/lib/subsidies.ts +75 -0
  717. package/src/admin/ui/src/routeTree.gen.ts +63 -0
  718. package/src/admin/ui/src/routes/__root.tsx +12 -1
  719. package/src/admin/ui/src/routes/api-keys.tsx +196 -84
  720. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
  721. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +239 -23
  722. package/src/admin/ui/src/routes/routes.tsx +1615 -0
  723. package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
  724. package/src/admin/ui/src/routes/subsidies.tsx +799 -0
  725. package/src/admin/ui.generated.ts +144 -69
  726. package/src/analytics/Analytics.test.ts +108 -18
  727. package/src/analytics/Analytics.ts +38 -6
  728. package/src/analytics/tables/requestEvents.test.ts +100 -0
  729. package/src/analytics/tables/requestEvents.ts +10 -1
  730. package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
  731. package/src/apps/Zones.test.ts +15 -0
  732. package/src/apps/Zones.ts +52 -5
  733. package/src/apps/composition.test.ts +68 -60
  734. package/src/apps/data/App.test.ts +154 -2
  735. package/src/apps/data/App.ts +88 -28
  736. package/src/apps/data/routes/activities.test.ts +419 -7
  737. package/src/apps/data/routes/activities.ts +683 -216
  738. package/src/apps/data/routes/balances.test.ts +2 -2
  739. package/src/apps/data/routes/blocks.test.ts +46 -1
  740. package/src/apps/data/routes/coingecko.test.ts +419 -1
  741. package/src/apps/data/routes/coingecko.ts +309 -253
  742. package/src/apps/data/routes/earn.discovery.test.ts +274 -0
  743. package/src/apps/data/routes/earn.test.ts +1294 -17
  744. package/src/apps/data/routes/earn.ts +1838 -321
  745. package/src/apps/data/routes/exchanges.test.ts +12 -15
  746. package/src/apps/data/routes/fee-amm.test.ts +224 -0
  747. package/src/apps/data/routes/fee-amm.ts +191 -160
  748. package/src/apps/data/routes/indexer.test.ts +389 -0
  749. package/src/apps/data/routes/indexer.ts +165 -69
  750. package/src/apps/data/routes/receipts.test.ts +1 -1
  751. package/src/apps/data/routes/rpc.test.ts +352 -8
  752. package/src/apps/data/routes/rpc.ts +407 -219
  753. package/src/apps/data/routes/rpc.zone.test.ts +340 -0
  754. package/src/apps/data/routes/tokenlist.test.ts +285 -0
  755. package/src/apps/data/routes/tokenlist.ts +173 -88
  756. package/src/apps/data/routes/tokens.test.ts +93 -3
  757. package/src/apps/data/routes/tokens.ts +39 -23
  758. package/src/apps/data/routes/transactions.test.ts +1 -1
  759. package/src/apps/data/routes/transfers.test.ts +56 -24
  760. package/src/apps/data/routes/transfers.ts +19 -8
  761. package/src/apps/data/routes/valuation.test.ts +1 -1
  762. package/src/apps/data/routes/verified-tokens.test.ts +345 -0
  763. package/src/apps/data/routes/verified-tokens.ts +99 -29
  764. package/src/apps/data/routes/webhooks.test.ts +645 -83
  765. package/src/apps/data/routes/webhooks.ts +1089 -857
  766. package/src/apps/data/routes/zones.test.ts +148 -71
  767. package/src/apps/data/routes/zones.ts +71 -55
  768. package/src/apps/docs/reference.ts +2 -2
  769. package/src/apps/index.ts +1 -1
  770. package/src/apps/management/App.ts +9 -51
  771. package/src/apps/management/Billing.test.ts +375 -14
  772. package/src/apps/management/Billing.ts +265 -29
  773. package/src/apps/management/routes/api-keys.test.ts +269 -7
  774. package/src/apps/management/routes/api-keys.ts +61 -20
  775. package/src/apps/management/routes/billing.test.ts +477 -15
  776. package/src/apps/management/routes/billing.ts +377 -50
  777. package/src/apps/management/routes/faucet.test.ts +1 -1
  778. package/src/apps/management/routes/faucet.ts +1 -1
  779. package/src/apps/management/routes/invitations.test.ts +270 -3
  780. package/src/apps/management/routes/invitations.ts +185 -15
  781. package/src/apps/management/routes/invoicePreview.test.ts +549 -0
  782. package/src/apps/management/routes/me.test.ts +246 -5
  783. package/src/apps/management/routes/me.ts +7 -2
  784. package/src/apps/management/routes/members.test.ts +108 -0
  785. package/src/apps/management/routes/orgs.test.ts +191 -3
  786. package/src/apps/management/routes/orgs.ts +58 -11
  787. package/src/apps/management/routes/projects.test.ts +33 -3
  788. package/src/apps/management/routes/projects.ts +6 -1
  789. package/src/apps/management/routes/scopes.test.ts +30 -2
  790. package/src/apps/management/routes/scopes.ts +4 -1
  791. package/src/apps/management/routes/usage.test.ts +32 -0
  792. package/src/apps/management/routes/usage.ts +22 -4
  793. package/src/apps/management/routes/webhooks.test.ts +49 -26
  794. package/src/apps/management/routes/webhooks.ts +78 -22
  795. package/src/apps/mcp.test.ts +6 -6
  796. package/src/apps/mcp.ts +7 -7
  797. package/src/apps/mpp/App.ts +37 -7
  798. package/src/apps/mpp/Mpp.test.ts +49 -8
  799. package/src/apps/mpp/Mpp.zone.test.ts +219 -0
  800. package/src/apps/mpp/internal/Adapter.ts +34 -0
  801. package/src/apps/mpp/internal/Policy.test.ts +86 -31
  802. package/src/apps/mpp/internal/Policy.ts +49 -7
  803. package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
  804. package/src/apps/mpp/internal/Sponsorship.ts +9 -3
  805. package/src/apps/relay/App.test.ts +839 -64
  806. package/src/apps/relay/App.ts +148 -81
  807. package/src/apps/relay/App.zone-billing.test.ts +257 -0
  808. package/src/apps/relay/Sponsorships.test.ts +67 -4
  809. package/src/apps/relay/Sponsorships.ts +233 -32
  810. package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
  811. package/src/apps/{funding → routes}/Access.ts +6 -6
  812. package/src/apps/routes/App.test.ts +165 -0
  813. package/src/apps/routes/App.ts +96 -0
  814. package/src/apps/{funding → routes}/Inventory.ts +2 -2
  815. package/src/apps/routes/index.ts +1 -0
  816. package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
  817. package/src/apps/{funding → routes}/routes/chains.ts +23 -23
  818. package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1358 -458
  819. package/src/apps/{funding → routes}/routes/deposit-addresses.ts +566 -246
  820. package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
  821. package/src/apps/{funding → routes}/routes/providers.ts +23 -23
  822. package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
  823. package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
  824. package/src/apps/{funding → routes}/routes/transfers.test.ts +1100 -353
  825. package/src/apps/routes/routes/transfers.ts +1332 -0
  826. package/src/cli/Cli.test.ts +1 -1
  827. package/src/cli/commands/admin.test.ts +748 -1
  828. package/src/cli/commands/admin.ts +278 -0
  829. package/src/cloudflare.ts +52 -47
  830. package/src/db/Db.test.ts +245 -2
  831. package/src/db/Db.ts +1476 -34
  832. package/src/db/Schema.ts +729 -228
  833. package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
  834. package/src/db/tables/apiKeyAdmissions.ts +218 -0
  835. package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
  836. package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
  837. package/src/db/tables/apiKeyRevocations.test.ts +74 -0
  838. package/src/db/tables/apiKeyRevocations.ts +121 -0
  839. package/src/db/tables/authAccounts.ts +105 -0
  840. package/src/db/tables/authSessions.ts +13 -0
  841. package/src/db/tables/authVerifications.ts +13 -0
  842. package/src/db/tables/invitations.ts +142 -45
  843. package/src/db/tables/memberships.ts +79 -3
  844. package/src/db/tables/organizations.test.ts +690 -13
  845. package/src/db/tables/organizations.ts +139 -55
  846. package/src/db/tables/projects.test.ts +16 -0
  847. package/src/db/tables/projects.ts +13 -3
  848. package/src/db/tables/requestUsage.ts +4 -1
  849. package/src/db/tables/rewardAccounts.ts +178 -0
  850. package/src/db/tables/rewardCampaignDistributors.ts +68 -0
  851. package/src/db/tables/rewardCampaigns.test.ts +1388 -0
  852. package/src/db/tables/rewardCampaigns.ts +647 -0
  853. package/src/db/tables/rewardCredits.ts +110 -0
  854. package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
  855. package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
  856. package/src/db/tables/rewardRuns.ts +514 -0
  857. package/src/db/tables/rewardTransactionAttempts.ts +272 -0
  858. package/src/db/tables/routesCatalog.test.ts +185 -0
  859. package/src/db/tables/routesCatalog.ts +163 -0
  860. package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
  861. package/src/db/tables/routesDepositAddresses.ts +1008 -0
  862. package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
  863. package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
  864. package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +316 -46
  865. package/src/db/tables/routesDeposits.ts +1062 -0
  866. package/src/db/tables/routesIdempotency.test.ts +796 -0
  867. package/src/db/tables/routesIdempotency.ts +496 -0
  868. package/src/db/tables/routesSubsidies.test.ts +120 -0
  869. package/src/db/tables/routesSubsidies.ts +71 -0
  870. package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
  871. package/src/db/tables/routesTransferSubsidies.ts +38 -0
  872. package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
  873. package/src/db/tables/routesTransferTransactions.test.ts +195 -0
  874. package/src/db/tables/{fundingTransferTransactions.ts → routesTransferTransactions.ts} +63 -18
  875. package/src/db/tables/routesTransfers.test.ts +338 -0
  876. package/src/db/tables/routesTransfers.ts +662 -0
  877. package/src/db/tables/sponsoredTransactions.test.ts +269 -45
  878. package/src/db/tables/sponsoredTransactions.ts +225 -65
  879. package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
  880. package/src/db/tables/sponsorshipAttributions.ts +168 -0
  881. package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
  882. package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
  883. package/src/db/tables/stripeCustomers.test.ts +85 -0
  884. package/src/db/tables/stripeCustomers.ts +24 -0
  885. package/src/db/tables/users.test.ts +129 -0
  886. package/src/db/tables/users.ts +49 -3
  887. package/src/db/tables/webhookQueueEvents.ts +8 -1
  888. package/src/db/tables/webhookSubscriptions.ts +95 -20
  889. package/src/handlers/internal/executionError.ts +3 -4
  890. package/src/handlers/internal/multisig.ts +13 -816
  891. package/src/handlers/internal/sponsorship.ts +26 -10
  892. package/src/handlers/relay.test-d.ts +9 -1
  893. package/src/handlers/relay.test.ts +823 -3
  894. package/src/handlers/relay.ts +127 -107
  895. package/src/index.test-d.ts +7 -0
  896. package/src/index.ts +0 -17
  897. package/src/internal/AssetResponse.ts +26 -0
  898. package/src/internal/Auth.test.ts +1564 -9
  899. package/src/internal/Auth.ts +833 -239
  900. package/src/internal/BetterAuth.test.ts +242 -0
  901. package/src/internal/BetterAuth.ts +349 -0
  902. package/src/internal/Cache.ts +2 -0
  903. package/src/internal/EarnRates.test.ts +17 -0
  904. package/src/internal/EarnRates.ts +124 -31
  905. package/src/internal/EarnSharePrices.test.ts +182 -0
  906. package/src/internal/EarnSharePrices.ts +313 -0
  907. package/src/internal/EarnVaults.test.ts +21 -0
  908. package/src/internal/EarnVaults.ts +33 -11
  909. package/src/internal/Email.ts +54 -0
  910. package/src/internal/Idempotency.test.ts +2 -2
  911. package/src/internal/Log.test-d.ts +8 -7
  912. package/src/internal/Log.test.ts +114 -16
  913. package/src/internal/Log.ts +53 -40
  914. package/src/internal/MetricSink.test.ts +313 -26
  915. package/src/internal/MetricSink.ts +73 -8
  916. package/src/internal/Mpp.test.ts +31 -0
  917. package/src/internal/Mpp.ts +21 -24
  918. package/src/internal/OpenApi.ts +45 -12
  919. package/src/internal/Provider.test.ts +1 -1
  920. package/src/internal/Provider.ts +1 -1
  921. package/src/internal/RateLimit.test.ts +21 -3
  922. package/src/internal/RateLimit.ts +12 -1
  923. package/src/internal/Store.test-d.ts +1 -1
  924. package/src/internal/Store.test.ts +151 -8
  925. package/src/internal/Store.ts +76 -9
  926. package/src/internal/Tidx.test.ts +59 -8
  927. package/src/internal/Tidx.ts +86 -14
  928. package/src/internal/Timing.test.ts +77 -0
  929. package/src/internal/Timing.ts +83 -6
  930. package/src/internal/VercelOidc.test.ts +188 -0
  931. package/src/internal/VercelOidc.ts +193 -0
  932. package/src/internal/VerifiedTokens.test.ts +60 -6
  933. package/src/internal/VerifiedTokens.ts +21 -24
  934. package/src/internal/Viem.batch.test.ts +80 -0
  935. package/src/internal/Viem.test.ts +201 -2
  936. package/src/internal/Viem.ts +221 -25
  937. package/src/internal/Webhooks.test.ts +85 -6
  938. package/src/internal/Webhooks.ts +22 -4
  939. package/src/internal/ZoneRpc.ts +50 -0
  940. package/src/internal/exchange/Provider.test.ts +2 -2
  941. package/src/internal/index.test.ts +3 -1
  942. package/src/internal/index.ts +3 -1
  943. package/src/internal/rewards/Audit.ts +231 -0
  944. package/src/internal/rewards/Campaigns.test.ts +1234 -0
  945. package/src/internal/rewards/Campaigns.ts +1205 -0
  946. package/src/internal/rewards/Credits.ts +165 -0
  947. package/src/internal/rewards/Events.local.test.ts +113 -0
  948. package/src/internal/rewards/Events.test.ts +152 -0
  949. package/src/internal/rewards/Events.ts +468 -0
  950. package/src/internal/rewards/Projection.test.ts +681 -0
  951. package/src/internal/rewards/Projection.ts +987 -0
  952. package/src/internal/rewards/Rates.test.ts +171 -0
  953. package/src/internal/rewards/Rates.ts +110 -0
  954. package/src/internal/rewards/Read.test.ts +501 -0
  955. package/src/internal/rewards/Read.ts +476 -0
  956. package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
  957. package/src/internal/rewards/Runner.states.test.ts +188 -0
  958. package/src/internal/rewards/Runner.test.ts +90 -0
  959. package/src/internal/rewards/Runner.ts +2229 -0
  960. package/src/internal/rewards/Signer.test.ts +79 -0
  961. package/src/internal/rewards/Signer.ts +180 -0
  962. package/src/internal/rewards/index.ts +14 -0
  963. package/src/internal/{funding → routes}/Action.test.ts +63 -14
  964. package/src/internal/{funding → routes}/Action.ts +35 -8
  965. package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
  966. package/src/internal/{funding → routes}/Catalog.ts +39 -39
  967. package/src/internal/{funding → routes}/Chain.test.ts +1 -1
  968. package/src/internal/{funding → routes}/Chain.ts +11 -11
  969. package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
  970. package/src/internal/{funding → routes}/Deposit.ts +93 -45
  971. package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
  972. package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
  973. package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
  974. package/src/internal/{funding → routes}/DepositWebhook.ts +9 -9
  975. package/src/internal/routes/Economics.test.ts +42 -0
  976. package/src/internal/routes/Economics.ts +47 -0
  977. package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
  978. package/src/internal/{funding → routes}/Evidence.ts +9 -9
  979. package/src/internal/routes/Observability.test.ts +636 -0
  980. package/src/internal/routes/Observability.ts +668 -0
  981. package/src/internal/{funding → routes}/Provider.test.ts +489 -153
  982. package/src/internal/{funding → routes}/Provider.ts +489 -186
  983. package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
  984. package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
  985. package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
  986. package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
  987. package/src/internal/{funding → routes}/Route.ts +7 -7
  988. package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
  989. package/src/internal/{funding → routes}/SourceObservation.ts +13 -13
  990. package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
  991. package/src/internal/routes/Subsidy.test.ts +169 -0
  992. package/src/internal/{funding → routes}/Subsidy.ts +86 -6
  993. package/src/internal/{funding → routes}/Token.test.ts +1 -1
  994. package/src/internal/{funding → routes}/Token.ts +5 -5
  995. package/src/internal/routes/Transfer.test.ts +1199 -0
  996. package/src/internal/routes/Transfer.ts +1206 -0
  997. package/src/internal/routes/TransferReconciliation.test.ts +731 -0
  998. package/src/internal/routes/TransferReconciliation.ts +527 -0
  999. package/src/internal/routes/TransferSubsidy.test.ts +172 -0
  1000. package/src/internal/routes/TransferSubsidy.ts +447 -0
  1001. package/src/internal/{funding → routes}/TransferWebhook.test.ts +13 -13
  1002. package/src/internal/{funding → routes}/TransferWebhook.ts +7 -7
  1003. package/src/internal/{funding → routes}/index.test.ts +5 -3
  1004. package/src/internal/{funding → routes}/index.ts +2 -0
  1005. package/src/internal/{funding → routes}/providers/across.ts +16 -16
  1006. package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
  1007. package/src/internal/{funding → routes}/providers/relay.test.ts +165 -32
  1008. package/src/internal/{funding → routes}/providers/relay.ts +228 -121
  1009. package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
  1010. package/src/internal/{funding → routes}/providers/squid.ts +17 -17
  1011. package/src/internal/routes/providers/stargate.test.ts +728 -0
  1012. package/src/internal/routes/providers/stargate.ts +1276 -0
  1013. package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
  1014. package/src/internal/webhookDestinations/slack.ts +10 -10
  1015. package/src/providers/index.ts +13 -13
  1016. package/src/server.ts +18 -0
  1017. package/dist/apps/funding/Access.d.ts.map +0 -1
  1018. package/dist/apps/funding/Access.js.map +0 -1
  1019. package/dist/apps/funding/App.js.map +0 -1
  1020. package/dist/apps/funding/Inventory.d.ts.map +0 -1
  1021. package/dist/apps/funding/Inventory.js.map +0 -1
  1022. package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
  1023. package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
  1024. package/dist/apps/funding/ProviderAttempts.js +0 -24
  1025. package/dist/apps/funding/ProviderAttempts.js.map +0 -1
  1026. package/dist/apps/funding/index.d.ts +0 -2
  1027. package/dist/apps/funding/index.d.ts.map +0 -1
  1028. package/dist/apps/funding/index.js +0 -2
  1029. package/dist/apps/funding/index.js.map +0 -1
  1030. package/dist/apps/funding/routes/chains.d.ts.map +0 -1
  1031. package/dist/apps/funding/routes/chains.js.map +0 -1
  1032. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
  1033. package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
  1034. package/dist/apps/funding/routes/providers.d.ts.map +0 -1
  1035. package/dist/apps/funding/routes/providers.js +0 -57
  1036. package/dist/apps/funding/routes/providers.js.map +0 -1
  1037. package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
  1038. package/dist/apps/funding/routes/quotes.js.map +0 -1
  1039. package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
  1040. package/dist/apps/funding/routes/transfers.js +0 -828
  1041. package/dist/apps/funding/routes/transfers.js.map +0 -1
  1042. package/dist/db/tables/fundingCatalog.d.ts +0 -58
  1043. package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
  1044. package/dist/db/tables/fundingCatalog.js.map +0 -1
  1045. package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
  1046. package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
  1047. package/dist/db/tables/fundingDepositAddresses.js +0 -235
  1048. package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
  1049. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
  1050. package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
  1051. package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
  1052. package/dist/db/tables/fundingDeposits.js +0 -295
  1053. package/dist/db/tables/fundingDeposits.js.map +0 -1
  1054. package/dist/db/tables/fundingIdempotency.d.ts +0 -91
  1055. package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
  1056. package/dist/db/tables/fundingIdempotency.js +0 -103
  1057. package/dist/db/tables/fundingIdempotency.js.map +0 -1
  1058. package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
  1059. package/dist/db/tables/fundingTransferEvents.js.map +0 -1
  1060. package/dist/db/tables/fundingTransferTransactions.d.ts +0 -53
  1061. package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
  1062. package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
  1063. package/dist/db/tables/fundingTransfers.d.ts +0 -99
  1064. package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
  1065. package/dist/db/tables/fundingTransfers.js +0 -110
  1066. package/dist/db/tables/fundingTransfers.js.map +0 -1
  1067. package/dist/internal/funding/Action.d.ts.map +0 -1
  1068. package/dist/internal/funding/Action.js.map +0 -1
  1069. package/dist/internal/funding/Catalog.d.ts.map +0 -1
  1070. package/dist/internal/funding/Catalog.js.map +0 -1
  1071. package/dist/internal/funding/Chain.d.ts.map +0 -1
  1072. package/dist/internal/funding/Chain.js.map +0 -1
  1073. package/dist/internal/funding/Deposit.d.ts.map +0 -1
  1074. package/dist/internal/funding/Deposit.js.map +0 -1
  1075. package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
  1076. package/dist/internal/funding/DepositAddress.js.map +0 -1
  1077. package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
  1078. package/dist/internal/funding/DepositWebhook.js.map +0 -1
  1079. package/dist/internal/funding/Evidence.d.ts.map +0 -1
  1080. package/dist/internal/funding/Evidence.js.map +0 -1
  1081. package/dist/internal/funding/Provider.d.ts.map +0 -1
  1082. package/dist/internal/funding/Provider.js.map +0 -1
  1083. package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
  1084. package/dist/internal/funding/Reconciliation.js.map +0 -1
  1085. package/dist/internal/funding/Route.d.ts +0 -21
  1086. package/dist/internal/funding/Route.d.ts.map +0 -1
  1087. package/dist/internal/funding/Route.js.map +0 -1
  1088. package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
  1089. package/dist/internal/funding/SourceObservation.js.map +0 -1
  1090. package/dist/internal/funding/Subsidy.d.ts.map +0 -1
  1091. package/dist/internal/funding/Subsidy.js.map +0 -1
  1092. package/dist/internal/funding/Token.d.ts.map +0 -1
  1093. package/dist/internal/funding/Token.js.map +0 -1
  1094. package/dist/internal/funding/Transfer.d.ts.map +0 -1
  1095. package/dist/internal/funding/Transfer.js +0 -462
  1096. package/dist/internal/funding/Transfer.js.map +0 -1
  1097. package/dist/internal/funding/TransferReconciliation.d.ts.map +0 -1
  1098. package/dist/internal/funding/TransferReconciliation.js +0 -192
  1099. package/dist/internal/funding/TransferReconciliation.js.map +0 -1
  1100. package/dist/internal/funding/TransferWebhook.d.ts.map +0 -1
  1101. package/dist/internal/funding/TransferWebhook.js.map +0 -1
  1102. package/dist/internal/funding/index.d.ts.map +0 -1
  1103. package/dist/internal/funding/index.js.map +0 -1
  1104. package/dist/internal/funding/providers/across.d.ts.map +0 -1
  1105. package/dist/internal/funding/providers/across.js.map +0 -1
  1106. package/dist/internal/funding/providers/relay.d.ts.map +0 -1
  1107. package/dist/internal/funding/providers/relay.js.map +0 -1
  1108. package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
  1109. package/dist/internal/funding/providers/rhino.js.map +0 -1
  1110. package/dist/internal/funding/providers/squid.d.ts.map +0 -1
  1111. package/dist/internal/funding/providers/squid.js.map +0 -1
  1112. package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
  1113. package/dist/internal/funding/providers/stargate.js +0 -579
  1114. package/dist/internal/funding/providers/stargate.js.map +0 -1
  1115. package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
  1116. package/dist/internal/funding/providers/symbiosis.js.map +0 -1
  1117. package/src/apps/funding/App.test.ts +0 -78
  1118. package/src/apps/funding/App.ts +0 -88
  1119. package/src/apps/funding/ProviderAttempts.ts +0 -26
  1120. package/src/apps/funding/index.ts +0 -1
  1121. package/src/apps/funding/routes/transfers.ts +0 -987
  1122. package/src/db/tables/fundingCatalog.test.ts +0 -122
  1123. package/src/db/tables/fundingCatalog.ts +0 -163
  1124. package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
  1125. package/src/db/tables/fundingDepositAddresses.ts +0 -443
  1126. package/src/db/tables/fundingDeposits.ts +0 -572
  1127. package/src/db/tables/fundingIdempotency.test.ts +0 -182
  1128. package/src/db/tables/fundingIdempotency.ts +0 -180
  1129. package/src/db/tables/fundingTransferTransactions.test.ts +0 -112
  1130. package/src/db/tables/fundingTransfers.test.ts +0 -115
  1131. package/src/db/tables/fundingTransfers.ts +0 -189
  1132. package/src/handlers/internal/multisig.test.ts +0 -818
  1133. package/src/internal/funding/Subsidy.test.ts +0 -75
  1134. package/src/internal/funding/Transfer.test.ts +0 -524
  1135. package/src/internal/funding/Transfer.ts +0 -762
  1136. package/src/internal/funding/TransferReconciliation.test.ts +0 -147
  1137. package/src/internal/funding/TransferReconciliation.ts +0 -264
  1138. package/src/internal/funding/providers/stargate.test.ts +0 -328
  1139. package/src/internal/funding/providers/stargate.ts +0 -856
  1140. /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
  1141. /package/src/internal/{funding → routes}/Route.test.ts +0 -0
@@ -0,0 +1,1276 @@
1
+ import { AbiEvent, AbiFunction, Address, Hash, Hex } from 'ox'
2
+ import {
3
+ BlockNotFoundError,
4
+ parseEventLogs,
5
+ publicActions,
6
+ TransactionReceiptNotFoundError,
7
+ } from 'viem'
8
+ import { Addresses } from 'viem/tempo'
9
+ import * as z from 'zod/mini'
10
+
11
+ import * as Schema from '../../Schema.js'
12
+ import * as Viem from '../../Viem.js'
13
+ import * as Action from '../Action.js'
14
+ import type * as Catalog from '../Catalog.js'
15
+ import * as Chain from '../Chain.js'
16
+ import * as RoutesProvider from '../Provider.js'
17
+ import type * as Transfer from '../Transfer.js'
18
+
19
+ const approve = AbiFunction.from('function approve(address spender, uint256 amount)')
20
+ const approvalEvent = AbiEvent.from(
21
+ 'event Approval(address indexed owner, address indexed spender, uint256 value)',
22
+ )
23
+ const defaultFetch: RoutesProvider.Fetch = (input, init) => globalThis.fetch(input, init)
24
+ const assets = {
25
+ 'eip155:1': '0xA0b86991c6218b36c1d19d4a2e9eb0cE3606eB48',
26
+ 'eip155:4217': '0x20C000000000000000000000b9537d11c60E8b50',
27
+ 'eip155:8453': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
28
+ } as const
29
+ const defaultDestinationPool = '0x8c76e2f6c5ceda9aa7772e7eff30280226c44392'
30
+ const deployments = {
31
+ 'eip155:1': {
32
+ eid: 30_101,
33
+ endpoint: '0x1a44076050125825900e736c501f859c50fE728c',
34
+ },
35
+ 'eip155:4217': {
36
+ eid: 30_410,
37
+ endpoint: '0x20Bb7C2E2f4e5ca2B4c57060d1aE2615245dCc9C',
38
+ },
39
+ 'eip155:8453': {
40
+ eid: 30_184,
41
+ endpoint: '0x1a44076050125825900e736c501f859c50fE728c',
42
+ },
43
+ } as const
44
+ const oftReceived = AbiEvent.from(
45
+ 'event OFTReceived(bytes32 indexed guid, uint32 srcEid, address indexed toAddress, uint256 amountReceivedLD)',
46
+ )
47
+ const oftSent = AbiEvent.from(
48
+ 'event OFTSent(bytes32 indexed guid, uint32 dstEid, address indexed fromAddress, uint256 amountSentLD, uint256 amountReceivedLD)',
49
+ )
50
+ const packetSent = AbiEvent.from(
51
+ 'event PacketSent(bytes encodedPayload, bytes options, address sendLibrary)',
52
+ )
53
+ const quoteOft = AbiFunction.from(
54
+ 'function quoteOFT((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam) view returns ((uint256 minAmountLD, uint256 maxAmountLD) limit, (int256 feeAmountLD, string description)[] oftFeeDetails, (uint256 amountSentLD, uint256 amountReceivedLD) receipt)',
55
+ )
56
+ const quoteSend = AbiFunction.from(
57
+ 'function quoteSend((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, bool payInLzToken) view returns ((uint256 nativeFee, uint256 lzTokenFee) fee)',
58
+ )
59
+ const send = AbiFunction.from(
60
+ 'function send((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, (uint256 nativeFee, uint256 lzTokenFee) fee, address refundAddress) payable returns ((bytes32 guid, uint64 nonce, (uint256 nativeFee, uint256 lzTokenFee) fee) msgReceipt, (uint256 amountSentLD, uint256 amountReceivedLD) oftReceipt)',
61
+ )
62
+ const endpointNativeToken = AbiFunction.from('function nativeToken() view returns (address)')
63
+ const wrap = AbiFunction.from('function wrap(address token, address to, uint256 amount)')
64
+ const quoteTtlMs = 60_000
65
+ const maximumLogBlockRange = 10_000n
66
+ const transferEvent = AbiEvent.from(
67
+ 'event Transfer(address indexed from, address indexed to, uint256 value)',
68
+ )
69
+ const zeroAddress = '0x0000000000000000000000000000000000000000'
70
+
71
+ /** Stargate provider schemas. */
72
+ export namespace schema {
73
+ /** Configuration captured from one selected Stargate route. */
74
+ export const Configuration = z
75
+ .strictObject({
76
+ destinationPoolAddress: z.optional(
77
+ z
78
+ .string()
79
+ .check(
80
+ z.regex(/^0x[0-9a-fA-F]{40}$/),
81
+ z.describe('Stargate pool contract on the destination chain.'),
82
+ ),
83
+ ),
84
+ poolAddress: z
85
+ .string()
86
+ .check(
87
+ z.regex(/^0x[0-9a-fA-F]{40}$/),
88
+ z.describe('Stargate pool contract on the source chain.'),
89
+ ),
90
+ sourceEid: z.optional(
91
+ z
92
+ .number()
93
+ .check(z.int(), z.positive(), z.describe('LayerZero endpoint ID for the source chain.')),
94
+ ),
95
+ })
96
+ .check(z.describe('Stargate configuration for one provider route.'))
97
+ }
98
+
99
+ const transferProviderState = z.object({
100
+ destinationBlockNumber: z.string().check(z.regex(/^\d+$/)),
101
+ routeConfiguration: schema.Configuration,
102
+ stargate: z.object({
103
+ guid: Schema.Hash,
104
+ sourceBlock: z.optional(
105
+ z.object({
106
+ hash: Schema.Hash,
107
+ number: z.string().check(z.regex(/^\d+$/)),
108
+ }),
109
+ ),
110
+ sourceEid: z.number().check(z.int(), z.positive()),
111
+ }),
112
+ })
113
+
114
+ type Deployment = {
115
+ alternateFee?: {
116
+ paymentToken: Address.Address
117
+ token: Address.Address
118
+ }
119
+ destinationEid: number
120
+ destinationPool?: Address.Address | undefined
121
+ pool: Address.Address
122
+ sourceEid: number
123
+ sourceEndpoint: Address.Address
124
+ sourceToken: Address.Address
125
+ }
126
+
127
+ type SendParam = {
128
+ amountLD: bigint
129
+ composeMsg: Hex.Hex
130
+ dstEid: number
131
+ extraOptions: Hex.Hex
132
+ minAmountLD: bigint
133
+ oftCmd: Hex.Hex
134
+ to: Hex.Hex
135
+ }
136
+
137
+ /** Creates a direct Stargate V2 OFT route provider. */
138
+ export function stargate(options: stargate.Options = {}) {
139
+ const fetch = options.fetch ?? defaultFetch
140
+ const now = options.now ?? (() => new Date())
141
+ const resolveRpcUrls = options.resolveRpcUrls ?? ((chain: Chain.Chain) => chain.rpcUrls)
142
+
143
+ return RoutesProvider.from({
144
+ id: 'stargate',
145
+ name: 'Stargate',
146
+ async getQuote({ candidate, route }, signal) {
147
+ const deployment = resolveDeployment({
148
+ configuration: candidate.configuration,
149
+ destinationChainId: route.destination.chain.id,
150
+ destinationTokenAddress: route.destination.address,
151
+ sourceChainId: route.source.chain.id,
152
+ sourceTokenAddress: route.source.address,
153
+ })
154
+ const sampledAt = now()
155
+ if (!deployment) return unavailable({ message: 'ROUTE_NOT_CONFIGURED', now: sampledAt })
156
+
157
+ const sendParam = createSendParam({
158
+ amount: candidate.sourceAmount.amount,
159
+ destinationEid: deployment.destinationEid,
160
+ minimumAmount: '0',
161
+ recipient: quoteRecipient(),
162
+ recipientChainId: route.destination.chain.id,
163
+ })
164
+ const [limit, feeDetails, receipt] = await rpcClient({
165
+ chainId: Number(Chain.eip155Id(route.source.chain)),
166
+ fetch,
167
+ signal,
168
+ urls: resolveRpcUrls(route.source.chain),
169
+ }).readContract({
170
+ abi: [quoteOft],
171
+ address: deployment.pool,
172
+ args: [sendParam],
173
+ functionName: 'quoteOFT',
174
+ })
175
+ if (!isValidQuote({ amount: candidate.sourceAmount.amount, feeDetails, limit, receipt }))
176
+ return unavailable({ message: 'NO_EXACT_ROUTE', now: sampledAt })
177
+
178
+ return {
179
+ destinationAmountMin: receipt.amountReceivedLD.toString(),
180
+ destinationAmount: receipt.amountReceivedLD.toString(),
181
+ quality: quality(),
182
+ sampledAt: sampledAt.toISOString(),
183
+ status: 'available',
184
+ }
185
+ },
186
+ async prepareTransfer({ candidate, method, mode, recipient, sender, slippageBps }, signal) {
187
+ if (
188
+ method !== 'transaction' ||
189
+ mode !== 'exactSource' ||
190
+ !validRecipient(candidate.destinationChain.id, recipient) ||
191
+ !Address.validate(sender, { strict: false })
192
+ )
193
+ throw new RoutesProvider.ProviderConfigurationError()
194
+
195
+ const deployment = resolveDeployment({
196
+ configuration: candidate.configuration,
197
+ destinationChainId: candidate.destinationChain.id,
198
+ destinationTokenAddress: candidate.destinationToken.address,
199
+ sourceChainId: candidate.sourceChain.id,
200
+ sourceTokenAddress: candidate.sourceToken.address,
201
+ })
202
+ if (!deployment) throw new RoutesProvider.ProviderUnavailableError()
203
+ const rpc = rpcClient({
204
+ chainId: Number(Chain.eip155Id(candidate.route.source.chain)),
205
+ fetch,
206
+ signal,
207
+ urls: resolveRpcUrls(candidate.route.source.chain),
208
+ })
209
+ const quoteParam = createSendParam({
210
+ amount: candidate.sourceAmount.amount,
211
+ destinationEid: deployment.destinationEid,
212
+ minimumAmount: '0',
213
+ recipient,
214
+ recipientChainId: candidate.destinationChain.id,
215
+ })
216
+ const [[limit, feeDetails, receipt], destinationBlock] = await Promise.all([
217
+ rpc.readContract({
218
+ abi: [quoteOft],
219
+ address: deployment.pool,
220
+ args: [quoteParam],
221
+ functionName: 'quoteOFT',
222
+ }),
223
+ rpcClient({
224
+ chainId: Number(Chain.eip155Id(candidate.route.destination.chain)),
225
+ fetch,
226
+ signal,
227
+ urls: resolveRpcUrls(candidate.route.destination.chain),
228
+ }).getBlock({ blockTag: 'finalized', includeTransactions: false }),
229
+ ])
230
+ if (!isValidQuote({ amount: candidate.sourceAmount.amount, feeDetails, limit, receipt }))
231
+ throw new RoutesProvider.ProviderUnavailableError()
232
+ const quotedMinimum =
233
+ (receipt.amountReceivedLD * BigInt(10_000 - (slippageBps ?? 0))) / 10_000n
234
+ // Route amount schemas require a positive minimum, including at 100% slippage.
235
+ const destinationAmountMin = quotedMinimum > 0n ? quotedMinimum : 1n
236
+ const sendParam = createSendParam({
237
+ amount: candidate.sourceAmount.amount,
238
+ destinationEid: deployment.destinationEid,
239
+ minimumAmount: destinationAmountMin.toString(),
240
+ recipient,
241
+ recipientChainId: candidate.destinationChain.id,
242
+ })
243
+ const [endpointFeeToken, messagingFee] = await Promise.all([
244
+ rpc.readContract({
245
+ abi: [endpointNativeToken],
246
+ address: deployment.sourceEndpoint,
247
+ functionName: 'nativeToken',
248
+ }),
249
+ rpc.readContract({
250
+ abi: [quoteSend],
251
+ account: sender as Address.Address,
252
+ address: deployment.pool,
253
+ args: [sendParam, false],
254
+ functionName: 'quoteSend',
255
+ }),
256
+ ])
257
+ if (messagingFee.lzTokenFee !== 0n) throw new RoutesProvider.ProviderPayloadError()
258
+ if (
259
+ (deployment.alternateFee &&
260
+ !Address.isEqual(endpointFeeToken, deployment.alternateFee.token)) ||
261
+ (!deployment.alternateFee && !Address.isEqual(endpointFeeToken, zeroAddress))
262
+ )
263
+ throw new RoutesProvider.ProviderUnavailableError()
264
+
265
+ const action = {
266
+ calls: [
267
+ {
268
+ data: AbiFunction.encodeData(approve, [
269
+ deployment.pool,
270
+ BigInt(candidate.sourceAmount.amount),
271
+ ]),
272
+ to: deployment.sourceToken,
273
+ value: '0x0',
274
+ },
275
+ // EndpointV2Alt charges an ERC-20 balance, so mint its fee token before the pool pulls it.
276
+ ...(deployment.alternateFee && messagingFee.nativeFee > 0n
277
+ ? [
278
+ {
279
+ data: AbiFunction.encodeData(approve, [
280
+ deployment.alternateFee.token,
281
+ messagingFee.nativeFee,
282
+ ]),
283
+ to: deployment.alternateFee.paymentToken,
284
+ value: '0x0' as const,
285
+ },
286
+ {
287
+ data: AbiFunction.encodeData(wrap, [
288
+ deployment.alternateFee.paymentToken,
289
+ sender,
290
+ messagingFee.nativeFee,
291
+ ]),
292
+ to: deployment.alternateFee.token,
293
+ value: '0x0' as const,
294
+ },
295
+ {
296
+ data: AbiFunction.encodeData(approve, [deployment.pool, messagingFee.nativeFee]),
297
+ to: deployment.alternateFee.token,
298
+ value: '0x0' as const,
299
+ },
300
+ ]
301
+ : []),
302
+ {
303
+ data: AbiFunction.encodeData(send, [sendParam, messagingFee, sender]),
304
+ to: deployment.pool,
305
+ value: deployment.alternateFee ? '0x0' : Hex.fromNumber(messagingFee.nativeFee),
306
+ },
307
+ ],
308
+ type: 'evm:calls' as const,
309
+ }
310
+ validateAction({
311
+ action,
312
+ configuration: candidate.configuration,
313
+ destinationAmountMin: destinationAmountMin.toString(),
314
+ destinationChainId: candidate.destinationChain.id,
315
+ destinationTokenAddress: candidate.destinationToken.address,
316
+ recipient,
317
+ sender,
318
+ sourceAmount: candidate.sourceAmount.amount,
319
+ sourceChainId: candidate.sourceChain.id,
320
+ sourceTokenAddress: candidate.sourceToken.address,
321
+ })
322
+
323
+ const sampledAt = now()
324
+ return {
325
+ action,
326
+ destinationAmountMin: destinationAmountMin.toString(),
327
+ destinationAmount: receipt.amountReceivedLD.toString(),
328
+ expiresAt: new Date(sampledAt.getTime() + quoteTtlMs).toISOString(),
329
+ fees:
330
+ messagingFee.nativeFee === 0n
331
+ ? []
332
+ : [
333
+ {
334
+ amount: messagingFee.nativeFee.toString(),
335
+ side: 'source' as const,
336
+ token: feeToken(candidate.sourceChain.id),
337
+ },
338
+ ],
339
+ providerState: {
340
+ destinationBlockNumber: destinationBlock.number.toString(),
341
+ routeConfiguration: candidate.configuration,
342
+ },
343
+ quality: quality(),
344
+ sampledAt: sampledAt.toISOString(),
345
+ }
346
+ },
347
+ validateTransferAction({ action, candidate, destinationAmountMin, recipient, sender }) {
348
+ return validateAction({
349
+ action,
350
+ configuration: candidate.configuration,
351
+ destinationAmountMin,
352
+ destinationChainId: candidate.destinationChain.id,
353
+ destinationTokenAddress: candidate.destinationToken.address,
354
+ recipient,
355
+ sender,
356
+ sourceAmount: candidate.sourceAmount.amount,
357
+ sourceChainId: candidate.sourceChain.id,
358
+ sourceTokenAddress: candidate.sourceToken.address,
359
+ })
360
+ },
361
+ async verifyDestinationDelivery(
362
+ { destinationChain, providerState, sourceChain, transfer },
363
+ signal,
364
+ ) {
365
+ const state = transferProviderState.safeParse(providerState)
366
+ if (!state.success || !transfer.destinationAmount) return { type: 'invalid' }
367
+ return verifyDestinationDelivery({
368
+ configuration: state.data.routeConfiguration,
369
+ destinationAmount: transfer.destinationAmount.baseUnits,
370
+ destinationBlockNumber: state.data.destinationBlockNumber,
371
+ destinationChain,
372
+ destinationTokenAddress: transfer.destinationToken.address,
373
+ fetch,
374
+ guid: state.data.stargate.guid,
375
+ recipient: transfer.recipient,
376
+ rpcUrls: resolveRpcUrls(destinationChain),
377
+ signal,
378
+ sourceChainId: sourceChain.id,
379
+ sourceTokenAddress: transfer.sourceToken.address,
380
+ })
381
+ },
382
+ async verifySourceTransaction(
383
+ {
384
+ destinationChain,
385
+ providerState,
386
+ routeConfiguration,
387
+ sourceChain,
388
+ transactionHash,
389
+ transfer,
390
+ },
391
+ signal,
392
+ ) {
393
+ if (
394
+ transfer.method !== 'transaction' ||
395
+ transfer.mode !== 'exactSource' ||
396
+ (!transfer.destinationAmountMin && !transfer.destinationAmount) ||
397
+ !transfer.sender
398
+ )
399
+ return { type: 'invalid' }
400
+ const parsedState =
401
+ providerState?.['stargate'] === undefined
402
+ ? undefined
403
+ : transferProviderState.safeParse(providerState)
404
+ if (parsedState && !parsedState.success) return { type: 'invalid' }
405
+ const state = parsedState?.data
406
+ const configuration =
407
+ state?.routeConfiguration ?? providerState?.['routeConfiguration'] ?? routeConfiguration
408
+ const evidence = await verifySourceTransaction({
409
+ alternateFeeAmount: quotedAlternateFeeAmount({
410
+ sourceChainId: sourceChain.id,
411
+ transfer,
412
+ }),
413
+ configuration,
414
+ destinationAmountMin: (transfer.destinationAmountMin ?? transfer.destinationAmount!)
415
+ .baseUnits,
416
+ destinationChain,
417
+ destinationTokenAddress: transfer.destinationToken.address,
418
+ fetch,
419
+ recipient: transfer.recipient,
420
+ rpcUrls: resolveRpcUrls(sourceChain),
421
+ sender: transfer.sender,
422
+ signal,
423
+ sourceAmount: transfer.sourceAmount.baseUnits,
424
+ sourceBlock: state?.stargate.sourceBlock
425
+ ? {
426
+ hash: state.stargate.sourceBlock.hash,
427
+ number: BigInt(state.stargate.sourceBlock.number),
428
+ }
429
+ : undefined,
430
+ sourceChain,
431
+ sourceTokenAddress: transfer.sourceToken.address,
432
+ transactionHash,
433
+ validAfter: transfer.quote.sampledAt,
434
+ })
435
+ if (evidence.type === 'invalid' || evidence.type === 'related') return evidence
436
+ if (evidence.type === 'reorged') {
437
+ if (!state) return { type: 'pending' }
438
+ const { stargate: _stargate, ...providerState } = state
439
+ return { providerState, type: 'reorged' }
440
+ }
441
+ if (evidence.type !== 'verified') return evidence
442
+ if (
443
+ state &&
444
+ (!Hex.isEqual(evidence.guid, state.stargate.guid) ||
445
+ evidence.sourceEid !== state.stargate.sourceEid ||
446
+ evidence.destinationAmount !== transfer.destinationAmount?.baseUnits)
447
+ )
448
+ return { type: 'invalid' }
449
+ const destinationBlockNumber =
450
+ state?.destinationBlockNumber ??
451
+ (typeof providerState?.['destinationBlockNumber'] === 'string' &&
452
+ /^\d+$/.test(providerState['destinationBlockNumber'])
453
+ ? providerState['destinationBlockNumber']
454
+ : await blockNumberBefore({
455
+ chain: destinationChain,
456
+ fetch,
457
+ rpcUrls: resolveRpcUrls(destinationChain),
458
+ signal,
459
+ timestamp: transfer.quote.sampledAt,
460
+ }))
461
+ return {
462
+ destinationAmount: evidence.destinationAmount,
463
+ providerState: {
464
+ ...providerState,
465
+ destinationBlockNumber,
466
+ routeConfiguration: configuration,
467
+ stargate: {
468
+ guid: evidence.guid,
469
+ sourceBlock: {
470
+ hash: evidence.sourceBlock.hash,
471
+ number: evidence.sourceBlock.number.toString(),
472
+ },
473
+ sourceEid: evidence.sourceEid,
474
+ },
475
+ },
476
+ type: 'verified',
477
+ }
478
+ },
479
+ })
480
+ }
481
+
482
+ export declare namespace stargate {
483
+ /** Stargate provider options. */
484
+ type Options = {
485
+ /** Fetch implementation override for chain RPC requests. */
486
+ fetch?: RoutesProvider.Fetch | undefined
487
+ /** Clock override for deterministic tests. */
488
+ now?: (() => Date) | undefined
489
+ /** Resolves preferred RPC endpoints for each route chain. */
490
+ resolveRpcUrls?: ((chain: Chain.Chain) => readonly string[]) | undefined
491
+ }
492
+ }
493
+
494
+ /** Validates one direct Stargate action and returns its exact execution allowances. */
495
+ export function validateAction(options: validateAction.Options): validateAction.Result {
496
+ try {
497
+ const action = Action.schema.EvmCalls.parse(options.action)
498
+ const deployment = resolveDeployment({
499
+ configuration: options.configuration,
500
+ destinationChainId: options.destinationChainId,
501
+ destinationTokenAddress: options.destinationTokenAddress,
502
+ sourceChainId: options.sourceChainId,
503
+ sourceTokenAddress: options.sourceTokenAddress,
504
+ })
505
+ if (!deployment || ![2, 5].includes(action.calls.length))
506
+ throw new RoutesProvider.ProviderPayloadError()
507
+ const approval = action.calls[0]!
508
+ const execution = action.calls.at(-1)!
509
+ validateApproval({
510
+ amount: BigInt(options.sourceAmount),
511
+ call: approval,
512
+ spender: deployment.pool,
513
+ token: deployment.sourceToken,
514
+ })
515
+ const messagingFee = validateSend({
516
+ data: execution!.data as Hex.Hex,
517
+ destinationAmountMin: options.destinationAmountMin,
518
+ destinationEid: deployment.destinationEid,
519
+ nativeFee: deployment.alternateFee ? undefined : BigInt(execution.value),
520
+ pool: deployment.pool,
521
+ recipient: options.recipient,
522
+ recipientChainId: options.destinationChainId,
523
+ sender: options.sender,
524
+ sourceAmount: options.sourceAmount,
525
+ to: execution!.to as Address.Address,
526
+ })
527
+ if (!deployment.alternateFee) {
528
+ if (action.calls.length !== 2) throw new RoutesProvider.ProviderPayloadError()
529
+ return { nativeValues: [{ to: execution.to, value: execution.value }] }
530
+ }
531
+ if (BigInt(execution.value) !== 0n) throw new RoutesProvider.ProviderPayloadError()
532
+ if (messagingFee.nativeFee === 0n) {
533
+ if (action.calls.length !== 2) throw new RoutesProvider.ProviderPayloadError()
534
+ return {}
535
+ }
536
+ if (action.calls.length !== 5) throw new RoutesProvider.ProviderPayloadError()
537
+ const [paymentApproval, wrapping, feeApproval] = action.calls.slice(1, 4)
538
+ validateApproval({
539
+ amount: messagingFee.nativeFee,
540
+ call: paymentApproval!,
541
+ spender: deployment.alternateFee.token,
542
+ token: deployment.alternateFee.paymentToken,
543
+ })
544
+ const [paymentToken, receiver, amount] = AbiFunction.decodeData(wrap, wrapping!.data as Hex.Hex)
545
+ if (
546
+ !Address.isEqual(wrapping!.to as Address.Address, deployment.alternateFee.token) ||
547
+ BigInt(wrapping!.value) !== 0n ||
548
+ !Address.isEqual(paymentToken, deployment.alternateFee.paymentToken) ||
549
+ !Address.isEqual(receiver, options.sender as Address.Address) ||
550
+ amount !== messagingFee.nativeFee
551
+ )
552
+ throw new RoutesProvider.ProviderPayloadError()
553
+ validateApproval({
554
+ amount: messagingFee.nativeFee,
555
+ call: feeApproval!,
556
+ spender: deployment.pool,
557
+ token: deployment.alternateFee.token,
558
+ })
559
+ return {
560
+ tokenApprovals: [
561
+ {
562
+ amount: messagingFee.nativeFee.toString(),
563
+ spender: deployment.alternateFee.token,
564
+ token: deployment.alternateFee.paymentToken,
565
+ },
566
+ {
567
+ amount: messagingFee.nativeFee.toString(),
568
+ spender: deployment.pool,
569
+ token: deployment.alternateFee.token,
570
+ },
571
+ ],
572
+ }
573
+ } catch (cause) {
574
+ if (cause instanceof RoutesProvider.ProviderPayloadError) throw cause
575
+ throw new RoutesProvider.ProviderPayloadError()
576
+ }
577
+ }
578
+
579
+ export declare namespace validateAction {
580
+ /** Provider-specific constraints established by Stargate action validation. */
581
+ type Result = {
582
+ /** Exact native values independently validated against provider calldata. */
583
+ nativeValues?: readonly Action.NativeValue[] | undefined
584
+ /** Exact additional token approvals independently validated against provider calldata. */
585
+ tokenApprovals?: readonly Action.TokenApproval[] | undefined
586
+ }
587
+
588
+ /** Expected route terms for one Stargate action. */
589
+ type Options = {
590
+ /** Prepared Stargate action. */
591
+ action: Action.EvmCalls
592
+ /** Stargate configuration for the selected route. */
593
+ configuration?: Catalog.Configuration | undefined
594
+ /** Minimum destination amount encoded in the send call. */
595
+ destinationAmountMin: string
596
+ /** Destination chain CAIP-2 id. */
597
+ destinationChainId: string
598
+ /** Curated destination token. */
599
+ destinationTokenAddress: string
600
+ /** Destination beneficiary. */
601
+ recipient: string
602
+ /** Source account and LayerZero refund recipient. */
603
+ sender: string
604
+ /** Exact source amount in base units. */
605
+ sourceAmount: string
606
+ /** Source chain CAIP-2 id. */
607
+ sourceChainId: string
608
+ /** Curated source token. */
609
+ sourceTokenAddress: string
610
+ }
611
+ }
612
+
613
+ /** Verifies a submitted Stargate source transaction against stored transfer terms. */
614
+ export async function verifySourceTransaction(
615
+ options: verifySourceTransaction.Options,
616
+ ): Promise<verifySourceTransaction.Result> {
617
+ const deployment = resolveDeployment({
618
+ configuration: options.configuration,
619
+ destinationChainId: options.destinationChain.id,
620
+ destinationTokenAddress: options.destinationTokenAddress,
621
+ sourceChainId: options.sourceChain.id,
622
+ sourceTokenAddress: options.sourceTokenAddress,
623
+ })
624
+ if (
625
+ !deployment ||
626
+ options.sourceChain.kind !== 'evm' ||
627
+ !Hash.validate(options.transactionHash) ||
628
+ !validRecipient(options.destinationChain.id, options.recipient) ||
629
+ !Address.validate(options.sender, { strict: false })
630
+ )
631
+ return { type: 'invalid' }
632
+
633
+ const rpc = rpcClient({
634
+ chainId: Number(Chain.eip155Id(options.sourceChain)),
635
+ fetch: options.fetch ?? defaultFetch,
636
+ signal: options.signal,
637
+ urls: options.rpcUrls ?? options.sourceChain.rpcUrls,
638
+ })
639
+ const hash = options.transactionHash as Hex.Hex
640
+ const [chainId, receipt] = await Promise.all([
641
+ rpc.getChainId(),
642
+ rpc.getTransactionReceipt({ hash }).catch((cause) => {
643
+ if (cause instanceof TransactionReceiptNotFoundError) return undefined
644
+ throw cause
645
+ }),
646
+ ])
647
+ if (chainId !== Number(Chain.eip155Id(options.sourceChain))) return { type: 'invalid' }
648
+ const block =
649
+ !receipt || receipt.blockNumber === null
650
+ ? undefined
651
+ : await rpc
652
+ .getBlock({ blockNumber: receipt.blockNumber, includeTransactions: false })
653
+ .catch((cause) => {
654
+ if (cause instanceof BlockNotFoundError) return undefined
655
+ throw cause
656
+ })
657
+ if (
658
+ !receipt ||
659
+ receipt.blockNumber === null ||
660
+ !block ||
661
+ !Hex.isEqual(block.hash, receipt.blockHash)
662
+ ) {
663
+ if (!options.sourceBlock) return { type: 'pending' }
664
+ const finalized = await rpc.getBlock({ blockTag: 'finalized', includeTransactions: false })
665
+ if (finalized.number < options.sourceBlock.number) return { type: 'pending' }
666
+ const canonical = await rpc
667
+ .getBlock({ blockNumber: options.sourceBlock.number, includeTransactions: false })
668
+ .catch((cause) => {
669
+ if (cause instanceof BlockNotFoundError) return undefined
670
+ throw cause
671
+ })
672
+ if (!canonical || Hex.isEqual(canonical.hash, options.sourceBlock.hash))
673
+ return { type: 'pending' }
674
+ return { type: 'reorged' }
675
+ }
676
+ if (receipt.status !== 'success') return { type: 'invalid' }
677
+ const validAfter = Math.floor(Date.parse(options.validAfter) / 1_000)
678
+ if (!Number.isSafeInteger(validAfter) || block.timestamp < BigInt(validAfter))
679
+ return { type: 'invalid' }
680
+
681
+ const amount = BigInt(options.sourceAmount)
682
+ const destinationAmountMin = BigInt(options.destinationAmountMin)
683
+ const sourceEvents = parseEventLogs({ abi: [oftSent], logs: receipt.logs, strict: true }).filter(
684
+ ({ address, args }) =>
685
+ Address.isEqual(address, deployment.pool) &&
686
+ args.dstEid === deployment.destinationEid &&
687
+ Address.isEqual(args.fromAddress, options.sender as Address.Address) &&
688
+ args.amountSentLD === amount &&
689
+ args.amountReceivedLD >= destinationAmountMin,
690
+ )
691
+ const transfers = parseEventLogs({
692
+ abi: [transferEvent],
693
+ logs: receipt.logs,
694
+ strict: true,
695
+ }).filter(
696
+ ({ address, args }) =>
697
+ Address.isEqual(address, deployment.sourceToken) &&
698
+ Address.isEqual(args.from, options.sender as Address.Address) &&
699
+ Address.isEqual(args.to, deployment.pool) &&
700
+ args.value === amount,
701
+ )
702
+ if (sourceEvents.length !== 1 || transfers.length !== 1) {
703
+ const approvals = parseEventLogs({
704
+ abi: [approvalEvent],
705
+ logs: receipt.logs,
706
+ strict: true,
707
+ })
708
+ const sourceApprovals = approvals.filter(
709
+ ({ address, args }) =>
710
+ Address.isEqual(address, deployment.sourceToken) &&
711
+ Address.isEqual(args.owner, options.sender as Address.Address) &&
712
+ Address.isEqual(args.spender, deployment.pool) &&
713
+ args.value === amount,
714
+ )
715
+ if (sourceApprovals.length === 1) return { type: 'related' }
716
+ if (!deployment.alternateFee || options.alternateFeeAmount === undefined)
717
+ return { type: 'invalid' }
718
+ const alternateFee = deployment.alternateFee
719
+ const alternateFeeAmount = BigInt(options.alternateFeeAmount)
720
+ const paymentApprovals = approvals.filter(
721
+ ({ address, args }) =>
722
+ Address.isEqual(address, alternateFee.paymentToken) &&
723
+ Address.isEqual(args.owner, options.sender as Address.Address) &&
724
+ Address.isEqual(args.spender, alternateFee.token) &&
725
+ args.value === alternateFeeAmount,
726
+ )
727
+ if (paymentApprovals.length === 1) return { type: 'related' }
728
+ const feeApprovals = approvals.filter(
729
+ ({ address, args }) =>
730
+ Address.isEqual(address, alternateFee.token) &&
731
+ Address.isEqual(args.owner, options.sender as Address.Address) &&
732
+ Address.isEqual(args.spender, deployment.pool) &&
733
+ args.value === alternateFeeAmount,
734
+ )
735
+ if (feeApprovals.length === 1) return { type: 'related' }
736
+ const relatedTransfers = parseEventLogs({
737
+ abi: [transferEvent],
738
+ logs: receipt.logs,
739
+ strict: true,
740
+ })
741
+ const paymentTransfers = relatedTransfers.filter(
742
+ ({ address, args }) =>
743
+ Address.isEqual(address, alternateFee.paymentToken) &&
744
+ Address.isEqual(args.from, options.sender as Address.Address) &&
745
+ Address.isEqual(args.to, alternateFee.token) &&
746
+ args.value === alternateFeeAmount,
747
+ )
748
+ const wrappedTransfers = relatedTransfers.filter(
749
+ ({ address, args }) =>
750
+ Address.isEqual(address, alternateFee.token) &&
751
+ Address.isEqual(args.from, zeroAddress) &&
752
+ Address.isEqual(args.to, options.sender as Address.Address) &&
753
+ args.value === alternateFeeAmount,
754
+ )
755
+ return paymentTransfers.length === 1 && wrappedTransfers.length === 1
756
+ ? { type: 'related' }
757
+ : { type: 'invalid' }
758
+ }
759
+ const sourceEvent = sourceEvents[0]!
760
+ const destinationAmount = sourceEvent.args.amountReceivedLD
761
+ const guid = sourceEvent.args.guid
762
+ // PacketV1's 113-byte header is followed by Stargate's type, asset id, recipient, and amount.
763
+ const packets = parseEventLogs({ abi: [packetSent], logs: receipt.logs, strict: true }).filter(
764
+ ({ address, args }) => {
765
+ const packet = args.encodedPayload
766
+ return (
767
+ Address.isEqual(address, deployment.sourceEndpoint) &&
768
+ Hex.size(packet) === 156 &&
769
+ Hex.toNumber(Hex.slice(packet, 0, 1)) === 1 &&
770
+ Hex.toNumber(Hex.slice(packet, 9, 13)) === deployment.sourceEid &&
771
+ Hex.toNumber(Hex.slice(packet, 45, 49)) === deployment.destinationEid &&
772
+ Hex.isEqual(Hex.slice(packet, 81, 113), guid) &&
773
+ Hex.toNumber(Hex.slice(packet, 113, 114)) === 1 &&
774
+ Hex.isEqual(
775
+ Hex.slice(packet, 116, 148),
776
+ recipientBytes32(options.destinationChain.id, options.recipient),
777
+ ) &&
778
+ Hex.toBigInt(Hex.slice(packet, 148, 156)) === destinationAmount
779
+ )
780
+ },
781
+ )
782
+ if (packets.length !== 1) return { type: 'invalid' }
783
+ return {
784
+ destinationAmount: destinationAmount.toString(),
785
+ guid,
786
+ sourceBlock: { hash: block.hash, number: block.number },
787
+ sourceEid: deployment.sourceEid,
788
+ type: 'verified',
789
+ }
790
+ }
791
+
792
+ export declare namespace verifySourceTransaction {
793
+ /** Canonical source block that originally contained the transaction. */
794
+ type Block = {
795
+ /** Source block hash. */
796
+ hash: Hex.Hex
797
+ /** Source block number. */
798
+ number: bigint
799
+ }
800
+
801
+ /** Stored terms and chain access needed to verify one source transaction. */
802
+ type Options = {
803
+ /** Exact alternate fee quoted in the payment token's base units. */
804
+ alternateFeeAmount?: string | undefined
805
+ /** Stargate configuration for the selected route. */
806
+ configuration: unknown
807
+ /** Minimum destination amount committed by the provider action. */
808
+ destinationAmountMin: string
809
+ /** Destination chain and address format. */
810
+ destinationChain: Chain.Chain
811
+ /** Curated destination token. */
812
+ destinationTokenAddress: string
813
+ /** Fetch implementation override for chain RPC requests. */
814
+ fetch?: RoutesProvider.Fetch | undefined
815
+ /** Destination beneficiary encoded in the Stargate send. */
816
+ recipient: string
817
+ /** Preferred source-chain RPC endpoints. */
818
+ rpcUrls?: readonly string[] | undefined
819
+ /** Source account and LayerZero refund recipient. */
820
+ sender: string
821
+ /** Optional request cancellation signal. */
822
+ signal?: AbortSignal | undefined
823
+ /** Exact source amount in base units. */
824
+ sourceAmount: string
825
+ /** Canonical block captured during initial verification. */
826
+ sourceBlock?: Block | undefined
827
+ /** Source chain and RPC endpoints. */
828
+ sourceChain: Chain.Chain
829
+ /** Curated source token. */
830
+ sourceTokenAddress: string
831
+ /** Submitted EVM transaction hash. */
832
+ transactionHash: string
833
+ /** Earliest accepted source block timestamp. */
834
+ validAfter: string
835
+ }
836
+
837
+ /** Source transaction verification outcome. */
838
+ type Result =
839
+ | { type: 'invalid' }
840
+ | { type: 'pending' }
841
+ | { type: 'related' }
842
+ | { type: 'reorged' }
843
+ | {
844
+ destinationAmount: string
845
+ guid: Hex.Hex
846
+ sourceBlock: Block
847
+ sourceEid: number
848
+ type: 'verified'
849
+ }
850
+ }
851
+
852
+ function quotedAlternateFeeAmount(options: quotedAlternateFeeAmount.Options) {
853
+ if (options.sourceChainId !== 'eip155:4217') return undefined
854
+ const fees = options.transfer.fees.filter(
855
+ (fee) =>
856
+ fee.side === 'source' &&
857
+ fee.type === 'provider' &&
858
+ Address.validate(fee.token.address, { strict: false }) &&
859
+ Address.isEqual(fee.token.address as Address.Address, Addresses.pathUsd),
860
+ )
861
+ return fees.length === 1 ? fees[0]!.amount.baseUnits : undefined
862
+ }
863
+
864
+ declare namespace quotedAlternateFeeAmount {
865
+ type Options = {
866
+ sourceChainId: string
867
+ transfer: Transfer.Snapshot
868
+ }
869
+ }
870
+
871
+ /** Finds and verifies the included Stargate delivery directly on the destination chain. */
872
+ export async function verifyDestinationDelivery(
873
+ options: verifyDestinationDelivery.Options,
874
+ ): Promise<verifyDestinationDelivery.Result> {
875
+ const deployment = resolveDeployment({
876
+ configuration: options.configuration,
877
+ destinationChainId: options.destinationChain.id,
878
+ destinationTokenAddress: options.destinationTokenAddress,
879
+ sourceChainId: options.sourceChainId,
880
+ sourceTokenAddress: options.sourceTokenAddress,
881
+ })
882
+ if (
883
+ !deployment ||
884
+ !deployment.destinationPool ||
885
+ options.destinationChain.kind !== 'evm' ||
886
+ !/^\d+$/.test(options.destinationBlockNumber) ||
887
+ !Hash.validate(options.guid) ||
888
+ !Address.validate(options.recipient, { strict: false })
889
+ )
890
+ return { type: 'invalid' }
891
+
892
+ const destinationPool = deployment.destinationPool
893
+ const rpc = rpcClient({
894
+ chainId: Number(Chain.eip155Id(options.destinationChain)),
895
+ fetch: options.fetch ?? defaultFetch,
896
+ signal: options.signal,
897
+ urls: options.rpcUrls ?? options.destinationChain.rpcUrls,
898
+ })
899
+ // Tempo completion favors latency over reorg protection; other destinations retain finality.
900
+ const blockTag = options.destinationChain.id === 'eip155:4217' ? 'latest' : 'finalized'
901
+ const [chainId, head] = await Promise.all([
902
+ rpc.getChainId(),
903
+ rpc.getBlock({ blockTag, includeTransactions: false }),
904
+ ])
905
+ if (chainId !== Number(Chain.eip155Id(options.destinationChain))) return { type: 'invalid' }
906
+ const amount = BigInt(options.destinationAmount)
907
+ const discovered = await (async () => {
908
+ for (
909
+ let fromBlock = BigInt(options.destinationBlockNumber);
910
+ fromBlock <= head.number;
911
+ fromBlock += maximumLogBlockRange
912
+ ) {
913
+ const toBlock = fromBlock + maximumLogBlockRange - 1n
914
+ const logs = await rpc.getLogs({
915
+ address: destinationPool,
916
+ args: { guid: options.guid, toAddress: options.recipient as Address.Address },
917
+ event: oftReceived,
918
+ fromBlock,
919
+ strict: true,
920
+ toBlock: toBlock > head.number ? head.number : toBlock,
921
+ })
922
+ const matches = logs.filter(
923
+ ({ args, transactionHash }) =>
924
+ transactionHash &&
925
+ args.srcEid === deployment.sourceEid &&
926
+ args.amountReceivedLD === amount,
927
+ )
928
+ if (logs.length !== matches.length || matches.length > 1) return { type: 'invalid' as const }
929
+ if (matches[0]?.transactionHash)
930
+ return { transactionHash: matches[0].transactionHash, type: 'found' as const }
931
+ }
932
+ return { type: 'pending' as const }
933
+ })()
934
+ if (discovered.type !== 'found') return discovered
935
+ const { transactionHash } = discovered
936
+ const receipt = await rpc.getTransactionReceipt({ hash: transactionHash }).catch((cause) => {
937
+ if (cause instanceof TransactionReceiptNotFoundError) return undefined
938
+ throw cause
939
+ })
940
+ if (!receipt || receipt.blockNumber === null) return { type: 'pending' }
941
+ if (receipt.status !== 'success' || receipt.blockNumber > head.number) return { type: 'invalid' }
942
+
943
+ const transfers = parseEventLogs({
944
+ abi: [transferEvent],
945
+ logs: receipt.logs,
946
+ strict: true,
947
+ }).filter(
948
+ ({ address, args }) =>
949
+ Address.isEqual(address, options.destinationTokenAddress as Address.Address) &&
950
+ Address.isEqual(
951
+ args.from,
952
+ options.destinationChain.id === 'eip155:4217' ? zeroAddress : destinationPool,
953
+ ) &&
954
+ Address.isEqual(args.to, options.recipient as Address.Address) &&
955
+ args.value === amount,
956
+ )
957
+ if (transfers.length !== 1) return { type: 'invalid' }
958
+ return { transactionHash, type: 'verified' }
959
+ }
960
+
961
+ export declare namespace verifyDestinationDelivery {
962
+ /** Stored terms and chain access needed to discover and verify one delivery. */
963
+ type Options = {
964
+ /** Stargate configuration for the selected route. */
965
+ configuration: unknown
966
+ /** Exact destination amount in base units. */
967
+ destinationAmount: string
968
+ /** Destination block captured before the source transaction was broadcast. */
969
+ destinationBlockNumber: string
970
+ /** Destination chain and RPC endpoints. */
971
+ destinationChain: Chain.Chain
972
+ /** Curated destination token. */
973
+ destinationTokenAddress: string
974
+ /** Fetch implementation override for destination RPC requests. */
975
+ fetch?: RoutesProvider.Fetch | undefined
976
+ /** GUID emitted by the verified source Stargate pool. */
977
+ guid: Hex.Hex
978
+ /** Destination beneficiary. */
979
+ recipient: string
980
+ /** Preferred destination-chain RPC endpoints. */
981
+ rpcUrls?: readonly string[] | undefined
982
+ /** Optional request cancellation signal. */
983
+ signal?: AbortSignal | undefined
984
+ /** Source chain CAIP-2 id. */
985
+ sourceChainId: string
986
+ /** Curated source token. */
987
+ sourceTokenAddress: string
988
+ }
989
+
990
+ /** Destination delivery verification outcome. */
991
+ type Result =
992
+ | { type: 'invalid' }
993
+ | { type: 'pending' }
994
+ | { transactionHash: Hex.Hex; type: 'verified' }
995
+ }
996
+
997
+ function rpcClient(options: rpcClient.Options) {
998
+ if (options.urls.length === 0) throw new RoutesProvider.ProviderConfigurationError()
999
+ return Viem.createEvmClient(options).extend(publicActions)
1000
+ }
1001
+
1002
+ declare namespace rpcClient {
1003
+ type Options = {
1004
+ chainId: number
1005
+ fetch: RoutesProvider.Fetch
1006
+ signal?: AbortSignal | undefined
1007
+ urls: readonly string[]
1008
+ }
1009
+ }
1010
+
1011
+ async function blockNumberBefore(options: blockNumberBefore.Options) {
1012
+ if (options.chain.kind !== 'evm') throw new RoutesProvider.ProviderConfigurationError()
1013
+ const timestamp = Date.parse(options.timestamp)
1014
+ if (!Number.isFinite(timestamp)) throw new RoutesProvider.ProviderPayloadError()
1015
+ const rpc = rpcClient({
1016
+ chainId: Number(Chain.eip155Id(options.chain)),
1017
+ fetch: options.fetch,
1018
+ signal: options.signal,
1019
+ urls: options.rpcUrls ?? options.chain.rpcUrls,
1020
+ })
1021
+ const [chainId, finalized] = await Promise.all([
1022
+ rpc.getChainId(),
1023
+ rpc.getBlock({ blockTag: 'finalized', includeTransactions: false }),
1024
+ ])
1025
+ if (chainId !== Number(Chain.eip155Id(options.chain)))
1026
+ throw new RoutesProvider.ProviderConfigurationError()
1027
+
1028
+ const target = BigInt(Math.floor(timestamp / 1_000) - 1)
1029
+ let lower = 0n
1030
+ let upper = finalized.number
1031
+ while (lower < upper) {
1032
+ const middle = (lower + upper + 1n) / 2n
1033
+ const block = await rpc.getBlock({ blockNumber: middle, includeTransactions: false })
1034
+ if (block.timestamp <= target) lower = middle
1035
+ else upper = middle - 1n
1036
+ }
1037
+ return lower.toString()
1038
+ }
1039
+
1040
+ declare namespace blockNumberBefore {
1041
+ type Options = {
1042
+ /** Destination chain whose block history is searched. */
1043
+ chain: Chain.Chain
1044
+ /** Fetch implementation used for RPC requests. */
1045
+ fetch: RoutesProvider.Fetch
1046
+ /** Preferred chain RPC endpoints. */
1047
+ rpcUrls?: readonly string[] | undefined
1048
+ /** Optional request cancellation signal. */
1049
+ signal?: AbortSignal | undefined
1050
+ /** Exclusive ISO 8601 timestamp upper bound. */
1051
+ timestamp: string
1052
+ }
1053
+ }
1054
+
1055
+ function createSendParam(options: createSendParam.Options): SendParam {
1056
+ const amount = BigInt(options.amount)
1057
+ return {
1058
+ amountLD: amount,
1059
+ composeMsg: '0x',
1060
+ dstEid: options.destinationEid,
1061
+ extraOptions: '0x',
1062
+ minAmountLD: BigInt(options.minimumAmount),
1063
+ oftCmd: '0x',
1064
+ to: recipientBytes32(options.recipientChainId, options.recipient),
1065
+ }
1066
+ }
1067
+
1068
+ declare namespace createSendParam {
1069
+ type Options = {
1070
+ amount: string
1071
+ destinationEid: number
1072
+ minimumAmount: string
1073
+ recipient: string
1074
+ recipientChainId: string
1075
+ }
1076
+ }
1077
+
1078
+ function isValidQuote(options: isValidQuote.Options) {
1079
+ const amount = BigInt(options.amount)
1080
+ const fees = options.feeDetails.reduce((total, fee) => total + fee.feeAmountLD, 0n)
1081
+ return (
1082
+ amount >= options.limit.minAmountLD &&
1083
+ amount <= options.limit.maxAmountLD &&
1084
+ options.receipt.amountSentLD === amount &&
1085
+ options.receipt.amountReceivedLD > 0n &&
1086
+ options.receipt.amountReceivedLD === amount + fees
1087
+ )
1088
+ }
1089
+
1090
+ declare namespace isValidQuote {
1091
+ type Options = {
1092
+ amount: string
1093
+ feeDetails: readonly { feeAmountLD: bigint }[]
1094
+ limit: { maxAmountLD: bigint; minAmountLD: bigint }
1095
+ receipt: { amountReceivedLD: bigint; amountSentLD: bigint }
1096
+ }
1097
+ }
1098
+
1099
+ function feeToken(sourceChainId: string) {
1100
+ if (sourceChainId === 'eip155:4217')
1101
+ return {
1102
+ address: Addresses.pathUsd,
1103
+ currency: 'USD',
1104
+ decimals: 6,
1105
+ name: 'pathUSD',
1106
+ standard: 'TIP-20',
1107
+ symbol: 'pathUSD',
1108
+ tokenKey: `${sourceChainId}/erc20:${Addresses.pathUsd.toLowerCase()}`,
1109
+ verified: true,
1110
+ }
1111
+ return {
1112
+ address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
1113
+ currency: 'ETH',
1114
+ decimals: 18,
1115
+ name: 'Ether',
1116
+ standard: 'native',
1117
+ symbol: 'ETH',
1118
+ tokenKey: `${sourceChainId}/slip44:60`,
1119
+ verified: true,
1120
+ }
1121
+ }
1122
+
1123
+ function quality() {
1124
+ return {
1125
+ liquiditySource: 'onchain',
1126
+ sourceDetail: 'stargate:oft-v2:taxi',
1127
+ tier: 'liquid' as const,
1128
+ }
1129
+ }
1130
+
1131
+ function quoteRecipient() {
1132
+ return zeroAddress
1133
+ }
1134
+
1135
+ function recipientBytes32(chainId: string, recipient: string) {
1136
+ if (chainId.startsWith('eip155:') && Address.validate(recipient, { strict: false }))
1137
+ return Hex.padLeft(recipient as Hex.Hex, 32)
1138
+ throw new RoutesProvider.ProviderConfigurationError()
1139
+ }
1140
+
1141
+ function validRecipient(chainId: string, recipient: string) {
1142
+ try {
1143
+ recipientBytes32(chainId, recipient)
1144
+ return true
1145
+ } catch {
1146
+ return false
1147
+ }
1148
+ }
1149
+
1150
+ function validateApproval(options: validateApproval.Options) {
1151
+ if (
1152
+ !Address.isEqual(options.call.to as Address.Address, options.token) ||
1153
+ BigInt(options.call.value) !== 0n
1154
+ )
1155
+ throw new RoutesProvider.ProviderPayloadError()
1156
+ const [spender, amount] = AbiFunction.decodeData(approve, options.call.data as Hex.Hex)
1157
+ if (!Address.isEqual(spender, options.spender) || amount !== options.amount)
1158
+ throw new RoutesProvider.ProviderPayloadError()
1159
+ }
1160
+
1161
+ declare namespace validateApproval {
1162
+ type Options = {
1163
+ amount: bigint
1164
+ call: Action.Call
1165
+ spender: Address.Address
1166
+ token: Address.Address
1167
+ }
1168
+ }
1169
+
1170
+ function validateSend(options: validateSend.Options) {
1171
+ const [sendParam, messagingFee, refundAddress] = AbiFunction.decodeData(send, options.data)
1172
+ const amount = BigInt(options.sourceAmount)
1173
+ if (
1174
+ !Address.isEqual(options.to, options.pool) ||
1175
+ sendParam.amountLD !== amount ||
1176
+ sendParam.composeMsg !== '0x' ||
1177
+ sendParam.dstEid !== options.destinationEid ||
1178
+ sendParam.extraOptions !== '0x' ||
1179
+ sendParam.minAmountLD !== BigInt(options.destinationAmountMin) ||
1180
+ sendParam.oftCmd !== '0x' ||
1181
+ !Hex.isEqual(sendParam.to, recipientBytes32(options.recipientChainId, options.recipient)) ||
1182
+ messagingFee.lzTokenFee !== 0n ||
1183
+ (options.nativeFee !== undefined && messagingFee.nativeFee !== options.nativeFee) ||
1184
+ !Address.isEqual(refundAddress, options.sender as Address.Address)
1185
+ )
1186
+ throw new RoutesProvider.ProviderPayloadError()
1187
+ return messagingFee
1188
+ }
1189
+
1190
+ declare namespace validateSend {
1191
+ type Options = {
1192
+ data: Hex.Hex
1193
+ destinationAmountMin: string
1194
+ destinationEid: number
1195
+ nativeFee?: bigint | undefined
1196
+ pool: Address.Address
1197
+ recipient: string
1198
+ recipientChainId: string
1199
+ sender: string
1200
+ sourceAmount: string
1201
+ to: Address.Address
1202
+ }
1203
+ }
1204
+
1205
+ function resolveDeployment(options: resolveDeployment.Options): Deployment | undefined {
1206
+ const parsed = schema.Configuration.safeParse(options.configuration)
1207
+ const source = deployments[options.sourceChainId as keyof typeof deployments]
1208
+ const destination = deployments[options.destinationChainId as keyof typeof deployments]
1209
+ const sourceEid = parsed.success && (parsed.data.sourceEid ?? source?.eid)
1210
+ if (
1211
+ !parsed.success ||
1212
+ !destination ||
1213
+ !source ||
1214
+ !sourceEid ||
1215
+ !options.sourceChainId.startsWith('eip155:') ||
1216
+ !('endpoint' in source) ||
1217
+ !matchesAsset(options.destinationChainId, options.destinationTokenAddress) ||
1218
+ !matchesAsset(options.sourceChainId, options.sourceTokenAddress) ||
1219
+ options.sourceChainId === options.destinationChainId
1220
+ )
1221
+ return undefined
1222
+ const destinationPoolAddress =
1223
+ parsed.data.destinationPoolAddress ??
1224
+ (options.destinationChainId === 'eip155:4217' ? defaultDestinationPool : undefined)
1225
+ return {
1226
+ ...(options.sourceChainId === 'eip155:4217'
1227
+ ? {
1228
+ alternateFee: {
1229
+ paymentToken: Address.checksum(Addresses.pathUsd),
1230
+ token: '0x0cEb237E109eE22374a567c6b09F373C73FA4cBb' as const,
1231
+ },
1232
+ }
1233
+ : {}),
1234
+ destinationEid: destination.eid,
1235
+ destinationPool: destinationPoolAddress ? Address.checksum(destinationPoolAddress) : undefined,
1236
+ pool: Address.checksum(parsed.data.poolAddress),
1237
+ sourceEid,
1238
+ sourceEndpoint: Address.checksum(source.endpoint),
1239
+ sourceToken: Address.checksum(options.sourceTokenAddress),
1240
+ }
1241
+ }
1242
+
1243
+ function matchesAsset(chainId: string, address: string) {
1244
+ const asset = assets[chainId as keyof typeof assets]
1245
+ return (
1246
+ asset !== undefined &&
1247
+ Address.validate(address, { strict: false }) &&
1248
+ Address.isEqual(address as Address.Address, asset)
1249
+ )
1250
+ }
1251
+
1252
+ declare namespace resolveDeployment {
1253
+ type Options = {
1254
+ configuration: unknown
1255
+ destinationChainId: string
1256
+ destinationTokenAddress: string
1257
+ sourceChainId: string
1258
+ sourceTokenAddress: string
1259
+ }
1260
+ }
1261
+
1262
+ function unavailable(options: unavailable.Options) {
1263
+ return RoutesProvider.unavailableResult({
1264
+ detail: 'stargate:oft-v2',
1265
+ message: options.message,
1266
+ now: options.now,
1267
+ source: 'onchain',
1268
+ })
1269
+ }
1270
+
1271
+ declare namespace unavailable {
1272
+ type Options = {
1273
+ message: string
1274
+ now: Date
1275
+ }
1276
+ }