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
@@ -1,6 +1,9 @@
1
1
  import { Tidx } from 'tidx.ts'
2
+ import type { Chain } from 'viem'
2
3
 
3
- import type * as Auth from './Auth.js'
4
+ import * as Auth from './Auth.js'
5
+ import * as Errors from './Errors.js'
6
+ import type * as Log from './Log.js'
4
7
  import * as Viem from './Viem.js'
5
8
 
6
9
  /** Default Tempo indexer (TIDX) base URLs. */
@@ -12,37 +15,37 @@ export const url: Record<number, string> = {
12
15
  /** TIDX query client. */
13
16
  export type Client = Tidx.Tidx
14
17
 
15
- /** Gets a TIDX query client for a Tempo chain id and request principal. */
16
- export type GetClient = (chainId?: Viem.ChainId, principal?: Auth.Principal | null) => Client
18
+ /** Gets a TIDX query client for a Tempo chain id and request context. */
19
+ export type GetClient = (
20
+ chainId?: Viem.ChainId,
21
+ options?: Pick<getClient.Options, 'principal' | 'zone'>,
22
+ ) => Client
17
23
 
18
- /**
19
- * Resolves a TIDX base URL for a Tempo chain id. May return `undefined` to fall
20
- * back to the built-in {@link url} map (e.g. for a chain the resolver doesn't
21
- * serve).
22
- */
23
- export type UrlResolver = (chainId: Viem.ChainId) => string | undefined
24
+ /** Shared, per-chain, or dynamically resolved TIDX URLs. */
25
+ export type UrlResolver = Viem.UrlResolver
24
26
 
25
27
  /**
26
28
  * Resolves the effective TIDX config for a single request.
27
29
  *
28
30
  * Accepts either a static config object or a per-request resolver function that
29
- * receives a {@link Viem.resolve.Context} (`chainId` plus the request
31
+ * receives a {@link Viem.resolveRpc.Context} (`chainId` plus the request
30
32
  * `principal`), so callers can route traffic per caller — e.g. send anonymous
31
33
  * (`principal.type === 'public'`) traffic to a separate, no-auth indexer. A
32
34
  * missing `baseUrl` falls back to the built-in public host map ({@link url});
33
- * missing auth fields send no Authorization header.
35
+ * missing `auth` sends no Authorization header.
34
36
  */
35
37
  export function resolve(
36
38
  tidx: getClient.Tidx | undefined,
37
- context: Viem.resolve.Context,
39
+ context: Viem.resolveRpc.Context,
38
40
  ): resolve.Resolved {
39
41
  const config = typeof tidx === 'function' ? tidx(context) : tidx
40
42
  return {
43
+ ...Auth.resolveCredential({ chainId: context.chainId, value: config?.auth }),
44
+ ...(context.zone && config?.zoneHeaders ? { zoneHeaders: config.zoneHeaders } : {}),
41
45
  baseUrl:
42
- (typeof config?.baseUrl === 'function' ? config.baseUrl(context.chainId) : config?.baseUrl) ??
46
+ Viem.resolveUrl(config?.baseUrl, context.chainId) ??
47
+ context.zone?.rpcUrls['tidx']?.http[0] ??
43
48
  url[context.chainId],
44
- basicAuth: config?.basicAuth,
45
- ...(config?.bearerAuth ? { bearerAuth: config.bearerAuth } : {}),
46
49
  }
47
50
  }
48
51
 
@@ -59,18 +62,25 @@ export declare namespace resolve {
59
62
  basicAuth?: string | undefined
60
63
  /** Bearer auth credential, or undefined to send no Bearer auth. */
61
64
  bearerAuth?: string | undefined
65
+ /** Headers sent to Zone indexer upstreams. */
66
+ zoneHeaders?: Viem.ZoneHeaders | undefined
62
67
  }
63
68
  }
64
69
 
