tapimo 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. package/dist/ApiKeys.d.ts +24 -7
  2. package/dist/ApiKeys.d.ts.map +1 -1
  3. package/dist/ApiKeys.js +17 -5
  4. package/dist/ApiKeys.js.map +1 -1
  5. package/dist/App.d.ts +12104 -7861
  6. package/dist/App.d.ts.map +1 -1
  7. package/dist/App.js +191 -128
  8. package/dist/App.js.map +1 -1
  9. package/dist/Assets.d.ts +10 -0
  10. package/dist/Assets.d.ts.map +1 -1
  11. package/dist/Assets.js +17 -4
  12. package/dist/Assets.js.map +1 -1
  13. package/dist/Scope.d.ts +19 -8
  14. package/dist/Scope.d.ts.map +1 -1
  15. package/dist/Scope.js +25 -9
  16. package/dist/Scope.js.map +1 -1
  17. package/dist/Webhooks.d.ts +1 -1
  18. package/dist/admin/App.d.ts +601 -20
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +12 -2
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +94 -11
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +141 -32
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  28. package/dist/admin/apps/earn-vaults.js +409 -0
  29. package/dist/admin/apps/earn-vaults.js.map +1 -0
  30. package/dist/admin/apps/verified-tokens.d.ts +166 -166
  31. package/dist/admin/ui.generated.d.ts +1 -1
  32. package/dist/admin/ui.generated.d.ts.map +1 -1
  33. package/dist/admin/ui.generated.js +99 -43
  34. package/dist/admin/ui.generated.js.map +1 -1
  35. package/dist/analytics/Analytics.d.ts +2 -0
  36. package/dist/analytics/Analytics.d.ts.map +1 -1
  37. package/dist/analytics/Analytics.js +18 -2
  38. package/dist/analytics/Analytics.js.map +1 -1
  39. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  40. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  41. package/dist/analytics/tables/requestEvents.js +59 -39
  42. package/dist/analytics/tables/requestEvents.js.map +1 -1
  43. package/dist/apps/Zones.d.ts +8335 -0
  44. package/dist/apps/Zones.d.ts.map +1 -0
  45. package/dist/apps/Zones.js +38 -0
  46. package/dist/apps/Zones.js.map +1 -0
  47. package/dist/apps/data/App.d.ts +12125 -7913
  48. package/dist/apps/data/App.d.ts.map +1 -1
  49. package/dist/apps/data/App.js +91 -19
  50. package/dist/apps/data/App.js.map +1 -1
  51. package/dist/apps/data/FxOracle.d.ts +1 -1
  52. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  53. package/dist/apps/data/index.d.ts +0 -1
  54. package/dist/apps/data/index.d.ts.map +1 -1
  55. package/dist/apps/data/index.js +0 -1
  56. package/dist/apps/data/index.js.map +1 -1
  57. package/dist/apps/data/routes/activities.d.ts +32 -32
  58. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  59. package/dist/apps/data/routes/activities.js +130 -65
  60. package/dist/apps/data/routes/activities.js.map +1 -1
  61. package/dist/apps/data/routes/addresses.d.ts +312 -312
  62. package/dist/apps/data/routes/balances.d.ts +18 -18
  63. package/dist/apps/data/routes/balances.js +5 -5
  64. package/dist/apps/data/routes/balances.js.map +1 -1
  65. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  66. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  67. package/dist/apps/data/routes/coingecko.js +62 -35
  68. package/dist/apps/data/routes/coingecko.js.map +1 -1
  69. package/dist/apps/data/routes/earn.d.ts +2144 -0
  70. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  71. package/dist/apps/data/routes/earn.js +947 -0
  72. package/dist/apps/data/routes/earn.js.map +1 -0
  73. package/dist/apps/data/routes/exchanges.d.ts +1625 -718
  74. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  75. package/dist/apps/data/routes/exchanges.js +656 -193
  76. package/dist/apps/data/routes/exchanges.js.map +1 -1
  77. package/dist/apps/data/routes/fee-amm.d.ts +108 -108
  78. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  79. package/dist/apps/data/routes/fee-amm.js +59 -8
  80. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  81. package/dist/apps/data/routes/funding.d.ts +4092 -387
  82. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  83. package/dist/apps/data/routes/funding.js +1403 -256
  84. package/dist/apps/data/routes/funding.js.map +1 -1
  85. package/dist/apps/data/routes/indexer.d.ts +30 -30
  86. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  87. package/dist/apps/data/routes/indexer.js +19 -2
  88. package/dist/apps/data/routes/indexer.js.map +1 -1
  89. package/dist/apps/data/routes/receipts.d.ts +263 -263
  90. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  91. package/dist/apps/data/routes/receipts.js +11 -11
  92. package/dist/apps/data/routes/receipts.js.map +1 -1
  93. package/dist/apps/data/routes/rpc.d.ts +5 -5
  94. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  95. package/dist/apps/data/routes/rpc.js +211 -22
  96. package/dist/apps/data/routes/rpc.js.map +1 -1
  97. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  98. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  99. package/dist/apps/data/routes/tokenlist.js +39 -8
  100. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  101. package/dist/apps/data/routes/tokens.d.ts +114 -86
  102. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  103. package/dist/apps/data/routes/tokens.js +194 -91
  104. package/dist/apps/data/routes/tokens.js.map +1 -1
  105. package/dist/apps/data/routes/transactions.d.ts +53 -53
  106. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  107. package/dist/apps/data/routes/transactions.js +78 -39
  108. package/dist/apps/data/routes/transactions.js.map +1 -1
  109. package/dist/apps/data/routes/transfers.d.ts +76 -27
  110. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  111. package/dist/apps/data/routes/transfers.js +165 -67
  112. package/dist/apps/data/routes/transfers.js.map +1 -1
  113. package/dist/apps/data/routes/valuation.d.ts +42 -42
  114. package/dist/apps/data/routes/valuation.js +2 -2
  115. package/dist/apps/data/routes/valuation.js.map +1 -1
  116. package/dist/apps/data/routes/webhooks.d.ts +369 -367
  117. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  118. package/dist/apps/data/routes/webhooks.js +161 -59
  119. package/dist/apps/data/routes/webhooks.js.map +1 -1
  120. package/dist/apps/data/routes/zones.d.ts +281 -0
  121. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  122. package/dist/apps/data/routes/zones.js +252 -0
  123. package/dist/apps/data/routes/zones.js.map +1 -0
  124. package/dist/apps/docs/reference.js +6 -5
  125. package/dist/apps/docs/reference.js.map +1 -1
  126. package/dist/apps/index.d.ts +2 -1
  127. package/dist/apps/index.d.ts.map +1 -1
  128. package/dist/apps/index.js +2 -1
  129. package/dist/apps/index.js.map +1 -1
  130. package/dist/apps/management/App.d.ts +670 -670
  131. package/dist/apps/management/Billing.d.ts +8 -0
  132. package/dist/apps/management/Billing.d.ts.map +1 -1
  133. package/dist/apps/management/Billing.js +12 -0
  134. package/dist/apps/management/Billing.js.map +1 -1
  135. package/dist/apps/management/Error.d.ts +12 -0
  136. package/dist/apps/management/Error.d.ts.map +1 -0
  137. package/dist/apps/management/Error.js +10 -0
  138. package/dist/apps/management/Error.js.map +1 -0
  139. package/dist/apps/management/routes/api-keys.d.ts +5 -5
  140. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  141. package/dist/apps/management/routes/api-keys.js +2 -8
  142. package/dist/apps/management/routes/api-keys.js.map +1 -1
  143. package/dist/apps/management/routes/billing.d.ts +119 -119
  144. package/dist/apps/management/routes/faucet.d.ts +2 -2
  145. package/dist/apps/management/routes/invitations.d.ts +62 -62
  146. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  147. package/dist/apps/management/routes/invitations.js +4 -10
  148. package/dist/apps/management/routes/invitations.js.map +1 -1
  149. package/dist/apps/management/routes/invite-links.d.ts +30 -30
  150. package/dist/apps/management/routes/me.d.ts +6 -6
  151. package/dist/apps/management/routes/members.d.ts +2 -2
  152. package/dist/apps/management/routes/orgs.d.ts +48 -48
  153. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  154. package/dist/apps/management/routes/orgs.js +2 -8
  155. package/dist/apps/management/routes/orgs.js.map +1 -1
  156. package/dist/apps/management/routes/projects.d.ts +9 -9
  157. package/dist/apps/management/routes/scopes.js +2 -2
  158. package/dist/apps/management/routes/scopes.js.map +1 -1
  159. package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
  160. package/dist/apps/management/routes/webhooks.d.ts +50 -50
  161. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  162. package/dist/apps/management/routes/webhooks.js +15 -3
  163. package/dist/apps/management/routes/webhooks.js.map +1 -1
  164. package/dist/apps/mpp/App.d.ts +55 -56
  165. package/dist/apps/mpp/App.d.ts.map +1 -1
  166. package/dist/apps/mpp/App.js +192 -27
  167. package/dist/apps/mpp/App.js.map +1 -1
  168. package/dist/apps/mpp/Mpp.d.ts +0 -20
  169. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  170. package/dist/apps/mpp/Mpp.js +0 -24
  171. package/dist/apps/mpp/Mpp.js.map +1 -1
  172. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  173. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  174. package/dist/apps/mpp/internal/Adapter.js +66 -0
  175. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  176. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  177. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  178. package/dist/apps/mpp/internal/Error.js +41 -0
  179. package/dist/apps/mpp/internal/Error.js.map +1 -0
  180. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  181. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  182. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  183. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  184. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  185. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  186. package/dist/apps/mpp/internal/Policy.js +57 -0
  187. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  188. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  189. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  190. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  191. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  192. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  193. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  194. package/dist/apps/mpp/internal/Screening.js +20 -0
  195. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  196. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  197. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  198. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  199. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  200. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  201. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  202. package/dist/apps/mpp/internal/Utils.js +24 -0
  203. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  204. package/dist/apps/relay/App.js +183 -23
  205. package/dist/apps/relay/App.js.map +1 -1
  206. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  208. package/dist/apps/relay/Sponsorships.js +15 -6
  209. package/dist/apps/relay/Sponsorships.js.map +1 -1
  210. package/dist/db/Db.d.ts +20 -0
  211. package/dist/db/Db.d.ts.map +1 -1
  212. package/dist/db/Db.js +342 -0
  213. package/dist/db/Db.js.map +1 -1
  214. package/dist/db/Schema.d.ts +921 -1
  215. package/dist/db/Schema.d.ts.map +1 -1
  216. package/dist/db/Schema.js +269 -1
  217. package/dist/db/Schema.js.map +1 -1
  218. package/dist/db/tables/earnVaults.d.ts +68 -0
  219. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  220. package/dist/db/tables/earnVaults.js +72 -0
  221. package/dist/db/tables/earnVaults.js.map +1 -0
  222. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  223. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  224. package/dist/db/tables/fundingCatalog.js +85 -0
  225. package/dist/db/tables/fundingCatalog.js.map +1 -0
  226. package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
  227. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  228. package/dist/db/tables/fundingDepositAddresses.js +206 -0
  229. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  230. package/dist/db/tables/fundingDeposits.d.ts +115 -0
  231. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  232. package/dist/db/tables/fundingDeposits.js +100 -0
  233. package/dist/db/tables/fundingDeposits.js.map +1 -0
  234. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  235. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  236. package/dist/db/tables/fundingIdempotency.js +103 -0
  237. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  238. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  239. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  240. package/dist/db/tables/fundingTransferEvents.js +18 -0
  241. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  242. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  243. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  244. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  245. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  246. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  247. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  248. package/dist/db/tables/fundingTransfers.js +89 -0
  249. package/dist/db/tables/fundingTransfers.js.map +1 -0
  250. package/dist/db/tables/organizations.d.ts +8 -0
  251. package/dist/db/tables/organizations.d.ts.map +1 -1
  252. package/dist/db/tables/organizations.js +16 -0
  253. package/dist/db/tables/organizations.js.map +1 -1
  254. package/dist/db/tables/projects.d.ts +8 -0
  255. package/dist/db/tables/projects.d.ts.map +1 -1
  256. package/dist/db/tables/projects.js +16 -0
  257. package/dist/db/tables/projects.js.map +1 -1
  258. package/dist/db/tables/requestUsage.d.ts +13 -0
  259. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  260. package/dist/db/tables/requestUsage.js +16 -0
  261. package/dist/db/tables/requestUsage.js.map +1 -1
  262. package/dist/db/tables/sponsoredTransactions.d.ts +2 -2
  263. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  264. package/dist/db/tables/sponsoredTransactions.js +1 -1
  265. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  266. package/dist/db/tables/users.d.ts +8 -0
  267. package/dist/db/tables/users.d.ts.map +1 -1
  268. package/dist/db/tables/users.js +16 -0
  269. package/dist/db/tables/users.js.map +1 -1
  270. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  271. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  272. package/dist/db/tables/verifiedTokens.js +9 -7
  273. package/dist/db/tables/verifiedTokens.js.map +1 -1
  274. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  275. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  276. package/dist/db/tables/webhookSubscriptions.js +24 -3
  277. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  278. package/dist/handlers/relay.js +108 -108
  279. package/dist/handlers/relay.js.map +1 -1
  280. package/dist/internal/Auth.d.ts +26 -0
  281. package/dist/internal/Auth.d.ts.map +1 -1
  282. package/dist/internal/Auth.js +35 -2
  283. package/dist/internal/Auth.js.map +1 -1
  284. package/dist/internal/Cache.d.ts.map +1 -1
  285. package/dist/internal/Cache.js +16 -10
  286. package/dist/internal/Cache.js.map +1 -1
  287. package/dist/internal/Cursor.js +1 -1
  288. package/dist/internal/Cursor.js.map +1 -1
  289. package/dist/internal/EarnRates.d.ts +89 -0
  290. package/dist/internal/EarnRates.d.ts.map +1 -0
  291. package/dist/internal/EarnRates.js +266 -0
  292. package/dist/internal/EarnRates.js.map +1 -0
  293. package/dist/internal/EarnVaults.d.ts +171 -0
  294. package/dist/internal/EarnVaults.d.ts.map +1 -0
  295. package/dist/internal/EarnVaults.js +547 -0
  296. package/dist/internal/EarnVaults.js.map +1 -0
  297. package/dist/internal/EdgeCache.d.ts +8 -1
  298. package/dist/internal/EdgeCache.d.ts.map +1 -1
  299. package/dist/internal/EdgeCache.js +33 -7
  300. package/dist/internal/EdgeCache.js.map +1 -1
  301. package/dist/internal/Id.d.ts +11 -0
  302. package/dist/internal/Id.d.ts.map +1 -1
  303. package/dist/internal/Id.js +13 -0
  304. package/dist/internal/Id.js.map +1 -1
  305. package/dist/internal/Idempotency.d.ts +83 -0
  306. package/dist/internal/Idempotency.d.ts.map +1 -0
  307. package/dist/internal/Idempotency.js +113 -0
  308. package/dist/internal/Idempotency.js.map +1 -0
  309. package/dist/internal/Log.d.ts +64 -9
  310. package/dist/internal/Log.d.ts.map +1 -1
  311. package/dist/internal/Log.js +29 -7
  312. package/dist/internal/Log.js.map +1 -1
  313. package/dist/internal/MetricSink.d.ts.map +1 -1
  314. package/dist/internal/MetricSink.js +47 -1
  315. package/dist/internal/MetricSink.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +1 -1
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +3 -0
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/Provider.d.ts +14 -0
  321. package/dist/internal/Provider.d.ts.map +1 -0
  322. package/dist/internal/Provider.js +5 -0
  323. package/dist/internal/Provider.js.map +1 -0
  324. package/dist/internal/Schema.d.ts +6 -1
  325. package/dist/internal/Schema.d.ts.map +1 -1
  326. package/dist/internal/Schema.js +20 -11
  327. package/dist/internal/Schema.js.map +1 -1
  328. package/dist/internal/Store.d.ts +6 -0
  329. package/dist/internal/Store.d.ts.map +1 -1
  330. package/dist/internal/Store.js +35 -0
  331. package/dist/internal/Store.js.map +1 -1
  332. package/dist/internal/Tidx.d.ts +43 -24
  333. package/dist/internal/Tidx.d.ts.map +1 -1
  334. package/dist/internal/Tidx.js +79 -11
  335. package/dist/internal/Tidx.js.map +1 -1
  336. package/dist/internal/Viem.d.ts +82 -65
  337. package/dist/internal/Viem.d.ts.map +1 -1
  338. package/dist/internal/Viem.js +83 -12
  339. package/dist/internal/Viem.js.map +1 -1
  340. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  341. package/dist/internal/WebhookDestination.js +34 -28
  342. package/dist/internal/WebhookDestination.js.map +1 -1
  343. package/dist/internal/Webhooks.d.ts +9 -0
  344. package/dist/internal/Webhooks.d.ts.map +1 -1
  345. package/dist/internal/Webhooks.js +15 -10
  346. package/dist/internal/Webhooks.js.map +1 -1
  347. package/dist/internal/exchange/Provider.d.ts +219 -0
  348. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  349. package/dist/internal/exchange/Provider.js +117 -0
  350. package/dist/internal/exchange/Provider.js.map +1 -0
  351. package/dist/internal/exchange/index.d.ts +2 -0
  352. package/dist/internal/exchange/index.d.ts.map +1 -0
  353. package/dist/internal/exchange/index.js +2 -0
  354. package/dist/internal/exchange/index.js.map +1 -0
  355. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  356. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  357. package/dist/internal/exchange/providers/uniswap.js +553 -0
  358. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  359. package/dist/internal/funding/Action.d.ts +55 -0
  360. package/dist/internal/funding/Action.d.ts.map +1 -0
  361. package/dist/internal/funding/Action.js +74 -0
  362. package/dist/internal/funding/Action.js.map +1 -0
  363. package/dist/internal/funding/Catalog.d.ts +107 -0
  364. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  365. package/dist/internal/funding/Catalog.js +270 -0
  366. package/dist/internal/funding/Catalog.js.map +1 -0
  367. package/dist/internal/funding/Chain.d.ts +76 -0
  368. package/dist/internal/funding/Chain.d.ts.map +1 -0
  369. package/dist/internal/funding/Chain.js +38 -0
  370. package/dist/internal/funding/Chain.js.map +1 -0
  371. package/dist/internal/funding/Deposit.d.ts +366 -0
  372. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  373. package/dist/internal/funding/Deposit.js +286 -0
  374. package/dist/internal/funding/Deposit.js.map +1 -0
  375. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  376. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  377. package/dist/internal/funding/DepositAddress.js +189 -0
  378. package/dist/internal/funding/DepositAddress.js.map +1 -0
  379. package/dist/internal/funding/Evidence.d.ts +52 -0
  380. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  381. package/dist/internal/funding/Evidence.js +314 -0
  382. package/dist/internal/funding/Evidence.js.map +1 -0
  383. package/dist/internal/funding/Provider.d.ts +1186 -0
  384. package/dist/internal/funding/Provider.d.ts.map +1 -0
  385. package/dist/internal/funding/Provider.js +1081 -0
  386. package/dist/internal/funding/Provider.js.map +1 -0
  387. package/dist/internal/funding/Reconciliation.d.ts +113 -0
  388. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  389. package/dist/internal/funding/Reconciliation.js +676 -0
  390. package/dist/internal/funding/Reconciliation.js.map +1 -0
  391. package/dist/internal/funding/Route.d.ts +21 -0
  392. package/dist/internal/funding/Route.d.ts.map +1 -0
  393. package/dist/internal/funding/Route.js +5 -0
  394. package/dist/internal/funding/Route.js.map +1 -0
  395. package/dist/internal/funding/Subsidy.d.ts +113 -0
  396. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  397. package/dist/internal/funding/Subsidy.js +138 -0
  398. package/dist/internal/funding/Subsidy.js.map +1 -0
  399. package/dist/internal/funding/Token.d.ts +41 -0
  400. package/dist/internal/funding/Token.d.ts.map +1 -0
  401. package/dist/internal/funding/Token.js +22 -0
  402. package/dist/internal/funding/Token.js.map +1 -0
  403. package/dist/internal/funding/Transfer.d.ts +643 -0
  404. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  405. package/dist/internal/funding/Transfer.js +332 -0
  406. package/dist/internal/funding/Transfer.js.map +1 -0
  407. package/dist/internal/funding/index.d.ts +13 -0
  408. package/dist/internal/funding/index.d.ts.map +1 -0
  409. package/dist/internal/funding/index.js +13 -0
  410. package/dist/internal/funding/index.js.map +1 -0
  411. package/dist/internal/funding/providers/across.d.ts +21 -0
  412. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  413. package/dist/internal/funding/providers/across.js +117 -0
  414. package/dist/internal/funding/providers/across.js.map +1 -0
  415. package/dist/internal/funding/providers/relay.d.ts +46 -0
  416. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  417. package/dist/internal/funding/providers/relay.js +464 -0
  418. package/dist/internal/funding/providers/relay.js.map +1 -0
  419. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  420. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  421. package/dist/internal/funding/providers/rhino.js +116 -0
  422. package/dist/internal/funding/providers/rhino.js.map +1 -0
  423. package/dist/internal/funding/providers/squid.d.ts +19 -0
  424. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  425. package/dist/internal/funding/providers/squid.js +120 -0
  426. package/dist/internal/funding/providers/squid.js.map +1 -0
  427. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  428. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  429. package/dist/internal/funding/providers/symbiosis.js +176 -0
  430. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  431. package/dist/internal/index.d.ts +5 -1
  432. package/dist/internal/index.d.ts.map +1 -1
  433. package/dist/internal/index.js +5 -1
  434. package/dist/internal/index.js.map +1 -1
  435. package/dist/internal/webhookDestinations/url.js +61 -57
  436. package/dist/internal/webhookDestinations/url.js.map +1 -1
  437. package/dist/providers/index.d.ts +43 -0
  438. package/dist/providers/index.d.ts.map +1 -0
  439. package/dist/providers/index.js +19 -0
  440. package/dist/providers/index.js.map +1 -0
  441. package/package.json +9 -4
  442. package/src/ApiKeys.test.ts +11 -7
  443. package/src/ApiKeys.ts +37 -9
  444. package/src/App.test.ts +85 -10
  445. package/src/App.ts +224 -137
  446. package/src/Assets.ts +29 -4
  447. package/src/Client.test-d.ts +650 -30
  448. package/src/Scope.test.ts +19 -0
  449. package/src/Scope.ts +28 -11
  450. package/src/Webhooks.test.ts +25 -0
  451. package/src/Webhooks.ts +1 -1
  452. package/src/admin/App.test.ts +9 -2
  453. package/src/admin/App.ts +32 -9
  454. package/src/admin/apps/api-keys.test.ts +167 -23
  455. package/src/admin/apps/api-keys.ts +166 -28
  456. package/src/admin/apps/earn-vaults.test.ts +338 -0
  457. package/src/admin/apps/earn-vaults.ts +572 -0
  458. package/src/admin/apps/scopes.test.ts +16 -1
  459. package/src/admin/ui/plugin.ts +2 -2
  460. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  461. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  462. package/src/admin/ui/src/components/Page.tsx +1 -1
  463. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  464. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  465. package/src/admin/ui/src/lib/client.ts +1 -1
  466. package/src/admin/ui/src/lib/config.ts +1 -1
  467. package/src/admin/ui/src/lib/early-access.ts +8 -9
  468. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  469. package/src/admin/ui/src/lib/format.ts +13 -0
  470. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  471. package/src/admin/ui/src/lib/organizations.ts +7 -1
  472. package/src/admin/ui/src/lib/response.ts +22 -0
  473. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  474. package/src/admin/ui/src/lib/scopes.ts +28 -7
  475. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  476. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  477. package/src/admin/ui/src/router.tsx +2 -2
  478. package/src/admin/ui/src/routes/__root.tsx +9 -8
  479. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  480. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  481. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  482. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  483. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  484. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  485. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  486. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  487. package/src/admin/ui/vite.config.ts +4 -1
  488. package/src/admin/ui.generated.ts +113 -43
  489. package/src/analytics/Analytics.test.ts +69 -10
  490. package/src/analytics/Analytics.ts +20 -1
  491. package/src/analytics/tables/requestEvents.ts +79 -37
  492. package/src/apps/Zones.test.ts +33 -0
  493. package/src/apps/Zones.ts +40 -0
  494. package/src/apps/composition.test.ts +84 -1
  495. package/src/apps/data/App.test.ts +28 -11
  496. package/src/apps/data/App.ts +96 -33
  497. package/src/apps/data/FxOracle.ts +1 -1
  498. package/src/apps/data/index.ts +0 -1
  499. package/src/apps/data/routes/activities.test.ts +82 -6
  500. package/src/apps/data/routes/activities.ts +131 -71
  501. package/src/apps/data/routes/balances.test.ts +50 -37
  502. package/src/apps/data/routes/balances.ts +5 -5
  503. package/src/apps/data/routes/blocks.test.ts +2 -0
  504. package/src/apps/data/routes/coingecko.test.ts +22 -0
  505. package/src/apps/data/routes/coingecko.ts +84 -48
  506. package/src/apps/data/routes/earn.test.ts +1108 -0
  507. package/src/apps/data/routes/earn.ts +1391 -0
  508. package/src/apps/data/routes/exchanges.test.ts +82 -33
  509. package/src/apps/data/routes/exchanges.ts +842 -227
  510. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  511. package/src/apps/data/routes/fee-amm.ts +69 -12
  512. package/src/apps/data/routes/funding.test.ts +2712 -221
  513. package/src/apps/data/routes/funding.ts +1604 -387
  514. package/src/apps/data/routes/indexer.test.ts +43 -34
  515. package/src/apps/data/routes/indexer.ts +19 -2
  516. package/src/apps/data/routes/receipts.test.ts +5 -3
  517. package/src/apps/data/routes/receipts.ts +13 -11
  518. package/src/apps/data/routes/rpc.test.ts +446 -28
  519. package/src/apps/data/routes/rpc.ts +243 -25
  520. package/src/apps/data/routes/tokenlist.ts +72 -19
  521. package/src/apps/data/routes/tokens.ts +258 -86
  522. package/src/apps/data/routes/transactions.test.ts +2 -0
  523. package/src/apps/data/routes/transactions.ts +77 -42
  524. package/src/apps/data/routes/transfers.test.ts +166 -4
  525. package/src/apps/data/routes/transfers.ts +216 -78
  526. package/src/apps/data/routes/valuation.test.ts +62 -9
  527. package/src/apps/data/routes/valuation.ts +2 -2
  528. package/src/apps/data/routes/webhooks.test.ts +386 -43
  529. package/src/apps/data/routes/webhooks.ts +172 -71
  530. package/src/apps/data/routes/zones.test.ts +473 -0
  531. package/src/apps/data/routes/zones.ts +338 -0
  532. package/src/apps/docs/reference.ts +8 -6
  533. package/src/apps/index.ts +2 -1
  534. package/src/apps/management/Billing.test.ts +29 -0
  535. package/src/apps/management/Billing.ts +23 -0
  536. package/src/apps/management/Error.ts +12 -0
  537. package/src/apps/management/routes/api-keys.test.ts +5 -3
  538. package/src/apps/management/routes/api-keys.ts +2 -9
  539. package/src/apps/management/routes/invitations.ts +4 -11
  540. package/src/apps/management/routes/orgs.ts +2 -9
  541. package/src/apps/management/routes/scopes.test.ts +7 -2
  542. package/src/apps/management/routes/scopes.ts +2 -2
  543. package/src/apps/management/routes/webhooks.test.ts +6 -1
  544. package/src/apps/management/routes/webhooks.ts +15 -3
  545. package/src/apps/mpp/App.ts +276 -29
  546. package/src/apps/mpp/Mpp.test.ts +631 -26
  547. package/src/apps/mpp/Mpp.ts +0 -42
  548. package/src/apps/mpp/internal/Adapter.ts +108 -3
  549. package/src/apps/mpp/internal/Error.test.ts +33 -0
  550. package/src/apps/mpp/internal/Error.ts +44 -6
  551. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  552. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  553. package/src/apps/mpp/internal/Policy.test.ts +122 -0
  554. package/src/apps/mpp/internal/Policy.ts +98 -0
  555. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  556. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  557. package/src/apps/mpp/internal/Screening.ts +40 -3
  558. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  559. package/src/apps/mpp/internal/Utils.ts +30 -0
  560. package/src/apps/relay/App.test.ts +493 -62
  561. package/src/apps/relay/App.ts +233 -23
  562. package/src/apps/relay/Sponsorships.test.ts +49 -0
  563. package/src/apps/relay/Sponsorships.ts +18 -6
  564. package/src/db/Db.ts +439 -0
  565. package/src/db/Schema.ts +325 -2
  566. package/src/db/tables/earnVaults.test.ts +185 -0
  567. package/src/db/tables/earnVaults.ts +151 -0
  568. package/src/db/tables/fundingCatalog.test.ts +108 -0
  569. package/src/db/tables/fundingCatalog.ts +157 -0
  570. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  571. package/src/db/tables/fundingDepositAddresses.ts +376 -0
  572. package/src/db/tables/fundingDeposits.test.ts +261 -0
  573. package/src/db/tables/fundingDeposits.ts +229 -0
  574. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  575. package/src/db/tables/fundingIdempotency.ts +180 -0
  576. package/src/db/tables/fundingTransferEvents.ts +28 -0
  577. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  578. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  579. package/src/db/tables/fundingTransfers.test.ts +89 -0
  580. package/src/db/tables/fundingTransfers.ts +153 -0
  581. package/src/db/tables/organizations.ts +16 -0
  582. package/src/db/tables/projects.ts +16 -0
  583. package/src/db/tables/requestUsage.ts +23 -0
  584. package/src/db/tables/sponsoredTransactions.test.ts +11 -0
  585. package/src/db/tables/sponsoredTransactions.ts +3 -3
  586. package/src/db/tables/users.ts +16 -0
  587. package/src/db/tables/verifiedTokens.ts +19 -14
  588. package/src/db/tables/webhookSubscriptions.ts +58 -3
  589. package/src/handlers/relay.test.ts +2 -0
  590. package/src/handlers/relay.ts +95 -99
  591. package/src/internal/Auth.test.ts +48 -0
  592. package/src/internal/Auth.ts +61 -2
  593. package/src/internal/Cache.ts +13 -9
  594. package/src/internal/Cursor.test.ts +2 -2
  595. package/src/internal/Cursor.ts +1 -1
  596. package/src/internal/EarnRates.test.ts +125 -0
  597. package/src/internal/EarnRates.ts +409 -0
  598. package/src/internal/EarnVaults.test.ts +195 -0
  599. package/src/internal/EarnVaults.ts +876 -0
  600. package/src/internal/EdgeCache.test.ts +19 -0
  601. package/src/internal/EdgeCache.ts +35 -5
  602. package/src/internal/Id.ts +14 -0
  603. package/src/internal/Idempotency.test.ts +109 -0
  604. package/src/internal/Idempotency.ts +237 -0
  605. package/src/internal/Log.test-d.ts +41 -8
  606. package/src/internal/Log.test.ts +189 -8
  607. package/src/internal/Log.ts +124 -17
  608. package/src/internal/MetricSink.test.ts +244 -4
  609. package/src/internal/MetricSink.ts +51 -1
  610. package/src/internal/OpenApi.ts +3 -0
  611. package/src/internal/Provider.test.ts +17 -0
  612. package/src/internal/Provider.ts +17 -0
  613. package/src/internal/Schema.ts +27 -17
  614. package/src/internal/Store.test.ts +25 -0
  615. package/src/internal/Store.ts +46 -0
  616. package/src/internal/Tidx.local.test.ts +78 -3
  617. package/src/internal/Tidx.test.ts +212 -18
  618. package/src/internal/Tidx.ts +112 -32
  619. package/src/internal/VerifiedTokens.test.ts +15 -0
  620. package/src/internal/Viem.test.ts +170 -17
  621. package/src/internal/Viem.ts +111 -28
  622. package/src/internal/WebhookDestination.ts +25 -23
  623. package/src/internal/Webhooks.test.ts +59 -0
  624. package/src/internal/Webhooks.ts +34 -10
  625. package/src/internal/exchange/Provider.test.ts +216 -0
  626. package/src/internal/exchange/Provider.ts +326 -0
  627. package/src/internal/exchange/index.test.ts +6 -0
  628. package/src/internal/exchange/index.ts +1 -0
  629. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  630. package/src/internal/exchange/providers/uniswap.ts +682 -0
  631. package/src/internal/funding/Action.test.ts +138 -0
  632. package/src/internal/funding/Action.ts +117 -0
  633. package/src/internal/funding/Catalog.test.ts +311 -0
  634. package/src/internal/funding/Catalog.ts +347 -0
  635. package/src/internal/funding/Chain.test.ts +79 -0
  636. package/src/internal/funding/Chain.ts +120 -0
  637. package/src/internal/funding/Deposit.test.ts +26 -0
  638. package/src/internal/funding/Deposit.ts +453 -0
  639. package/src/internal/funding/DepositAddress.test.ts +18 -0
  640. package/src/internal/funding/DepositAddress.ts +312 -0
  641. package/src/internal/funding/Evidence.test.ts +297 -0
  642. package/src/internal/funding/Evidence.ts +430 -0
  643. package/src/internal/funding/Provider.test.ts +1328 -0
  644. package/src/internal/funding/Provider.ts +1796 -0
  645. package/src/internal/funding/Reconciliation.local.test.ts +504 -0
  646. package/src/internal/funding/Reconciliation.test.ts +2020 -0
  647. package/src/internal/funding/Reconciliation.ts +930 -0
  648. package/src/internal/funding/Route.test.ts +66 -0
  649. package/src/internal/funding/Route.ts +29 -0
  650. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  651. package/src/internal/funding/Subsidy.test.ts +75 -0
  652. package/src/internal/funding/Subsidy.ts +260 -0
  653. package/src/internal/funding/Token.test.ts +47 -0
  654. package/src/internal/funding/Token.ts +59 -0
  655. package/src/internal/funding/Transfer.test.ts +369 -0
  656. package/src/internal/funding/Transfer.ts +522 -0
  657. package/src/internal/funding/index.test.ts +20 -0
  658. package/src/internal/funding/index.ts +12 -0
  659. package/src/internal/funding/providers/across.ts +149 -0
  660. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  661. package/src/internal/funding/providers/relay.test.ts +474 -0
  662. package/src/internal/funding/providers/relay.ts +559 -0
  663. package/src/internal/funding/providers/rhino.ts +139 -0
  664. package/src/internal/funding/providers/squid.ts +151 -0
  665. package/src/internal/funding/providers/symbiosis.ts +221 -0
  666. package/src/internal/index.test.ts +5 -1
  667. package/src/internal/index.ts +5 -1
  668. package/src/internal/webhookDestinations/url.ts +49 -45
  669. package/src/providers/index.test.ts +14 -0
  670. package/src/providers/index.ts +54 -0
  671. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  672. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  673. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  674. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  675. package/dist/internal/FundingQuotes.d.ts +0 -864
  676. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  677. package/dist/internal/FundingQuotes.js +0 -672
  678. package/dist/internal/FundingQuotes.js.map +0 -1
  679. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  680. package/src/internal/FundingQuotes.test.ts +0 -456
  681. package/src/internal/FundingQuotes.ts +0 -944
