tapimo 0.7.1 → 0.7.2

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 (681) hide show
  1. package/dist/ApiKeys.d.ts +24 -7
  2. package/dist/ApiKeys.d.ts.map +1 -1
  3. package/dist/ApiKeys.js +17 -5
  4. package/dist/ApiKeys.js.map +1 -1
  5. package/dist/App.d.ts +12104 -7861
  6. package/dist/App.d.ts.map +1 -1
  7. package/dist/App.js +191 -128
  8. package/dist/App.js.map +1 -1
  9. package/dist/Assets.d.ts +10 -0
  10. package/dist/Assets.d.ts.map +1 -1
  11. package/dist/Assets.js +17 -4
  12. package/dist/Assets.js.map +1 -1
  13. package/dist/Scope.d.ts +19 -8
  14. package/dist/Scope.d.ts.map +1 -1
  15. package/dist/Scope.js +25 -9
  16. package/dist/Scope.js.map +1 -1
  17. package/dist/Webhooks.d.ts +1 -1
  18. package/dist/admin/App.d.ts +601 -20
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +12 -2
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +94 -11
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +141 -32
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  28. package/dist/admin/apps/earn-vaults.js +409 -0
  29. package/dist/admin/apps/earn-vaults.js.map +1 -0
  30. package/dist/admin/apps/verified-tokens.d.ts +166 -166
  31. package/dist/admin/ui.generated.d.ts +1 -1
  32. package/dist/admin/ui.generated.d.ts.map +1 -1
  33. package/dist/admin/ui.generated.js +99 -43
  34. package/dist/admin/ui.generated.js.map +1 -1
  35. package/dist/analytics/Analytics.d.ts +2 -0
  36. package/dist/analytics/Analytics.d.ts.map +1 -1
  37. package/dist/analytics/Analytics.js +18 -2
  38. package/dist/analytics/Analytics.js.map +1 -1
  39. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  40. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  41. package/dist/analytics/tables/requestEvents.js +59 -39
  42. package/dist/analytics/tables/requestEvents.js.map +1 -1
  43. package/dist/apps/Zones.d.ts +8335 -0
  44. package/dist/apps/Zones.d.ts.map +1 -0
  45. package/dist/apps/Zones.js +38 -0
  46. package/dist/apps/Zones.js.map +1 -0
  47. package/dist/apps/data/App.d.ts +12125 -7913
  48. package/dist/apps/data/App.d.ts.map +1 -1
  49. package/dist/apps/data/App.js +91 -19
  50. package/dist/apps/data/App.js.map +1 -1
  51. package/dist/apps/data/FxOracle.d.ts +1 -1
  52. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  53. package/dist/apps/data/index.d.ts +0 -1
  54. package/dist/apps/data/index.d.ts.map +1 -1
  55. package/dist/apps/data/index.js +0 -1
  56. package/dist/apps/data/index.js.map +1 -1
  57. package/dist/apps/data/routes/activities.d.ts +32 -32
  58. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  59. package/dist/apps/data/routes/activities.js +130 -65
  60. package/dist/apps/data/routes/activities.js.map +1 -1
  61. package/dist/apps/data/routes/addresses.d.ts +312 -312
  62. package/dist/apps/data/routes/balances.d.ts +18 -18
  63. package/dist/apps/data/routes/balances.js +5 -5
  64. package/dist/apps/data/routes/balances.js.map +1 -1
  65. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  66. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  67. package/dist/apps/data/routes/coingecko.js +62 -35
  68. package/dist/apps/data/routes/coingecko.js.map +1 -1
  69. package/dist/apps/data/routes/earn.d.ts +2144 -0
  70. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  71. package/dist/apps/data/routes/earn.js +947 -0
  72. package/dist/apps/data/routes/earn.js.map +1 -0
  73. package/dist/apps/data/routes/exchanges.d.ts +1625 -718
  74. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  75. package/dist/apps/data/routes/exchanges.js +656 -193
  76. package/dist/apps/data/routes/exchanges.js.map +1 -1
  77. package/dist/apps/data/routes/fee-amm.d.ts +108 -108
  78. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  79. package/dist/apps/data/routes/fee-amm.js +59 -8
  80. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  81. package/dist/apps/data/routes/funding.d.ts +4092 -387
  82. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  83. package/dist/apps/data/routes/funding.js +1403 -256
  84. package/dist/apps/data/routes/funding.js.map +1 -1
  85. package/dist/apps/data/routes/indexer.d.ts +30 -30
  86. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  87. package/dist/apps/data/routes/indexer.js +19 -2
  88. package/dist/apps/data/routes/indexer.js.map +1 -1
  89. package/dist/apps/data/routes/receipts.d.ts +263 -263
  90. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  91. package/dist/apps/data/routes/receipts.js +11 -11
  92. package/dist/apps/data/routes/receipts.js.map +1 -1
  93. package/dist/apps/data/routes/rpc.d.ts +5 -5
  94. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  95. package/dist/apps/data/routes/rpc.js +211 -22
  96. package/dist/apps/data/routes/rpc.js.map +1 -1
  97. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  98. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  99. package/dist/apps/data/routes/tokenlist.js +39 -8
  100. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  101. package/dist/apps/data/routes/tokens.d.ts +114 -86
  102. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  103. package/dist/apps/data/routes/tokens.js +194 -91
  104. package/dist/apps/data/routes/tokens.js.map +1 -1
  105. package/dist/apps/data/routes/transactions.d.ts +53 -53
  106. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  107. package/dist/apps/data/routes/transactions.js +78 -39
  108. package/dist/apps/data/routes/transactions.js.map +1 -1
  109. package/dist/apps/data/routes/transfers.d.ts +76 -27
  110. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  111. package/dist/apps/data/routes/transfers.js +165 -67
  112. package/dist/apps/data/routes/transfers.js.map +1 -1
  113. package/dist/apps/data/routes/valuation.d.ts +42 -42
  114. package/dist/apps/data/routes/valuation.js +2 -2
  115. package/dist/apps/data/routes/valuation.js.map +1 -1
  116. package/dist/apps/data/routes/webhooks.d.ts +369 -367
  117. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  118. package/dist/apps/data/routes/webhooks.js +161 -59
  119. package/dist/apps/data/routes/webhooks.js.map +1 -1
  120. package/dist/apps/data/routes/zones.d.ts +281 -0
  121. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  122. package/dist/apps/data/routes/zones.js +252 -0
  123. package/dist/apps/data/routes/zones.js.map +1 -0
  124. package/dist/apps/docs/reference.js +6 -5
  125. package/dist/apps/docs/reference.js.map +1 -1
  126. package/dist/apps/index.d.ts +2 -1
  127. package/dist/apps/index.d.ts.map +1 -1
  128. package/dist/apps/index.js +2 -1
  129. package/dist/apps/index.js.map +1 -1
  130. package/dist/apps/management/App.d.ts +670 -670
  131. package/dist/apps/management/Billing.d.ts +8 -0
  132. package/dist/apps/management/Billing.d.ts.map +1 -1
  133. package/dist/apps/management/Billing.js +12 -0
  134. package/dist/apps/management/Billing.js.map +1 -1
  135. package/dist/apps/management/Error.d.ts +12 -0
  136. package/dist/apps/management/Error.d.ts.map +1 -0
  137. package/dist/apps/management/Error.js +10 -0
  138. package/dist/apps/management/Error.js.map +1 -0
  139. package/dist/apps/management/routes/api-keys.d.ts +5 -5
  140. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  141. package/dist/apps/management/routes/api-keys.js +2 -8
  142. package/dist/apps/management/routes/api-keys.js.map +1 -1
  143. package/dist/apps/management/routes/billing.d.ts +119 -119
  144. package/dist/apps/management/routes/faucet.d.ts +2 -2
  145. package/dist/apps/management/routes/invitations.d.ts +62 -62
  146. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  147. package/dist/apps/management/routes/invitations.js +4 -10
  148. package/dist/apps/management/routes/invitations.js.map +1 -1
  149. package/dist/apps/management/routes/invite-links.d.ts +30 -30
  150. package/dist/apps/management/routes/me.d.ts +6 -6
  151. package/dist/apps/management/routes/members.d.ts +2 -2
  152. package/dist/apps/management/routes/orgs.d.ts +48 -48
  153. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  154. package/dist/apps/management/routes/orgs.js +2 -8
  155. package/dist/apps/management/routes/orgs.js.map +1 -1
  156. package/dist/apps/management/routes/projects.d.ts +9 -9
  157. package/dist/apps/management/routes/scopes.js +2 -2
  158. package/dist/apps/management/routes/scopes.js.map +1 -1
  159. package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
  160. package/dist/apps/management/routes/webhooks.d.ts +50 -50
  161. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  162. package/dist/apps/management/routes/webhooks.js +15 -3
  163. package/dist/apps/management/routes/webhooks.js.map +1 -1
  164. package/dist/apps/mpp/App.d.ts +55 -56
  165. package/dist/apps/mpp/App.d.ts.map +1 -1
  166. package/dist/apps/mpp/App.js +192 -27
  167. package/dist/apps/mpp/App.js.map +1 -1
  168. package/dist/apps/mpp/Mpp.d.ts +0 -20
  169. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  170. package/dist/apps/mpp/Mpp.js +0 -24
  171. package/dist/apps/mpp/Mpp.js.map +1 -1
  172. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  173. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  174. package/dist/apps/mpp/internal/Adapter.js +66 -0
  175. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  176. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  177. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  178. package/dist/apps/mpp/internal/Error.js +41 -0
  179. package/dist/apps/mpp/internal/Error.js.map +1 -0
  180. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  181. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  182. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  183. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  184. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  185. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  186. package/dist/apps/mpp/internal/Policy.js +57 -0
  187. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  188. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  189. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  190. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  191. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  192. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  193. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  194. package/dist/apps/mpp/internal/Screening.js +20 -0
  195. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  196. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  197. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  198. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  199. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  200. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  201. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  202. package/dist/apps/mpp/internal/Utils.js +24 -0
  203. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  204. package/dist/apps/relay/App.js +183 -23
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  208. package/dist/apps/relay/Sponsorships.js +15 -6
  209. package/dist/apps/relay/Sponsorships.js.map +1 -1
  210. package/dist/db/Db.d.ts +20 -0
  211. package/dist/db/Db.d.ts.map +1 -1
  212. package/dist/db/Db.js +342 -0
  213. package/dist/db/Db.js.map +1 -1
  214. package/dist/db/Schema.d.ts +921 -1
  215. package/dist/db/Schema.d.ts.map +1 -1
  216. package/dist/db/Schema.js +269 -1
  217. package/dist/db/Schema.js.map +1 -1
  218. package/dist/db/tables/earnVaults.d.ts +68 -0
  219. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  220. package/dist/db/tables/earnVaults.js +72 -0
  221. package/dist/db/tables/earnVaults.js.map +1 -0
  222. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  223. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  224. package/dist/db/tables/fundingCatalog.js +85 -0
  225. package/dist/db/tables/fundingCatalog.js.map +1 -0
  226. package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
  227. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  228. package/dist/db/tables/fundingDepositAddresses.js +206 -0
  229. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  230. package/dist/db/tables/fundingDeposits.d.ts +115 -0
  231. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  232. package/dist/db/tables/fundingDeposits.js +100 -0
  233. package/dist/db/tables/fundingDeposits.js.map +1 -0
  234. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  235. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  236. package/dist/db/tables/fundingIdempotency.js +103 -0
  237. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  238. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  239. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  240. package/dist/db/tables/fundingTransferEvents.js +18 -0
  241. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  242. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  243. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  244. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  245. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  246. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  247. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  248. package/dist/db/tables/fundingTransfers.js +89 -0
  249. package/dist/db/tables/fundingTransfers.js.map +1 -0
  250. package/dist/db/tables/organizations.d.ts +8 -0
  251. package/dist/db/tables/organizations.d.ts.map +1 -1
  252. package/dist/db/tables/organizations.js +16 -0
  253. package/dist/db/tables/organizations.js.map +1 -1
  254. package/dist/db/tables/projects.d.ts +8 -0
  255. package/dist/db/tables/projects.d.ts.map +1 -1
  256. package/dist/db/tables/projects.js +16 -0
  257. package/dist/db/tables/projects.js.map +1 -1
  258. package/dist/db/tables/requestUsage.d.ts +13 -0
  259. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  260. package/dist/db/tables/requestUsage.js +16 -0
  261. package/dist/db/tables/requestUsage.js.map +1 -1
  262. package/dist/db/tables/sponsoredTransactions.d.ts +2 -2
  263. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  264. package/dist/db/tables/sponsoredTransactions.js +1 -1
  265. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  266. package/dist/db/tables/users.d.ts +8 -0
  267. package/dist/db/tables/users.d.ts.map +1 -1
  268. package/dist/db/tables/users.js +16 -0
  269. package/dist/db/tables/users.js.map +1 -1
  270. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  271. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  272. package/dist/db/tables/verifiedTokens.js +9 -7
  273. package/dist/db/tables/verifiedTokens.js.map +1 -1
  274. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  275. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  276. package/dist/db/tables/webhookSubscriptions.js +24 -3
  277. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  278. package/dist/handlers/relay.js +108 -108
  279. package/dist/handlers/relay.js.map +1 -1
  280. package/dist/internal/Auth.d.ts +26 -0
  281. package/dist/internal/Auth.d.ts.map +1 -1
  282. package/dist/internal/Auth.js +35 -2
  283. package/dist/internal/Auth.js.map +1 -1
  284. package/dist/internal/Cache.d.ts.map +1 -1
  285. package/dist/internal/Cache.js +16 -10
  286. package/dist/internal/Cache.js.map +1 -1
  287. package/dist/internal/Cursor.js +1 -1
  288. package/dist/internal/Cursor.js.map +1 -1
  289. package/dist/internal/EarnRates.d.ts +89 -0
  290. package/dist/internal/EarnRates.d.ts.map +1 -0
  291. package/dist/internal/EarnRates.js +266 -0
  292. package/dist/internal/EarnRates.js.map +1 -0
  293. package/dist/internal/EarnVaults.d.ts +171 -0
  294. package/dist/internal/EarnVaults.d.ts.map +1 -0
  295. package/dist/internal/EarnVaults.js +547 -0
  296. package/dist/internal/EarnVaults.js.map +1 -0
  297. package/dist/internal/EdgeCache.d.ts +8 -1
  298. package/dist/internal/EdgeCache.d.ts.map +1 -1
  299. package/dist/internal/EdgeCache.js +33 -7
  300. package/dist/internal/EdgeCache.js.map +1 -1
  301. package/dist/internal/Id.d.ts +11 -0
  302. package/dist/internal/Id.d.ts.map +1 -1
  303. package/dist/internal/Id.js +13 -0
  304. package/dist/internal/Id.js.map +1 -1
  305. package/dist/internal/Idempotency.d.ts +83 -0
  306. package/dist/internal/Idempotency.d.ts.map +1 -0
  307. package/dist/internal/Idempotency.js +113 -0
  308. package/dist/internal/Idempotency.js.map +1 -0
  309. package/dist/internal/Log.d.ts +64 -9
  310. package/dist/internal/Log.d.ts.map +1 -1
  311. package/dist/internal/Log.js +29 -7
  312. package/dist/internal/Log.js.map +1 -1
  313. package/dist/internal/MetricSink.d.ts.map +1 -1
  314. package/dist/internal/MetricSink.js +47 -1
  315. package/dist/internal/MetricSink.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +1 -1
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +3 -0
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/Provider.d.ts +14 -0
  321. package/dist/internal/Provider.d.ts.map +1 -0
  322. package/dist/internal/Provider.js +5 -0
  323. package/dist/internal/Provider.js.map +1 -0
  324. package/dist/internal/Schema.d.ts +6 -1
  325. package/dist/internal/Schema.d.ts.map +1 -1
  326. package/dist/internal/Schema.js +20 -11
  327. package/dist/internal/Schema.js.map +1 -1
  328. package/dist/internal/Store.d.ts +6 -0
  329. package/dist/internal/Store.d.ts.map +1 -1
  330. package/dist/internal/Store.js +35 -0
  331. package/dist/internal/Store.js.map +1 -1
  332. package/dist/internal/Tidx.d.ts +43 -24
  333. package/dist/internal/Tidx.d.ts.map +1 -1
  334. package/dist/internal/Tidx.js +79 -11
  335. package/dist/internal/Tidx.js.map +1 -1
  336. package/dist/internal/Viem.d.ts +82 -65
  337. package/dist/internal/Viem.d.ts.map +1 -1
  338. package/dist/internal/Viem.js +83 -12
  339. package/dist/internal/Viem.js.map +1 -1
  340. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  341. package/dist/internal/WebhookDestination.js +34 -28
  342. package/dist/internal/WebhookDestination.js.map +1 -1
  343. package/dist/internal/Webhooks.d.ts +9 -0
  344. package/dist/internal/Webhooks.d.ts.map +1 -1
  345. package/dist/internal/Webhooks.js +15 -10
  346. package/dist/internal/Webhooks.js.map +1 -1
  347. package/dist/internal/exchange/Provider.d.ts +219 -0
  348. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  349. package/dist/internal/exchange/Provider.js +117 -0
  350. package/dist/internal/exchange/Provider.js.map +1 -0
  351. package/dist/internal/exchange/index.d.ts +2 -0
  352. package/dist/internal/exchange/index.d.ts.map +1 -0
  353. package/dist/internal/exchange/index.js +2 -0
  354. package/dist/internal/exchange/index.js.map +1 -0
  355. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  356. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  357. package/dist/internal/exchange/providers/uniswap.js +553 -0
  358. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  359. package/dist/internal/funding/Action.d.ts +55 -0
  360. package/dist/internal/funding/Action.d.ts.map +1 -0
  361. package/dist/internal/funding/Action.js +74 -0
  362. package/dist/internal/funding/Action.js.map +1 -0
  363. package/dist/internal/funding/Catalog.d.ts +107 -0
  364. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  365. package/dist/internal/funding/Catalog.js +270 -0
  366. package/dist/internal/funding/Catalog.js.map +1 -0
  367. package/dist/internal/funding/Chain.d.ts +76 -0
  368. package/dist/internal/funding/Chain.d.ts.map +1 -0
  369. package/dist/internal/funding/Chain.js +38 -0
  370. package/dist/internal/funding/Chain.js.map +1 -0
  371. package/dist/internal/funding/Deposit.d.ts +366 -0
  372. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  373. package/dist/internal/funding/Deposit.js +286 -0
  374. package/dist/internal/funding/Deposit.js.map +1 -0
  375. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  376. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  377. package/dist/internal/funding/DepositAddress.js +189 -0
  378. package/dist/internal/funding/DepositAddress.js.map +1 -0
  379. package/dist/internal/funding/Evidence.d.ts +52 -0
  380. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  381. package/dist/internal/funding/Evidence.js +314 -0
  382. package/dist/internal/funding/Evidence.js.map +1 -0
  383. package/dist/internal/funding/Provider.d.ts +1186 -0
  384. package/dist/internal/funding/Provider.d.ts.map +1 -0
  385. package/dist/internal/funding/Provider.js +1081 -0
  386. package/dist/internal/funding/Provider.js.map +1 -0
  387. package/dist/internal/funding/Reconciliation.d.ts +113 -0
  388. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  389. package/dist/internal/funding/Reconciliation.js +676 -0
  390. package/dist/internal/funding/Reconciliation.js.map +1 -0
  391. package/dist/internal/funding/Route.d.ts +21 -0
  392. package/dist/internal/funding/Route.d.ts.map +1 -0
  393. package/dist/internal/funding/Route.js +5 -0
  394. package/dist/internal/funding/Route.js.map +1 -0
  395. package/dist/internal/funding/Subsidy.d.ts +113 -0
  396. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  397. package/dist/internal/funding/Subsidy.js +138 -0
  398. package/dist/internal/funding/Subsidy.js.map +1 -0
  399. package/dist/internal/funding/Token.d.ts +41 -0
  400. package/dist/internal/funding/Token.d.ts.map +1 -0
  401. package/dist/internal/funding/Token.js +22 -0
  402. package/dist/internal/funding/Token.js.map +1 -0
  403. package/dist/internal/funding/Transfer.d.ts +643 -0
  404. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  405. package/dist/internal/funding/Transfer.js +332 -0
  406. package/dist/internal/funding/Transfer.js.map +1 -0
  407. package/dist/internal/funding/index.d.ts +13 -0
  408. package/dist/internal/funding/index.d.ts.map +1 -0
  409. package/dist/internal/funding/index.js +13 -0
  410. package/dist/internal/funding/index.js.map +1 -0
  411. package/dist/internal/funding/providers/across.d.ts +21 -0
  412. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  413. package/dist/internal/funding/providers/across.js +117 -0
  414. package/dist/internal/funding/providers/across.js.map +1 -0
  415. package/dist/internal/funding/providers/relay.d.ts +46 -0
  416. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  417. package/dist/internal/funding/providers/relay.js +464 -0
  418. package/dist/internal/funding/providers/relay.js.map +1 -0
  419. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  420. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  421. package/dist/internal/funding/providers/rhino.js +116 -0
  422. package/dist/internal/funding/providers/rhino.js.map +1 -0
  423. package/dist/internal/funding/providers/squid.d.ts +19 -0
  424. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  425. package/dist/internal/funding/providers/squid.js +120 -0
  426. package/dist/internal/funding/providers/squid.js.map +1 -0
  427. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  428. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  429. package/dist/internal/funding/providers/symbiosis.js +176 -0
  430. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  431. package/dist/internal/index.d.ts +5 -1
  432. package/dist/internal/index.d.ts.map +1 -1
  433. package/dist/internal/index.js +5 -1
  434. package/dist/internal/index.js.map +1 -1
  435. package/dist/internal/webhookDestinations/url.js +61 -57
  436. package/dist/internal/webhookDestinations/url.js.map +1 -1
  437. package/dist/providers/index.d.ts +43 -0
  438. package/dist/providers/index.d.ts.map +1 -0
  439. package/dist/providers/index.js +19 -0
  440. package/dist/providers/index.js.map +1 -0
  441. package/package.json +9 -4
  442. package/src/ApiKeys.test.ts +11 -7
  443. package/src/ApiKeys.ts +37 -9
  444. package/src/App.test.ts +85 -10
  445. package/src/App.ts +224 -137
  446. package/src/Assets.ts +29 -4
  447. package/src/Client.test-d.ts +650 -30
  448. package/src/Scope.test.ts +19 -0
  449. package/src/Scope.ts +28 -11
  450. package/src/Webhooks.test.ts +25 -0
  451. package/src/Webhooks.ts +1 -1
  452. package/src/admin/App.test.ts +9 -2
  453. package/src/admin/App.ts +32 -9
  454. package/src/admin/apps/api-keys.test.ts +167 -23
  455. package/src/admin/apps/api-keys.ts +166 -28
  456. package/src/admin/apps/earn-vaults.test.ts +338 -0
  457. package/src/admin/apps/earn-vaults.ts +572 -0
  458. package/src/admin/apps/scopes.test.ts +16 -1
  459. package/src/admin/ui/plugin.ts +2 -2
  460. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  461. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  462. package/src/admin/ui/src/components/Page.tsx +1 -1
  463. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  464. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  465. package/src/admin/ui/src/lib/client.ts +1 -1
  466. package/src/admin/ui/src/lib/config.ts +1 -1
  467. package/src/admin/ui/src/lib/early-access.ts +8 -9
  468. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  469. package/src/admin/ui/src/lib/format.ts +13 -0
  470. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  471. package/src/admin/ui/src/lib/organizations.ts +7 -1
  472. package/src/admin/ui/src/lib/response.ts +22 -0
  473. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  474. package/src/admin/ui/src/lib/scopes.ts +28 -7
  475. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  476. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  477. package/src/admin/ui/src/router.tsx +2 -2
  478. package/src/admin/ui/src/routes/__root.tsx +9 -8
  479. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  480. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  481. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  482. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  483. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  484. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  485. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  486. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  487. package/src/admin/ui/vite.config.ts +4 -1
  488. package/src/admin/ui.generated.ts +113 -43
  489. package/src/analytics/Analytics.test.ts +69 -10
  490. package/src/analytics/Analytics.ts +20 -1
  491. package/src/analytics/tables/requestEvents.ts +79 -37
  492. package/src/apps/Zones.test.ts +33 -0
  493. package/src/apps/Zones.ts +40 -0
  494. package/src/apps/composition.test.ts +84 -1
  495. package/src/apps/data/App.test.ts +28 -11
  496. package/src/apps/data/App.ts +96 -33
  497. package/src/apps/data/FxOracle.ts +1 -1
  498. package/src/apps/data/index.ts +0 -1
  499. package/src/apps/data/routes/activities.test.ts +82 -6
  500. package/src/apps/data/routes/activities.ts +131 -71
  501. package/src/apps/data/routes/balances.test.ts +50 -37
  502. package/src/apps/data/routes/balances.ts +5 -5
  503. package/src/apps/data/routes/blocks.test.ts +2 -0
  504. package/src/apps/data/routes/coingecko.test.ts +22 -0
  505. package/src/apps/data/routes/coingecko.ts +84 -48
  506. package/src/apps/data/routes/earn.test.ts +1108 -0
  507. package/src/apps/data/routes/earn.ts +1391 -0
  508. package/src/apps/data/routes/exchanges.test.ts +82 -33
  509. package/src/apps/data/routes/exchanges.ts +842 -227
  510. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  511. package/src/apps/data/routes/fee-amm.ts +69 -12
  512. package/src/apps/data/routes/funding.test.ts +2712 -221
  513. package/src/apps/data/routes/funding.ts +1604 -387
  514. package/src/apps/data/routes/indexer.test.ts +43 -34
  515. package/src/apps/data/routes/indexer.ts +19 -2
  516. package/src/apps/data/routes/receipts.test.ts +5 -3
  517. package/src/apps/data/routes/receipts.ts +13 -11
  518. package/src/apps/data/routes/rpc.test.ts +446 -28
  519. package/src/apps/data/routes/rpc.ts +243 -25
  520. package/src/apps/data/routes/tokenlist.ts +72 -19
  521. package/src/apps/data/routes/tokens.ts +258 -86
  522. package/src/apps/data/routes/transactions.test.ts +2 -0
  523. package/src/apps/data/routes/transactions.ts +77 -42
  524. package/src/apps/data/routes/transfers.test.ts +166 -4
  525. package/src/apps/data/routes/transfers.ts +216 -78
  526. package/src/apps/data/routes/valuation.test.ts +62 -9
  527. package/src/apps/data/routes/valuation.ts +2 -2
  528. package/src/apps/data/routes/webhooks.test.ts +386 -43
  529. package/src/apps/data/routes/webhooks.ts +172 -71
  530. package/src/apps/data/routes/zones.test.ts +473 -0
  531. package/src/apps/data/routes/zones.ts +338 -0
  532. package/src/apps/docs/reference.ts +8 -6
  533. package/src/apps/index.ts +2 -1
  534. package/src/apps/management/Billing.test.ts +29 -0
  535. package/src/apps/management/Billing.ts +23 -0
  536. package/src/apps/management/Error.ts +12 -0
  537. package/src/apps/management/routes/api-keys.test.ts +5 -3
  538. package/src/apps/management/routes/api-keys.ts +2 -9
  539. package/src/apps/management/routes/invitations.ts +4 -11
  540. package/src/apps/management/routes/orgs.ts +2 -9
  541. package/src/apps/management/routes/scopes.test.ts +7 -2
  542. package/src/apps/management/routes/scopes.ts +2 -2
  543. package/src/apps/management/routes/webhooks.test.ts +6 -1
  544. package/src/apps/management/routes/webhooks.ts +15 -3
  545. package/src/apps/mpp/App.ts +276 -29
  546. package/src/apps/mpp/Mpp.test.ts +631 -26
  547. package/src/apps/mpp/Mpp.ts +0 -42
  548. package/src/apps/mpp/internal/Adapter.ts +108 -3
  549. package/src/apps/mpp/internal/Error.test.ts +33 -0
  550. package/src/apps/mpp/internal/Error.ts +44 -6
  551. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  552. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  553. package/src/apps/mpp/internal/Policy.test.ts +122 -0
  554. package/src/apps/mpp/internal/Policy.ts +98 -0
  555. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  556. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  557. package/src/apps/mpp/internal/Screening.ts +40 -3
  558. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  559. package/src/apps/mpp/internal/Utils.ts +30 -0
  560. package/src/apps/relay/App.test.ts +493 -62
  561. package/src/apps/relay/App.ts +233 -23
  562. package/src/apps/relay/Sponsorships.test.ts +49 -0
  563. package/src/apps/relay/Sponsorships.ts +18 -6
  564. package/src/db/Db.ts +439 -0
  565. package/src/db/Schema.ts +325 -2
  566. package/src/db/tables/earnVaults.test.ts +185 -0
  567. package/src/db/tables/earnVaults.ts +151 -0
  568. package/src/db/tables/fundingCatalog.test.ts +108 -0
  569. package/src/db/tables/fundingCatalog.ts +157 -0
  570. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  571. package/src/db/tables/fundingDepositAddresses.ts +376 -0
  572. package/src/db/tables/fundingDeposits.test.ts +261 -0
  573. package/src/db/tables/fundingDeposits.ts +229 -0
  574. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  575. package/src/db/tables/fundingIdempotency.ts +180 -0
  576. package/src/db/tables/fundingTransferEvents.ts +28 -0
  577. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  578. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  579. package/src/db/tables/fundingTransfers.test.ts +89 -0
  580. package/src/db/tables/fundingTransfers.ts +153 -0
  581. package/src/db/tables/organizations.ts +16 -0
  582. package/src/db/tables/projects.ts +16 -0
  583. package/src/db/tables/requestUsage.ts +23 -0
  584. package/src/db/tables/sponsoredTransactions.test.ts +11 -0
  585. package/src/db/tables/sponsoredTransactions.ts +3 -3
  586. package/src/db/tables/users.ts +16 -0
  587. package/src/db/tables/verifiedTokens.ts +19 -14
  588. package/src/db/tables/webhookSubscriptions.ts +58 -3
  589. package/src/handlers/relay.test.ts +2 -0
  590. package/src/handlers/relay.ts +95 -99
  591. package/src/internal/Auth.test.ts +48 -0
  592. package/src/internal/Auth.ts +61 -2
  593. package/src/internal/Cache.ts +13 -9
  594. package/src/internal/Cursor.test.ts +2 -2
  595. package/src/internal/Cursor.ts +1 -1
  596. package/src/internal/EarnRates.test.ts +125 -0
  597. package/src/internal/EarnRates.ts +409 -0
  598. package/src/internal/EarnVaults.test.ts +195 -0
  599. package/src/internal/EarnVaults.ts +876 -0
  600. package/src/internal/EdgeCache.test.ts +19 -0
  601. package/src/internal/EdgeCache.ts +35 -5
  602. package/src/internal/Id.ts +14 -0
  603. package/src/internal/Idempotency.test.ts +109 -0
  604. package/src/internal/Idempotency.ts +237 -0
  605. package/src/internal/Log.test-d.ts +41 -8
  606. package/src/internal/Log.test.ts +189 -8
  607. package/src/internal/Log.ts +124 -17
  608. package/src/internal/MetricSink.test.ts +244 -4
  609. package/src/internal/MetricSink.ts +51 -1
  610. package/src/internal/OpenApi.ts +3 -0
  611. package/src/internal/Provider.test.ts +17 -0
  612. package/src/internal/Provider.ts +17 -0
  613. package/src/internal/Schema.ts +27 -17
  614. package/src/internal/Store.test.ts +25 -0
  615. package/src/internal/Store.ts +46 -0
  616. package/src/internal/Tidx.local.test.ts +78 -3
  617. package/src/internal/Tidx.test.ts +212 -18
  618. package/src/internal/Tidx.ts +112 -32
  619. package/src/internal/VerifiedTokens.test.ts +15 -0
  620. package/src/internal/Viem.test.ts +170 -17
  621. package/src/internal/Viem.ts +111 -28
  622. package/src/internal/WebhookDestination.ts +25 -23
  623. package/src/internal/Webhooks.test.ts +59 -0
  624. package/src/internal/Webhooks.ts +34 -10
  625. package/src/internal/exchange/Provider.test.ts +216 -0
  626. package/src/internal/exchange/Provider.ts +326 -0
  627. package/src/internal/exchange/index.test.ts +6 -0
  628. package/src/internal/exchange/index.ts +1 -0
  629. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  630. package/src/internal/exchange/providers/uniswap.ts +682 -0
  631. package/src/internal/funding/Action.test.ts +138 -0
  632. package/src/internal/funding/Action.ts +117 -0
  633. package/src/internal/funding/Catalog.test.ts +311 -0
  634. package/src/internal/funding/Catalog.ts +347 -0
  635. package/src/internal/funding/Chain.test.ts +79 -0
  636. package/src/internal/funding/Chain.ts +120 -0
  637. package/src/internal/funding/Deposit.test.ts +26 -0
  638. package/src/internal/funding/Deposit.ts +453 -0
  639. package/src/internal/funding/DepositAddress.test.ts +18 -0
  640. package/src/internal/funding/DepositAddress.ts +312 -0
  641. package/src/internal/funding/Evidence.test.ts +297 -0
  642. package/src/internal/funding/Evidence.ts +430 -0
  643. package/src/internal/funding/Provider.test.ts +1328 -0
  644. package/src/internal/funding/Provider.ts +1796 -0
  645. package/src/internal/funding/Reconciliation.local.test.ts +504 -0
  646. package/src/internal/funding/Reconciliation.test.ts +2020 -0
  647. package/src/internal/funding/Reconciliation.ts +930 -0
  648. package/src/internal/funding/Route.test.ts +66 -0
  649. package/src/internal/funding/Route.ts +29 -0
  650. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  651. package/src/internal/funding/Subsidy.test.ts +75 -0
  652. package/src/internal/funding/Subsidy.ts +260 -0
  653. package/src/internal/funding/Token.test.ts +47 -0
  654. package/src/internal/funding/Token.ts +59 -0
  655. package/src/internal/funding/Transfer.test.ts +369 -0
  656. package/src/internal/funding/Transfer.ts +522 -0
  657. package/src/internal/funding/index.test.ts +20 -0
  658. package/src/internal/funding/index.ts +12 -0
  659. package/src/internal/funding/providers/across.ts +149 -0
  660. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  661. package/src/internal/funding/providers/relay.test.ts +474 -0
  662. package/src/internal/funding/providers/relay.ts +559 -0
  663. package/src/internal/funding/providers/rhino.ts +139 -0
  664. package/src/internal/funding/providers/squid.ts +151 -0
  665. package/src/internal/funding/providers/symbiosis.ts +221 -0
  666. package/src/internal/index.test.ts +5 -1
  667. package/src/internal/index.ts +5 -1
  668. package/src/internal/webhookDestinations/url.ts +49 -45
  669. package/src/providers/index.test.ts +14 -0
  670. package/src/providers/index.ts +54 -0
  671. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  672. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  673. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  674. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  675. package/dist/internal/FundingQuotes.d.ts +0 -864
  676. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  677. package/dist/internal/FundingQuotes.js +0 -672
  678. package/dist/internal/FundingQuotes.js.map +0 -1
  679. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  680. package/src/internal/FundingQuotes.test.ts +0 -456
  681. package/src/internal/FundingQuotes.ts +0 -944