65
70
  export function getClient(options: getClient.Options): Client {
66
- const { chainId = Viem.defaultChainId, principal = null, tidx } = options
67
- const { baseUrl, basicAuth, bearerAuth } = resolve(tidx, { chainId, principal })
71
+ const { chainId = Viem.defaultChainId, principal = null, tidx, zone } = options
72
+ const { baseUrl, basicAuth, bearerAuth, zoneHeaders } = resolve(tidx, {
73
+ chainId,
74
+ principal,
75
+ zone,
76
+ })
68
77
  return withTransientRetry(
69
78
  Tidx.create({
70
79
  baseUrl,
71
80
  basicAuth,
72
81
  bearerAuth,
73
82
  chainId,
83
+ headers: zoneHeaders,
74
84
  }),
75
85
  )
76
86
  }
@@ -79,7 +89,7 @@ export function getClient(options: getClient.Options): Client {
79
89
  * Builds a memoized {@link GetClient} that constructs one TIDX client per
80
90
  * resolved upstream and reuses it. Clients are stateless HTTP transports, so
81
91
  * reusing them avoids per-call construction cost. The cache key is the resolved
82
- * output (`baseUrl` + `basicAuth` + `chainId`), not the principal, so a resolver
92
+ * output (`baseUrl` + auth + `chainId`), not the principal, so a resolver
83
93
  * `tidx` may branch on any principal field while client cardinality stays
84
94
  * bounded by the number of distinct upstreams — callers that resolve to the same
85
95
  * upstream share a client. Shared by `data()` (per-request reads) and
@@ -90,15 +100,20 @@ export function createGetClient(options: createGetClient.Options = {}): GetClien
90
100
  const { defaultChainId = Viem.defaultChainId, tidx } = options
91
101
  const clients = new Map<string, Client>()
92
102
 
93
- return (chainId = defaultChainId, principal = null) => {
103
+ return (chainId = defaultChainId, options = {}) => {
104
+ const { principal = null, zone } = options
94
105
  // Resolve to derive the cache key; `getClient` re-resolves to build the
95
106
  // client on a miss. `resolve` is pure and cheap, so the extra call is free.
96
- const { baseUrl, basicAuth, bearerAuth } = resolve(tidx, { chainId, principal })
97
- const cacheKey = `${baseUrl}|${basicAuth ?? ''}|${bearerAuth ?? ''}|${chainId}`
107
+ const { baseUrl, basicAuth, bearerAuth, zoneHeaders } = resolve(tidx, {
108
+ chainId,
109
+ principal,
110
+ zone,
111
+ })
112
+ const cacheKey = `${baseUrl}|${basicAuth ?? ''}|${bearerAuth ?? ''}|${JSON.stringify(zoneHeaders)}|${chainId}`
98
113
  const existing = clients.get(cacheKey)
99
114
  if (existing) return existing
100
115
 
101
- const client = getClient({ chainId, principal, tidx })
116
+ const client = getClient({ chainId, principal, tidx, zone })
102
117
  clients.set(cacheKey, client)
103
118
  return client
104
119
  }
@@ -186,6 +201,85 @@ export function withTransientRetry(client: Client): Client {
186
201
  }
187
202
  }
188
203
 
204
+ /** Adds request-scoped timing and redacted failure diagnostics to a TIDX client. */
205
+ export function observe(client: Client, options: observe.Options): Client {
206
+ const fetch = client.fetch.bind(client)
207
+ return {
208
+ ...client,
209
+ fetch: (parameters) =>
210
+ options.time(async () => {
211
+ try {
212
+ const result = await fetch(parameters)
213
+ options.record(undefined)
214
+ return result
215
+ } catch (cause) {
216
+ options.record(providerFailure(cause))
217
+ throw cause
218
+ }
219
+ }),
220
+ }
221
+ }
222
+
223
+ export declare namespace observe {
224
+ /** Request-scoped observability hooks for TIDX calls. */
225
+ type Options = {
226
+ /** Records a failure, or clears one after a later successful query. */
227
+ record: (failure: Log.ProviderFailure | undefined) => void
228
+ /** Measures the complete TIDX call, including retries. */
229
+ time: <value>(fn: () => Promise<value>) => Promise<value>
230
+ }
231
+ }
232
+
233
+ /** Returns bounded failure metadata for a TIDX request. */
234
+ export function providerFailure(cause: unknown): Log.ProviderFailure {
235
+ const base = { id: 'tidx', operation: 'query' } as const
236
+ if (
237
+ cause instanceof DOMException &&
238
+ (cause.name === 'AbortError' || cause.name === 'TimeoutError')
239
+ )
240
+ return { ...base, failure: 'timeout' }
241
+
242
+ const status = Errors.getStatus(cause)
243
+ if (status !== undefined && status >= 200 && status < 300) return { ...base, failure: 'payload' }
244
+ if (status === 408) return { ...base, failure: 'timeout', status }
245
+ if (status === 422) return { ...base, failure: 'query', status }
246
+ if (status === 429) return { ...base, failure: 'rate_limit', status }
247
+ if (status !== undefined) return { ...base, failure: 'http', status }
248
+ if (cause instanceof TypeError) return { ...base, failure: 'network' }
249
+ return { ...base, failure: 'unknown' }
250
+ }
251
+
252
+ /** Returns bounded failure metadata when a TIDX response represents a failed query. */
253
+ export async function responseFailure(
254
+ response: Response,
255
+ ): Promise<Log.ProviderFailure | undefined> {
256
+ if (!response.ok) return providerFailure(response)
257
+
258
+ // Parsing is observational; clone the response so the raw route can return its body unchanged.
259
+ const body: unknown = await response
260
+ .clone()
261
+ .json()
262
+ .catch(() => undefined)
263
+ if (typeof body === 'object' && body !== null && 'ok' in body && body.ok === true)
264
+ return undefined
265
+ return { failure: 'payload', id: 'tidx', operation: 'query' }
266
+ }
267
+
268
+ /** Whether a TIDX response is a deterministic rejection of the caller's query. */
269
+ export function isQueryRejection(cause: unknown): boolean {
270
+ const status = Errors.getStatus(cause)
271
+ return status === 400 || status === 422
272
+ }
273
+
274
+ /**
275
+ * True for deterministic indexer failures a retry cannot fix: a
276
+ * `FetchRequestError` outside {@link isTransientError}'s transient classes,
277
+ * e.g. an HTTP 422 `db error` for a query shape the planner cannot execute.
278
+ */
279
+ export function isDeterministicError(error: unknown): boolean {
280
+ return error instanceof Tidx.FetchRequestError && !isTransientError(error)
281
+ }
282
+
189
283
  /**
190
284
  * True for transient indexer errors: an HTTP-level transient failure
191
285
  * (408/429/5xx), or a `FetchRequestError` that came back on a **2xx** HTTP
@@ -214,30 +308,32 @@ export declare namespace getClient {
214
308
  principal?: Auth.Principal | null | undefined
215
309
  /** TIDX query client options. */
216
310
  tidx?: Tidx | undefined
311
+ /** Zone chain metadata used for TIDX URL resolution. */
312
+ zone?: Chain | undefined
217
313
  }
