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
package/src/App.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import type { Context } from 'hono'
2
2
  import { Hono } from 'hono'
3
+ import { matchedRoutes } from 'hono/route'
3
4
  import { compress as hono_compress } from 'hono/compress'
4
5
  import { cors as hono_cors } from 'hono/cors'
5
6
  import { HTTPException } from 'hono/http-exception'
6
7
  import { requestId, type RequestIdVariables } from 'hono/request-id'
7
8
  import { generateSpecs } from 'hono-openapi'
9
+ import type { Chain } from 'viem'
8
10
 
9
11
  import type * as Analytics from './analytics/Analytics.js'
10
12
  import * as ApiKey from './ApiKey.js'
@@ -18,6 +20,7 @@ import type * as Metrics from './Metrics.js'
18
20
  import * as OpenApi from './internal/OpenApi.js'
19
21
  import * as Store from './internal/Store.js'
20
22
  import * as Path from './internal/Path.js'
23
+ import type * as Provider from './internal/Provider.js'
21
24
  import * as Response from './internal/Response.js'
22
25
  import * as Scope from './Scope.js'
23
26
  import type * as Tidx from './internal/Tidx.js'
@@ -27,18 +30,23 @@ import * as Viem from './internal/Viem.js'
27
30
  import openrpcSpec from './openrpc.json' with { type: 'json' }
28
31
 
29
32
  import * as Metadata from './apps/metadata.js'
33
+ import * as Zones from './apps/Zones.js'
30
34
  import * as Data from './apps/data/App.js'
35
+ import * as Funding from './apps/funding/App.js'
31
36
  import * as Management from './apps/management/App.js'
32
37
  import * as Mpp from './apps/mpp/App.js'
33
38
  import * as Relay from './apps/relay/App.js'
34
39
 
35
40
  export import data = Data.data
41
+ export import funding = Funding.funding
36
42
  export import management = Management.management
37
43
  export import mpp = Mpp.mpp
38
44
  export import relay = Relay.relay
39
45
 
40
46
  /** The chain-data route group; see {@link data}. */
41
47
  export type DataApp = ReturnType<typeof data>
48
+ /** The inbound funding route group; see {@link funding}. */
49
+ export type FundingApp = ReturnType<typeof funding>
42
50
  /** The management route group; see {@link management}. */
43
51
  export type ManagementApp = ReturnType<typeof management>
44
52
  /** The MPP credential relay route group; see {@link mpp}. */