@@ -1,13 +1,18 @@
1
+ /** @module-tag localnet */
2
+
1
3
  import * as TestApp from '../../test/App.js'
2
4
  import * as Runtime from '../../test/runtime.js'
3
5
  import * as Indexer from '../apps/data/routes/indexer.js'
6
+ import type * as Log from './Log.js'
7
+ import * as Tidx from './Tidx.js'
4
8
 
5
9
  describe('local TIDX runtime', () => {
6
10
  test.runIf(Runtime.get().mode === 'localnet')(
7
- 'proxies queries to a disposable TIDX',
11
+ 'observes queries through a disposable TIDX',
8
12
  async () => {
9
13
  const runtime = Runtime.get()
10
- const client = TestApp.client()
14
+ const entries: Log.Entry[] = []
15
+ const client = TestApp.client({ logger: (entry) => void entries.push(entry) })
11
16
  const response = await client.v1.indexer.query.$get(
12
17
  { query: { chainId: String(runtime.chainId), sql: 'select 1 as value' } },
13
18
  TestApp.auth,
@@ -20,7 +25,7 @@ describe('local TIDX runtime', () => {
20
25
  [
21
26
  "value",
22
27
  ]
23
- `)
28
+ `)
24
29
  expect(body.rows).toMatchInlineSnapshot(`
25
30
  [
26
31
  [
@@ -28,6 +33,76 @@ describe('local TIDX runtime', () => {
28
33
  ],
29
34
  ]
30
35
  `)
36
+ expect(entries[0]?.provider).toBeUndefined()
37
+ expect(entries[0]?.timings?.['tidx']).toBeGreaterThan(0)
38
+ },
39
+ )
40
+
41
+ test.runIf(Runtime.get().mode === 'localnet')(
42
+ 'does not record caller query rejections as provider failures',
43
+ async () => {
44
+ const runtime = Runtime.get()
45
+ const entries: Log.Entry[] = []
46
+ const client = TestApp.client({ logger: (entry) => void entries.push(entry) })
47
+ const response = await client.v1.indexer.query.$get(
48
+ {
49
+ query: {
50
+ chainId: String(runtime.chainId),
51
+ sql: 'select * from missing_observability_table',
52
+ },
53
+ },
54
+ TestApp.auth,
55
+ )
56
+
57
+ expect(response.status).toBe(422)
58
+ expect(entries[0]?.provider).toBeUndefined()
59
+ expect(entries[0]?.timings?.['tidx']).toBeGreaterThan(0)
60
+ },
61
+ )
62
+
63
+ test.runIf(Runtime.get().mode === 'localnet')(
64
+ 'clears a handled failure after a successful query',
65
+ async () => {
66
+ const runtime = Runtime.get()
67
+ const failures: (Log.ProviderFailure | undefined)[] = []
68
+ const timings: number[] = []
69
+ const client = Tidx.observe(
70
+ Tidx.getClient({
71
+ chainId: runtime.chainId,
72
+ tidx: { baseUrl: runtime.tidxUrl },
73
+ }),
74
+ {
75
+ record: (failure) => void failures.push(failure),
76
+ time: async (fn) => {
77
+ const start = performance.now()
78
+ try {
79
+ return await fn()
80
+ } finally {
81
+ timings.push(performance.now() - start)
82
+ }
83
+ },
84
+ },
85
+ )
86
+
87
+ await expect(
88
+ client.fetch({
89
+ chainId: runtime.chainId,
90
+ query: 'select * from missing_observability_table',
91
+ }),
92
+ ).rejects.toThrow()
93
+ await client.fetch({ chainId: runtime.chainId, query: 'select 1' })
94
+
95
+ expect(failures).toEqual([
96
+ {
97
+ failure: 'query',
98
+ id: 'tidx',
99
+ operation: 'query',
100
+ status: 422,
101
+ },
102
+ undefined,
103
+ ])
104
+ expect(timings).toHaveLength(2)
105
+ expect(timings.every((duration) => duration > 0)).toBe(true)
31
106
  },
32
107
  )
33
108
  })
@@ -1,5 +1,6 @@
1
1
  import { Tidx as TidxClient } from 'tidx.ts'
2
2
 
3
+ import * as Zones from '../apps/Zones.js'
3
4
  import type * as Auth from './Auth.js'
4
5
  import * as Tidx from './Tidx.js'
5
6
  import type * as Viem from './Viem.js'
@@ -25,6 +26,115 @@ function fakeClient(fetch: Tidx.Client['fetch']): Tidx.Client {
25
26
  return { fetch } as never
26
27
  }
27
28
 
29
+ describe('providerFailure', () => {
30
+ test('classifies failed 200 bodies as payload failures', () => {
31
+ expect(Tidx.providerFailure(appError('secret upstream detail'))).toEqual({
32
+ failure: 'payload',
33
+ id: 'tidx',
34
+ operation: 'query',
35
+ })
36
+ })
37
+
38
+ test('classifies query and HTTP failures', () => {
39
+ expect([
40
+ Tidx.providerFailure(appError('secret upstream detail', 422)),
41
+ Tidx.providerFailure(appError('secret upstream detail', 503)),
42
+ ]).toMatchInlineSnapshot(`
43
+ [
44
+ {
45
+ "failure": "query",
46
+ "id": "tidx",
47
+ "operation": "query",
48
+ "status": 422,
49
+ },
50
+ {
51
+ "failure": "http",
52
+ "id": "tidx",
53
+ "operation": "query",
54
+ "status": 503,
55
+ },
56
+ ]
57
+ `)
58
+ })
59
+
60
+ test('classifies timeout and rate-limit statuses', () => {
61
+ expect([
62
+ Tidx.providerFailure(appError('secret upstream detail', 408)),
63
+ Tidx.providerFailure(appError('secret upstream detail', 429)),
64
+ ]).toMatchInlineSnapshot(`
65
+ [
66
+ {
67
+ "failure": "timeout",
68
+ "id": "tidx",
69
+ "operation": "query",
70
+ "status": 408,
71
+ },
72
+ {
73
+ "failure": "rate_limit",
74
+ "id": "tidx",
75
+ "operation": "query",
76
+ "status": 429,
77
+ },
78
+ ]
79
+ `)
80
+ })
81
+
82
+ test('classifies transport failures without their messages', () => {
83
+ expect([
84
+ Tidx.providerFailure(new DOMException('secret timeout detail', 'TimeoutError')),
85
+ Tidx.providerFailure(new TypeError('secret network detail')),
86
+ Tidx.providerFailure(new Error('secret unknown detail')),
87
+ ]).toMatchInlineSnapshot(`
88
+ [
89
+ {
90
+ "failure": "timeout",
91
+ "id": "tidx",
92
+ "operation": "query",
93
+ },
94
+ {
95
+ "failure": "network",
96
+ "id": "tidx",
97
+ "operation": "query",
98
+ },
99
+ {
100
+ "failure": "unknown",
101
+ "id": "tidx",
102
+ "operation": "query",
103
+ },
104
+ ]
105
+ `)
106
+ })
107
+ })
108
+
109
+ describe('responseFailure', () => {
110
+ test('classifies failed 200 bodies without consuming the response', async () => {
111
+ const response = Response.json({ error: 'secret upstream detail', ok: false })
112
+
113
+ expect(await Tidx.responseFailure(response)).toEqual({
114
+ failure: 'payload',
115
+ id: 'tidx',
116
+ operation: 'query',
117
+ })
118
+ expect(await response.json()).toEqual({ error: 'secret upstream detail', ok: false })
119
+ })
120
+
121
+ test('ignores successful 200 bodies', async () => {
122
+ const response = Response.json({ ok: true })
123
+
124
+ expect(await Tidx.responseFailure(response)).toBeUndefined()
125
+ })
126
+ })
127
+
128
+ describe('isQueryRejection', () => {
129
+ test('matches caller-caused query statuses only', () => {
130
+ expect(
131
+ [400, 422, 408, 429, 500].map((status) =>
132
+ Tidx.isQueryRejection(new Response(null, { status })),
133
+ ),
134
+ ).toEqual([true, true, false, false, false])
135
+ })
136
+ })
137
+
28
138
  describe('escape', () => {
29
139
  test('doubles quotes for ANSI string literals, leaving backslashes alone', () => {
30
140
  expect(Tidx.escape('USD')).toMatchInlineSnapshot(`"USD"`)
@@ -145,6 +255,19 @@ describe('withTransientRetry', () => {
145
255
  })
146
256
  })
147
257
 
258
+ describe('isDeterministicError', () => {
259
+ test('flags indexer failures a retry cannot fix', () => {
260
+ // The planner rejects the query shape outright (e.g. 422 `db error`).
261
+ expect(Tidx.isDeterministicError(appError('db error', 422))).toBe(true)
262
+ expect(Tidx.isDeterministicError(appError('syntax error near "SELCT"'))).toBe(true)
263
+ // Transient failures retry instead.
264
+ expect(Tidx.isDeterministicError(appError('db error'))).toBe(false)
265
+ expect(Tidx.isDeterministicError(appError('bad gateway', 502))).toBe(false)
266
+ // Non-indexer errors are not indexer failures at all.
267
+ expect(Tidx.isDeterministicError(new Error('db error'))).toBe(false)
268
+ })
269
+ })
270
+
148
271
  describe('resolve', () => {
149
272
  test('defaults to the per-chain indexer URL', () => {
150
273
  expect(Tidx.resolve(undefined, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
@@ -185,8 +308,42 @@ describe('resolve', () => {
185
308
  `)
186
309
  })
187
310
 
311
+ test('selects a serialized base URL by chain id', () => {
312
+ const tidx = {
313
+ baseUrl: JSON.stringify({ 4217: 'https://mainnet.indexer.test', 42431: 'https://testnet.indexer.test' }), // prettier-ignore
314
+ }
315
+
316
+ expect(Tidx.resolve(tidx, { chainId: 4217, principal: null })).toMatchInlineSnapshot(`
317
+ {
318
+ "baseUrl": "https://mainnet.indexer.test",
319
+ "basicAuth": undefined,
320
+ }
321
+ `)
322
+ expect(Tidx.resolve(tidx, { chainId: 42431, principal: null })).toMatchInlineSnapshot(`
323
+ {
324
+ "baseUrl": "https://testnet.indexer.test",
325
+ "basicAuth": undefined,
326
+ }
327
+ `)
328
+ })
329
+
330
+ test('passes Zone metadata to the resolver', () => {
331
+ expect(
332
+ Tidx.resolve(({ zone }) => ({ baseUrl: zone ? 'http://tidx:8080' : undefined }), {
333
+ chainId: Zones.zoneE.id,
334
+ principal: null,
335
+ zone: Zones.zoneE,
336
+ }),
337
+ ).toMatchInlineSnapshot(`
338
+ {
339
+ "baseUrl": "http://tidx:8080",
340
+ "basicAuth": undefined,
341
+ }
342
+ `)
343
+ })
344
+
188
345
  test('the static form ignores the principal', () => {
189
- const tidx = { baseUrl: 'https://internal.indexer', basicAuth: 'user:pass' }
346
+ const tidx = { auth: 'user:pass', baseUrl: 'https://internal.indexer' }
190
347
  expect(Tidx.resolve(tidx, { chainId: 4217, principal: publicPrincipal }))
191
348
  .toMatchInlineSnapshot(`
192
349
  {
@@ -206,7 +363,7 @@ describe('resolve', () => {
206
363
  test('resolves Bearer auth', () => {
207
364
  expect(
208
365
  Tidx.resolve(
209
- { baseUrl: 'https://internal.indexer', bearerAuth: 'zone-secret' },
366
+ { auth: 'zone-secret', baseUrl: 'https://internal.indexer' },
210
367
  { chainId: 4217, principal: apiKeyPrincipal },
211
368
  ),
212
369
  ).toMatchInlineSnapshot(`
@@ -218,11 +375,36 @@ describe('resolve', () => {
218
375
  `)
219
376
  })
220
377
 
378
+ test('selects Bearer auth by chain id', () => {
379
+ const tidx = {
380
+ auth: { 4217: 'mainnet-secret', 42431: 'testnet-secret' },
381
+ baseUrl: 'https://internal.indexer',
382
+ }
383
+
384
+ expect(Tidx.resolve(tidx, { chainId: 4217, principal: null }).bearerAuth).toBe('mainnet-secret')
385
+ expect(Tidx.resolve(tidx, { chainId: 42431, principal: null }).bearerAuth).toBe(
386
+ 'testnet-secret',
387
+ )
388
+ expect(Tidx.resolve(tidx, { chainId: 421_700_001, principal: null }).bearerAuth).toBeUndefined()
389
+ })
390
+
391
+ test('parses serialized Bearer auth by chain id', () => {
392
+ const tidx = {
393
+ auth: JSON.stringify({ 421_700_001: 'zone-secret' }),
394
+ baseUrl: 'https://internal.indexer',
395
+ }
396
+
397
+ expect(Tidx.resolve(tidx, { chainId: 421_700_001, principal: null }).bearerAuth).toBe(
398
+ 'zone-secret',
399
+ )
400
+ expect(Tidx.resolve(tidx, { chainId: 4217, principal: null }).bearerAuth).toBeUndefined()
401
+ })
402
+
221
403
  test('the resolver form routes anonymous callers to a separate upstream', () => {
222
- const tidx = ({ principal }: Viem.resolve.Context) =>
404
+ const tidx = ({ principal }: Viem.resolveRpc.Context) =>
223
405
  principal?.type === 'public'
224
406
  ? { baseUrl: 'https://indexer.tempo.xyz' }
225
- : { baseUrl: 'https://internal.indexer', basicAuth: 'user:pass' }
407
+ : { auth: 'user:pass', baseUrl: 'https://internal.indexer' }
226
408
  expect(Tidx.resolve(tidx, { chainId: 4217, principal: publicPrincipal }))
227
409
  .toMatchInlineSnapshot(`
228
410
  {
@@ -268,7 +450,7 @@ describe('getClient', () => {
268
450
  try {
269
451
  const client = Tidx.getClient({
270
452
  chainId: 4217,
271
- tidx: { baseUrl: 'https://internal.indexer', bearerAuth: 'zone-secret' },
453
+ tidx: { auth: 'zone-secret', baseUrl: 'https://internal.indexer' },
272
454
  })
273
455
  await client.fetch({ query: 'select 1' })
274
456
 
@@ -286,33 +468,45 @@ describe('createGetClient', () => {
286
468
  tidx: ({ principal }) =>
287
469
  principal?.type === 'public'
288
470
  ? { baseUrl: 'https://indexer.tempo.xyz' }
289
- : { baseUrl: 'https://internal.indexer', basicAuth: 'user:pass' },
471
+ : { auth: 'user:pass', baseUrl: 'https://internal.indexer' },
290
472
  })
291
473
  // Callers resolving to the same upstream share a client; distinct upstreams
292
474
  // (and chain ids) get distinct clients.
293
- expect(getTidx(4217, apiKeyPrincipal)).toBe(getTidx(4217, apiKeyPrincipal))
294
- expect(getTidx(4217, publicPrincipal)).toBe(getTidx(4217, publicPrincipal))
295
- expect(getTidx(4217, publicPrincipal)).not.toBe(getTidx(4217, apiKeyPrincipal))
296
- expect(getTidx(4217, apiKeyPrincipal)).not.toBe(getTidx(42431, apiKeyPrincipal))
475
+ expect(getTidx(4217, { principal: apiKeyPrincipal })).toBe(
476
+ getTidx(4217, { principal: apiKeyPrincipal }),
477
+ )
478
+ expect(getTidx(4217, { principal: publicPrincipal })).toBe(
479
+ getTidx(4217, { principal: publicPrincipal }),
480
+ )
481
+ expect(getTidx(4217, { principal: publicPrincipal })).not.toBe(
482
+ getTidx(4217, { principal: apiKeyPrincipal }),
483
+ )
484
+ expect(getTidx(4217, { principal: apiKeyPrincipal })).not.toBe(
485
+ getTidx(42431, { principal: apiKeyPrincipal }),
486
+ )
297
487
  })
298
488
 
299
489
  test('shares a client across principals when the resolver ignores them', () => {
300
490
  const getTidx = Tidx.createGetClient()
301
491
  // With no resolver the upstream is identical for every caller, so the key
302
492
  // (resolved output) collapses and all principals share one client.
303
- expect(getTidx(4217, publicPrincipal)).toBe(getTidx(4217, apiKeyPrincipal))
304
- expect(getTidx(4217, null)).toBe(getTidx(4217, publicPrincipal))
493
+ expect(getTidx(4217, { principal: publicPrincipal })).toBe(
494
+ getTidx(4217, { principal: apiKeyPrincipal }),
495
+ )
496
+ expect(getTidx(4217, { principal: null })).toBe(getTidx(4217, { principal: publicPrincipal }))
305
497
  })
306
498
 
307
499
  test('does not share clients across Bearer credentials', () => {
308
500
  const getTidx = Tidx.createGetClient({
309
501
  tidx: ({ principal }) => ({
502
+ auth: principal?.type === 'public' ? 'public-secret' : 'private-secret',
310
503
  baseUrl: 'https://internal.indexer',
311
- bearerAuth: principal?.type === 'public' ? 'public-secret' : 'private-secret',
312
504
  }),
313
505
  })
314
506
 
315
- expect(getTidx(4217, publicPrincipal)).not.toBe(getTidx(4217, apiKeyPrincipal))
507
+ expect(getTidx(4217, { principal: publicPrincipal })).not.toBe(
508
+ getTidx(4217, { principal: apiKeyPrincipal }),
509
+ )
316
510
  })
317
511
 
318
512
  test('consults the resolver on every call but builds one client per upstream', () => {
@@ -322,14 +516,14 @@ describe('createGetClient', () => {
322
516
  const config =
323
517
  principal?.type === 'public'
324
518
  ? { baseUrl: 'https://indexer.tempo.xyz' }
325
- : { baseUrl: 'https://internal.indexer', basicAuth: 'user:pass' }
519
+ : { auth: 'user:pass', baseUrl: 'https://internal.indexer' }
326
520
  seen.push(principal?.type)
327
521
  return config
328
522
  },
329
523
  })
330
- const first = getTidx(4217, apiKeyPrincipal)
331
- const second = getTidx(4217, apiKeyPrincipal)
332
- getTidx(4217, publicPrincipal)
524
+ const first = getTidx(4217, { principal: apiKeyPrincipal })
525
+ const second = getTidx(4217, { principal: apiKeyPrincipal })
526
+ getTidx(4217, { principal: publicPrincipal })
333
527
  // The resolver is consulted on every call (it derives the cache key from its
334
528
  // resolved output) — including the repeat that hits the cache — so a
335
529
  // per-request principal is always honored.
@@ -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,36 @@ 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 }),
41
44
  baseUrl:
42
- (typeof config?.baseUrl === 'function' ? config.baseUrl(context.chainId) : config?.baseUrl) ??
45
+ Viem.resolveUrl(config?.baseUrl, context.chainId) ??
46
+ context.zone?.rpcUrls['tidx']?.http[0] ??
43
47
  url[context.chainId],
44
- basicAuth: config?.basicAuth,
45
- ...(config?.bearerAuth ? { bearerAuth: config.bearerAuth } : {}),
46
48
  }
47
49
  }
48
50
 
@@ -63,8 +65,8 @@ export declare namespace resolve {
63
65
  }
64
66
 
65
67
  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 })
68
+ const { chainId = Viem.defaultChainId, principal = null, tidx, zone } = options
69
+ const { baseUrl, basicAuth, bearerAuth } = resolve(tidx, { chainId, principal, zone })
68
70
  return withTransientRetry(
69
71
  Tidx.create({
70
72
  baseUrl,
@@ -79,7 +81,7 @@ export function getClient(options: getClient.Options): Client {
79
81
  * Builds a memoized {@link GetClient} that constructs one TIDX client per
80
82
  * resolved upstream and reuses it. Clients are stateless HTTP transports, so
81
83
  * reusing them avoids per-call construction cost. The cache key is the resolved
82
- * output (`baseUrl` + `basicAuth` + `chainId`), not the principal, so a resolver
84
+ * output (`baseUrl` + auth + `chainId`), not the principal, so a resolver
83
85
  * `tidx` may branch on any principal field while client cardinality stays
84
86
  * bounded by the number of distinct upstreams — callers that resolve to the same
85
87
  * upstream share a client. Shared by `data()` (per-request reads) and
@@ -90,15 +92,16 @@ export function createGetClient(options: createGetClient.Options = {}): GetClien
90
92
  const { defaultChainId = Viem.defaultChainId, tidx } = options
91
93
  const clients = new Map<string, Client>()
92
94
 
93
- return (chainId = defaultChainId, principal = null) => {
95
+ return (chainId = defaultChainId, options = {}) => {
96
+ const { principal = null, zone } = options
94
97
  // Resolve to derive the cache key; `getClient` re-resolves to build the
95
98
  // client on a miss. `resolve` is pure and cheap, so the extra call is free.
96
- const { baseUrl, basicAuth, bearerAuth } = resolve(tidx, { chainId, principal })
99
+ const { baseUrl, basicAuth, bearerAuth } = resolve(tidx, { chainId, principal, zone })
97
100
  const cacheKey = `${baseUrl}|${basicAuth ?? ''}|${bearerAuth ?? ''}|${chainId}`
98
101
  const existing = clients.get(cacheKey)
99
102
  if (existing) return existing
100
103
 
101
- const client = getClient({ chainId, principal, tidx })
104
+ const client = getClient({ chainId, principal, tidx, zone })
102
105
  clients.set(cacheKey, client)
103
106
  return client
104
107
  }
@@ -186,6 +189,85 @@ export function withTransientRetry(client: Client): Client {
186
189
  }
187
190
  }
188
191
 
192
+ /** Adds request-scoped timing and redacted failure diagnostics to a TIDX client. */
193
+ export function observe(client: Client, options: observe.Options): Client {
194
+ const fetch = client.fetch.bind(client)
195
+ return {
196
+ ...client,
197
+ fetch: (parameters) =>
198
+ options.time(async () => {
199
+ try {
200
+ const result = await fetch(parameters)
201
+ options.record(undefined)
202
+ return result
203
+ } catch (cause) {
204
+ options.record(providerFailure(cause))
205
+ throw cause
206
+ }
207
+ }),
208
+ }
209
+ }
210
+
211
+ export declare namespace observe {
212
+ /** Request-scoped observability hooks for TIDX calls. */
213
+ type Options = {
214
+ /** Records a failure, or clears one after a later successful query. */
215
+ record: (failure: Log.ProviderFailure | undefined) => void
216
+ /** Measures the complete TIDX call, including retries. */
217
+ time: <value>(fn: () => Promise<value>) => Promise<value>
218
+ }
219
+ }
220
+
221
+ /** Returns bounded failure metadata for a TIDX request. */
222
+ export function providerFailure(cause: unknown): Log.ProviderFailure {
223
+ const base = { id: 'tidx', operation: 'query' } as const
224
+ if (
225
+ cause instanceof DOMException &&
226
+ (cause.name === 'AbortError' || cause.name === 'TimeoutError')
227
+ )
228
+ return { ...base, failure: 'timeout' }
229
+
230
+ const status = Errors.getStatus(cause)
231
+ if (status !== undefined && status >= 200 && status < 300) return { ...base, failure: 'payload' }
232
+ if (status === 408) return { ...base, failure: 'timeout', status }
233
+ if (status === 422) return { ...base, failure: 'query', status }
234
+ if (status === 429) return { ...base, failure: 'rate_limit', status }
235
+ if (status !== undefined) return { ...base, failure: 'http', status }
236
+ if (cause instanceof TypeError) return { ...base, failure: 'network' }
237
+ return { ...base, failure: 'unknown' }
238
+ }
239
+
240
+ /** Returns bounded failure metadata when a TIDX response represents a failed query. */
241
+ export async function responseFailure(
242
+ response: Response,
243
+ ): Promise<Log.ProviderFailure | undefined> {
244
+ if (!response.ok) return providerFailure(response)
245
+
246
+ // Parsing is observational; clone the response so the raw route can return its body unchanged.
247
+ const body: unknown = await response
248
+ .clone()
249
+ .json()
250
+ .catch(() => undefined)
251
+ if (typeof body === 'object' && body !== null && 'ok' in body && body.ok === true)
252
+ return undefined
253
+ return { failure: 'payload', id: 'tidx', operation: 'query' }
254
+ }
255
+
256
+ /** Whether a TIDX response is a deterministic rejection of the caller's query. */
257
+ export function isQueryRejection(cause: unknown): boolean {
258
+ const status = Errors.getStatus(cause)
259
+ return status === 400 || status === 422
260
+ }
261
+
262
+ /**
263
+ * True for deterministic indexer failures a retry cannot fix: a
264
+ * `FetchRequestError` outside {@link isTransientError}'s transient classes,
265
+ * e.g. an HTTP 422 `db error` for a query shape the planner cannot execute.
266
+ */
267
+ export function isDeterministicError(error: unknown): boolean {
268
+ return error instanceof Tidx.FetchRequestError && !isTransientError(error)
269
+ }
270
+
189
271
  /**
190
272
  * True for transient indexer errors: an HTTP-level transient failure
191
273
  * (408/429/5xx), or a `FetchRequestError` that came back on a **2xx** HTTP
@@ -214,30 +296,28 @@ export declare namespace getClient {
214
296
  principal?: Auth.Principal | null | undefined
215
297
  /** TIDX query client options. */
216
298
  tidx?: Tidx | undefined
299
+ /** Zone chain metadata used for TIDX URL resolution. */
300
+ zone?: Chain | undefined
217
301
  }
218
302
 
219
303
  /**
220
304
  * TIDX query client options: either a static config, or a per-request
221
- * resolver function that receives a {@link Viem.resolve.Context} and returns
305
+ * resolver function that receives a {@link Viem.resolveRpc.Context} and returns
222
306
  * the config to use (e.g. routing anonymous callers to a public, no-auth
223
307
  * indexer).
224
308
  */
225
309
  type Tidx =
226
310
  | {
311
+ /** Shared or per-chain TIDX credentials. Values containing `:` use Basic auth; others use Bearer auth. */
312
+ auth?: Auth.ChainCredential | undefined
227
313
  /** 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
314
+ baseUrl?: UrlResolver | undefined
233
315
  }
234
- | ((context: Viem.resolve.Context) => {
316
+ | ((context: Viem.resolveRpc.Context) => {
317
+ /** Shared or per-chain TIDX credentials, or undefined for none. */
318
+ auth?: Auth.ChainCredential | undefined
235
319
  /** TIDX base URL to use; falls back to the built-in public host when omitted. */
236
320
  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
241
321
  })
242
322
  }
243
323
 
@@ -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', () => {