218
314
 
219
315
  /**
220
316
  * TIDX query client options: either a static config, or a per-request
221
- * resolver function that receives a {@link Viem.resolve.Context} and returns
317
+ * resolver function that receives a {@link Viem.resolveRpc.Context} and returns
222
318
  * the config to use (e.g. routing anonymous callers to a public, no-auth
223
319
  * indexer).
224
320
  */
225
321
  type Tidx =
226
322
  | {
323
+ /** Shared or per-chain TIDX credentials. Values containing `:` use Basic auth; others use Bearer auth. */
324
+ auth?: Auth.ChainCredential | undefined
227
325
  /** Resolves the TIDX base URL for a Tempo chain id, or a static base URL. */
228
- baseUrl?: UrlResolver | string | undefined
229
- /** Basic auth credentials for TIDX requests. */
230
- basicAuth?: string | undefined
231
- /** Bearer auth credential for TIDX requests. */
232
- bearerAuth?: string | undefined
326
+ baseUrl?: UrlResolver | undefined
327
+ /** Headers sent to Zone indexer upstreams. */
328
+ zoneHeaders?: Viem.ZoneHeaders | undefined
233
329
  }
234
- | ((context: Viem.resolve.Context) => {
330
+ | ((context: Viem.resolveRpc.Context) => {
331
+ /** Shared or per-chain TIDX credentials, or undefined for none. */
332
+ auth?: Auth.ChainCredential | undefined
235
333
  /** TIDX base URL to use; falls back to the built-in public host when omitted. */
236
334
  baseUrl?: string | undefined
237
- /** Basic auth credentials for TIDX requests, or undefined for none. */
238
- basicAuth?: string | undefined
239
- /** Bearer auth credential for TIDX requests, or undefined for none. */
240
- bearerAuth?: string | undefined
335
+ /** Headers sent to Zone indexer upstreams. */
336
+ zoneHeaders?: Viem.ZoneHeaders | undefined
241
337
  })
242
338
  }
243
339
 
@@ -126,6 +126,21 @@ describe('read', () => {
126
126
  expect(snapshot?.version).toBe('v2')
127
127
  expect(snapshot?.list.map((token) => token.symbol)).toEqual(['aUSD'])
128
128
  })
129
+
130
+ test('round-trips a Zone chain id above the signed 32-bit range', async () => {
131
+ const chainId = 421_700_001
132
+ const db = TestApp.database()
133
+ await seed(db, chainId, 'zone', tokens)
134
+ const [head, rows, snapshot] = await Promise.all([
135
+ core_VerifiedTokens.head(db, chainId),
136
+ core_VerifiedTokens.list(db, chainId),
137
+ VerifiedTokens.read(db, chainId),
138
+ ])
139
+
140
+ expect(head?.chainId).toBe(chainId)
141
+ expect(rows.map((row) => row.chainId)).toEqual(tokens.map(() => chainId))
142
+ expect(snapshot?.chainId).toBe(chainId)
143
+ })
129
144
  })
