tapimo 0.7.1 → 0.8.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 (786) hide show
  1. package/README.md +10 -7
  2. package/dist/ApiKey.d.ts +3 -0
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +10 -0
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +29 -8
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +24 -5
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +20680 -15487
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +250 -129
  13. package/dist/App.js.map +1 -1
  14. package/dist/Assets.d.ts +10 -0
  15. package/dist/Assets.d.ts.map +1 -1
  16. package/dist/Assets.js +17 -4
  17. package/dist/Assets.js.map +1 -1
  18. package/dist/Scope.d.ts +19 -8
  19. package/dist/Scope.d.ts.map +1 -1
  20. package/dist/Scope.js +25 -9
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/Webhooks.d.ts +1 -1
  23. package/dist/admin/App.d.ts +667 -76
  24. package/dist/admin/App.d.ts.map +1 -1
  25. package/dist/admin/App.js +12 -2
  26. package/dist/admin/App.js.map +1 -1
  27. package/dist/admin/apps/api-keys.d.ts +107 -11
  28. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  29. package/dist/admin/apps/api-keys.js +145 -32
  30. package/dist/admin/apps/api-keys.js.map +1 -1
  31. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  32. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  33. package/dist/admin/apps/earn-vaults.js +409 -0
  34. package/dist/admin/apps/earn-vaults.js.map +1 -0
  35. package/dist/admin/apps/organizations.d.ts +2 -0
  36. package/dist/admin/apps/organizations.d.ts.map +1 -1
  37. package/dist/admin/apps/verified-tokens.d.ts +74 -74
  38. package/dist/admin/ui.generated.d.ts +1 -1
  39. package/dist/admin/ui.generated.d.ts.map +1 -1
  40. package/dist/admin/ui.generated.js +99 -43
  41. package/dist/admin/ui.generated.js.map +1 -1
  42. package/dist/analytics/Analytics.d.ts +4 -0
  43. package/dist/analytics/Analytics.d.ts.map +1 -1
  44. package/dist/analytics/Analytics.js +21 -2
  45. package/dist/analytics/Analytics.js.map +1 -1
  46. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  47. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  48. package/dist/analytics/tables/requestEvents.js +59 -39
  49. package/dist/analytics/tables/requestEvents.js.map +1 -1
  50. package/dist/apps/Zones.d.ts +8335 -0
  51. package/dist/apps/Zones.d.ts.map +1 -0
  52. package/dist/apps/Zones.js +38 -0
  53. package/dist/apps/Zones.js.map +1 -0
  54. package/dist/apps/data/App.d.ts +5666 -3934
  55. package/dist/apps/data/App.d.ts.map +1 -1
  56. package/dist/apps/data/App.js +90 -22
  57. package/dist/apps/data/App.js.map +1 -1
  58. package/dist/apps/data/FxOracle.d.ts +1 -1
  59. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  60. package/dist/apps/data/index.d.ts +0 -1
  61. package/dist/apps/data/index.d.ts.map +1 -1
  62. package/dist/apps/data/index.js +0 -1
  63. package/dist/apps/data/index.js.map +1 -1
  64. package/dist/apps/data/routes/activities.d.ts +56 -56
  65. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  66. package/dist/apps/data/routes/activities.js +130 -65
  67. package/dist/apps/data/routes/activities.js.map +1 -1
  68. package/dist/apps/data/routes/addresses.d.ts +65 -65
  69. package/dist/apps/data/routes/balances.d.ts +14 -14
  70. package/dist/apps/data/routes/balances.js +5 -5
  71. package/dist/apps/data/routes/balances.js.map +1 -1
  72. package/dist/apps/data/routes/blocks.d.ts +39 -39
  73. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  74. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  75. package/dist/apps/data/routes/coingecko.js +62 -35
  76. package/dist/apps/data/routes/coingecko.js.map +1 -1
  77. package/dist/apps/data/routes/earn.d.ts +2574 -0
  78. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  79. package/dist/apps/data/routes/earn.js +1574 -0
  80. package/dist/apps/data/routes/earn.js.map +1 -0
  81. package/dist/apps/data/routes/exchanges.d.ts +1626 -719
  82. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  83. package/dist/apps/data/routes/exchanges.js +656 -193
  84. package/dist/apps/data/routes/exchanges.js.map +1 -1
  85. package/dist/apps/data/routes/fee-amm.d.ts +108 -108
  86. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  87. package/dist/apps/data/routes/fee-amm.js +59 -8
  88. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  89. package/dist/apps/data/routes/indexer.d.ts +35 -35
  90. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  91. package/dist/apps/data/routes/indexer.js +23 -3
  92. package/dist/apps/data/routes/indexer.js.map +1 -1
  93. package/dist/apps/data/routes/receipts.d.ts +33 -33
  94. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  95. package/dist/apps/data/routes/receipts.js +11 -11
  96. package/dist/apps/data/routes/receipts.js.map +1 -1
  97. package/dist/apps/data/routes/rpc.d.ts +6 -6
  98. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  99. package/dist/apps/data/routes/rpc.js +214 -22
  100. package/dist/apps/data/routes/rpc.js.map +1 -1
  101. package/dist/apps/data/routes/tokenlist.d.ts +1 -1
  102. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  103. package/dist/apps/data/routes/tokenlist.js +39 -8
  104. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  105. package/dist/apps/data/routes/tokens.d.ts +115 -87
  106. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  107. package/dist/apps/data/routes/tokens.js +194 -91
  108. package/dist/apps/data/routes/tokens.js.map +1 -1
  109. package/dist/apps/data/routes/transactions.d.ts +54 -54
  110. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  111. package/dist/apps/data/routes/transactions.js +78 -39
  112. package/dist/apps/data/routes/transactions.js.map +1 -1
  113. package/dist/apps/data/routes/transfers.d.ts +76 -27
  114. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  115. package/dist/apps/data/routes/transfers.js +165 -67
  116. package/dist/apps/data/routes/transfers.js.map +1 -1
  117. package/dist/apps/data/routes/valuation.d.ts +42 -42
  118. package/dist/apps/data/routes/valuation.js +2 -2
  119. package/dist/apps/data/routes/valuation.js.map +1 -1
  120. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  121. package/dist/apps/data/routes/webhooks.d.ts +370 -368
  122. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  123. package/dist/apps/data/routes/webhooks.js +161 -59
  124. package/dist/apps/data/routes/webhooks.js.map +1 -1
  125. package/dist/apps/data/routes/zones.d.ts +281 -0
  126. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  127. package/dist/apps/data/routes/zones.js +252 -0
  128. package/dist/apps/data/routes/zones.js.map +1 -0
  129. package/dist/apps/docs/reference.js +6 -5
  130. package/dist/apps/docs/reference.js.map +1 -1
  131. package/dist/apps/funding/Access.d.ts +16 -0
  132. package/dist/apps/funding/Access.d.ts.map +1 -0
  133. package/dist/apps/funding/Access.js +22 -0
  134. package/dist/apps/funding/Access.js.map +1 -0
  135. package/dist/apps/funding/App.d.ts +3183 -0
  136. package/dist/apps/funding/App.d.ts.map +1 -0
  137. package/dist/apps/funding/App.js +46 -0
  138. package/dist/apps/funding/App.js.map +1 -0
  139. package/dist/apps/funding/Inventory.d.ts +5 -0
  140. package/dist/apps/funding/Inventory.d.ts.map +1 -0
  141. package/dist/apps/funding/Inventory.js +25 -0
  142. package/dist/apps/funding/Inventory.js.map +1 -0
  143. package/dist/apps/funding/ProviderAttempts.d.ts +5 -0
  144. package/dist/apps/funding/ProviderAttempts.d.ts.map +1 -0
  145. package/dist/apps/funding/ProviderAttempts.js +24 -0
  146. package/dist/apps/funding/ProviderAttempts.js.map +1 -0
  147. package/dist/apps/funding/index.d.ts +2 -0
  148. package/dist/apps/funding/index.d.ts.map +1 -0
  149. package/dist/apps/funding/index.js +2 -0
  150. package/dist/apps/funding/index.js.map +1 -0
  151. package/dist/apps/funding/routes/chains.d.ts +169 -0
  152. package/dist/apps/funding/routes/chains.d.ts.map +1 -0
  153. package/dist/apps/funding/routes/chains.js +80 -0
  154. package/dist/apps/funding/routes/chains.js.map +1 -0
  155. package/dist/apps/funding/routes/deposit-addresses.d.ts +2388 -0
  156. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -0
  157. package/dist/apps/funding/routes/deposit-addresses.js +860 -0
  158. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -0
  159. package/dist/apps/funding/routes/providers.d.ts +91 -0
  160. package/dist/apps/funding/routes/providers.d.ts.map +1 -0
  161. package/dist/apps/funding/routes/providers.js +56 -0
  162. package/dist/apps/funding/routes/providers.js.map +1 -0
  163. package/dist/apps/{data/routes/funding.d.ts → funding/routes/quotes.d.ts} +26 -396
  164. package/dist/apps/funding/routes/quotes.d.ts.map +1 -0
  165. package/dist/apps/funding/routes/quotes.js +188 -0
  166. package/dist/apps/funding/routes/quotes.js.map +1 -0
  167. package/dist/apps/funding/routes/transfers.d.ts +1999 -0
  168. package/dist/apps/funding/routes/transfers.d.ts.map +1 -0
  169. package/dist/apps/funding/routes/transfers.js +614 -0
  170. package/dist/apps/funding/routes/transfers.js.map +1 -0
  171. package/dist/apps/index.d.ts +3 -1
  172. package/dist/apps/index.d.ts.map +1 -1
  173. package/dist/apps/index.js +3 -1
  174. package/dist/apps/index.js.map +1 -1
  175. package/dist/apps/management/App.d.ts +839 -574
  176. package/dist/apps/management/App.d.ts.map +1 -1
  177. package/dist/apps/management/Billing.d.ts +8 -0
  178. package/dist/apps/management/Billing.d.ts.map +1 -1
  179. package/dist/apps/management/Billing.js +12 -0
  180. package/dist/apps/management/Billing.js.map +1 -1
  181. package/dist/apps/management/Error.d.ts +12 -0
  182. package/dist/apps/management/Error.d.ts.map +1 -0
  183. package/dist/apps/management/Error.js +10 -0
  184. package/dist/apps/management/Error.js.map +1 -0
  185. package/dist/apps/management/routes/api-keys.d.ts +296 -19
  186. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  187. package/dist/apps/management/routes/api-keys.js +77 -9
  188. package/dist/apps/management/routes/api-keys.js.map +1 -1
  189. package/dist/apps/management/routes/billing.d.ts +119 -119
  190. package/dist/apps/management/routes/faucet.d.ts +35 -35
  191. package/dist/apps/management/routes/invitations.d.ts +17 -17
  192. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  193. package/dist/apps/management/routes/invitations.js +4 -10
  194. package/dist/apps/management/routes/invitations.js.map +1 -1
  195. package/dist/apps/management/routes/invite-links.d.ts +38 -38
  196. package/dist/apps/management/routes/me.d.ts +6 -6
  197. package/dist/apps/management/routes/members.d.ts +69 -69
  198. package/dist/apps/management/routes/orgs.d.ts +16 -16
  199. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  200. package/dist/apps/management/routes/orgs.js +2 -8
  201. package/dist/apps/management/routes/orgs.js.map +1 -1
  202. package/dist/apps/management/routes/projects.d.ts +19 -19
  203. package/dist/apps/management/routes/scopes.d.ts +1 -1
  204. package/dist/apps/management/routes/scopes.js +2 -2
  205. package/dist/apps/management/routes/scopes.js.map +1 -1
  206. package/dist/apps/management/routes/usage.d.ts +72 -72
  207. package/dist/apps/management/routes/verified-token-requests.d.ts +18 -18
  208. package/dist/apps/management/routes/webhooks.d.ts +122 -122
  209. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  210. package/dist/apps/management/routes/webhooks.js +15 -3
  211. package/dist/apps/management/routes/webhooks.js.map +1 -1
  212. package/dist/apps/mcp.d.ts +2 -3
  213. package/dist/apps/mcp.d.ts.map +1 -1
  214. package/dist/apps/mcp.js +16 -14
  215. package/dist/apps/mcp.js.map +1 -1
  216. package/dist/apps/metadata.d.ts +4 -0
  217. package/dist/apps/metadata.d.ts.map +1 -1
  218. package/dist/apps/metadata.js +10 -0
  219. package/dist/apps/metadata.js.map +1 -1
  220. package/dist/apps/mpp/App.d.ts +57 -58
  221. package/dist/apps/mpp/App.d.ts.map +1 -1
  222. package/dist/apps/mpp/App.js +192 -27
  223. package/dist/apps/mpp/App.js.map +1 -1
  224. package/dist/apps/mpp/Mpp.d.ts +0 -20
  225. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  226. package/dist/apps/mpp/Mpp.js +0 -24
  227. package/dist/apps/mpp/Mpp.js.map +1 -1
  228. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  229. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  230. package/dist/apps/mpp/internal/Adapter.js +66 -0
  231. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  232. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  233. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  234. package/dist/apps/mpp/internal/Error.js +41 -0
  235. package/dist/apps/mpp/internal/Error.js.map +1 -0
  236. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  237. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  238. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  239. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  240. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  241. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  242. package/dist/apps/mpp/internal/Policy.js +57 -0
  243. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  244. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  245. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  246. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  247. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  248. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  249. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  250. package/dist/apps/mpp/internal/Screening.js +20 -0
  251. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  252. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  253. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  254. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  255. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  256. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  257. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  258. package/dist/apps/mpp/internal/Utils.js +24 -0
  259. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  260. package/dist/apps/relay/App.js +183 -23
  261. package/dist/apps/relay/App.js.map +1 -1
  262. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  263. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  264. package/dist/apps/relay/Sponsorships.js +15 -6
  265. package/dist/apps/relay/Sponsorships.js.map +1 -1
  266. package/dist/cloudflare.d.ts +50 -0
  267. package/dist/cloudflare.d.ts.map +1 -1
  268. package/dist/cloudflare.js +178 -0
  269. package/dist/cloudflare.js.map +1 -1
  270. package/dist/db/Db.d.ts +22 -0
  271. package/dist/db/Db.d.ts.map +1 -1
  272. package/dist/db/Db.js +379 -0
  273. package/dist/db/Db.js.map +1 -1
  274. package/dist/db/Schema.d.ts +933 -1
  275. package/dist/db/Schema.d.ts.map +1 -1
  276. package/dist/db/Schema.js +289 -1
  277. package/dist/db/Schema.js.map +1 -1
  278. package/dist/db/tables/earnVaults.d.ts +68 -0
  279. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  280. package/dist/db/tables/earnVaults.js +72 -0
  281. package/dist/db/tables/earnVaults.js.map +1 -0
  282. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  283. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  284. package/dist/db/tables/fundingCatalog.js +85 -0
  285. package/dist/db/tables/fundingCatalog.js.map +1 -0
  286. package/dist/db/tables/fundingDepositAddresses.d.ts +172 -0
  287. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  288. package/dist/db/tables/fundingDepositAddresses.js +218 -0
  289. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  290. package/dist/db/tables/fundingDepositRequestObservations.d.ts +45 -0
  291. package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +1 -0
  292. package/dist/db/tables/fundingDepositRequestObservations.js +46 -0
  293. package/dist/db/tables/fundingDepositRequestObservations.js.map +1 -0
  294. package/dist/db/tables/fundingDeposits.d.ts +171 -0
  295. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  296. package/dist/db/tables/fundingDeposits.js +182 -0
  297. package/dist/db/tables/fundingDeposits.js.map +1 -0
  298. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  299. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  300. package/dist/db/tables/fundingIdempotency.js +103 -0
  301. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  302. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  303. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  304. package/dist/db/tables/fundingTransferEvents.js +18 -0
  305. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  306. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  307. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  308. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  309. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  310. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  311. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  312. package/dist/db/tables/fundingTransfers.js +89 -0
  313. package/dist/db/tables/fundingTransfers.js.map +1 -0
  314. package/dist/db/tables/organizations.d.ts +8 -0
  315. package/dist/db/tables/organizations.d.ts.map +1 -1
  316. package/dist/db/tables/organizations.js +16 -0
  317. package/dist/db/tables/organizations.js.map +1 -1
  318. package/dist/db/tables/projects.d.ts +8 -0
  319. package/dist/db/tables/projects.d.ts.map +1 -1
  320. package/dist/db/tables/projects.js +16 -0
  321. package/dist/db/tables/projects.js.map +1 -1
  322. package/dist/db/tables/requestUsage.d.ts +13 -0
  323. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  324. package/dist/db/tables/requestUsage.js +16 -0
  325. package/dist/db/tables/requestUsage.js.map +1 -1
  326. package/dist/db/tables/sponsoredTransactions.d.ts +2 -2
  327. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  328. package/dist/db/tables/sponsoredTransactions.js +1 -1
  329. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  330. package/dist/db/tables/users.d.ts +8 -0
  331. package/dist/db/tables/users.d.ts.map +1 -1
  332. package/dist/db/tables/users.js +16 -0
  333. package/dist/db/tables/users.js.map +1 -1
  334. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  335. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  336. package/dist/db/tables/verifiedTokens.js +9 -7
  337. package/dist/db/tables/verifiedTokens.js.map +1 -1
  338. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  339. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  340. package/dist/db/tables/webhookSubscriptions.js +24 -3
  341. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  342. package/dist/handlers/relay.js +108 -108
  343. package/dist/handlers/relay.js.map +1 -1
  344. package/dist/internal/Auth.d.ts +37 -11
  345. package/dist/internal/Auth.d.ts.map +1 -1
  346. package/dist/internal/Auth.js +75 -16
  347. package/dist/internal/Auth.js.map +1 -1
  348. package/dist/internal/Cache.d.ts.map +1 -1
  349. package/dist/internal/Cache.js +17 -11
  350. package/dist/internal/Cache.js.map +1 -1
  351. package/dist/internal/Cursor.js +1 -1
  352. package/dist/internal/Cursor.js.map +1 -1
  353. package/dist/internal/EarnRates.d.ts +89 -0
  354. package/dist/internal/EarnRates.d.ts.map +1 -0
  355. package/dist/internal/EarnRates.js +266 -0
  356. package/dist/internal/EarnRates.js.map +1 -0
  357. package/dist/internal/EarnVaults.d.ts +171 -0
  358. package/dist/internal/EarnVaults.d.ts.map +1 -0
  359. package/dist/internal/EarnVaults.js +547 -0
  360. package/dist/internal/EarnVaults.js.map +1 -0
  361. package/dist/internal/EdgeCache.d.ts +10 -3
  362. package/dist/internal/EdgeCache.d.ts.map +1 -1
  363. package/dist/internal/EdgeCache.js +43 -11
  364. package/dist/internal/EdgeCache.js.map +1 -1
  365. package/dist/internal/Id.d.ts +11 -0
  366. package/dist/internal/Id.d.ts.map +1 -1
  367. package/dist/internal/Id.js +13 -0
  368. package/dist/internal/Id.js.map +1 -1
  369. package/dist/internal/Idempotency.d.ts +83 -0
  370. package/dist/internal/Idempotency.d.ts.map +1 -0
  371. package/dist/internal/Idempotency.js +113 -0
  372. package/dist/internal/Idempotency.js.map +1 -0
  373. package/dist/internal/IpAllowlist.d.ts +15 -0
  374. package/dist/internal/IpAllowlist.d.ts.map +1 -0
  375. package/dist/internal/IpAllowlist.js +27 -0
  376. package/dist/internal/IpAllowlist.js.map +1 -0
  377. package/dist/internal/Log.d.ts +64 -9
  378. package/dist/internal/Log.d.ts.map +1 -1
  379. package/dist/internal/Log.js +29 -7
  380. package/dist/internal/Log.js.map +1 -1
  381. package/dist/internal/MetricSink.d.ts.map +1 -1
  382. package/dist/internal/MetricSink.js +47 -1
  383. package/dist/internal/MetricSink.js.map +1 -1
  384. package/dist/internal/OpenApi.d.ts +2 -2
  385. package/dist/internal/OpenApi.d.ts.map +1 -1
  386. package/dist/internal/OpenApi.js +4 -1
  387. package/dist/internal/OpenApi.js.map +1 -1
  388. package/dist/internal/Provider.d.ts +14 -0
  389. package/dist/internal/Provider.d.ts.map +1 -0
  390. package/dist/internal/Provider.js +5 -0
  391. package/dist/internal/Provider.js.map +1 -0
  392. package/dist/internal/Schema.d.ts +6 -1
  393. package/dist/internal/Schema.d.ts.map +1 -1
  394. package/dist/internal/Schema.js +20 -11
  395. package/dist/internal/Schema.js.map +1 -1
  396. package/dist/internal/Store.d.ts +6 -0
  397. package/dist/internal/Store.d.ts.map +1 -1
  398. package/dist/internal/Store.js +35 -0
  399. package/dist/internal/Store.js.map +1 -1
  400. package/dist/internal/Tidx.d.ts +49 -24
  401. package/dist/internal/Tidx.d.ts.map +1 -1
  402. package/dist/internal/Tidx.js +90 -12
  403. package/dist/internal/Tidx.js.map +1 -1
  404. package/dist/internal/Viem.d.ts +90 -65
  405. package/dist/internal/Viem.d.ts.map +1 -1
  406. package/dist/internal/Viem.js +90 -12
  407. package/dist/internal/Viem.js.map +1 -1
  408. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  409. package/dist/internal/WebhookDestination.js +34 -28
  410. package/dist/internal/WebhookDestination.js.map +1 -1
  411. package/dist/internal/Webhooks.d.ts +9 -0
  412. package/dist/internal/Webhooks.d.ts.map +1 -1
  413. package/dist/internal/Webhooks.js +15 -10
  414. package/dist/internal/Webhooks.js.map +1 -1
  415. package/dist/internal/exchange/Provider.d.ts +219 -0
  416. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  417. package/dist/internal/exchange/Provider.js +117 -0
  418. package/dist/internal/exchange/Provider.js.map +1 -0
  419. package/dist/internal/exchange/index.d.ts +2 -0
  420. package/dist/internal/exchange/index.d.ts.map +1 -0
  421. package/dist/internal/exchange/index.js +2 -0
  422. package/dist/internal/exchange/index.js.map +1 -0
  423. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  424. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  425. package/dist/internal/exchange/providers/uniswap.js +553 -0
  426. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  427. package/dist/internal/funding/Action.d.ts +55 -0
  428. package/dist/internal/funding/Action.d.ts.map +1 -0
  429. package/dist/internal/funding/Action.js +74 -0
  430. package/dist/internal/funding/Action.js.map +1 -0
  431. package/dist/internal/funding/Catalog.d.ts +107 -0
  432. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  433. package/dist/internal/funding/Catalog.js +270 -0
  434. package/dist/internal/funding/Catalog.js.map +1 -0
  435. package/dist/internal/funding/Chain.d.ts +76 -0
  436. package/dist/internal/funding/Chain.d.ts.map +1 -0
  437. package/dist/internal/funding/Chain.js +38 -0
  438. package/dist/internal/funding/Chain.js.map +1 -0
  439. package/dist/internal/funding/Deposit.d.ts +408 -0
  440. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  441. package/dist/internal/funding/Deposit.js +318 -0
  442. package/dist/internal/funding/Deposit.js.map +1 -0
  443. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  444. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  445. package/dist/internal/funding/DepositAddress.js +189 -0
  446. package/dist/internal/funding/DepositAddress.js.map +1 -0
  447. package/dist/internal/funding/Evidence.d.ts +48 -0
  448. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  449. package/dist/internal/funding/Evidence.js +315 -0
  450. package/dist/internal/funding/Evidence.js.map +1 -0
  451. package/dist/internal/funding/Provider.d.ts +1288 -0
  452. package/dist/internal/funding/Provider.d.ts.map +1 -0
  453. package/dist/internal/funding/Provider.js +1086 -0
  454. package/dist/internal/funding/Provider.js.map +1 -0
  455. package/dist/internal/funding/Reconciliation.d.ts +127 -0
  456. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  457. package/dist/internal/funding/Reconciliation.js +885 -0
  458. package/dist/internal/funding/Reconciliation.js.map +1 -0
  459. package/dist/internal/funding/Route.d.ts +21 -0
  460. package/dist/internal/funding/Route.d.ts.map +1 -0
  461. package/dist/internal/funding/Route.js +5 -0
  462. package/dist/internal/funding/Route.js.map +1 -0
  463. package/dist/internal/funding/SourceObservation.d.ts +108 -0
  464. package/dist/internal/funding/SourceObservation.d.ts.map +1 -0
  465. package/dist/internal/funding/SourceObservation.js +143 -0
  466. package/dist/internal/funding/SourceObservation.js.map +1 -0
  467. package/dist/internal/funding/Subsidy.d.ts +113 -0
  468. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  469. package/dist/internal/funding/Subsidy.js +138 -0
  470. package/dist/internal/funding/Subsidy.js.map +1 -0
  471. package/dist/internal/funding/Token.d.ts +41 -0
  472. package/dist/internal/funding/Token.d.ts.map +1 -0
  473. package/dist/internal/funding/Token.js +22 -0
  474. package/dist/internal/funding/Token.js.map +1 -0
  475. package/dist/internal/funding/Transfer.d.ts +643 -0
  476. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  477. package/dist/internal/funding/Transfer.js +332 -0
  478. package/dist/internal/funding/Transfer.js.map +1 -0
  479. package/dist/internal/funding/index.d.ts +14 -0
  480. package/dist/internal/funding/index.d.ts.map +1 -0
  481. package/dist/internal/funding/index.js +14 -0
  482. package/dist/internal/funding/index.js.map +1 -0
  483. package/dist/internal/funding/providers/across.d.ts +21 -0
  484. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  485. package/dist/internal/funding/providers/across.js +117 -0
  486. package/dist/internal/funding/providers/across.js.map +1 -0
  487. package/dist/internal/funding/providers/relay.d.ts +88 -0
  488. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  489. package/dist/internal/funding/providers/relay.js +871 -0
  490. package/dist/internal/funding/providers/relay.js.map +1 -0
  491. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  492. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  493. package/dist/internal/funding/providers/rhino.js +116 -0
  494. package/dist/internal/funding/providers/rhino.js.map +1 -0
  495. package/dist/internal/funding/providers/squid.d.ts +19 -0
  496. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  497. package/dist/internal/funding/providers/squid.js +120 -0
  498. package/dist/internal/funding/providers/squid.js.map +1 -0
  499. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  500. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  501. package/dist/internal/funding/providers/symbiosis.js +176 -0
  502. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  503. package/dist/internal/index.d.ts +5 -1
  504. package/dist/internal/index.d.ts.map +1 -1
  505. package/dist/internal/index.js +5 -1
  506. package/dist/internal/index.js.map +1 -1
  507. package/dist/internal/webhookDestinations/url.js +61 -57
  508. package/dist/internal/webhookDestinations/url.js.map +1 -1
  509. package/dist/providers/index.d.ts +43 -0
  510. package/dist/providers/index.d.ts.map +1 -0
  511. package/dist/providers/index.js +19 -0
  512. package/dist/providers/index.js.map +1 -0
  513. package/package.json +10 -5
  514. package/src/ApiKey.test.ts +35 -0
  515. package/src/ApiKey.ts +27 -0
  516. package/src/ApiKeys.test.ts +40 -7
  517. package/src/ApiKeys.ts +46 -10
  518. package/src/App.test.ts +108 -15
  519. package/src/App.ts +296 -138
  520. package/src/Assets.ts +29 -4
  521. package/src/Client.test-d.ts +809 -37
  522. package/src/Scope.test.ts +19 -0
  523. package/src/Scope.ts +28 -11
  524. package/src/Webhooks.test.ts +25 -0
  525. package/src/Webhooks.ts +1 -1
  526. package/src/admin/App.test.ts +9 -2
  527. package/src/admin/App.ts +32 -9
  528. package/src/admin/apps/api-keys.test.ts +190 -22
  529. package/src/admin/apps/api-keys.ts +170 -28
  530. package/src/admin/apps/earn-vaults.test.ts +338 -0
  531. package/src/admin/apps/earn-vaults.ts +572 -0
  532. package/src/admin/apps/scopes.test.ts +16 -1
  533. package/src/admin/ui/plugin.ts +2 -2
  534. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  535. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  536. package/src/admin/ui/src/components/Page.tsx +1 -1
  537. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  538. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  539. package/src/admin/ui/src/lib/client.ts +1 -1
  540. package/src/admin/ui/src/lib/config.ts +1 -1
  541. package/src/admin/ui/src/lib/early-access.ts +8 -9
  542. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  543. package/src/admin/ui/src/lib/format.ts +13 -0
  544. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  545. package/src/admin/ui/src/lib/organizations.ts +7 -1
  546. package/src/admin/ui/src/lib/response.ts +22 -0
  547. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  548. package/src/admin/ui/src/lib/scopes.ts +28 -7
  549. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  550. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  551. package/src/admin/ui/src/router.tsx +2 -2
  552. package/src/admin/ui/src/routes/__root.tsx +9 -8
  553. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  554. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  555. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  556. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  557. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  558. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  559. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  560. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  561. package/src/admin/ui/vite.config.ts +4 -1
  562. package/src/admin/ui.generated.ts +113 -43
  563. package/src/analytics/Analytics.test.ts +69 -10
  564. package/src/analytics/Analytics.ts +24 -1
  565. package/src/analytics/tables/requestEvents.ts +79 -37
  566. package/src/apps/Zones.test.ts +33 -0
  567. package/src/apps/Zones.ts +40 -0
  568. package/src/apps/composition.test.ts +184 -3
  569. package/src/apps/data/App.test.ts +28 -23
  570. package/src/apps/data/App.ts +95 -36
  571. package/src/apps/data/FxOracle.ts +1 -1
  572. package/src/apps/data/index.ts +0 -1
  573. package/src/apps/data/routes/activities.test.ts +82 -6
  574. package/src/apps/data/routes/activities.ts +131 -71
  575. package/src/apps/data/routes/balances.test.ts +50 -37
  576. package/src/apps/data/routes/balances.ts +5 -5
  577. package/src/apps/data/routes/blocks.test.ts +2 -0
  578. package/src/apps/data/routes/coingecko.test.ts +22 -0
  579. package/src/apps/data/routes/coingecko.ts +84 -48
  580. package/src/apps/data/routes/earn.test.ts +1391 -0
  581. package/src/apps/data/routes/earn.ts +2188 -0
  582. package/src/apps/data/routes/exchanges.test.ts +82 -33
  583. package/src/apps/data/routes/exchanges.ts +842 -227
  584. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  585. package/src/apps/data/routes/fee-amm.ts +69 -12
  586. package/src/apps/data/routes/indexer.test.ts +43 -34
  587. package/src/apps/data/routes/indexer.ts +21 -3
  588. package/src/apps/data/routes/receipts.test.ts +5 -3
  589. package/src/apps/data/routes/receipts.ts +13 -11
  590. package/src/apps/data/routes/rpc.test.ts +446 -28
  591. package/src/apps/data/routes/rpc.ts +245 -25
  592. package/src/apps/data/routes/tokenlist.ts +72 -19
  593. package/src/apps/data/routes/tokens.test.ts +6 -8
  594. package/src/apps/data/routes/tokens.ts +258 -86
  595. package/src/apps/data/routes/transactions.test.ts +2 -0
  596. package/src/apps/data/routes/transactions.ts +77 -42
  597. package/src/apps/data/routes/transfers.test.ts +166 -4
  598. package/src/apps/data/routes/transfers.ts +216 -78
  599. package/src/apps/data/routes/valuation.test.ts +62 -9
  600. package/src/apps/data/routes/valuation.ts +2 -2
  601. package/src/apps/data/routes/webhooks.test.ts +386 -43
  602. package/src/apps/data/routes/webhooks.ts +172 -71
  603. package/src/apps/data/routes/zones.test.ts +473 -0
  604. package/src/apps/data/routes/zones.ts +338 -0
  605. package/src/apps/docs/reference.ts +8 -6
  606. package/src/apps/funding/Access.ts +26 -0
  607. package/src/apps/funding/App.test.ts +78 -0
  608. package/src/apps/funding/App.ts +63 -0
  609. package/src/apps/funding/Inventory.ts +30 -0
  610. package/src/apps/funding/ProviderAttempts.ts +26 -0
  611. package/src/apps/funding/index.ts +1 -0
  612. package/src/apps/funding/routes/chains.test.ts +78 -0
  613. package/src/apps/funding/routes/chains.ts +101 -0
  614. package/src/apps/funding/routes/deposit-addresses.test.ts +1628 -0
  615. package/src/apps/funding/routes/deposit-addresses.ts +1015 -0
  616. package/src/apps/funding/routes/providers.test.ts +165 -0
  617. package/src/apps/funding/routes/providers.ts +73 -0
  618. package/src/apps/funding/routes/quotes.test.ts +511 -0
  619. package/src/apps/funding/routes/quotes.ts +205 -0
  620. package/src/apps/funding/routes/transfers.test.ts +1255 -0
  621. package/src/apps/funding/routes/transfers.ts +704 -0
  622. package/src/apps/index.ts +3 -1
  623. package/src/apps/management/Billing.test.ts +29 -0
  624. package/src/apps/management/Billing.ts +23 -0
  625. package/src/apps/management/Error.ts +12 -0
  626. package/src/apps/management/routes/api-keys.test.ts +103 -3
  627. package/src/apps/management/routes/api-keys.ts +98 -10
  628. package/src/apps/management/routes/invitations.ts +4 -11
  629. package/src/apps/management/routes/orgs.ts +2 -9
  630. package/src/apps/management/routes/scopes.test.ts +7 -2
  631. package/src/apps/management/routes/scopes.ts +2 -2
  632. package/src/apps/management/routes/webhooks.test.ts +6 -1
  633. package/src/apps/management/routes/webhooks.ts +15 -3
  634. package/src/apps/mcp.test.ts +17 -2
  635. package/src/apps/mcp.ts +18 -13
  636. package/src/apps/metadata.ts +12 -0
  637. package/src/apps/mpp/App.ts +276 -29
  638. package/src/apps/mpp/Mpp.test.ts +631 -26
  639. package/src/apps/mpp/Mpp.ts +0 -42
  640. package/src/apps/mpp/internal/Adapter.ts +108 -3
  641. package/src/apps/mpp/internal/Error.test.ts +33 -0
  642. package/src/apps/mpp/internal/Error.ts +44 -6
  643. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  644. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  645. package/src/apps/mpp/internal/Policy.test.ts +128 -0
  646. package/src/apps/mpp/internal/Policy.ts +98 -0
  647. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  648. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  649. package/src/apps/mpp/internal/Screening.ts +40 -3
  650. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  651. package/src/apps/mpp/internal/Utils.ts +30 -0
  652. package/src/apps/relay/App.test.ts +493 -62
  653. package/src/apps/relay/App.ts +233 -23
  654. package/src/apps/relay/Sponsorships.test.ts +49 -0
  655. package/src/apps/relay/Sponsorships.ts +18 -6
  656. package/src/cloudflare.ts +279 -0
  657. package/src/db/Db.ts +501 -0
  658. package/src/db/Schema.ts +349 -2
  659. package/src/db/tables/earnVaults.test.ts +185 -0
  660. package/src/db/tables/earnVaults.ts +151 -0
  661. package/src/db/tables/fundingCatalog.test.ts +108 -0
  662. package/src/db/tables/fundingCatalog.ts +157 -0
  663. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  664. package/src/db/tables/fundingDepositAddresses.ts +404 -0
  665. package/src/db/tables/fundingDepositRequestObservations.test.ts +106 -0
  666. package/src/db/tables/fundingDepositRequestObservations.ts +99 -0
  667. package/src/db/tables/fundingDeposits.test.ts +399 -0
  668. package/src/db/tables/fundingDeposits.ts +373 -0
  669. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  670. package/src/db/tables/fundingIdempotency.ts +180 -0
  671. package/src/db/tables/fundingTransferEvents.ts +28 -0
  672. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  673. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  674. package/src/db/tables/fundingTransfers.test.ts +89 -0
  675. package/src/db/tables/fundingTransfers.ts +153 -0
  676. package/src/db/tables/organizations.ts +16 -0
  677. package/src/db/tables/projects.ts +16 -0
  678. package/src/db/tables/requestUsage.ts +23 -0
  679. package/src/db/tables/sponsoredTransactions.test.ts +11 -0
  680. package/src/db/tables/sponsoredTransactions.ts +3 -3
  681. package/src/db/tables/users.ts +16 -0
  682. package/src/db/tables/verifiedTokens.ts +19 -14
  683. package/src/db/tables/webhookSubscriptions.ts +58 -3
  684. package/src/handlers/relay.test.ts +2 -0
  685. package/src/handlers/relay.ts +95 -99
  686. package/src/internal/Auth.test.ts +225 -5
  687. package/src/internal/Auth.ts +109 -20
  688. package/src/internal/Cache.test.ts +37 -3
  689. package/src/internal/Cache.ts +14 -10
  690. package/src/internal/Cursor.test.ts +2 -2
  691. package/src/internal/Cursor.ts +1 -1
  692. package/src/internal/EarnRates.test.ts +125 -0
  693. package/src/internal/EarnRates.ts +409 -0
  694. package/src/internal/EarnVaults.test.ts +195 -0
  695. package/src/internal/EarnVaults.ts +876 -0
  696. package/src/internal/EdgeCache.test.ts +26 -7
  697. package/src/internal/EdgeCache.ts +48 -9
  698. package/src/internal/Id.ts +14 -0
  699. package/src/internal/Idempotency.test.ts +109 -0
  700. package/src/internal/Idempotency.ts +237 -0
  701. package/src/internal/IpAllowlist.test.ts +52 -0
  702. package/src/internal/IpAllowlist.ts +39 -0
  703. package/src/internal/Log.test-d.ts +41 -8
  704. package/src/internal/Log.test.ts +196 -9
  705. package/src/internal/Log.ts +124 -17
  706. package/src/internal/MetricSink.test.ts +244 -4
  707. package/src/internal/MetricSink.ts +51 -1
  708. package/src/internal/OpenApi.ts +4 -1
  709. package/src/internal/Provider.test.ts +17 -0
  710. package/src/internal/Provider.ts +17 -0
  711. package/src/internal/Schema.ts +27 -17
  712. package/src/internal/Store.test.ts +25 -0
  713. package/src/internal/Store.ts +46 -0
  714. package/src/internal/Tidx.local.test.ts +78 -3
  715. package/src/internal/Tidx.test.ts +240 -18
  716. package/src/internal/Tidx.ts +129 -33
  717. package/src/internal/VerifiedTokens.test.ts +15 -0
  718. package/src/internal/Viem.test.ts +198 -17
  719. package/src/internal/Viem.ts +127 -28
  720. package/src/internal/WebhookDestination.ts +25 -23
  721. package/src/internal/Webhooks.test.ts +59 -0
  722. package/src/internal/Webhooks.ts +34 -10
  723. package/src/internal/exchange/Provider.test.ts +216 -0
  724. package/src/internal/exchange/Provider.ts +326 -0
  725. package/src/internal/exchange/index.test.ts +6 -0
  726. package/src/internal/exchange/index.ts +1 -0
  727. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  728. package/src/internal/exchange/providers/uniswap.ts +682 -0
  729. package/src/internal/funding/Action.test.ts +138 -0
  730. package/src/internal/funding/Action.ts +117 -0
  731. package/src/internal/funding/Catalog.test.ts +311 -0
  732. package/src/internal/funding/Catalog.ts +347 -0
  733. package/src/internal/funding/Chain.test.ts +79 -0
  734. package/src/internal/funding/Chain.ts +120 -0
  735. package/src/internal/funding/Deposit.test.ts +26 -0
  736. package/src/internal/funding/Deposit.ts +522 -0
  737. package/src/internal/funding/DepositAddress.test.ts +18 -0
  738. package/src/internal/funding/DepositAddress.ts +312 -0
  739. package/src/internal/funding/Evidence.test.ts +297 -0
  740. package/src/internal/funding/Evidence.ts +425 -0
  741. package/src/internal/funding/Provider.test.ts +1328 -0
  742. package/src/internal/funding/Provider.ts +1911 -0
  743. package/src/internal/funding/Reconciliation.local.test.ts +511 -0
  744. package/src/internal/funding/Reconciliation.test.ts +3037 -0
  745. package/src/internal/funding/Reconciliation.ts +1202 -0
  746. package/src/internal/funding/Route.test.ts +66 -0
  747. package/src/internal/funding/Route.ts +29 -0
  748. package/src/internal/funding/SourceObservation.test.ts +301 -0
  749. package/src/internal/funding/SourceObservation.ts +267 -0
  750. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  751. package/src/internal/funding/Subsidy.test.ts +75 -0
  752. package/src/internal/funding/Subsidy.ts +260 -0
  753. package/src/internal/funding/Token.test.ts +47 -0
  754. package/src/internal/funding/Token.ts +59 -0
  755. package/src/internal/funding/Transfer.test.ts +369 -0
  756. package/src/internal/funding/Transfer.ts +522 -0
  757. package/src/internal/funding/index.test.ts +21 -0
  758. package/src/internal/funding/index.ts +13 -0
  759. package/src/internal/funding/providers/across.ts +149 -0
  760. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  761. package/src/internal/funding/providers/relay.test.ts +564 -0
  762. package/src/internal/funding/providers/relay.ts +1060 -0
  763. package/src/internal/funding/providers/rhino.ts +139 -0
  764. package/src/internal/funding/providers/squid.ts +151 -0
  765. package/src/internal/funding/providers/symbiosis.ts +221 -0
  766. package/src/internal/index.test.ts +5 -1
  767. package/src/internal/index.ts +5 -1
  768. package/src/internal/webhookDestinations/url.ts +49 -45
  769. package/src/providers/index.test.ts +14 -0
  770. package/src/providers/index.ts +54 -0
  771. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  772. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  773. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  774. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  775. package/dist/apps/data/routes/funding.d.ts.map +0 -1
  776. package/dist/apps/data/routes/funding.js +0 -410
  777. package/dist/apps/data/routes/funding.js.map +0 -1
  778. package/dist/internal/FundingQuotes.d.ts +0 -864
  779. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  780. package/dist/internal/FundingQuotes.js +0 -672
  781. package/dist/internal/FundingQuotes.js.map +0 -1
  782. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  783. package/src/apps/data/routes/funding.test.ts +0 -503
  784. package/src/apps/data/routes/funding.ts +0 -604
  785. package/src/internal/FundingQuotes.test.ts +0 -456
  786. package/src/internal/FundingQuotes.ts +0 -944