@@ -62,6 +70,8 @@ export type Environment = {
62
70
  dbCached: Db.Source
63
71
  /** KV state store backing API-key records, or undefined when key auth is closed. */
64
72
  kv: { store: Store.State } | undefined
73
+ /** Providers registered by the host application. */
74
+ providers: readonly Provider.Provider[]
65
75
  /** Issuable API-key scope catalog, including host-defined entries. */
66
76
  scopeCatalog: Scope.Catalog
67
77
  /** Gets one static API asset. */
@@ -80,8 +90,8 @@ export type Environment = {
80
90
  tidx: Tidx.getClient.Tidx | undefined
81
91
  /** Verified-token feature configuration (refresh window), or undefined when the feature is disabled. Token rows live in `db`. */
82
92
  verifiedTokens: { refreshMs?: number | undefined } | undefined
83
- /** Zone RPC endpoints keyed by chain id; empty when none are configured. */
84
- zones: ReadonlyMap<number, Data.data.Zone>
93
+ /** Zone chains keyed by chain id; empty when none are configured. */
94
+ zones: ReadonlyMap<number, Chain>
85
95
  /** Webhook feature configuration, or undefined when webhooks are disabled. Rows live in `db`. */
86
96
  webhook: Webhook | undefined
87
97
  } & EdgeCache.Variables &
@@ -107,8 +117,9 @@ export function from<const app extends Hono<any, any>>(app: app, metadata: creat
107
117
  function compose(options: create.Options) {
108
118
  return create(options)
109
119
  .route('/', data())
120
+ .route('/', funding())
110
121
  .route('/', relay())
111
- .route('/', mpp())
122
+ .route('/', mpp({ state: Store.memory() }))
112
123
  .route('/', management())
113
124
  }
114
125
 
@@ -141,10 +152,28 @@ export type Asset = {
141
152
  }
142
153
 
143
154
  /** Gets one static API asset for a chain, or undefined when it is missing. */
144
- export type GetAsset = (
155
+ export type GetAsset = ((
145
156
  chainId: Viem.ChainId,
146
157
  path: string,
147
- ) => Asset | undefined | Promise<Asset | undefined>
158
+ ) => Asset | undefined | Promise<Asset | undefined>) & {
159
+ /** Lists public asset locations under a path prefix, when supported. */
160
+ list?: GetAsset.List | undefined
161
+ }
162
+
163
+ export declare namespace GetAsset {
164
+ /** Lists public asset locations for a chain and path prefix. */
165
+ type List = (
166
+ chainId: Viem.ChainId,
167
+ path: string,
168
+ ) => Promise<
169
+ readonly {
170
+ /** Internal asset-store key. */
171
+ key: string
172
+ /** Absolute public API URL for the asset. */
173
+ uri: string
174
+ }[]
175
+ >
176
+ }
148
177
 
149
178
  /** Top-level OpenAPI `info.description`, rendered above the reference. */
150
179
  const infoDescription = 'REST API for reading and interacting with Tempo'
@@ -170,12 +199,24 @@ export function create<const path extends string = '/'>(options: create.Options<
170
199
  const store = options.cache?.store ?? Store.memory()
171
200
  const scopeCatalog = Scope.extend(options.scopes)
172
201
  const defaultChainId = options.defaultChainId ?? Viem.defaultChainId
173
- const getClient = Viem.createGetClient({ defaultChainId, rpc: options.rpc })
202
+ const zones = new Map(
203
+ (options.zones === true ? Zones.chains : (options.zones ?? [])).map((zone) => [zone.id, zone]),
204
+ )
205
+ const getClient = Viem.createGetClient({
206
+ defaultChainId,
207
+ rpc: options.rpc,
208
+ zones: [...zones.values()],
209
+ })
210
+ const configuredRpcChainIds =
211
+ typeof options.rpc === 'function' ? [] : Viem.configuredChainIds(options.rpc?.url)
174
212
  const supportedChainIds = new Set<number>([
175
213
  ...Object.keys(Viem.url).map(Number),
176
214
  defaultChainId,
215
+ ...configuredRpcChainIds,
177
216
  ...(options.supportedChainIds ?? []),
217
+ ...zones.keys(),
178
218
  ])
219
+ const defaultChainRouteHandlers = new Set<unknown>()
179
220
 
180
221
  // Build the app in two phases: register middleware imperatively, then chain
181
222
  // route mounts so the merged Hono schema flows through the return type. The
@@ -242,6 +283,18 @@ export function create<const path extends string = '/'>(options: create.Options<
242
283
  // side; `cached` falls back to `source` so consumers never branch.
243
284
  const db = 'source' in options.db ? options.db : { source: options.db }
244
285
 
286
+ const providers = (() => {
287
+ const values = options.providers ?? []
288
+ const ids = new Set<string>()
289
+ for (const provider of values) {
290
+ if (provider.id.length === 0 || provider.id !== provider.id.trim().toLowerCase())
291
+ throw new InvalidProviderIdError(provider.id)
292
+ if (ids.has(provider.id)) throw new DuplicateProviderIdError(provider.id)
293
+ ids.add(provider.id)
294
+ }
295
+ return values
296
+ })()
297
+
245
298
  // Normalize the `analytics` option: accept the bare source or `{ source }`,
246
299
  // mirroring `db`. Undefined leaves usage analytics unconfigured (501).
247
300
  const analytics =
@@ -269,10 +322,12 @@ export function create<const path extends string = '/'>(options: create.Options<
269
322
  c.set('dbCached', db.cached ?? db.source)
270
323
  c.set('getClient', (chainId) => getClient(chainId, Auth.getPrincipal(c)))
271
324
  c.set('kv', options.kv)
325
+ c.set('providers', providers)
272
326
  c.set('rpc', options.rpc)
273
327
  c.set('scopeCatalog', scopeCatalog)
274
328
  c.set('store', store)
275
329
  c.set('supportedChainIds', supportedChainIds)
330
+ c.set('zones', zones)
276
331
  await next()
277
332
  })
278
333
 
@@ -299,6 +354,43 @@ export function create<const path extends string = '/'>(options: create.Options<
299
354
  // routes. `auth: false` leaves policies unenforced (tests only).
300
355
  if (auth.middleware) app.use('*', auth.middleware)
301
356
 
357
+ // Groups marked as default-chain consumers share the root Zone and sandbox
358
+ // policy without inheriting another group's chain selectors.
359
+ app.use('*', async (c, next) => {
360
+ const matched = matchedRoutes(c).some((route) => defaultChainRouteHandlers.has(route.handler))
361
+ if (!matched) return next()
362
+
363
+ const chainId = c.get('chainId')
364
+ const principal = Auth.getPrincipal(c)
365
+ if (c.get('zones').has(chainId)) {
366
+ const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined
367
+ const allowed =
368
+ scopes?.includes(Scope.wildcard) ||
369
+ scopes?.includes(`zone:${chainId}:read`) ||
370
+ scopes?.includes(`zone:${chainId}:write`)
371
+ if (!allowed)
372
+ return Response.error(c, {
373
+ code: 'api_key_forbidden',
374
+ message: `Chain id ${chainId} is a zone. Use an API key granting \`zone:${chainId}:read\` or \`zone:${chainId}:write\`.`,
375
+ status: 403,
376
+ })
377
+ }
378
+
379
+ if (
380
+ principal?.type === 'api_key' &&
381
+ principal.environment === 'sandbox' &&
382
+ Viem.isMainnet(chainId)
383
+ )
384
+ return Response.error(c, {
385
+ code: 'api_key_forbidden',
386
+ message: 'Sandbox API keys only support testnet. Pass a testnet `chainId`.',
387
+ status: 403,
388
+ })
389
+
390
+ await next()
391
+ if (c.get('zones').has(chainId)) c.set('edgeCache', undefined)
392
+ })
393
+
302
394
  // Collect each mounted group's OpenAPI metadata: Hono's `.route()` drops
303
395
  // sub-app metadata, so a group attaches it to its instance (a WeakMap) and we
304
396
  // read it back here. Patching the runtime method, not the type, keeps `hc`.
@@ -310,6 +402,15 @@ export function create<const path extends string = '/'>(options: create.Options<
310
402
  metadata.push(entry)
311
403
  for (const chainId of entry.supportedChainIds ?? []) supportedChainIds.add(chainId)
312
404
  }
405
+ if (Metadata.usesDefaultChain(sub))
406
+ for (const route of sub.routes) {
407
+ if (route.method === 'ALL') continue
408
+ defaultChainRouteHandlers.add(route.handler)
409
+ EdgeCache.setEligibility(
410
+ route.handler,
411
+ (c: Context<Environment>) => !c.get('zones').has(c.get('chainId')),
412
+ )
413
+ }
313
414
  return route(path, sub)
314
415
  }) as typeof route
315
416
 
@@ -352,7 +453,11 @@ export function create<const path extends string = '/'>(options: create.Options<
352
453
  return entry ? [...metadata, entry] : metadata
353
454
  })()
354
455
  const contributedSchemes = Object.assign({}, ...metadata_all.map((m) => m.securitySchemes ?? {})) // prettier-ignore
355
- const tags = metadata_all.flatMap((m) => m.tags ?? [])
456
+ const tags = [
457
+ ...new Map(
458
+ metadata_all.flatMap((m) => (m.tags ?? []).map((tag) => [tag.name, tag] as const)),
459
+ ).values(),
460
+ ]
356
461
  // Tag groups contributed under the same name merge into one sidebar group,
357
462
  // deduped and filtered to defined tags (a group may list a tag another
358
463
  // surface defines, e.g. `Auth` from the built-in session surface).
@@ -425,15 +530,15 @@ export function create<const path extends string = '/'>(options: create.Options<
425
530
  // from each route's resolved auth policy (the single source of truth), so
426
531
  // the anonymous option and `402` appear only where the public/MPP lanes
427
532
  // are enabled, not on every operation via the document default.
428
- applyAccess(generated.paths, Auth.describeAccess(app))
533
+ OpenApiDocument.applyAccess(generated.paths, Auth.describeAccess(app))
429
534
  // Point the `/rpc` operation at the OpenRPC document via `x-openrpc`.
430
- applyOpenrpcLink(generated.paths, basePath)
535
+ OpenApiDocument.applyOpenrpcLink(generated.paths, basePath)
431
536
  // Re-order paths so list endpoints appear before get endpoints inside each
432
537
  // tag group in the sidebar. We classify by operation summary, which every
433
538
  // handler sets as either "List ..." or "Get ...". The reference groups by
434
539
  // tag and preserves document path order within a tag, so reordering here
435
540
  // drives the sidebar sub-item order.
436
- return { ...generated, ...webhooksDoc, paths: sortPaths(generated.paths) }
541
+ return { ...generated, ...webhooksDoc, paths: OpenApiDocument.sortPaths(generated.paths) }
437
542
  }
438
543
  let finalized = false
439
544
  const finalize = () => {
@@ -474,8 +579,8 @@ export function create<const path extends string = '/'>(options: create.Options<
474
579
  * Hono type (which `testClient` needs); intersecting the listener onto the
475
580
  * app degrades the typed proxy inference.
476
581
  */
477
- export function listener(app: { fetch: NodeFetch }): Listener {
478
- return getRequestListener(app.fetch)
582
+ export function listener(app: { fetch: NodeServer.Fetch }): Listener {
583
+ return NodeServer.getRequestListener(app.fetch)
479
584
  }
480
585
 
481
586
  export declare namespace create {
@@ -507,6 +612,8 @@ export declare namespace create {
507
612
  metrics?: Metrics.Metrics | undefined
508
613
  /** Base path to mount API handlers under. Provided as a literal via the `path` generic so the resulting Hono schema keeps typed route paths for `testClient`. */
509
614
  path?: path | undefined
615
+ /** Providers available to mounted route groups. */
616
+ providers?: readonly Provider.Provider[] | undefined
510
617
  /** Tempo RPC options, including per-request routing by request principal. */
511
618
  rpc?: Viem.getClient.Rpc | undefined
512
619
  /** OpenAPI `servers` for the generated document. Defaults to a single relative server (the host serving the doc), so the reference targets the deployment it is served from. Set the canonical public URL(s) here, e.g. `[{ url: 'https://api.tempo.xyz' }]`. */
@@ -515,6 +622,8 @@ export declare namespace create {
515
622
  scopes?: readonly Scope.Entry[] | undefined
516
623
  /** Extra chain ids served beyond the built-in chains and `defaultChainId`. */
517
624
  supportedChainIds?: readonly number[] | undefined
625
+ /** Zone chains served by this deployment. Pass true to use the hosted Zone list. */
626
+ zones?: true | readonly Chain[] | undefined
518
627
  }
519
628
 
520
629
  /** KV state-store configuration. */
@@ -612,157 +721,206 @@ async function errorFromException(c: Context<Environment>, cause: HTTPException)
612
721
  const response = cause.getResponse()
613
722
  response.headers.set('tempo-request-id', requestId)
614
723
 
615
- if (!isJson(response)) return response
724
+ if (!ResponseBody.isJson(response)) return response
616
725
 
617
726
  const body = await response
618
727
  .clone()
619
728
  .json()
620
729
  .catch(() => null)
621
- if (!isRecord(body)) return response
730
+ if (!body || typeof body !== 'object' || Array.isArray(body)) return response
622
731
 
623
732
  return c.json({ ...body, requestId }, cause.status, Object.fromEntries(response.headers))
624
733
  }
625
734
 
626
- // Reorder OpenAPI `paths` so reads come before writes within each tag group,
627
- // and shallower paths come before deeper paths inside each bucket so root-level
628
- // routes ("List tokens" `/tokens`) win over nested ones ("List address
629
- // tokens" — `/addresses/{address}/tokens`). Tie-break by original document
630
- // order to keep registered grouping.
631
- //
632
- // A path is ranked as a unit because REST groups verbs onto shared paths (and
633
- // the reference renders all methods of a path adjacently, in the fixed canonical
634
- // method order GET→POST→PATCH→DELETE), so two operations on the same path can
635
- // never be separated or reordered relative to each other.
636
- //
637
- // Read-only tags keep lists-before-gets (tiers 0/2). The `Webhooks` tag instead
638
- // groups all reads (lists, then the item GET) ahead of the item writes, scoped
639
- // to that tag so the read tags are untouched. The shared-path constraint means
640
- // the desired "Create, all GETs (lists first), Update, Delete" can only be
641
- // approximated: `Create webhook` shares `/webhooks` with `List webhooks`, and
642
- // vocs renders GET before POST, so "List webhooks" unavoidably precedes
643
- // "Create". `Get`/`Update`/`Delete` all share `/webhooks/{id}`, so they render
644
- // adjacently as GetUpdateDelete. The `{id}` item is tiered right after the
645
- // collection root, so `Get/Update/Delete` sit just below `List webhooks/Create`,
646
- // ahead of the remaining lists and action POSTs. Tiers:
647
- // 0 collection root (`GET`+`POST /webhooks`) → "List webhooks, Create webhook"
648
- // 1 item (`GET`+`PATCH`+`DELETE /webhooks/{id}`) → "Get, Update, Delete"
649
- // 2 other list-only paths (`/event-types`, `/deliveries`)
650
- // 3 other writes/actions (`POST .../ping`, `.../retry`)
651
- function sortPaths(paths: PathsObject): PathsObject {
652
- const entries = Object.entries(paths)
653
- const rank = (entry: [string, PathItem]) => {
654
- const operations = Object.values(entry[1])
655
- const summaries = operations.flatMap((op) =>
656
- isOperation(op) && op.summary ? [op.summary] : [],
657
- )
658
- const has = (prefix: string) => summaries.some((summary) => summary.startsWith(prefix))
659
- if (operations.some((op) => isOperation(op) && op.tags?.includes('Webhooks'))) {
660
- if (has('Create')) return 0
661
- if (has('Get')) return 1
662
- if (has('List')) return 2
663
- return 3
735
+ namespace OpenApiDocument {
736
+ // Reorder OpenAPI `paths` so reads come before writes within each tag group,
737
+ // and shallower paths come before deeper paths inside each bucket so root-level
738
+ // routes ("List tokens" — `/tokens`) win over nested ones ("List address
739
+ // tokens" `/addresses/{address}/tokens`). Tie-break by original document
740
+ // order to keep registered grouping.
741
+ //
742
+ // A path is ranked as a unit because REST groups verbs onto shared paths (and
743
+ // the reference renders all methods of a path adjacently, in the fixed canonical
744
+ // method order GET→POST→PATCH→DELETE), so two operations on the same path can
745
+ // never be separated or reordered relative to each other.
746
+ //
747
+ // Read-only tags keep lists-before-gets (tiers 0/2). The `Webhooks` tag instead
748
+ // groups all reads (lists, then the item GET) ahead of the item writes, scoped
749
+ // to that tag so the read tags are untouched. The shared-path constraint means
750
+ // the desired "Create, all GETs (lists first), Update, Delete" can only be
751
+ // approximated: `Create webhook` shares `/webhooks` with `List webhooks`, and
752
+ // vocs renders GET before POST, so "List webhooks" unavoidably precedes
753
+ // "Create". `Get`/`Update`/`Delete` all share `/webhooks/{id}`, so they render
754
+ // adjacently as GetUpdateDelete. The `{id}` item is tiered right after the
755
+ // collection root, so `Get/Update/Delete` sit just below `List webhooks/Create`,
756
+ // ahead of the remaining lists and action POSTs. Tiers:
757
+ // 0 collection root (`GET`+`POST /webhooks`) → "List webhooks, Create webhook"
758
+ // 1 item (`GET`+`PATCH`+`DELETE /webhooks/{id}`) → "Get, Update, Delete"
759
+ // 2 other list-only paths (`/event-types`, `/deliveries`)
760
+ // 3 other writes/actions (`POST .../ping`, `.../retry`)
761
+ // Funding deposit paths preserve their resource-specific sidebar order.
762
+ const fundingDepositOperationOrder = [
763
+ 'createFundingDepositAddress',
764
+ 'reconcileFundingDepositAddress',
765
+ 'getFundingDepositAddress',
766
+ 'getFundingDeposit',
767
+ 'listFundingDepositAddressDeposits',
768
+ 'listFundingDeposits',
769
+ ] as const
770
+
771
+ export function sortPaths(paths: PathsObject): PathsObject {
772
+ const entries = Object.entries(paths)
773
+ const rank = (entry: [string, PathItem]) => {
774
+ const operations = Object.values(entry[1])
775
+ const summaries = operations.flatMap((op) =>
776
+ isOperation(op) && op.summary ? [op.summary] : [],
777
+ )
778
+ const has = (prefix: string) => summaries.some((summary) => summary.startsWith(prefix))
779
+ if (operations.some((op) => isOperation(op) && op.tags?.includes('Webhooks'))) {
780
+ if (has('Create')) return 0
781
+ if (has('Get')) return 1
782
+ if (has('List')) return 2
783
+ return 3
784
+ }
785
+ if (operations.some((op) => isOperation(op) && op.tags?.includes('Deposit Addresses'))) {
786
+ const index = fundingDepositOperationOrder.findIndex((operationId) =>
787
+ operations.some((op) => isOperation(op) && op.operationId === operationId),
788
+ )
789
+ if (index >= 0) return index
790
+ }
791
+ if (/\/v1\/funding(?:\/|$)/.test(entry[0])) {
792
+ if (has('Create')) return 1
793
+ if (has('Get transfer')) return 2
794
+ return 0
795
+ }
796
+ if (has('List')) return has('Create') ? 1 : 0
797
+ if (has('Get')) return 2
798
+ if (has('Create')) return 3
799
+ return 4
664
800
  }
665
- if (has('List')) return has('Create') ? 1 : 0
666
- if (has('Get')) return 2
667
- if (has('Create')) return 3
668
- return 4
801
+ const depth = (path: string) =>
802
+ path.endsWith('/rpc') ? 2 : path.split('/').filter(Boolean).length
803
+ const indexed = entries.map(
804
+ (entry, index) => [entry, index, rank(entry), depth(entry[0])] as const,
805
+ )
806
+ indexed.sort(([, ai, ar, ad], [, bi, br, bd]) => ar - br || ad - bd || ai - bi)
807
+ return Object.fromEntries(indexed.map(([entry]) => entry))
669
808
  }
670
- const depth = (path: string) =>
671
- path.endsWith('/rpc') ? 2 : path.split('/').filter(Boolean).length
672
- const indexed = entries.map(
673
- (entry, index) => [entry, index, rank(entry), depth(entry[0])] as const,
674
- )
675
- indexed.sort(([, ai, ar, ad], [, bi, br, bd]) => ar - br || ad - bd || ai - bi)
676
- return Object.fromEntries(indexed.map(([entry]) => entry))
677
- }
678
809
 
679
- /**
680
- * Applies route security, required scopes, and payment responses from resolved access lanes.
681
- * API keys support header, query, and bearer authentication.
682
- */
683
- function applyAccess(paths: PathsObject, access: Record<string, Auth.OperationAccess>) {
684
- for (const item of Object.values(paths)) {
685
- for (const op of Object.values(item as Record<string, unknown>)) {
686
- if (!isMutableOperation(op)) continue
687
- const lanes = access[op.operationId]
688
- if (!lanes) continue
689
- const security = [
690
- ...(lanes.apiKey ? [{ apiKey: [] }, { queryApiKey: [] }, { bearerAuth: [] }] : []),
691
- ...(lanes.session ? [{ session: [] }, ...(lanes.apiKey ? [] : [{ bearerAuth: [] }])] : []),
692
- ...(lanes.public ? [{}] : []),
693
- ]
694
- if (security.length > 0) op.security = security
695
- if (lanes.scopes.length > 0) op['x-required-scopes'] = [...lanes.scopes]
696
- if (lanes.mpp) op.responses = { ...op.responses, 402: OpenApi.paymentChallengeRef }
697
- else if (op.responses) delete op.responses['402']
810
+ /**
811
+ * Applies route security, required scopes, and payment responses from resolved access lanes.
812
+ * API keys support header, query, and bearer authentication.
813
+ */
814
+ export function applyAccess(paths: PathsObject, access: Record<string, Auth.OperationAccess>) {
815
+ for (const item of Object.values(paths)) {
816
+ for (const op of Object.values(item as Record<string, unknown>)) {
817
+ if (!isMutableOperation(op)) continue
818
+ const lanes = access[op.operationId]
819
+ if (!lanes) continue
820
+ const security = [
821
+ ...(lanes.apiKey ? [{ apiKey: [] }, { queryApiKey: [] }, { bearerAuth: [] }] : []),
822
+ ...(lanes.session
823
+ ? [{ session: [] }, ...(lanes.apiKey ? [] : [{ bearerAuth: [] }])]
824
+ : []),
825
+ ...(lanes.public ? [{}] : []),
826
+ ]
827
+ if (security.length > 0) op.security = security
828
+ if (lanes.scopes.length > 0) op['x-required-scopes'] = [...lanes.scopes]
829
+ if (lanes.mpp) op.responses = { ...op.responses, 402: OpenApi.paymentChallengeRef }
830
+ else if (op.responses) delete op.responses['402']
831
+ }
698
832
  }
699
833
  }
700
- }
701
834
 
702
- /**
703
- * Links the JSON-RPC passthrough operation to the OpenRPC document (served at
704
- * `{basePath}/openrpc.json`) via an `x-openrpc` vendor extension. The raw `/rpc`
705
- * request body is opaque to OpenAPI, so this lets consumers discover the
706
- * method/param/return schemas it accepts.
707
- *
708
- * The public `/openapi.json` keeps a URL reference (small, conventional). The
709
- * docs handler instead inlines the document — see `inlineOpenrpc` in `tapimo/docs`.
710
- */
711
- function applyOpenrpcLink(paths: PathsObject, basePath: string) {
712
- // `basePath` is `/` at the root mount and `/api` etc. otherwise; strip any
713
- // trailing slash so the join never doubles up (`//openrpc.json`).
714
- const url = `${basePath.replace(/\/$/, '')}/openrpc.json`
715
- for (const item of Object.values(paths))
716
- for (const op of Object.values(item as Record<string, unknown>))
717
- if (isMutableOperation(op) && isRpcOperation(op)) op['x-openrpc'] = url
718
- }
835
+ /**
836
+ * Links the JSON-RPC passthrough operation to the OpenRPC document (served at
837
+ * `{basePath}/openrpc.json`) via an `x-openrpc` vendor extension. The raw `/rpc`
838
+ * request body is opaque to OpenAPI, so this lets consumers discover the
839
+ * method/param/return schemas it accepts.
840
+ *
841
+ * The public `/openapi.json` keeps a URL reference (small, conventional). The
842
+ * docs handler instead inlines the document — see `inlineOpenrpc` in `tapimo/docs`.
843
+ */
844
+ export function applyOpenrpcLink(paths: PathsObject, basePath: string) {
845
+ // `basePath` is `/` at the root mount and `/api` etc. otherwise; strip any
846
+ // trailing slash so the join never doubles up (`//openrpc.json`).
847
+ const url = `${basePath.replace(/\/$/, '')}/openrpc.json`
848
+ for (const item of Object.values(paths))
849
+ for (const op of Object.values(item as Record<string, unknown>))
850
+ if (isMutableOperation(op) && isRpcOperation(op)) op['x-openrpc'] = url
851
+ }
719
852
 
720
- type PathsObject = Awaited<ReturnType<typeof generateSpecs>>['paths']
721
- type PathItem = PathsObject[string]
722
- type Operation = { summary?: string | undefined }
723
- type MutableOperation = {
724
- operationId: string
725
- responses?: Record<string, unknown> | undefined
726
- security?: unknown
727
- 'x-openrpc'?: unknown
728
- 'x-required-scopes'?: unknown
729
- }
853
+ type PathsObject = Awaited<ReturnType<typeof generateSpecs>>['paths']
854
+ type PathItem = PathsObject[string]
855
+ type Operation = { operationId?: string | undefined; summary?: string | undefined }
856
+ type MutableOperation = {
857
+ operationId: string
858
+ responses?: Record<string, unknown> | undefined
859
+ security?: unknown
860
+ 'x-openrpc'?: unknown
861
+ 'x-required-scopes'?: unknown
862
+ }
730
863
 
731
- function isRpcOperation(op: MutableOperation) {
732
- return op.operationId === 'rpcRequest'
733
- }
864
+ function isRpcOperation(op: MutableOperation) {
865
+ return op.operationId === 'rpcRequest'
866
+ }
867
+
868
+ function isOperation(value: unknown): value is Operation {
869
+ return !!value && typeof value === 'object' && 'summary' in value
870
+ }
734
871
 
735
- function isOperation(value: unknown): value is Operation {
736
- return !!value && typeof value === 'object' && 'summary' in value
872
+ function isMutableOperation(value: unknown): value is MutableOperation {
873
+ return (
874
+ !!value &&
875
+ typeof value === 'object' &&
876
+ !Array.isArray(value) &&
877
+ 'operationId' in value &&
878
+ typeof value.operationId === 'string'
879
+ )
880
+ }
737
881
  }
738
882
 
739
- function isMutableOperation(value: unknown): value is MutableOperation {
740
- return isRecord(value) && typeof value['operationId'] === 'string'
883
+ namespace ResponseBody {
884
+ export function isJson(response: globalThis.Response) {
885
+ return response.headers.get('content-type')?.includes('application/json') ?? false
886
+ }
741
887
  }
742
888
 
743
- function isJson(response: globalThis.Response) {
744
- return response.headers.get('content-type')?.includes('application/json') ?? false
889
+ namespace NodeServer {
890
+ type GetRequestListener = (typeof import('@hono/node-server'))['getRequestListener']
891
+ export type Fetch = Parameters<GetRequestListener>[0]
892
+ type NodeRequestListener = ReturnType<GetRequestListener>
893
+
894
+ export function getRequestListener(fetch: Fetch): Listener {
895
+ let listener: NodeRequestListener | undefined
896
+ return async (incoming_, outgoing_) => {
897
+ // Resolve the Node-only adapter at call time. The split specifier keeps
898
+ // Worker bundlers from eagerly including a server adapter they never run.
899
+ if (listener === undefined) {
900
+ const nodeServer = (await import(
901
+ /* @vite-ignore */ ['@hono', 'node-server'].join('/')
902
+ )) as typeof import('@hono/node-server')
903
+ listener = nodeServer.getRequestListener(fetch)
904
+ }
905
+ return listener(incoming_ as never, outgoing_ as never)
906
+ }
907
+ }
745
908
  }
746
909
 
747
- function isRecord(value: unknown): value is Record<string, unknown> {
748
- return !!value && typeof value === 'object' && !Array.isArray(value)
910
+ /** Error thrown when an app registers the same provider identifier more than once. */
911
+ export class DuplicateProviderIdError extends Error {
912
+ override name = 'App.DuplicateProviderIdError'
913
+
914
+ constructor(id: string) {
915
+ super(`Duplicate provider id "${id}".`)
916
+ }
749
917
  }
750
918
 
751
- type GetNodeRequestListener = (typeof import('@hono/node-server'))['getRequestListener']
752
- type NodeFetch = Parameters<GetNodeRequestListener>[0]
753
- type NodeRequestListener = ReturnType<GetNodeRequestListener>
754
-
755
- function getRequestListener(fetch: NodeFetch): Listener {
756
- let listener: NodeRequestListener | undefined
757
- return async (incoming_, outgoing_) => {
758
- // Resolve the Node-only adapter at call time. The split specifier keeps
759
- // Worker bundlers from eagerly including a server adapter they never run.
760
- if (listener === undefined) {
761
- const nodeServer = (await import(
762
- /* @vite-ignore */ ['@hono', 'node-server'].join('/')
763
- )) as typeof import('@hono/node-server')
764
- listener = nodeServer.getRequestListener(fetch)
765
- }
766
- return listener(incoming_ as never, outgoing_ as never)
919
+ /** Error thrown when an app registers a provider with a non-normalized identifier. */
920
+ export class InvalidProviderIdError extends Error {
921
+ override name = 'App.InvalidProviderIdError'
922
+
923
+ constructor(id: string) {
924
+ super(`Invalid provider id "${id}". Provider ids must be lowercase and trimmed.`)
767
925
  }
768
926
  }