130
145
 
131
146
  describe('snapshot', () => {
@@ -1,3 +1,7 @@
1
+ import { ZoneRpcAuthentication } from 'ox/tempo'
2
+ import { defineChain, type Chain } from 'viem'
3
+ import { tempoTestnet } from 'viem/tempo/chains'
4
+
1
5
  import type * as Auth from './Auth.js'
2
6
  import * as Viem from './Viem.js'
3
7
 
@@ -11,6 +15,21 @@ const apiKeyPrincipal: Auth.Principal = {
11
15
  orgId: 'org_test',
12
16
  type: 'api_key',
13
17
  }
18
+ const zone = defineChain({
19
+ ...tempoTestnet,
20
+ contracts: {
21
+ ...tempoTestnet.contracts,
22
+ messenger: { address: '0x0000000000000000000000000000000000000001' },
23
+ portal: { address: '0x0000000000000000000000000000000000000002' },
24
+ },
25
+ id: 421_700_001,
26
+ name: 'Zone E',
27
+ rpcUrls: {
28
+ default: { http: ['https://zone.rpc.test'] },
29
+ internal: { http: ['https://internal.zone.rpc.test'] },
30
+ },
31
+ sourceId: tempoTestnet.id,
32
+ }) satisfies Chain
14
33
 
15
34
  describe('isMainnet', () => {
16
35
  test('is true only for the mainnet chain id', () => {
@@ -24,15 +43,41 @@ describe('isMainnet', () => {
24
43
  })
25
44
  })
26
45
 
27
- describe('resolve', () => {
46
+ describe('configuredChainIds', () => {
47
+ test('returns ids from object and serialized URL maps', () => {
48
+ expect(Viem.configuredChainIds({ 31_318: 'https://nextfork.tidx.test' })).toEqual([31_318])
49
+ expect(
50
+ Viem.configuredChainIds(
51
+ JSON.stringify({
52
+ 31_318: 'https://nextfork.tidx.test',
53
+ 421_700_002: 'https://zone.tidx.test',
54
+ }),
55
+ ),
56
+ ).toEqual([31_318, 421_700_002])
57
+ })
58
+
59
+ test('returns no ids for shared URLs and dynamic resolvers', () => {
60
+ expect(Viem.configuredChainIds('https://tidx.test')).toEqual([])
61
+ expect(Viem.configuredChainIds(() => 'https://tidx.test')).toEqual([])
62
+ })
63
+
64
+ test('rejects malformed chain-id maps', () => {
65
+ for (const chainId of ['-1', '0', '031318', '0x7a56', '1e3', '9007199254740992', 'devnet'])
66
+ expect(() =>
67
+ Viem.configuredChainIds(JSON.stringify({ [chainId]: 'https://tidx.test' })),
68
+ ).toThrow('Expected a URL or a chain-id-to-URL JSON object.')
69
+ })
70
+ })
71
+
72
+ describe('resolveRpc', () => {
28
73
  test('defaults to the per-chain RPC URL', () => {
29
- expect(Viem.resolve(undefined, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
74
+ expect(Viem.resolveRpc(undefined, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
30
75
  {
31
76
  "basicAuth": undefined,
32
77
  "url": "https://rpc.tempo.xyz",
33
78
  }
34
79
  `)
35
- expect(Viem.resolve(undefined, { chainId: 42431, principal: null })).toMatchInlineSnapshot(`
80
+ expect(Viem.resolveRpc(undefined, { chainId: 42431, principal: null })).toMatchInlineSnapshot(`
36
81
  {
37
82
  "basicAuth": undefined,
38
83
  "url": "https://rpc.testnet.tempo.xyz",
@@ -42,8 +87,8 @@ describe('resolve', () => {
42
87
 
43
88
  test('uses a static config override', () => {
44
89
  expect(
45
- Viem.resolve(
46
- { basicAuth: 'user:pass', url: (chainId) => `https://${chainId}.rpc.test` },
90
+ Viem.resolveRpc(
91
+ { auth: 'user:pass', url: (chainId) => `https://${chainId}.rpc.test` },
47
92
  { chainId: 4217, principal: null },
48
93
  ),
49
94
  ).toMatchInlineSnapshot(`
@@ -54,15 +99,62 @@ describe('resolve', () => {
54
99
  `)
55
100
  })
56
101
 
102
+ test('selects RPC URLs by chain id', () => {
103
+ const rpc = {
104
+ publicZoneUrl: JSON.stringify({ 421_700_001: 'https://public.zone.rpc.test' }),
105
+ url: JSON.stringify({ 4217: 'https://mainnet.rpc.test' }),
106
+ }
107
+
108
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
109
+ {
110
+ "basicAuth": undefined,
111
+ "url": "https://mainnet.rpc.test",
112
+ }
113
+ `)
114
+ expect(Viem.resolveRpc(rpc, { chainId: zone.id, principal: null, zone }))
115
+ .toMatchInlineSnapshot(`
116
+ {
117
+ "basicAuth": undefined,
118
+ "publicZoneUrl": "https://public.zone.rpc.test",
119
+ "url": "https://internal.zone.rpc.test",
120
+ }
121
+ `)
122
+ })
123
+
124
+ test('selects auth and scheme by chain id', () => {
125
+ const rpc = { auth: { 4217: 'mainnet:secret', 42431: 'testnet-token' } }
126
+
127
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: null }).basicAuth).toBe(
128
+ 'mainnet:secret',
129
+ )
130
+ expect(Viem.resolveRpc(rpc, { chainId: 42431, principal: null }).bearerAuth).toBe(
131
+ 'testnet-token',
132
+ )
133
+ expect(
134
+ Viem.resolveRpc(rpc, { chainId: 421_700_001, principal: null }).basicAuth,
135
+ ).toBeUndefined()
136
+ })
137
+
138
+ test('parses serialized Basic auth by chain id', () => {
139
+ const rpc = { auth: JSON.stringify({ 4217: 'mainnet:secret' }) }
140
+
141
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: null }).basicAuth).toBe(
142
+ 'mainnet:secret',
143
+ )
144
+ expect(Viem.resolveRpc(rpc, { chainId: 42431, principal: null }).basicAuth).toBeUndefined()
145
+ })
146
+
57
147
  test('the static form ignores the principal', () => {
58
- const rpc = { basicAuth: 'user:pass', url: () => 'https://internal.rpc' }
59
- expect(Viem.resolve(rpc, { chainId: 4217, principal: publicPrincipal })).toMatchInlineSnapshot(`
148
+ const rpc = { auth: 'user:pass', url: () => 'https://internal.rpc' }
149
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: publicPrincipal }))
150
+ .toMatchInlineSnapshot(`
60
151
  {
61
152
  "basicAuth": "user:pass",
62
153
  "url": "https://internal.rpc",
63
154
  }
64
155
  `)
65
- expect(Viem.resolve(rpc, { chainId: 4217, principal: apiKeyPrincipal })).toMatchInlineSnapshot(`
156
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: apiKeyPrincipal }))
157
+ .toMatchInlineSnapshot(`
66
158
  {
67
159
  "basicAuth": "user:pass",
68
160
  "url": "https://internal.rpc",
@@ -71,17 +163,19 @@ describe('resolve', () => {
71
163
  })
72
164
 
73
165
  test('the resolver form routes anonymous callers to a separate upstream', () => {
74
- const rpc = ({ principal }: Viem.resolve.Context) =>
166
+ const rpc = ({ principal }: Viem.resolveRpc.Context) =>
75
167
  principal?.type === 'public'
76
168
  ? { url: 'https://rpc.tempo.xyz' }
77
- : { basicAuth: 'user:pass', url: 'https://internal.rpc' }
78
- expect(Viem.resolve(rpc, { chainId: 4217, principal: publicPrincipal })).toMatchInlineSnapshot(`
169
+ : { auth: 'user:pass', url: 'https://internal.rpc' }
170
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: publicPrincipal }))
171
+ .toMatchInlineSnapshot(`
79
172
  {
80
173
  "basicAuth": undefined,
81
174
  "url": "https://rpc.tempo.xyz",
82
175
  }
83
176
  `)
84
- expect(Viem.resolve(rpc, { chainId: 4217, principal: apiKeyPrincipal })).toMatchInlineSnapshot(`
177
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: apiKeyPrincipal }))
178
+ .toMatchInlineSnapshot(`
85
179
  {
86
180
  "basicAuth": "user:pass",
87
181
  "url": "https://internal.rpc",
@@ -90,11 +184,11 @@ describe('resolve', () => {
90
184
  })
91
185
 
92
186
  test('a null principal (trusted poller) takes the non-public branch', () => {
93
- const rpc = ({ principal }: Viem.resolve.Context) =>
187
+ const rpc = ({ principal }: Viem.resolveRpc.Context) =>
94
188
  principal?.type === 'public'
95
189
  ? { url: 'https://rpc.tempo.xyz' }
96
- : { basicAuth: 'user:pass', url: 'https://internal.rpc' }
97
- expect(Viem.resolve(rpc, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
190
+ : { auth: 'user:pass', url: 'https://internal.rpc' }
191
+ expect(Viem.resolveRpc(rpc, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
98
192
  {
99
193
  "basicAuth": "user:pass",
100
194
  "url": "https://internal.rpc",
@@ -104,7 +198,7 @@ describe('resolve', () => {
104
198
 
105
199
  test('a resolver that omits url falls back to the built-in public host', () => {
106
200
  const rpc = () => ({})
107
- expect(Viem.resolve(rpc, { chainId: 42431, principal: publicPrincipal }))
201
+ expect(Viem.resolveRpc(rpc, { chainId: 42431, principal: publicPrincipal }))
108
202
  .toMatchInlineSnapshot(`
109
203
  {
110
204
  "basicAuth": undefined,
@@ -112,6 +206,93 @@ describe('resolve', () => {
112
206
  }
113
207
  `)
114
208
  })
209
+
210
+ test('a resolver that omits url falls back to the Zone internal host', () => {
211
+ expect(Viem.resolveRpc(() => ({}), { chainId: zone.id, principal: publicPrincipal, zone }))
212
+ .toMatchInlineSnapshot(`
213
+ {
214
+ "basicAuth": undefined,
215
+ "publicZoneUrl": "https://zone.rpc.test",
216
+ "url": "https://internal.zone.rpc.test",
217
+ }
218
+ `)
219
+ })
220
+ })
221
+
222
+ describe('getClient', () => {
223
+ test('sends inferred Bearer auth', async () => {
224
+ const fetch = vi
225
+ .spyOn(globalThis, 'fetch')
226
+ .mockResolvedValue(Response.json({ id: 1, jsonrpc: '2.0', result: '0x1079' }))
227
+ try {
228
+ const client = Viem.getClient({
229
+ chainId: 4217,
230
+ rpc: { auth: 'rpc-token', url: 'https://internal.rpc.test' },
231
+ })
232
+ await client.getChainId()
233
+
234
+ const [input, init] = fetch.mock.calls[0]!
235
+ const upstream = new Request(input, init)
236
+ expect(upstream.headers.get('authorization')).toBe('Bearer rpc-token')
237
+ } finally {
238
+ fetch.mockRestore()
239
+ }
240
+ })
241
+
242
+ test('does not send RPC auth to a public Zone URL', async () => {
243
+ const fetch = vi
244
+ .spyOn(globalThis, 'fetch')
245
+ .mockResolvedValue(Response.json({ id: 1, jsonrpc: '2.0', result: '0x1079' }))
246
+ try {
247
+ const client = Viem.getClient({
248
+ chainId: zone.id,
249
+ rpc: {
250
+ auth: 'rpc:secret',
251
+ publicZoneUrl: 'https://public.zone.rpc.test',
252
+ url: 'https://internal.rpc.test',
253
+ },
254
+ zone,
255
+ zoneToken: 'zone-token',
256
+ })
257
+ await client.getChainId()
258
+
259
+ const [input, init] = fetch.mock.calls[0]!
260
+ const upstream = new Request(input, init)
261
+ expect(upstream.url).toBe('https://public.zone.rpc.test/')
262
+ expect(upstream.headers.get('authorization')).toBeNull()
263
+ expect(upstream.headers.get(ZoneRpcAuthentication.headerName)).toBe('zone-token')
264
+ } finally {
265
+ fetch.mockRestore()
266
+ }
267
+ })
268
+
269
+ test('sends Zone headers to both internal and public Zone URLs', async () => {
270
+ const fetch = vi
271
+ .spyOn(globalThis, 'fetch')
272
+ .mockResolvedValue(Response.json({ id: 1, jsonrpc: '2.0', result: '0x1079' }))
273
+ try {
274
+ const client = Viem.getClient({
275
+ chainId: zone.id,
276
+ rpc: {
277
+ publicZoneUrl: 'https://public.zone.rpc.test',
278
+ zoneHeaders: {
279
+ 'CF-Access-Client-Id': 'client-id',
280
+ 'CF-Access-Client-Secret': 'client-secret',
281
+ },
282
+ },
283
+ zone,
284
+ zoneToken: 'zone-token',
285
+ })
286
+ await client.getChainId()
287
+
288
+ const [input, init] = fetch.mock.calls[0]!
289
+ const upstream = new Request(input, init)
290
+ expect(upstream.headers.get('CF-Access-Client-Id')).toBe('client-id')
291
+ expect(upstream.headers.get('CF-Access-Client-Secret')).toBe('client-secret')
292
+ } finally {
293
+ fetch.mockRestore()
294
+ }
295
+ })
115
296
  })
116
297
 
117
298
  describe('createGetClient', () => {
@@ -120,7 +301,7 @@ describe('createGetClient', () => {
120
301
  rpc: ({ principal }) =>
121
302
  principal?.type === 'public'
122
303
  ? { url: 'https://rpc.tempo.xyz' }
123
- : { basicAuth: 'user:pass', url: 'https://internal.rpc' },
304
+ : { auth: 'user:pass', url: 'https://internal.rpc' },
124
305
  })
125
306
 
126
307
  expect(getClient(4217, apiKeyPrincipal)).toBe(getClient(4217, apiKeyPrincipal))