@@ -0,0 +1,139 @@
1
+ import { Value as core_Value } from 'ox'
2
+ import * as z from 'zod/mini'
3
+
4
+ import type * as FundingChain from '../Chain.js'
5
+ import type * as FundingToken from '../Token.js'
6
+ import * as FundingProvider from '../Provider.js'
7
+
8
+ const defaultBaseUrl = 'https://api.rhino.fi/bridge'
9
+ const defaultFetch: FundingProvider.Fetch = (input, init) => globalThis.fetch(input, init)
10
+
11
+ const chainIds = {
12
+ 'eip155:4217': 'TEMPO',
13
+ 'eip155:8453': 'BASE',
14
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp': 'SOLANA',
15
+ 'tron:0x2b6653dc': 'TRON',
16
+ } as const satisfies Record<string, string>
17
+
18
+ const tokenIds = {
19
+ usdce: 'USDC',
20
+ usdt0: 'USDT',
21
+ } as const satisfies Record<string, string>
22
+
23
+ namespace schema {
24
+ export const Quote = z.object({
25
+ _tag: z.literal('bridge'),
26
+ chainIn: z.string(),
27
+ chainOut: z.string(),
28
+ estimatedDuration: z.optional(z.nullable(z.number().check(z.nonnegative()))),
29
+ payAmount: z.string().check(z.regex(/^\d+(\.\d+)?$/)),
30
+ receiveAmount: z.string().check(z.regex(/^\d+(\.\d+)?$/)),
31
+ token: z.string(),
32
+ })
33
+ }
34
+
35
+ /** Creates a Rhino funding provider backed by its public bridge-and-swap quote endpoint. */
36
+ export function rhino(options: rhino.Options = {}) {
37
+ const endpoint = new URL(options.baseUrl ?? defaultBaseUrl)
38
+ endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, '')}/quote/bridge-swap/public`
39
+ const fetch = options.fetch ?? defaultFetch
40
+ const now = options.now ?? (() => new Date())
41
+
42
+ return FundingProvider.from({
43
+ id: 'rhino',
44
+ name: 'Rhino',
45
+ async getQuote({ cache, candidate, route }, signal) {
46
+ const chainIn = chainId(route.source.chain)
47
+ const chainOut = chainId(route.destination.chain)
48
+ const tokenOut = tokenId(route.destination)
49
+ const url = new URL(endpoint)
50
+ url.search = new URLSearchParams({
51
+ amount: candidate.sourceAmount.formatted,
52
+ amountNative: '0',
53
+ chainIn,
54
+ chainOut,
55
+ mode: 'pay',
56
+ tokenIn: candidate.sourceToken.symbol,
57
+ tokenOut,
58
+ }).toString()
59
+
60
+ try {
61
+ const quote = await FundingProvider.requestJson(url, {
62
+ fetch,
63
+ headers: cache.bypass ? { 'cache-control': 'no-cache' } : undefined,
64
+ signal,
65
+ })
66
+ const parsed = schema.Quote.safeParse(quote)
67
+ if (!parsed.success) throw new FundingProvider.ProviderPayloadError()
68
+ const response = parsed.data
69
+ const inputAmount = parseAmount(response.payAmount, candidate.sourceToken.decimals)
70
+ const destinationAmount = parseAmount(
71
+ response.receiveAmount,
72
+ candidate.destinationToken.decimals,
73
+ )
74
+ if (
75
+ response.chainIn !== chainIn ||
76
+ response.chainOut !== chainOut ||
77
+ response.token !== tokenOut ||
78
+ inputAmount !== candidate.sourceAmount.amount ||
79
+ destinationAmount === undefined ||
80
+ BigInt(destinationAmount) <= 0n
81
+ )
82
+ throw new FundingProvider.ProviderPayloadError()
83
+
84
+ return {
85
+ destinationAmount,
86
+ quality: {
87
+ ...(response.estimatedDuration === undefined || response.estimatedDuration === null
88
+ ? {}
89
+ : { estimatedSeconds: Math.ceil(response.estimatedDuration / 1_000) }),
90
+ liquiditySource: 'providerQuote',
91
+ sourceDetail: 'rhino:bridge-swap-public',
92
+ tier: 'liquid',
93
+ },
94
+ sampledAt: now().toISOString(),
95
+ status: 'available',
96
+ }
97
+ } catch (cause) {
98
+ const unavailable = FundingProvider.unavailable(cause, ['NoRouteFoundError'])
99
+ if (!unavailable) throw cause
100
+ return FundingProvider.unavailableResult({
101
+ detail: 'rhino:bridge-swap-public',
102
+ message: unavailable,
103
+ now: now(),
104
+ source: 'providerQuote',
105
+ })
106
+ }
107
+ },
108
+ })
109
+ }
110
+
111
+ export declare namespace rhino {
112
+ /** Rhino provider options. */
113
+ type Options = {
114
+ /** Override for tests or Rhino test environments. */
115
+ baseUrl?: string | undefined
116
+ /** Fetch implementation override for tests. */
117
+ fetch?: FundingProvider.Fetch | undefined
118
+ /** Clock override for deterministic tests. */
119
+ now?: (() => Date) | undefined
120
+ }
121
+ }
122
+
123
+ function parseAmount(value: string, decimals: number) {
124
+ const fraction = value.split('.')[1]?.replace(/0+$/, '') ?? ''
125
+ if (fraction.length > decimals) return undefined
126
+ return core_Value.from(value, decimals).toString()
127
+ }
128
+
129
+ function chainId(chain: FundingChain.Chain) {
130
+ const id = chainIds[chain.id as keyof typeof chainIds]
131
+ if (!id) throw new FundingProvider.ProviderConfigurationError()
132
+ return id
133
+ }
134
+
135
+ function tokenId(token: FundingToken.Resolved) {
136
+ const id = tokenIds[token.slug as keyof typeof tokenIds]
137
+ if (!id) throw new FundingProvider.ProviderConfigurationError()
138
+ return id
139
+ }
@@ -0,0 +1,151 @@
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://v2.api.squidrouter.com/v2'
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.union([z.string(), 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
+ route: z.object({
21
+ estimate: z.object({
22
+ estimatedRouteDuration: z.number().check(z.nonnegative()),
23
+ fromAmount: IntegerString,
24
+ fromToken: Token,
25
+ toAmount: IntegerString,
26
+ toAmountMin: IntegerString,
27
+ toToken: Token,
28
+ }),
29
+ }),
30
+ })
31
+
32
+ export const AmountUnavailable = z.object({
33
+ message: z.literal('Please increase the swap amount and try again.'),
34
+ type: z.literal('BAD_REQUEST'),
35
+ })
36
+ }
37
+
38
+ /** Creates a Squid funding provider backed by `/v2/route`. */
39
+ export function squid(options: squid.Options) {
40
+ if (options.integratorId.length === 0) throw new FundingProvider.ProviderConfigurationError()
41
+ if (!Address.validate(options.userAddress, { strict: false }))
42
+ throw new FundingProvider.ProviderConfigurationError()
43
+
44
+ const endpoint = new URL(options.baseUrl ?? defaultBaseUrl)
45
+ endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, '')}/route`
46
+ const fetch = options.fetch ?? defaultFetch
47
+ const now = options.now ?? (() => new Date())
48
+
49
+ return FundingProvider.from({
50
+ id: 'squid',
51
+ name: 'Squid',
52
+ async getQuote({ candidate, route }, signal) {
53
+ const destinationChainId = FundingChain.eip155Id(route.destination.chain)
54
+ const sourceChainId = FundingChain.eip155Id(route.source.chain)
55
+ try {
56
+ const quote = await FundingProvider.requestJson(endpoint, {
57
+ body: {
58
+ fromAddress: options.userAddress,
59
+ fromAmount: candidate.sourceAmount.amount,
60
+ fromChain: sourceChainId,
61
+ fromToken: candidate.sourceToken.address,
62
+ quoteOnly: true,
63
+ // V1 quotes use a fixed 1% tolerance; callers cannot customize execution policy.
64
+ slippage: 1,
65
+ toAddress: options.userAddress,
66
+ toChain: destinationChainId,
67
+ toToken: candidate.destinationToken.address,
68
+ },
69
+ fetch,
70
+ headers: { 'x-integrator-id': options.integratorId },
71
+ method: 'POST',
72
+ signal,
73
+ })
74
+ const parsed = schema.Quote.safeParse(quote)
75
+ if (!parsed.success) throw new FundingProvider.ProviderPayloadError()
76
+ const response = parsed.data.route.estimate
77
+ if (
78
+ response.fromAmount !== candidate.sourceAmount.amount ||
79
+ !matchesToken(response.fromToken, sourceChainId, candidate.sourceToken) ||
80
+ !matchesToken(response.toToken, destinationChainId, candidate.destinationToken) ||
81
+ BigInt(response.toAmount) <= 0n ||
82
+ BigInt(response.toAmountMin) <= 0n ||
83
+ BigInt(response.toAmountMin) > BigInt(response.toAmount)
84
+ )
85
+ throw new FundingProvider.ProviderPayloadError()
86
+
87
+ return {
88
+ destinationAmountMin: response.toAmountMin,
89
+ destinationAmount: response.toAmount,
90
+ quality: {
91
+ estimatedSeconds: Math.ceil(response.estimatedRouteDuration),
92
+ liquiditySource: 'providerQuote',
93
+ sourceDetail: 'squid:route-v2',
94
+ tier: 'liquid',
95
+ },
96
+ sampledAt: now().toISOString(),
97
+ status: 'available',
98
+ }
99
+ } catch (cause) {
100
+ const unavailable =
101
+ FundingProvider.unavailable(cause, [
102
+ 'NO_ROUTE',
103
+ 'NO_ROUTE_FOUND',
104
+ 'ROUTE_NOT_FOUND',
105
+ 'UNSUPPORTED_ROUTE',
106
+ ]) ?? amountUnavailable(cause)
107
+ if (!unavailable) throw cause
108
+ return FundingProvider.unavailableResult({
109
+ detail: 'squid:route-v2',
110
+ message: unavailable,
111
+ now: now(),
112
+ source: 'providerQuote',
113
+ })
114
+ }
115
+ },
116
+ })
117
+ }
118
+
119
+ export declare namespace squid {
120
+ /** Squid provider options. */
121
+ type Options = {
122
+ /** Override for tests or Squid test environments. */
123
+ baseUrl?: string | undefined
124
+ /** Fetch implementation override for tests. */
125
+ fetch?: FundingProvider.Fetch | undefined
126
+ /** Squid integrator id sent in the required request header. */
127
+ integratorId: string
128
+ /** Clock override for deterministic tests. */
129
+ now?: (() => Date) | undefined
130
+ /** Quote wallet address used as the Squid sender and recipient. */
131
+ userAddress: string
132
+ }
133
+ }
134
+
135
+ function amountUnavailable(cause: unknown) {
136
+ if (!(cause instanceof FundingProvider.ProviderResponseError) || cause.status !== 400)
137
+ return undefined
138
+ return schema.AmountUnavailable.safeParse(cause.body).success ? 'AMOUNT_TOO_LOW' : undefined
139
+ }
140
+
141
+ function matchesToken(
142
+ token: z.output<typeof schema.Quote>['route']['estimate']['fromToken'],
143
+ chainId: string,
144
+ expected: FundingProvider.TokenRef,
145
+ ) {
146
+ return (
147
+ token.address.toLowerCase() === expected.address.toLowerCase() &&
148
+ String(token.chainId) === chainId &&
149
+ token.decimals === expected.decimals
150
+ )
151
+ }
@@ -0,0 +1,221 @@
1
+ import { Address } from 'ox'
2
+ import * as z from 'zod/mini'
3
+
4
+ import * as Store from '../../Store.js'
5
+ import * as FundingChain from '../Chain.js'
6
+ import * as FundingProvider from '../Provider.js'
7
+ import type * as FundingToken from '../Token.js'
8
+
9
+ const defaultBaseUrl = 'https://api.symbiosis.finance/crosschain'
10
+ const defaultFetch: FundingProvider.Fetch = (input, init) => globalThis.fetch(input, init)
11
+ // Keep one upstream slot free for deployment smoke tests and operational probes.
12
+ const rateLimit = 4
13
+ const rateLimitWindowMs = 1_000
14
+ const tronChainId = 728_126_428
15
+ const tronUsdtAddress = '0xa614f803b6fd780986a42c78ec9c7f77e6ded13c'
16
+
17
+ namespace schema {
18
+ const IntegerString = z.string().check(z.regex(/^\d+$/))
19
+
20
+ export const Token = z.object({
21
+ address: z.string(),
22
+ chainId: z.number().check(z.int(), z.nonnegative()),
23
+ decimals: z.number().check(z.int(), z.nonnegative()),
24
+ })
25
+
26
+ const TokenAmount = z.extend(Token, { amount: IntegerString })
27
+
28
+ export const Quote = z.object({
29
+ estimatedTime: z.optional(z.number().check(z.nonnegative())),
30
+ kind: z.union([z.literal('bridge'), z.literal('crosschain-swap'), z.literal('intent-swap')]),
31
+ routes: z
32
+ .array(
33
+ z.object({
34
+ tokens: z.array(Token).check(z.minLength(1)),
35
+ }),
36
+ )
37
+ .check(z.minLength(1)),
38
+ tokenAmountOut: TokenAmount,
39
+ tokenAmountOutMin: TokenAmount,
40
+ tx: z.object({ chainId: z.number().check(z.int(), z.nonnegative()) }),
41
+ type: z.union([z.literal('evm'), z.literal('tron')]),
42
+ })
43
+
44
+ export const AmountUnavailable = z.object({
45
+ message: z.literal('Amount is too low to cover fees'),
46
+ })
47
+ }
48
+
49
+ /** Creates a Symbiosis funding provider backed by `/v2/quote`. */
50
+ export function symbiosis(options: symbiosis.Options) {
51
+ if (!Address.validate(options.userAddress, { strict: false }))
52
+ throw new FundingProvider.ProviderConfigurationError()
53
+
54
+ const endpoint = new URL(options.baseUrl ?? defaultBaseUrl)
55
+ endpoint.pathname = `${endpoint.pathname.replace(/\/+$/, '')}/v2/quote`
56
+ const fetch = options.fetch ?? defaultFetch
57
+ const now = options.now ?? (() => new Date())
58
+ const rateLimitStore = options.rateLimitStore ?? Store.memory()
59
+
60
+ return FundingProvider.from({
61
+ id: 'symbiosis',
62
+ name: 'Symbiosis',
63
+ async getQuote({ candidate, route }, signal) {
64
+ const destinationChainId = chainId(route.destination.chain)
65
+ const sourceChainId = chainId(route.source.chain)
66
+ const sourceTokenAddress = tokenAddress(route.source)
67
+ try {
68
+ await consumeQuota(rateLimitStore, now())
69
+ const quote = await FundingProvider.requestJson(endpoint, {
70
+ body: {
71
+ from: options.userAddress,
72
+ slippage: 100,
73
+ to: options.userAddress,
74
+ tokenAmountIn: {
75
+ address: sourceTokenAddress,
76
+ amount: candidate.sourceAmount.amount,
77
+ chainId: sourceChainId,
78
+ decimals: candidate.sourceToken.decimals,
79
+ symbol: candidate.sourceToken.symbol,
80
+ },
81
+ tokenOut: {
82
+ address: candidate.destinationToken.address,
83
+ chainId: destinationChainId,
84
+ decimals: candidate.destinationToken.decimals,
85
+ symbol: candidate.destinationToken.symbol,
86
+ },
87
+ },
88
+ fetch,
89
+ headers: { 'x-partner-id': 'tempo' },
90
+ method: 'POST',
91
+ signal,
92
+ })
93
+ const parsed = schema.Quote.safeParse(quote)
94
+ if (!parsed.success) throw new FundingProvider.ProviderPayloadError()
95
+ const response = parsed.data
96
+ const firstToken = response.routes[0]!.tokens[0]!
97
+ const lastRoute = response.routes[response.routes.length - 1]!
98
+ const lastToken = lastRoute.tokens[lastRoute.tokens.length - 1]!
99
+ if (
100
+ response.tx.chainId !== sourceChainId ||
101
+ response.type !== candidate.sourceChain.kind ||
102
+ !matchesToken(firstToken, {
103
+ address: sourceTokenAddress,
104
+ chainId: sourceChainId,
105
+ decimals: candidate.sourceToken.decimals,
106
+ }) ||
107
+ !matchesToken(lastToken, {
108
+ address: candidate.destinationToken.address,
109
+ chainId: destinationChainId,
110
+ decimals: candidate.destinationToken.decimals,
111
+ }) ||
112
+ !matchesToken(response.tokenAmountOut, {
113
+ address: candidate.destinationToken.address,
114
+ chainId: destinationChainId,
115
+ decimals: candidate.destinationToken.decimals,
116
+ }) ||
117
+ !matchesToken(response.tokenAmountOutMin, {
118
+ address: candidate.destinationToken.address,
119
+ chainId: destinationChainId,
120
+ decimals: candidate.destinationToken.decimals,
121
+ }) ||
122
+ BigInt(response.tokenAmountOut.amount) <= 0n ||
123
+ BigInt(response.tokenAmountOutMin.amount) <= 0n ||
124
+ BigInt(response.tokenAmountOutMin.amount) > BigInt(response.tokenAmountOut.amount)
125
+ )
126
+ throw new FundingProvider.ProviderPayloadError()
127
+
128
+ return {
129
+ destinationAmountMin: response.tokenAmountOutMin.amount,
130
+ destinationAmount: response.tokenAmountOut.amount,
131
+ quality: {
132
+ ...(response.estimatedTime === undefined
133
+ ? {}
134
+ : { estimatedSeconds: Math.ceil(response.estimatedTime) }),
135
+ liquiditySource: 'providerQuote',
136
+ sourceDetail: 'symbiosis:quote-v2',
137
+ tier: 'liquid',
138
+ },
139
+ sampledAt: now().toISOString(),
140
+ status: 'available',
141
+ }
142
+ } catch (cause) {
143
+ const unavailable =
144
+ FundingProvider.unavailable(cause, [
145
+ 'AMOUNT_TOO_LOW',
146
+ 'NO_ROUTE',
147
+ 'NO_ROUTE_FOUND',
148
+ 'ROUTE_NOT_FOUND',
149
+ 'UNSUPPORTED_ROUTE',
150
+ ]) ?? amountUnavailable(cause)
151
+ if (!unavailable) throw cause
152
+ return FundingProvider.unavailableResult({
153
+ detail: 'symbiosis:quote-v2',
154
+ message: unavailable,
155
+ now: now(),
156
+ source: 'providerQuote',
157
+ })
158
+ }
159
+ },
160
+ })
161
+ }
162
+
163
+ export declare namespace symbiosis {
164
+ /** Symbiosis provider options. */
165
+ type Options = {
166
+ /** Override for tests or Symbiosis test environments. */
167
+ baseUrl?: string | undefined
168
+ /** Fetch implementation override for tests. */
169
+ fetch?: FundingProvider.Fetch | undefined
170
+ /** Clock override for deterministic tests. */
171
+ now?: (() => Date) | undefined
172
+ /** Atomic store used to enforce the provider-wide quote quota. */
173
+ rateLimitStore?: Store.Store | undefined
174
+ /** Quote wallet address used as the Symbiosis sender and recipient. */
175
+ userAddress: string
176
+ }
177
+ }
178
+
179
+ async function consumeQuota(store: Store.Store, now: Date) {
180
+ const time = now.getTime()
181
+ const bucket = Math.floor(time / rateLimitWindowMs)
182
+ const count = await Store.increment(store, `funding:symbiosis:quote:${bucket}`, {
183
+ ttl: rateLimitWindowMs * 2,
184
+ })
185
+ if (count > rateLimit) throw new FundingProvider.ProviderRateLimitError()
186
+ }
187
+
188
+ function amountUnavailable(cause: unknown) {
189
+ if (!(cause instanceof FundingProvider.ProviderResponseError) || cause.status !== 400)
190
+ return undefined
191
+ return schema.AmountUnavailable.safeParse(cause.body).success ? 'AMOUNT_TOO_LOW' : undefined
192
+ }
193
+
194
+ function chainId(chain: FundingChain.Chain) {
195
+ if (chain.kind === 'tron') return tronChainId
196
+ return Number(FundingChain.eip155Id(chain))
197
+ }
198
+
199
+ function tokenAddress(token: FundingToken.Resolved) {
200
+ return token.chain.kind === 'tron' ? tronUsdtAddress : token.address
201
+ }
202
+
203
+ function matchesToken(token: z.output<typeof schema.Token>, options: matchesToken.Options) {
204
+ return (
205
+ token.address.toLowerCase() === options.address.toLowerCase() &&
206
+ token.chainId === options.chainId &&
207
+ token.decimals === options.decimals
208
+ )
209
+ }
210
+
211
+ declare namespace matchesToken {
212
+ /** Expected provider token identity. */
213
+ type Options = {
214
+ /** Provider-specific token address. */
215
+ address: string
216
+ /** Provider-specific chain id. */
217
+ chainId: number
218
+ /** Token decimal precision. */
219
+ decimals: number
220
+ }
221
+ }
@@ -7,15 +7,19 @@ test('exports internal modules', () => {
7
7
  "Cache",
8
8
  "Cursor",
9
9
  "EdgeCache",
10
+ "EarnVaults",
10
11
  "Errors",
12
+ "Exchange",
11
13
  "Fees",
12
- "FundingQuotes",
14
+ "Funding",
13
15
  "Id",
16
+ "Idempotency",
14
17
  "Log",
15
18
  "MetricSink",
16
19
  "Mpp",
17
20
  "OpenApi",
18
21
  "Path",
22
+ "Provider",
19
23
  "RateLimit",
20
24
  "Response",
21
25
  "RpcSchema",
@@ -2,15 +2,19 @@ export * as Auth from './Auth.js'
2
2
  export * as Cache from './Cache.js'
3
3
  export * as Cursor from './Cursor.js'
4
4
  export * as EdgeCache from './EdgeCache.js'
5
+ export * as EarnVaults from './EarnVaults.js'
5
6
  export * as Errors from './Errors.js'
7
+ export * as Exchange from './exchange/index.js'
6
8
  export * as Fees from './Fees.js'
7
- export * as FundingQuotes from './FundingQuotes.js'
9
+ export * as Funding from './funding/index.js'
8
10
  export * as Id from './Id.js'
11
+ export * as Idempotency from './Idempotency.js'
9
12
  export * as Log from './Log.js'
10
13
  export * as MetricSink from './MetricSink.js'
11
14
  export * as Mpp from './Mpp.js'
12
15
  export * as OpenApi from './OpenApi.js'
13
16
  export * as Path from './Path.js'
17
+ export * as Provider from './Provider.js'
14
18
  export * as RateLimit from './RateLimit.js'
15
19
  export * as Response from './Response.js'
16
20
  export * as RpcSchema from './RpcSchema.js'
@@ -67,62 +67,66 @@ export function assertDeliverableUrl(input: string): URL {
67
67
  if (url.protocol !== 'https:') throw new WebhookDestination.InvalidUrlError('protocol', input)
68
68
  if (url.username || url.password)
69
69
  throw new WebhookDestination.InvalidUrlError('credentials', input)
70
- if (isBlockedHost(url.hostname))
70
+ if (Hostname.isBlocked(url.hostname))
71
71
  throw new WebhookDestination.InvalidUrlError('blocked_host', input)
72
72
 
73
73
  return url
74
74
  }
75
75
 
76
- function isBlockedHost(hostname: string): boolean {
77
- // URL hostnames preserve IPv6 brackets and are already lowercased for names.
78
- const host = hostname.replace(/^\[|\]$/g, '').toLowerCase()
76
+ namespace Hostname {
77
+ export function isBlocked(hostname: string): boolean {
78
+ // URL hostnames preserve IPv6 brackets and are already lowercased for names.
79
+ const host = hostname.replace(/^\[|\]$/g, '').toLowerCase()
79
80
 
80
- if (host === 'localhost' || host.endsWith('.localhost')) return true
81
- if (host === 'metadata.google.internal') return true
82
- if (host.length === 0) return true
81
+ if (host === 'localhost' || host.endsWith('.localhost')) return true
82
+ if (host === 'metadata.google.internal') return true
83
+ if (host.length === 0) return true
83
84
 
84
- if (isIpv4(host)) return isBlockedIpv4(host)
85
- if (host.includes(':')) return isBlockedIpv6(host)
86
- return false
87
- }
85
+ if (isIpv4(host)) return isBlockedIpv4(host)
86
+ if (host.includes(':')) return isBlockedIpv6(host)
87
+ return false
88
+ }
88
89
 
89
- function isIpv4(host: string): boolean {
90
- const parts = host.split('.')
91
- return parts.length === 4 && parts.every((part) => /^\d{1,3}$/.test(part) && Number(part) <= 255)
92
- }
90
+ function isIpv4(host: string): boolean {
91
+ const parts = host.split('.')
92
+ return (
93
+ parts.length === 4 && parts.every((part) => /^\d{1,3}$/.test(part) && Number(part) <= 255)
94
+ )
95
+ }
93
96
 
94
- function isBlockedIpv4(host: string): boolean {
95
- const [a, b] = host.split('.').map(Number) as [number, number, number, number]
96
- if (a === 0 || a === 10 || a === 127) return true // unspecified, private, loopback
97
- if (a === 169 && b === 254) return true // link-local (incl. cloud metadata)
98
- if (a === 172 && b >= 16 && b <= 31) return true // private
99
- if (a === 192 && b === 168) return true // private
100
- if (a === 100 && b >= 64 && b <= 127) return true // carrier-grade NAT
101
- return false
102
- }
97
+ function isBlockedIpv4(host: string): boolean {
98
+ const [a, b] = host.split('.').map(Number) as [number, number, number, number]
99
+ if (a === 0 || a === 10 || a === 127) return true // unspecified, private, loopback
100
+ if (a === 169 && b === 254) return true // link-local (incl. cloud metadata)
101
+ if (a === 172 && b >= 16 && b <= 31) return true // private
102
+ if (a === 192 && b === 168) return true // private
103
+ if (a === 100 && b >= 64 && b <= 127) return true // carrier-grade NAT
104
+ return false
105
+ }
103
106
 
104
- function isBlockedIpv6(host: string): boolean {
105
- if (host === '::' || host === '::1') return true // unspecified, loopback
106
- if (
107
- host.startsWith('fe8') ||
108
- host.startsWith('fe9') ||
109
- host.startsWith('fea') ||
110
- host.startsWith('feb')
111
- )
112
- return true // link-local fe80::/10
113
- if (host.startsWith('fc') || host.startsWith('fd')) return true // unique local fc00::/7
107
+ function isBlockedIpv6(host: string): boolean {
108
+ if (host === '::' || host === '::1') return true // unspecified, loopback
109
+ if (
110
+ host.startsWith('fe8') ||
111
+ host.startsWith('fe9') ||
112
+ host.startsWith('fea') ||
113
+ host.startsWith('feb')
114
+ )
115
+ return true // link-local fe80::/10
116
+ if (host.startsWith('fc') || host.startsWith('fd')) return true // unique local fc00::/7
114
117
 
115
- // IPv4-mapped (::ffff:a.b.c.d) — re-check the embedded v4.
116
- const dotted = host.match(/::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/)
117
- if (dotted?.[1] && isIpv4(dotted[1])) return isBlockedIpv4(dotted[1])
118
+ // IPv4-mapped (::ffff:a.b.c.d) — re-check the embedded v4.
119
+ const dotted = host.match(/::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/)
120
+ if (dotted?.[1] && isIpv4(dotted[1])) return isBlockedIpv4(dotted[1])
118
121
 
119
- // The URL parser compresses ::ffff:a.b.c.d to two hex groups (e.g. 7f00:1).
120
- const hex = host.match(/::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/)
121
- if (hex?.[1] && hex[2]) {
122
- const high = Number.parseInt(hex[1], 16)
123
- const low = Number.parseInt(hex[2], 16)
124
- const v4 = `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`
125
- return isBlockedIpv4(v4)
122
+ // The URL parser compresses ::ffff:a.b.c.d to two hex groups (e.g. 7f00:1).
123
+ const hex = host.match(/::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/)
124
+ if (hex?.[1] && hex[2]) {
125
+ const high = Number.parseInt(hex[1], 16)
126
+ const low = Number.parseInt(hex[2], 16)
127
+ const ipv4 = `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`
128
+ return isBlockedIpv4(ipv4)
129
+ }
130
+ return false
126
131
  }
127
- return false
128
132
  }
@@ -0,0 +1,14 @@
1
+ import * as Providers from './index.js'
2
+
3
+ test('exports provider factories', () => {
4
+ expect(Object.keys(Providers)).toMatchInlineSnapshot(`
5
+ [
6
+ "across",
7
+ "relay",
8
+ "rhino",
9
+ "squid",
10
+ "symbiosis",
11
+ "uniswap",
12
+ ]
13
+ `)
14
+ })