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,338 @@
1
+ import { Hono } from 'hono'
2
+ import { AbiEvent, AbiFunction, type Hex } from 'ox'
3
+ import * as z from 'zod/mini'
4
+
5
+ import type * as App from '../../../App.js'
6
+ import * as Auth from '../../../internal/Auth.js'
7
+ import * as Cache from '../../../internal/Cache.js'
8
+ import * as OpenApi from '../../../internal/OpenApi.js'
9
+ import * as Response from '../../../internal/Response.js'
10
+ import * as Schema from '../../../internal/Schema.js'
11
+ import * as Timing from '../../../internal/Timing.js'
12
+ import * as Value from '../../../internal/Value.js'
13
+
14
+ const exampleSenderTag = '0x61fc42a734cb44acef497ea0bed612c691195623244136e0739e1929569e2487'
15
+ const exampleTransactionHash = '0x515801d7f9a5ac705e793e85904c9c69b3f1694b465cc8fb6ba3f0298dc82665'
16
+ const exampleWithdrawalId = `${exampleTransactionHash}-4`
17
+
18
+ const withdrawalProcessedEvent = AbiEvent.from(
19
+ 'event WithdrawalProcessed(address indexed to, bytes32 indexed senderTag, address token, uint128 amount, bool callbackSuccess)',
20
+ )
21
+ const withdrawalProcessedSelector = AbiEvent.getSelector(withdrawalProcessedEvent)
22
+ const lastSyncedTempoBlockNumberFunction = AbiFunction.from(
23
+ 'function lastSyncedTempoBlockNumber() view returns (uint64)',
24
+ )
25
+
26
+ /** Zod schemas owned by Zone handlers. */
27
+ export namespace schema {
28
+ /** Schemas for the listZoneWithdrawals operation. */
29
+ export namespace listZoneWithdrawals {
30
+ /** Path parameters for a Zone withdrawal list request. */
31
+ export const Params = z
32
+ .object({
33
+ senderTag: Schema.hash(exampleSenderTag).check(
34
+ z.describe(
35
+ 'The 32-byte correlation tag shared by withdrawals from one sender in one Zone transaction.',
36
+ ),
37
+ ),
38
+ })
39
+ .check(z.describe('Path parameters used to correlate Zone withdrawals.'))
40
+
41
+ /** Query parameters for a Zone withdrawal list request. */
42
+ export const Query = z
43
+ .strictObject({
44
+ chainId: Schema.ChainId.check(
45
+ z.describe('The chain id of the Zone where the withdrawal originated.'),
46
+ z.meta({ examples: [421_700_001] }),
47
+ ),
48
+ })
49
+ .check(z.describe('Query parameters used to select the originating Zone.'))
50
+
51
+ /** Indexed Zone withdrawal after parent-chain processing. */
52
+ export const Withdrawal = z
53
+ .object({
54
+ blockNumber: z
55
+ .number()
56
+ .check(
57
+ z.int(),
58
+ z.nonnegative(),
59
+ z.describe('Parent-chain block containing the withdrawal processing event.'),
60
+ z.meta({ examples: [123] }),
61
+ ),
62
+ id: z
63
+ .string()
64
+ .check(
65
+ z.describe(
66
+ 'Stable withdrawal id built from the parent transaction hash and log index (`${transactionHash}-${logIndex}`).',
67
+ ),
68
+ z.meta({ examples: [exampleWithdrawalId] }),
69
+ ),
70
+ logIndex: z
71
+ .number()
72
+ .check(
73
+ z.int(),
74
+ z.nonnegative(),
75
+ z.describe('Event position within the parent-chain block.'),
76
+ z.meta({ examples: [4] }),
77
+ ),
78
+ status: z
79
+ .enum(['failed', 'completed'])
80
+ .check(
81
+ z.describe('Whether parent-chain delivery or processing failed or completed.'),
82
+ z.meta({ examples: ['failed', 'completed'] }),
83
+ ),
84
+ transactionHash: Schema.hash(exampleTransactionHash).check(
85
+ z.describe('Parent-chain transaction that processed the withdrawal.'),
86
+ ),
87
+ zoneStatus: z
88
+ .enum(['pending', 'completed'])
89
+ .check(
90
+ z.describe(
91
+ 'Completed once the Zone has proven it imported the parent-chain `blockNumber` containing this withdrawal.',
92
+ ),
93
+ z.meta({ examples: ['pending', 'completed'] }),
94
+ ),
95
+ })
96
+ .check(z.describe('A Zone withdrawal processed on its parent chain.'))
97
+
98
+ /** Non-paginated list of indexed Zone withdrawal outcomes. */
99
+ export const Response = Schema.describe(
100
+ z.object({
101
+ data: z
102
+ .array(Withdrawal)
103
+ .check(
104
+ z.describe(
105
+ 'Indexed parent-chain withdrawal outcomes sharing the sender tag. The list may grow while matching withdrawals are processed.',
106
+ ),
107
+ ),
108
+ }),
109
+ 'A non-paginated list of parent-chain withdrawal outcomes correlated by sender tag.',
110
+ )
111
+ }
112
+ }
113
+
114
+ /** Creates Zone handlers. */
115
+ export function zones() {
116
+ return new Hono<App.Environment>().get(
117
+ '/v1/zones/withdrawals/:senderTag',
118
+ Auth.policy({ apiKey: { scopes: ['data:read'] } }),
119
+ OpenApi.validate('param', schema.listZoneWithdrawals.Params, {
120
+ code: 'sender_tag_invalid',
121
+ message: 'Invalid sender tag',
122
+ }),
123
+ OpenApi.validate('query', schema.listZoneWithdrawals.Query, {
124
+ code: 'query_invalid',
125
+ message: 'Invalid query parameters',
126
+ }),
127
+ OpenApi.describeRoute({
128
+ description:
129
+ 'Lists L1 withdrawal outcomes by Zone sender tag. L1 success requires every `status` completed; Zone success also requires every `zoneStatus` completed. Empty lists remain pending.',
130
+ operationId: 'listZoneWithdrawals',
131
+ responses: OpenApi.responses({
132
+ errors: {
133
+ 400: {
134
+ codes: [
135
+ 'api_key_malformed',
136
+ 'chain_id_invalid',
137
+ 'chain_id_unsupported',
138
+ 'query_invalid',
139
+ 'sender_tag_invalid',
140
+ ],
141
+ },
142
+ 403: 'The API key does not grant read access to the originating Zone.',
143
+ 502: 'The parent-chain indexer or RPC returned unavailable or malformed data.',
144
+ },
145
+ success: {
146
+ description: 'Indexed parent-chain withdrawal outcomes correlated by sender tag.',
147
+ examples: {
148
+ empty: {
149
+ summary: 'Not indexed',
150
+ value: { data: [] },
151
+ },
152
+ processed: {
153
+ summary: 'Processed',
154
+ value: {
155
+ data: [
156
+ {
157
+ blockNumber: 123,
158
+ id: exampleWithdrawalId,
159
+ logIndex: 4,
160
+ status: 'completed',
161
+ transactionHash: exampleTransactionHash,
162
+ zoneStatus: 'pending',
163
+ },
164
+ ],
165
+ },
166
+ },
167
+ },
168
+ schema: schema.listZoneWithdrawals.Response,
169
+ },
170
+ }),
171
+ summary: 'List Zone withdrawals',
172
+ tags: ['Zones'],
173
+ }),
174
+ Cache.response<App.Environment>({
175
+ cacheControl: Cache.policies.noStore,
176
+ name: 'tempo-api:zone-withdrawals:v1',
177
+ key: (c) => {
178
+ const principal = Auth.getPrincipal(c)
179
+ return `${principal?.type ?? 'unknown'}:${principal?.id ?? 'unknown'}:${Cache.urlKey(c, schema.listZoneWithdrawals.Query)}`
180
+ },
181
+ }),
182
+ async (c) => {
183
+ if (Auth.narrowAccess) return Auth.accessError(c)
184
+ if (OpenApi.narrowValidation)
185
+ return OpenApi.validationError(c, {
186
+ code: 'sender_tag_invalid',
187
+ message: 'Invalid sender tag',
188
+ })
189
+ if (OpenApi.narrowValidation)
190
+ return OpenApi.validationError(c, {
191
+ code: 'query_invalid',
192
+ message: 'Invalid query parameters',
193
+ })
194
+ if (OpenApi.narrowValidation)
195
+ return OpenApi.validationError(c, {
196
+ code: 'chain_id_invalid',
197
+ message: 'Invalid chain id',
198
+ })
199
+
200
+ const { senderTag } = c.req.valid('param')
201
+ const { chainId } = c.req.valid('query')
202
+ const zone = c.get('zones').get(chainId)
203
+ if (!zone) return Response.unsupportedChainId(c, chainId, c.get('zones').keys())
204
+
205
+ try {
206
+ const parentChainId = Schema.ChainId.parse(zone.sourceId)
207
+ const portalContract = zone.contracts?.['portal']
208
+ const portal = Schema.Address.parse(
209
+ portalContract && 'address' in portalContract
210
+ ? portalContract.address
211
+ : portalContract?.[parentChainId]?.address,
212
+ )
213
+ const tidx = c.get('getTidx')(parentChainId)
214
+ const result = await Timing.time(c, 'zone_withdrawal', () =>
215
+ tidx.fetch({
216
+ chainId: parentChainId,
217
+ engine: 'clickhouse',
218
+ // Dynamic raw-log query, constrained to schema-validated hex literals.
219
+ // FINAL collapses replayed physical rows before returning distinct events.
220
+ query: `
221
+ SELECT block_num, log_idx, tx_hash, address, selector, topic1, topic2, data
222
+ FROM logs FINAL
223
+ WHERE address = '${portal}'
224
+ AND selector = '${withdrawalProcessedSelector}'
225
+ AND topic2 = '${senderTag}'
226
+ ORDER BY block_num ASC, log_idx ASC
227
+ ` as string,
228
+ }),
229
+ )
230
+ if (result.rows.length === 0)
231
+ return c.json(Response.validated(schema.listZoneWithdrawals.Response, { data: [] }), 200)
232
+
233
+ // TODO: Use `zone_getZoneInfo` once Zone RPC versions stabilize.
234
+ const tempoBlockNumber = await Timing.time(c, 'zone_status', () =>
235
+ c
236
+ .get('getClient')(parentChainId)
237
+ .readContract({
238
+ abi: [lastSyncedTempoBlockNumberFunction],
239
+ address: portal,
240
+ functionName: 'lastSyncedTempoBlockNumber',
241
+ }),
242
+ )
243
+ const data = resolveWithdrawalProcessed({
244
+ portal,
245
+ rows: result.rows,
246
+ senderTag,
247
+ tempoBlockNumber,
248
+ })
249
+ return c.json(Response.validated(schema.listZoneWithdrawals.Response, data), 200)
250
+ } catch (cause) {
251
+ return Response.upstream(c, cause)
252
+ }
253
+ },
254
+ )
255
+ }
256
+
257
+ /**
258
+ * Resolves indexed `WithdrawalProcessed` rows into public withdrawal outcomes
259
+ * and rejects malformed upstream data.
260
+ */
261
+ export function resolveWithdrawalProcessed(
262
+ options: resolveWithdrawalProcessed.Options,
263
+ ): z.output<typeof schema.listZoneWithdrawals.Response> {
264
+ const { portal, rows, senderTag, tempoBlockNumber } = options
265
+ return {
266
+ data: rows.map((row) => {
267
+ const address = Schema.Address.safeParse(row['address'])
268
+ const blockNumber = Value.toNumber(row['block_num'])
269
+ const data = Schema.Hex.safeParse(row['data'])
270
+ const logIndex = Value.toNumber(row['log_idx'])
271
+ const selector = Schema.Hash.safeParse(row['selector'])
272
+ const topic1 = Schema.Hash.safeParse(row['topic1'])
273
+ const topic2 = Schema.Hash.safeParse(row['topic2'])
274
+ const transactionHash = Schema.Hash.safeParse(row['tx_hash'])
275
+ if (
276
+ !address.success ||
277
+ address.data !== portal ||
278
+ blockNumber === undefined ||
279
+ !Number.isSafeInteger(blockNumber) ||
280
+ blockNumber < 0 ||
281
+ !data.success ||
282
+ logIndex === undefined ||
283
+ !Number.isSafeInteger(logIndex) ||
284
+ logIndex < 0 ||
285
+ !selector.success ||
286
+ selector.data !== withdrawalProcessedSelector ||
287
+ !topic1.success ||
288
+ !topic2.success ||
289
+ topic2.data !== senderTag ||
290
+ !transactionHash.success
291
+ )
292
+ throw new Error('Upstream returned a malformed WithdrawalProcessed event')
293
+
294
+ const decoded = (() => {
295
+ try {
296
+ return AbiEvent.decode(withdrawalProcessedEvent, {
297
+ data: data.data,
298
+ topics: [selector.data, topic1.data, topic2.data],
299
+ })
300
+ } catch {
301
+ return undefined
302
+ }
303
+ })()
304
+ if (
305
+ !decoded ||
306
+ !Schema.Address.safeParse(decoded.to).success ||
307
+ decoded.senderTag.toLowerCase() !== senderTag ||
308
+ !Schema.Address.safeParse(decoded.token).success ||
309
+ typeof decoded.amount !== 'bigint' ||
310
+ typeof decoded.callbackSuccess !== 'boolean'
311
+ )
312
+ throw new Error('Upstream returned a malformed WithdrawalProcessed event')
313
+
314
+ return {
315
+ blockNumber,
316
+ id: `${transactionHash.data}-${logIndex}`,
317
+ logIndex,
318
+ status: decoded.callbackSuccess ? 'completed' : 'failed',
319
+ transactionHash: transactionHash.data,
320
+ zoneStatus: tempoBlockNumber >= BigInt(blockNumber) ? 'completed' : 'pending',
321
+ }
322
+ }),
323
+ }
324
+ }
325
+
326
+ export declare namespace resolveWithdrawalProcessed {
327
+ /** Inputs for resolving indexed Zone withdrawal processing rows. */
328
+ type Options = {
329
+ /** Configured ZonePortal address on the parent Tempo chain. */
330
+ portal: z.output<typeof Schema.Address>
331
+ /** Matching raw TIDX log rows ordered by parent-chain position. */
332
+ rows: readonly Record<string, unknown>[]
333
+ /** Sender tag supplied by the caller. */
334
+ senderTag: Hex.Hex
335
+ /** Latest parent-chain block the originating Zone proved it imported. */
336
+ tempoBlockNumber: bigint
337
+ }
338
+ }
@@ -113,7 +113,7 @@ function inlineOpenrpc<spec extends { paths: Record<string, unknown> }>(spec: sp
113
113
  const paths: Record<string, unknown> = {}
114
114
  for (const [pathname, item] of Object.entries(spec.paths)) {
115
115
  let next = item
116
- if (isRecord(item))
116
+ if (item && typeof item === 'object' && !Array.isArray(item))
117
117
  for (const [method, op] of Object.entries(item))
118
118
  if (isRpcOperation(op)) next = { ...item, [method]: { ...op, 'x-openrpc': openrpcSpec } }
119
119
  paths[pathname] = next
@@ -124,9 +124,11 @@ function inlineOpenrpc<spec extends { paths: Record<string, unknown> }>(spec: sp
124
124
  // The JSON-RPC passthrough's operation id, set by its route definition and
125
125
  // targeted by `App.create`'s `applyOpenrpcLink`.
126
126
  function isRpcOperation(op: unknown): op is Record<string, unknown> {
127
- return isRecord(op) && op['operationId'] === 'rpcRequest'
128
- }
129
-
130
- function isRecord(value: unknown): value is Record<string, unknown> {
131
- return !!value && typeof value === 'object' && !Array.isArray(value)
127
+ return (
128
+ !!op &&
129
+ typeof op === 'object' &&
130
+ !Array.isArray(op) &&
131
+ 'operationId' in op &&
132
+ op.operationId === 'rpcRequest'
133
+ )
132
134
  }
@@ -0,0 +1,26 @@
1
+ import type { Context } from 'hono'
2
+
3
+ import type * as App from '../../App.js'
4
+ import type * as FundingTransfers from '../../db/tables/fundingTransfers.js'
5
+ import * as Auth from '../../internal/Auth.js'
6
+ import * as Response from '../../internal/Response.js'
7
+
8
+ /** Returns the funding owner encoded by an API-key principal. */
9
+ export function owner(c: Context<App.Environment>): FundingTransfers.Owner | null {
10
+ const principal = Auth.getPrincipal(c)
11
+ if (principal?.type !== 'api_key') return null
12
+ return {
13
+ environment: principal.environment,
14
+ orgId: principal.orgId,
15
+ projectId: principal.projectId,
16
+ }
17
+ }
18
+
19
+ /** Returns the error used when a funding resource has no API-key owner. */
20
+ export function unauthorized(c: Context<App.Environment>) {
21
+ return Response.error(c, {
22
+ code: 'unauthorized',
23
+ message: 'Tempo could not determine which organization owns this funding resource.',
24
+ status: 401,
25
+ })
26
+ }
@@ -0,0 +1,78 @@
1
+ import { App } from 'tapimo'
2
+
3
+ import * as Store from '../../internal/Store.js'
4
+ import * as Viem from '../../internal/Viem.js'
5
+ import * as TestApp from '../../../test/App.js'
6
+ import { funding } from './App.js'
7
+
8
+ const sandbox = {
9
+ environment: 'sandbox',
10
+ id: 'key_sandbox_funding',
11
+ orgId: 'org_test',
12
+ scopes: ['data:read'],
13
+ token: 'secret_sandbox_funding',
14
+ } satisfies TestApp.kvStore.Key
15
+
16
+ function as(key: { token: string }) {
17
+ return { headers: { authorization: `Bearer ${key.token}` } } as const
18
+ }
19
+
20
+ describe('funding access', () => {
21
+ test('rejects sandbox keys on a mainnet-default deployment', async () => {
22
+ const app = App.create({
23
+ auth: {},
24
+ db: TestApp.database(),
25
+ defaultChainId: Viem.chainId.mainnet,
26
+ kv: { store: TestApp.kvStore({ keys: [sandbox] }) },
27
+ }).route('/', funding())
28
+
29
+ const response = await app.request('/v1/funding/chains', as(sandbox))
30
+
31
+ expect(response.status).toBe(403)
32
+ expect(((await response.json()) as { error: { code: string } }).error.code).toBe(
33
+ 'api_key_forbidden',
34
+ )
35
+ })
36
+
37
+ test('requires a matching Zone scope and bypasses the edge cache', async () => {
38
+ const chainId = 421_700_001
39
+ const reader = {
40
+ id: 'key_zone_funding',
41
+ orgId: 'org_test',
42
+ scopes: ['data:read', `zone:${chainId}:read`],
43
+ token: 'secret_zone_funding',
44
+ } satisfies TestApp.kvStore.Key
45
+ const app = App.create({
46
+ auth: {},
47
+ cache: { store: Store.memory() },
48
+ db: TestApp.database(),
49
+ defaultChainId: chainId,
50
+ kv: { store: TestApp.kvStore({ keys: [reader] }) },
51
+ zones: [TestApp.zone({ chainId, rpcUrl: `https://${chainId}.rpc.test` })],
52
+ }).route('/', funding())
53
+
54
+ const allowed = await app.request('/v1/funding/chains', as(reader))
55
+ const anonymous = await app.request('/v1/funding/chains')
56
+
57
+ expect(allowed.status).toBe(200)
58
+ expect(allowed.headers.get('cache-control')).toContain('private')
59
+ expect(anonymous.status).toBe(403)
60
+ })
61
+
62
+ test('keeps public-chain inventory edge-cacheable on a Zone deployment', async () => {
63
+ const chainId = 421_700_001
64
+ const app = App.create({
65
+ auth: false,
66
+ cache: { store: Store.memory() },
67
+ db: TestApp.database(),
68
+ zones: [TestApp.zone({ chainId, rpcUrl: `https://${chainId}.rpc.test` })],
69
+ }).route('/', funding())
70
+
71
+ const first = await app.request('/v1/funding/chains')
72
+ const second = await app.request('/v1/funding/chains')
73
+
74
+ expect(first.status).toBe(200)
75
+ expect(second.status).toBe(200)
76
+ expect(second.headers.get('cache-control')).toContain('public')
77
+ })
78
+ })
@@ -0,0 +1,63 @@
1
+ import { Hono } from 'hono'
2
+
3
+ import type * as App from '../../App.js'
4
+ import type * as FundingDepositAddress from '../../internal/funding/DepositAddress.js'
5
+ import type * as FundingProvider from '../../internal/funding/Provider.js'
6
+ import * as Metadata from '../metadata.js'
7
+ import { chains } from './routes/chains.js'
8
+ import { depositAddresses } from './routes/deposit-addresses.js'
9
+ import { providers } from './routes/providers.js'
10
+ import { quotes } from './routes/quotes.js'
11
+ import { transfers } from './routes/transfers.js'
12
+
13
+ /**
14
+ * Mounts the Funding & Bridge API, including quotes, inventory, reusable
15
+ * deposit addresses, detected deposits, and transfers.
16
+ *
17
+ * ```ts
18
+ * App.create(options).route('/', data()).route('/', funding())
19
+ * ```
20
+ */
21
+ export function funding(options: funding.Options = {}) {
22
+ const app = new Hono<App.Environment>()
23
+ .route('/', quotes())
24
+ .route('/', chains())
25
+ .route('/', providers())
26
+ .route('/', depositAddresses(options))
27
+ .route('/', transfers())
28
+ return Metadata.defaultChain(Metadata.attach(app, openapi))
29
+ }
30
+
31
+ export declare namespace funding {
32
+ /** Inbound funding route configuration. */
33
+ type Options = {
34
+ /** Enqueues one deposit address for asynchronous reconciliation. */
35
+ dispatchReconciliation?:
36
+ | ((message: FundingProvider.Webhook.receive.Dispatchable) => Promise<void>)
37
+ | undefined
38
+ /** Registers a created address with a source-chain observer. */
39
+ registerDepositAddress?: ((address: FundingDepositAddress.Public) => Promise<void>) | undefined
40
+ }
41
+ }
42
+
43
+ const openapi = {
44
+ tags: [
45
+ { name: 'Chains', description: 'Source chains and stablecoins supported for funding.' },
46
+ {
47
+ name: 'Deposit Addresses',
48
+ description: 'Reusable funding addresses and deposits detected at those addresses.',
49
+ },
50
+ { name: 'Providers', description: 'Providers available for inbound funding.' },
51
+ { name: 'Quotes', description: 'Live quotes for funding Tempo from other chains.' },
52
+ {
53
+ name: 'Transfers',
54
+ description: 'Inbound funding transfers.',
55
+ },
56
+ ],
57
+ 'x-tagGroups': [
58
+ {
59
+ name: 'Funding & Bridge API',
60
+ tags: ['Chains', 'Deposit Addresses', 'Providers', 'Quotes', 'Transfers'],
61
+ },
62
+ ],
63
+ } satisfies App.create.Metadata
@@ -0,0 +1,30 @@
1
+ import type { Context } from 'hono'
2
+
3
+ import type * as App from '../../App.js'
4
+ import type * as Db from '../../db/Db.js'
5
+ import * as FundingProvider from '../../internal/funding/Provider.js'
6
+
7
+ const sourceScopes = new WeakMap<Db.Source, number>()
8
+ let nextSourceScope = 0
9
+
10
+ /** Returns an inventory cache key scoped by request URL, providers, and database source. */
11
+ export function key(c: Context<App.Environment>) {
12
+ const url = new URL(c.req.url)
13
+ const providers = c
14
+ .get('providers')
15
+ .filter(FundingProvider.is)
16
+ .map((provider) => provider.id)
17
+ .sort()
18
+ url.searchParams.set('__tempo_database', String(sourceScope(c.get('dbCached'))))
19
+ url.searchParams.set('__tempo_providers', providers.join(','))
20
+ return url.toString()
21
+ }
22
+
23
+ function sourceScope(source: Db.Source) {
24
+ const current = sourceScopes.get(source)
25
+ if (current !== undefined) return current
26
+ // A production isolate has one source, while multi-app runtimes receive distinct scopes.
27
+ const scope = nextSourceScope++
28
+ sourceScopes.set(source, scope)
29
+ return scope
30
+ }
@@ -0,0 +1,26 @@
1
+ import * as FundingProvider from '../../internal/funding/Provider.js'
2
+ import type * as Log from '../../internal/Log.js'
3
+
4
+ /** Formats one provider attempt for the canonical request log. */
5
+ export function format(attempt: FundingProvider.ProviderAttempt): Log.FundingProviderAttempt {
6
+ const { id } = attempt.provider
7
+ if (attempt.outcome !== 'failed')
8
+ return {
9
+ durationMs: attempt.durationMs,
10
+ id,
11
+ operation: attempt.operation,
12
+ outcome: attempt.outcome,
13
+ }
14
+
15
+ return {
16
+ durationMs: attempt.durationMs,
17
+ failure: FundingProvider.failure({
18
+ cause: attempt.cause,
19
+ operation: attempt.operation,
20
+ provider: attempt.provider,
21
+ }).failure,
22
+ id,
23
+ operation: attempt.operation,
24
+ outcome: attempt.outcome,
25
+ }
26
+ }
@@ -0,0 +1 @@
1
+ export { funding } from './App.js'
@@ -0,0 +1,78 @@
1
+ import * as Across from '../../../internal/funding/providers/across.js'
2
+
3
+ import * as Relay from '../../../internal/funding/providers/relay.js'
4
+
5
+ import * as Rhino from '../../../internal/funding/providers/rhino.js'
6
+
7
+ import * as Squid from '../../../internal/funding/providers/squid.js'
8
+
9
+ import * as Symbiosis from '../../../internal/funding/providers/symbiosis.js'
10
+
11
+ import * as TestApp from '../../../../test/App.js'
12
+
13
+ import * as TestFunding from '../../../../test/Funding.js'
14
+
15
+ import * as Funding from './chains.js'
16
+
17
+ const db = TestApp.database()
18
+
19
+ const providers = [
20
+ Across.across({
21
+ apiKey: 'across-api-key',
22
+ integratorId: '0xdead',
23
+ userAddress: '0x1111111111111111111111111111111111111111',
24
+ }),
25
+ Relay.relay({ userAddress: '0x1111111111111111111111111111111111111111' }),
26
+ Rhino.rhino(),
27
+ Squid.squid({
28
+ integratorId: 'squid-integrator-id',
29
+ userAddress: '0x1111111111111111111111111111111111111111',
30
+ }),
31
+ Symbiosis.symbiosis({ userAddress: '0x1111111111111111111111111111111111111111' }),
32
+ ] as const
33
+
34
+ beforeAll(() => TestFunding.publish(db))
35
+
36
+ function create(options: TestApp.create.Options = {}) {
37
+ return TestApp.create({ ...options, db })
38
+ }
39
+
40
+ describe('funding OpenAPI', () => {
41
+ test('publishes get operation ids for funding inventory', async () => {
42
+ const app = create({ auth: false })
43
+ const spec = await (await app.request('/openapi.json')).json()
44
+
45
+ expect({
46
+ chains: spec.paths['/v1/funding/chains'].get.operationId,
47
+ providers: spec.paths['/v1/funding/providers'].get.operationId,
48
+ }).toEqual({
49
+ chains: 'getFundingChains',
50
+ providers: 'getFundingProviders',
51
+ })
52
+ })
53
+ })
54
+
55
+ describe('GET /funding/chains', () => {
56
+ test('lists only inputs supported by quote providers', async () => {
57
+ const response = await create({ providers }).request('/v1/funding/chains', {
58
+ headers: TestApp.auth.headers,
59
+ })
60
+ expect(response.status).toBe(200)
61
+ const body = await TestApp.json(response, Funding.schema.getFundingChains.Response)
62
+
63
+ expect(body.data.map((chain) => chain.id)).toEqual([
64
+ 'eip155:1',
65
+ 'eip155:56',
66
+ 'eip155:8453',
67
+ 'eip155:137',
68
+ 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
69
+ 'tron:0x2b6653dc',
70
+ ])
71
+ expect(body.data.flatMap((chain) => chain.tokens.map((token) => token.symbol))).toEqual(
72
+ expect.arrayContaining(['USDC', 'USDT']),
73
+ )
74
+ expect(
75
+ body.data.flatMap((chain) => chain.tokens).every((token) => token.currency === 'USD'),
76
+ ).toBe(true)
77
+ })
78
+ })