@@ -0,0 +1,522 @@
1
+ import * as z from 'zod/mini'
2
+
3
+ import type * as Db from '../../db/Db.js'
4
+ import * as FundingTransferEvents from '../../db/tables/fundingTransferEvents.js'
5
+ import * as FundingTransfers from '../../db/tables/fundingTransfers.js'
6
+ import * as Id from '../Id.js'
7
+ import * as Schema from '../Schema.js'
8
+ import * as Action from './Action.js'
9
+ import * as Provider from './Provider.js'
10
+
11
+ /** Public funding transfer statuses, in the order documented by the API. */
12
+ export const statuses = [
13
+ 'awaiting-source',
14
+ 'processing',
15
+ 'refunding',
16
+ 'completed',
17
+ 'refunded',
18
+ 'action-required',
19
+ 'expired',
20
+ ] as const
21
+
22
+ /** Lifecycle status of a funding transfer. */
23
+ export type Status = (typeof statuses)[number]
24
+
25
+ /** Statuses that never change again after verified chain evidence. */
26
+ export const terminalStatuses = ['completed', 'expired', 'refunded'] as const satisfies readonly Status[] // prettier-ignore
27
+
28
+ /** Funding methods a caller can select at creation. */
29
+ export const methods = ['depositAddress', 'transaction'] as const
30
+
31
+ /** Funding method selected at creation. */
32
+ export type Method = (typeof methods)[number]
33
+
34
+ /** Amount modes a caller can select at creation. */
35
+ export const modes = ['exactDestination', 'exactSource'] as const
36
+
37
+ /** Amount mode selected at creation. */
38
+ export type Mode = (typeof modes)[number]
39
+
40
+ /** Customer-safe codes explaining an `action-required` or refund outcome. */
41
+ export const statusReasonCodes = [
42
+ 'destination_amount_below_minimum',
43
+ 'destination_recovered',
44
+ 'manual_recovery_required',
45
+ 'refund_failed',
46
+ 'source_amount_above_maximum',
47
+ 'source_amount_below_minimum',
48
+ 'source_chain_mismatch',
49
+ 'source_token_mismatch',
50
+ ] as const
51
+
52
+ /** Stable customer-safe status reason code. */
53
+ export type StatusReasonCode = (typeof statusReasonCodes)[number]
54
+
55
+ // The public state chart has no exits from `action-required`, but late chain
56
+ // evidence or operator-triggered reconciliation may still resolve one, so
57
+ // evidence-driven exits stay allowed.
58
+ const transitions: Record<Status, readonly Status[]> = {
59
+ 'action-required': ['completed', 'processing', 'refunded', 'refunding'],
60
+ 'awaiting-source': ['action-required', 'expired', 'processing'],
61
+ completed: [],
62
+ expired: [],
63
+ processing: ['action-required', 'completed', 'refunding'],
64
+ refunded: [],
65
+ refunding: ['action-required', 'refunded'],
66
+ }
67
+
68
+ /** Returns whether a status is terminal. */
69
+ export function isTerminal(status: Status): boolean {
70
+ return (terminalStatuses as readonly Status[]).includes(status)
71
+ }
72
+
73
+ /** Returns whether the lifecycle allows moving from one status to another. */
74
+ export function canTransition(from: Status, to: Status): boolean {
75
+ return transitions[from].includes(to)
76
+ }
77
+
78
+ /** Generates a funding transfer id (`ftr_…`, lexically time-ordered). */
79
+ export function generateId(now: Date = new Date()): string {
80
+ return Id.generateSortable('ftr', now)
81
+ }
82
+
83
+ /** Zod schemas owned by the funding transfer resource. */
84
+ export namespace schema {
85
+ /** Funding transfer lifecycle status. */
86
+ export const Status = z
87
+ .enum(statuses)
88
+ .check(
89
+ z.describe('Lifecycle status of the funding transfer.'),
90
+ z.meta({ examples: ['awaiting-source'] }),
91
+ )
92
+
93
+ /** Customer-safe explanation of a status that needs context. */
94
+ export const StatusReason = z
95
+ .object({
96
+ code: z
97
+ .enum(statusReasonCodes)
98
+ .check(
99
+ z.describe('Stable machine-readable reason code.'),
100
+ z.meta({ examples: ['destination_amount_below_minimum'] }),
101
+ ),
102
+ message: z.string().check(
103
+ z.describe('Human-readable explanation of the reason.'),
104
+ z.meta({
105
+ examples: ['The verified destination amount did not satisfy the quoted minimum.'],
106
+ }),
107
+ ),
108
+ })
109
+ .check(z.describe('Why the transfer is in its current status, when context is needed.'))
110
+
111
+ /** Funding method selected at creation. */
112
+ export const Method = z
113
+ .enum(methods)
114
+ .check(z.describe('How the caller funds the transfer.'), z.meta({ examples: ['transaction'] }))
115
+
116
+ /** Amount mode selected at creation. */
117
+ export const Mode = z
118
+ .enum(modes)
119
+ .check(
120
+ z.describe('Which side of the transfer the quoted amount fixes.'),
121
+ z.meta({ examples: ['exactSource'] }),
122
+ )
123
+
124
+ /** One fee applied to the transfer. */
125
+ export const Fee = z
126
+ .object({
127
+ amount: Schema.TokenAmount,
128
+ side: z
129
+ .enum(['destination', 'source'])
130
+ .check(
131
+ z.describe('Which side of the transfer the fee is taken from.'),
132
+ z.meta({ examples: ['destination'] }),
133
+ ),
134
+ token: Provider.schema.TokenRef,
135
+ type: z
136
+ .enum(['provider'])
137
+ .check(z.describe('What the fee pays for.'), z.meta({ examples: ['provider'] })),
138
+ })
139
+ .check(z.describe('One fee applied to the transfer.'))
140
+
141
+ /** Freshness and validity window of the selected quote. */
142
+ export const Quote = z
143
+ .object({
144
+ expiresAt: z
145
+ .string()
146
+ .check(
147
+ z.describe('When the quoted terms stop being executable (ISO 8601).'),
148
+ z.meta({ examples: ['2026-07-30T04:01:00.000Z'] }),
149
+ ),
150
+ sampledAt: z
151
+ .string()
152
+ .check(
153
+ z.describe('When the provider produced the quote (ISO 8601).'),
154
+ z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
155
+ ),
156
+ })
157
+ .check(z.describe('Freshness and validity window of the selected quote.'))
158
+
159
+ const hashesCheck = (description: string) => [
160
+ z.describe(description),
161
+ z.meta({ examples: [[`0x${'aa'.repeat(32)}`]] }),
162
+ ]
163
+
164
+ const snapshotFields = {
165
+ destinationAmount: z.optional(Schema.TokenAmount),
166
+ destinationAmountMin: z.optional(Schema.TokenAmount),
167
+ destinationChain: Provider.schema.ChainRef,
168
+ destinationToken: Provider.schema.TokenRef,
169
+ destinationTransactionHashes: z.optional(
170
+ z.array(z.string()).check(...hashesCheck('Verified destination transaction references.')),
171
+ ),
172
+ fees: z.array(Fee).check(z.describe('Fees applied to the transfer.')),
173
+ method: Method,
174
+ mode: Mode,
175
+ provider: Provider.schema.ProviderRef,
176
+ quote: Quote,
177
+ recipient: z
178
+ .string()
179
+ .check(
180
+ z.describe('Final beneficiary of the transfer.'),
181
+ z.meta({ examples: [`0x${'11'.repeat(20)}`] }),
182
+ ),
183
+ refundAddress: z.optional(
184
+ z
185
+ .string()
186
+ .check(
187
+ z.describe('Source-chain refund recipient (deposit-address method).'),
188
+ z.meta({ examples: [`0x${'22'.repeat(20)}`] }),
189
+ ),
190
+ ),
191
+ refundAmount: z.optional(Schema.TokenAmount),
192
+ refundTransactionHashes: z.optional(
193
+ z.array(z.string()).check(...hashesCheck('Verified refund transaction references.')),
194
+ ),
195
+ sender: z.optional(
196
+ z
197
+ .string()
198
+ .check(
199
+ z.describe('Source-chain account that signs the funding action (transaction method).'),
200
+ z.meta({ examples: [`0x${'22'.repeat(20)}`] }),
201
+ ),
202
+ ),
203
+ sourceAmount: Schema.TokenAmount,
204
+ sourceAmountMax: z.optional(Schema.TokenAmount),
205
+ sourceChain: Provider.schema.ChainRef,
206
+ sourceToken: Provider.schema.TokenRef,
207
+ sourceTransactionHashes: z.optional(
208
+ z.array(z.string()).check(...hashesCheck('Verified source transaction references.')),
209
+ ),
210
+ }
211
+
212
+ /**
213
+ * The stored public snapshot: every transfer field except lifecycle columns
214
+ * (`id`, `status`, `statusReason`, `version`, `createdAt`, `updatedAt`),
215
+ * which live in typed columns and merge in at serialization.
216
+ */
217
+ export const Snapshot = z
218
+ .object(snapshotFields)
219
+ .check(z.describe('Quote terms and reconciled public fields of a funding transfer.'))
220
+
221
+ const fundingTransferFields = {
222
+ createdAt: z
223
+ .string()
224
+ .check(
225
+ z.describe('When the transfer was created (ISO 8601).'),
226
+ z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
227
+ ),
228
+ destinationAmount: snapshotFields.destinationAmount,
229
+ destinationAmountMin: snapshotFields.destinationAmountMin,
230
+ destinationChain: snapshotFields.destinationChain,
231
+ destinationToken: snapshotFields.destinationToken,
232
+ destinationTransactionHashes: snapshotFields.destinationTransactionHashes,
233
+ fees: snapshotFields.fees,
234
+ id: z
235
+ .string()
236
+ .check(
237
+ z.describe('Funding transfer id (`ftr_…`, lexically time-ordered).'),
238
+ z.meta({ examples: ['ftr_001785729600000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
239
+ ),
240
+ method: snapshotFields.method,
241
+ mode: snapshotFields.mode,
242
+ provider: snapshotFields.provider,
243
+ quote: snapshotFields.quote,
244
+ recipient: snapshotFields.recipient,
245
+ refundAddress: snapshotFields.refundAddress,
246
+ refundAmount: snapshotFields.refundAmount,
247
+ refundTransactionHashes: snapshotFields.refundTransactionHashes,
248
+ sender: snapshotFields.sender,
249
+ sourceAmount: snapshotFields.sourceAmount,
250
+ sourceAmountMax: snapshotFields.sourceAmountMax,
251
+ sourceChain: snapshotFields.sourceChain,
252
+ sourceToken: snapshotFields.sourceToken,
253
+ sourceTransactionHashes: snapshotFields.sourceTransactionHashes,
254
+ status: Status,
255
+ statusReason: z.optional(StatusReason),
256
+ updatedAt: z
257
+ .string()
258
+ .check(
259
+ z.describe('When the transfer last materially changed (ISO 8601).'),
260
+ z.meta({ examples: ['2026-07-30T04:00:20.000Z'] }),
261
+ ),
262
+ version: z
263
+ .number()
264
+ .check(
265
+ z.int(),
266
+ z.positive(),
267
+ z.describe('Monotonic revision that increments whenever the transfer materially changes.'),
268
+ z.meta({ examples: [1] }),
269
+ ),
270
+ }
271
+
272
+ /** A funding transfer as returned by reads. Reads never include `action`. */
273
+ export const FundingTransfer = z
274
+ .object(fundingTransferFields)
275
+ .check(z.describe('One durable funding transfer.'))
276
+
277
+ /** A created funding transfer: the read shape plus the executable action. */
278
+ export const CreatedFundingTransfer = z
279
+ .object({ action: Action.schema.Action, ...fundingTransferFields })
280
+ .check(z.describe('The created funding transfer, including its one-time executable action.'))
281
+
282
+ /** Request body accepted by funding transfer creation. */
283
+ export const CreateRequest = z
284
+ .strictObject({
285
+ amount: z
286
+ .string()
287
+ .check(
288
+ z.regex(/^[1-9]\d*$/),
289
+ z.describe('Amount in base units of the token the mode fixes.'),
290
+ z.meta({ examples: ['1000000'] }),
291
+ ),
292
+ destinationToken: z
293
+ .string()
294
+ .check(
295
+ z.minLength(1),
296
+ z.describe('Tempo destination token symbol, contract address, or token key.'),
297
+ z.meta({ examples: ['pathusd'] }),
298
+ ),
299
+ mode: Mode,
300
+ recipient: z
301
+ .string()
302
+ .check(
303
+ z.regex(/^0x[0-9a-fA-F]{40}$/),
304
+ z.describe('Final beneficiary of the transfer.'),
305
+ z.meta({ examples: [`0x${'11'.repeat(20)}`] }),
306
+ ),
307
+ sender: z
308
+ .string()
309
+ .check(
310
+ z.regex(/^0x[0-9a-fA-F]{40}$/),
311
+ z.describe('Source-chain account that signs the funding action.'),
312
+ z.meta({ examples: [`0x${'22'.repeat(20)}`] }),
313
+ ),
314
+ slippageBps: z.optional(
315
+ z
316
+ .number()
317
+ .check(
318
+ z.int(),
319
+ z.gte(0),
320
+ z.lte(10_000),
321
+ z.describe('Maximum acceptable slippage in basis points.'),
322
+ z.meta({ examples: [50] }),
323
+ ),
324
+ ),
325
+ sourceChain: z
326
+ .string()
327
+ .check(
328
+ z.describe('Source chain CAIP-2 id, slug, or alias.'),
329
+ z.meta({ examples: ['base', 'eip155:8453'] }),
330
+ ),
331
+ sourceToken: z
332
+ .string()
333
+ .check(
334
+ z.minLength(1),
335
+ z.describe('Source token symbol, contract address, or token key.'),
336
+ z.meta({ examples: ['usdc'] }),
337
+ ),
338
+ })
339
+ .check(z.describe('Funding transfer creation request.'))
340
+ }
341
+
342
+ /** Stored public snapshot of a funding transfer (see {@link schema.Snapshot}). */
343
+ export type Snapshot = z.output<typeof schema.Snapshot>
344
+
345
+ /** Customer-safe status reason (see {@link schema.StatusReason}). */
346
+ export type StatusReason = z.output<typeof schema.StatusReason>
347
+
348
+ /** A funding transfer as returned by reads (see {@link schema.FundingTransfer}). */
349
+ export type Public = z.output<typeof schema.FundingTransfer>
350
+
351
+ /** A created funding transfer (see {@link schema.CreatedFundingTransfer}). */
352
+ export type Created = z.output<typeof schema.CreatedFundingTransfer>
353
+
354
+ /** A validated creation request (see {@link schema.CreateRequest}). */
355
+ export type CreateRequest = z.output<typeof schema.CreateRequest>
356
+
357
+ /** What an associated transaction reference evidences. */
358
+ export const transactionRoles = ['destination', 'refund', 'source'] as const
359
+
360
+ /** Role of a verified transaction reference on a transfer. */
361
+ export type TransactionRole = (typeof transactionRoles)[number]
362
+
363
+ /**
364
+ * Creates a durable funding transfer: the row plus its version-1 event commit
365
+ * in one transaction, so every stored version has an immutable public record.
366
+ */
367
+ export async function create(db: Db.Db, input: create.Input): Promise<FundingTransfers.Record> {
368
+ return db.transaction((tx) => createIn(tx, input))
369
+ }
370
+
371
+ /**
372
+ * Creates the transfer row and its version-1 event inside the caller's
373
+ * transaction, for writes that must commit atomically with sibling state
374
+ * (idempotency completion).
375
+ */
376
+ export async function createIn(tx: Db.Db, input: create.Input): Promise<FundingTransfers.Record> {
377
+ const now = new Date()
378
+ const snapshot = parseSnapshot(input.snapshot)
379
+ const record: FundingTransfers.Record = {
380
+ apiKeyId: input.apiKeyId,
381
+ createdAt: now.toISOString(),
382
+ environment: input.environment,
383
+ id: input.id ?? generateId(now),
384
+ method: snapshot.method,
385
+ mode: snapshot.mode,
386
+ orgId: input.orgId,
387
+ projectId: input.projectId ?? null,
388
+ providerId: snapshot.provider.id,
389
+ providerState: input.providerState ?? null,
390
+ quoteExpiresAt: snapshot.quote.expiresAt,
391
+ snapshot,
392
+ status: 'awaiting-source',
393
+ statusReason: null,
394
+ updatedAt: now.toISOString(),
395
+ version: 1,
396
+ }
397
+ const created = await FundingTransfers.insert(tx, record)
398
+ await FundingTransferEvents.insert(tx, {
399
+ createdAt: record.createdAt,
400
+ snapshot: toPublic(created),
401
+ status: created.status,
402
+ transferId: created.id,
403
+ version: created.version,
404
+ })
405
+ return created
406
+ }
407
+
408
+ export declare namespace create {
409
+ /** Fields required to create a funding transfer. */
410
+ type Input = {
411
+ /** API key that created the transfer. */
412
+ apiKeyId: string
413
+ /** Key environment the transfer belongs to. */
414
+ environment: 'production' | 'sandbox'
415
+ /** Transfer id override for deterministic tests. */
416
+ id?: string | undefined
417
+ /** Owning organization id (`org_…`). */
418
+ orgId: string
419
+ /** Attributed project id, when the creating key is project-attributed. */
420
+ projectId?: string | undefined
421
+ /** Private provider correlation retained for reconciliation. */
422
+ providerState?: Provider.prepareTransfer.Correlation | undefined
423
+ /** The public snapshot captured from the selected quote. */
424
+ snapshot: Snapshot
425
+ }
426
+ }
427
+
428
+ /**
429
+ * Applies a version-guarded material change: a status transition, a snapshot
430
+ * update, or both. The row update and its immutable event commit in one
431
+ * transaction; a stale `expectedVersion` or disallowed transition applies
432
+ * nothing, so concurrent observations cannot overwrite newer evidence.
433
+ */
434
+ export async function transition(
435
+ db: Db.Db,
436
+ options: transition.Options,
437
+ ): Promise<transition.Result> {
438
+ const now = new Date()
439
+ return db.transaction(async (tx) => {
440
+ const current = await FundingTransfers.get(tx, options.id)
441
+ if (!current) return { type: 'not_found' }
442
+ if (current.version !== options.expectedVersion) return { current, type: 'stale' }
443
+ const status = options.status ?? current.status
444
+ if (status !== current.status && !canTransition(current.status, status))
445
+ return { current, type: 'invalid' }
446
+
447
+ const updated = await FundingTransfers.update(tx, {
448
+ expectedVersion: options.expectedVersion,
449
+ id: options.id,
450
+ snapshot: options.snapshot === undefined ? current.snapshot : parseSnapshot(options.snapshot),
451
+ status,
452
+ statusReason:
453
+ options.statusReason ?? (status === current.status ? current.statusReason : null),
454
+ updatedAt: now.toISOString(),
455
+ version: current.version + 1,
456
+ })
457
+ if (!updated) {
458
+ const latest = await FundingTransfers.get(tx, options.id)
459
+ return latest ? { current: latest, type: 'stale' } : { type: 'not_found' }
460
+ }
461
+ await FundingTransferEvents.insert(tx, {
462
+ createdAt: updated.updatedAt,
463
+ snapshot: toPublic(updated),
464
+ status: updated.status,
465
+ transferId: updated.id,
466
+ version: updated.version,
467
+ })
468
+ return { record: updated, type: 'applied' }
469
+ })
470
+ }
471
+
472
+ export declare namespace transition {
473
+ /** Fields describing a material change to apply. */
474
+ type Options = {
475
+ /** The version the change was computed against. */
476
+ expectedVersion: number
477
+ /** Transfer id (`ftr_…`). */
478
+ id: string
479
+ /** Replacement public snapshot; omitted keeps the stored snapshot. */
480
+ snapshot?: Snapshot | undefined
481
+ /** New status; omitted keeps the current status (snapshot-only change). */
482
+ status?: Status | undefined
483
+ /** Customer-safe reason attached to the new status. */
484
+ statusReason?: StatusReason | undefined
485
+ }
486
+
487
+ /** Outcome of a guarded transition. */
488
+ type Result =
489
+ | { record: FundingTransfers.Record; type: 'applied' }
490
+ | { current: FundingTransfers.Record; type: 'invalid' }
491
+ | { current: FundingTransfers.Record; type: 'stale' }
492
+ | { type: 'not_found' }
493
+ }
494
+
495
+ /** Serializes a created row with its one-time executable action. */
496
+ export function toCreated(record: FundingTransfers.Record, action: Action.Action): Created {
497
+ return schema.CreatedFundingTransfer.parse({ action, ...toPublic(record) })
498
+ }
499
+
500
+ /** Serializes a stored row to the public read shape. Never includes actions. */
501
+ export function toPublic(record: FundingTransfers.Record): Public {
502
+ return schema.FundingTransfer.parse({
503
+ ...record.snapshot,
504
+ createdAt: record.createdAt,
505
+ id: record.id,
506
+ status: record.status,
507
+ ...(record.statusReason === null ? {} : { statusReason: record.statusReason }),
508
+ updatedAt: record.updatedAt,
509
+ version: record.version,
510
+ })
511
+ }
512
+
513
+ function parseSnapshot(snapshot: Snapshot): Snapshot {
514
+ const parsed = schema.Snapshot.parse(snapshot)
515
+ return {
516
+ ...parsed,
517
+ quote: {
518
+ ...parsed.quote,
519
+ expiresAt: new Date(parsed.quote.expiresAt).toISOString(),
520
+ },
521
+ }
522
+ }
@@ -0,0 +1,20 @@
1
+ import * as Funding from './index.js'
2
+
3
+ test('exports funding modules', () => {
4
+ expect(Object.keys(Funding)).toMatchInlineSnapshot(`
5
+ [
6
+ "Action",
7
+ "Chain",
8
+ "Catalog",
9
+ "Deposit",
10
+ "DepositAddress",
11
+ "Evidence",
12
+ "Provider",
13
+ "Reconciliation",
14
+ "Route",
15
+ "Subsidy",
16
+ "Token",
17
+ "Transfer",
18
+ ]
19
+ `)
20
+ })
@@ -0,0 +1,12 @@
1
+ export * as Action from './Action.js'
2
+ export * as Chain from './Chain.js'
3
+ export * as Catalog from './Catalog.js'
4
+ export * as Deposit from './Deposit.js'
5
+ export * as DepositAddress from './DepositAddress.js'
6
+ export * as Evidence from './Evidence.js'
7
+ export * as Provider from './Provider.js'
8
+ export * as Reconciliation from './Reconciliation.js'
9
+ export * as Route from './Route.js'
10
+ export * as Subsidy from './Subsidy.js'
11
+ export * as Token from './Token.js'
12
+ export * as Transfer from './Transfer.js'
@@ -0,0 +1,149 @@
1
+ import { Address } from 'ox'
2
+ import * as z from 'zod/mini'
3
+
4
+ import * as FundingChain from '../Chain.js'
5
+ import * as FundingProvider from '../Provider.js'
6
+
7
+ const defaultBaseUrl = 'https://app.across.to/api'
8
+ const defaultFetch: FundingProvider.Fetch = (input, init) => globalThis.fetch(input, init)
9
+
10
+ namespace schema {
11
+ const IntegerString = z.string().check(z.regex(/^\d+$/))
12
+
13
+ const Token = z.object({
14
+ address: z.string(),
15
+ chainId: z.number().check(z.int(), z.nonnegative()),
16
+ decimals: z.number().check(z.int(), z.nonnegative()),
17
+ })
18
+
19
+ export const Quote = z.object({
20
+ amountType: z.literal('exactInput'),
21
+ expectedFillTime: z.number().check(z.int(), z.nonnegative()),
22
+ expectedOutputAmount: IntegerString,
23
+ inputAmount: IntegerString,
24
+ inputToken: Token,
25
+ minOutputAmount: IntegerString,
26
+ outputToken: Token,
27
+ quoteExpiryTimestamp: z.number().check(z.int(), z.nonnegative()),
28
+ })
29
+ }
30
+
31
+ /** Creates an Across funding provider backed by `/swap/approval`. */
32
+ export function across(options: across.Options) {
33
+ if (options.apiKey.length === 0 || !/^0x[\da-fA-F]{4}$/.test(options.integratorId))
34
+ throw new FundingProvider.ProviderConfigurationError()
35
+ if (!Address.validate(options.userAddress, { strict: false }))
36
+ throw new FundingProvider.ProviderConfigurationError()
37
+
38
+ const endpoint = new URL(options.baseUrl ?? defaultBaseUrl)
39
+ endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, '')}/swap/approval`
40
+ const fetch = options.fetch ?? defaultFetch
41
+ const now = options.now ?? (() => new Date())
42
+
43
+ return FundingProvider.from({
44
+ id: 'across',
45
+ name: 'Across',
46
+ async getQuote({ candidate, route }, signal) {
47
+ const destinationChainId = FundingChain.eip155Id(route.destination.chain)
48
+ const sourceChainId = FundingChain.eip155Id(route.source.chain)
49
+ const url = new URL(endpoint)
50
+ url.search = new URLSearchParams({
51
+ amount: candidate.sourceAmount.amount,
52
+ depositor: options.userAddress,
53
+ destinationChainId,
54
+ inputToken: candidate.sourceToken.address,
55
+ integratorId: options.integratorId,
56
+ originChainId: sourceChainId,
57
+ outputToken: candidate.destinationToken.address,
58
+ recipient: options.userAddress,
59
+ skipOriginTxEstimation: 'true',
60
+ strictTradeType: 'true',
61
+ tradeType: 'exactInput',
62
+ }).toString()
63
+
64
+ try {
65
+ const quote = await FundingProvider.requestJson(url, {
66
+ fetch,
67
+ headers: { Authorization: `Bearer ${options.apiKey}` },
68
+ signal,
69
+ })
70
+ const parsed = schema.Quote.safeParse(quote)
71
+ if (!parsed.success) throw new FundingProvider.ProviderPayloadError()
72
+ const response = parsed.data
73
+ const expiresAt = new Date(response.quoteExpiryTimestamp * 1_000)
74
+ const sampledAt = now()
75
+ if (
76
+ response.inputAmount !== candidate.sourceAmount.amount ||
77
+ !matchesToken(response.inputToken, sourceChainId, candidate.sourceToken) ||
78
+ !matchesToken(response.outputToken, destinationChainId, candidate.destinationToken) ||
79
+ BigInt(response.expectedOutputAmount) <= 0n ||
80
+ BigInt(response.minOutputAmount) <= 0n ||
81
+ BigInt(response.minOutputAmount) > BigInt(response.expectedOutputAmount) ||
82
+ Number.isNaN(expiresAt.getTime()) ||
83
+ response.quoteExpiryTimestamp * 1_000 <= sampledAt.getTime()
84
+ )
85
+ throw new FundingProvider.ProviderPayloadError()
86
+
87
+ return {
88
+ expiresAt: expiresAt.toISOString(),
89
+ destinationAmountMin: response.minOutputAmount,
90
+ destinationAmount: response.expectedOutputAmount,
91
+ quality: {
92
+ estimatedSeconds: response.expectedFillTime,
93
+ liquiditySource: 'providerQuote',
94
+ sourceDetail: 'across:swap-approval',
95
+ tier: 'liquid',
96
+ },
97
+ sampledAt: sampledAt.toISOString(),
98
+ status: 'available',
99
+ }
100
+ } catch (cause) {
101
+ const unavailable = FundingProvider.unavailable(cause, [
102
+ 'AMOUNT_TOO_HIGH',
103
+ 'AMOUNT_TOO_LOW',
104
+ 'INSUFFICIENT_LIQUIDITY',
105
+ 'NO_QUOTES',
106
+ 'NO_ROUTE',
107
+ 'UNSUPPORTED_ROUTE',
108
+ ])
109
+ if (!unavailable) throw cause
110
+ return FundingProvider.unavailableResult({
111
+ detail: 'across:swap-approval',
112
+ message: unavailable,
113
+ now: now(),
114
+ source: 'providerQuote',
115
+ })
116
+ }
117
+ },
118
+ })
119
+ }
120
+
121
+ export declare namespace across {
122
+ /** Across provider options. */
123
+ type Options = {
124
+ /** Across API key sent as a bearer token. */
125
+ apiKey: string
126
+ /** Override for tests or Across test environments. */
127
+ baseUrl?: string | undefined
128
+ /** Fetch implementation override for tests. */
129
+ fetch?: FundingProvider.Fetch | undefined
130
+ /** Across integrator id sent as the required query parameter. */
131
+ integratorId: string
132
+ /** Clock override for deterministic tests. */
133
+ now?: (() => Date) | undefined
134
+ /** Quote wallet address used as the Across depositor and recipient. */
135
+ userAddress: string
136
+ }
137
+ }
138
+
139
+ function matchesToken(
140
+ token: z.output<typeof schema.Quote>['inputToken'],
141
+ chainId: string,
142
+ expected: FundingProvider.TokenRef,
143
+ ) {
144
+ return (
145
+ token.address.toLowerCase() === expected.address.toLowerCase() &&
146
+ token.chainId === Number(chainId) &&
147
+ token.decimals === expected.decimals
148
+ )
149
+ }