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,6 +1,7 @@
1
1
  import { Hex, Secp256k1 } from 'ox'
2
2
  import { ZoneRpcAuthentication } from 'ox/tempo'
3
3
 
4
+ import type * as Log from '../../../internal/Log.js'
4
5
  import type * as Viem from '../../../internal/Viem.js'
5
6
  import * as RequestListener from '../../../handlers/internal/requestListener.js'
6
7
  import * as TestApp from '../../../../test/App.js'
@@ -9,16 +10,28 @@ import * as Runtime from '../../../../test/runtime.js'
9
10
 
10
11
  const runtime = Runtime.get()
11
12
  const zone = runtime.zone.chainId
12
- const zoneOptions = {
13
+ const zoneOptions = TestApp.zone({
13
14
  chainId: zone,
14
- forwardRpcUrl: runtime.zone.forwardRpcUrl,
15
- }
15
+ rpcUrl: runtime.zone.publicZoneUrl,
16
+ })
16
17
  const zoneReader = {
17
18
  id: 'key_zone_reader',
18
19
  orgId: 'org_test',
19
20
  scopes: ['data:read', `zone:${zone}:read`],
20
21
  token: 'secret_zone_reader',
21
22
  } satisfies TestApp.kvStore.Key
23
+ const zoneReaderOtherWriter = {
24
+ id: 'key_zone_reader_other_writer',
25
+ orgId: 'org_test',
26
+ scopes: ['data:read', `zone:${zone}:read`, `zone:${zone + 1}:write`],
27
+ token: 'secret_zone_reader_other_writer',
28
+ } satisfies TestApp.kvStore.Key
29
+ const zoneWriter = {
30
+ id: 'key_zone_writer',
31
+ orgId: 'org_test',
32
+ scopes: ['data:read', `zone:${zone}:write`],
33
+ token: 'secret_zone_writer',
34
+ } satisfies TestApp.kvStore.Key
22
35
 
23
36
  // Prool's default Zone dev key.
24
37
  const zonePrivateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80'
@@ -44,9 +57,9 @@ describe('POST /rpc', () => {
44
57
  const fetch = mockRpc()
45
58
  // A resolver that routes API-key principals to the private upstream and
46
59
  // everything else (here, the keyless `auth: false` caller) to the public one.
47
- const rpc = ({ principal }: Viem.resolve.Context) =>
60
+ const rpc = ({ principal }: Viem.resolveRpc.Context) =>
48
61
  principal?.type === 'api_key'
49
- ? { basicAuth: 'rpc-secret', url: 'https://internal.rpc.test/json-rpc' }
62
+ ? { auth: 'rpc:secret', url: 'https://internal.rpc.test/json-rpc' }
50
63
  : { url: 'https://public.rpc.test/json-rpc' }
51
64
 
52
65
  try {
@@ -73,7 +86,7 @@ describe('POST /rpc', () => {
73
86
  expect(fetch.calls[0]?.headers['authorization']).toMatchInlineSnapshot(`null`)
74
87
  expect(fetch.calls[1]?.url).toMatchInlineSnapshot(`"https://internal.rpc.test/json-rpc"`)
75
88
  expect(fetch.calls[1]?.headers['authorization']).toMatchInlineSnapshot(
76
- `"Basic cnBjLXNlY3JldA=="`,
89
+ `"Basic cnBjOnNlY3JldA=="`,
77
90
  )
78
91
  } finally {
79
92
  fetch.restore()
@@ -87,7 +100,7 @@ describe('POST /rpc', () => {
87
100
  const app = TestApp.create({
88
101
  auth: false,
89
102
  rpc: {
90
- basicAuth: 'rpc-secret',
103
+ auth: 'rpc:secret',
91
104
  url: (chainId) => `https://${chainId}.rpc.test/json-rpc`,
92
105
  },
93
106
  })
@@ -123,7 +136,7 @@ describe('POST /rpc', () => {
123
136
  expect(call.body).toMatchInlineSnapshot(
124
137
  `"{"id":1,"jsonrpc":"2.0","method":"eth_chainId","params":[]}"`,
125
138
  )
126
- expect(call.headers['authorization']).toMatchInlineSnapshot(`"Basic cnBjLXNlY3JldA=="`)
139
+ expect(call.headers['authorization']).toMatchInlineSnapshot(`"Basic cnBjOnNlY3JldA=="`)
127
140
  expect(call.headers['cookie']).toMatchInlineSnapshot(`null`)
128
141
  expect(call.headers['tempo-api-key']).toMatchInlineSnapshot(`null`)
129
142
  expect(call.headers['x-authorization-token']).toBeNull()
@@ -133,13 +146,330 @@ describe('POST /rpc', () => {
133
146
  }
134
147
  })
135
148
 
149
+ test('records JSON-RPC server errors returned with HTTP 200', async () => {
150
+ const entries: Log.Entry[] = []
151
+ const server = await Relay.createServer(
152
+ RequestListener.fromFetchHandler(() =>
153
+ Response.json({
154
+ error: { code: -32603, message: 'internal error' },
155
+ id: 1,
156
+ jsonrpc: '2.0',
157
+ }),
158
+ ),
159
+ )
160
+
161
+ try {
162
+ const app = TestApp.create({
163
+ auth: false,
164
+ logger: (entry) => void entries.push(entry),
165
+ rpc: { url: server.url },
166
+ })
167
+ const response = await app.fetch(
168
+ new Request('http://tempo-api.test/rpc', {
169
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
170
+ method: 'POST',
171
+ }),
172
+ )
173
+
174
+ expect(response.status).toBe(200)
175
+ expect(await response.json()).toMatchInlineSnapshot(`
176
+ {
177
+ "error": {
178
+ "code": -32603,
179
+ "message": "internal error",
180
+ },
181
+ "id": 1,
182
+ "jsonrpc": "2.0",
183
+ }
184
+ `)
185
+ expect(entries[0]).toMatchObject({
186
+ level: 'error',
187
+ route: '/rpc/:chain{(mainnet|testnet|[0-9]+)}?',
188
+ rpc: { code: -32603, errors: 1, serverErrors: 1 },
189
+ status: 200,
190
+ })
191
+ } finally {
192
+ await server.closeAsync()
193
+ }
194
+ })
195
+
196
+ test('attributes non-success RPC responses to the upstream', async () => {
197
+ const entries: Log.Entry[] = []
198
+ const server = await Relay.createServer(
199
+ RequestListener.fromFetchHandler(() =>
200
+ Response.json({ error: 'unavailable' }, { status: 503 }),
201
+ ),
202
+ )
203
+
204
+ try {
205
+ const app = TestApp.create({
206
+ auth: false,
207
+ logger: (entry) => void entries.push(entry),
208
+ rpc: { url: server.url },
209
+ })
210
+ const response = await app.fetch(
211
+ new Request('http://tempo-api.test/rpc', {
212
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
213
+ method: 'POST',
214
+ }),
215
+ )
216
+
217
+ expect(response.status).toBe(503)
218
+ expect(entries[0]).toMatchObject({
219
+ provider: {
220
+ chainId: runtime.chainId,
221
+ failure: 'http',
222
+ id: 'rpc',
223
+ operation: 'request',
224
+ status: 503,
225
+ },
226
+ })
227
+ } finally {
228
+ await server.closeAsync()
229
+ }
230
+ })
231
+
232
+ test.each([400, 413, 415, 422])(
233
+ 'keeps caller HTTP %s responses out of upstream alerts',
234
+ async (status) => {
235
+ const entries: Log.Entry[] = []
236
+ const server = await Relay.createServer(
237
+ RequestListener.fromFetchHandler(() =>
238
+ Response.json({ error: 'invalid request' }, { status }),
239
+ ),
240
+ )
241
+
242
+ try {
243
+ const app = TestApp.create({
244
+ auth: false,
245
+ logger: (entry) => void entries.push(entry),
246
+ rpc: { url: server.url },
247
+ })
248
+ const response = await app.fetch(
249
+ new Request('http://tempo-api.test/rpc', {
250
+ body: '{',
251
+ method: 'POST',
252
+ }),
253
+ )
254
+
255
+ expect(response.status).toBe(status)
256
+ expect(entries[0]?.provider).toBeUndefined()
257
+ } finally {
258
+ await server.closeAsync()
259
+ }
260
+ },
261
+ )
262
+
263
+ test('attributes RPC transport failures to the upstream', async () => {
264
+ const entries: Log.Entry[] = []
265
+ const server = await Relay.createServer(
266
+ RequestListener.fromFetchHandler(() =>
267
+ Response.json({ id: 1, jsonrpc: '2.0', result: '0x1' }),
268
+ ),
269
+ )
270
+ const url = server.url
271
+ await server.closeAsync()
272
+
273
+ const app = TestApp.create({
274
+ auth: false,
275
+ logger: (entry) => void entries.push(entry),
276
+ rpc: { url },
277
+ })
278
+ const response = await app.fetch(
279
+ new Request('http://tempo-api.test/rpc', {
280
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
281
+ method: 'POST',
282
+ }),
283
+ )
284
+
285
+ expect(response.status).toBe(502)
286
+ expect(entries[0]).toMatchObject({
287
+ provider: {
288
+ chainId: runtime.chainId,
289
+ failure: 'network',
290
+ id: 'rpc',
291
+ operation: 'request',
292
+ },
293
+ })
294
+ })
295
+
296
+ test.each([
297
+ { body: { id: 1, jsonrpc: '2.0' }, name: 'missing result' },
298
+ { body: [], name: 'empty batch' },
299
+ ])('attributes malformed JSON-RPC $name payloads to the upstream', async ({ body }) => {
300
+ const entries: Log.Entry[] = []
301
+ const server = await Relay.createServer(
302
+ RequestListener.fromFetchHandler(() => Response.json(body)),
303
+ )
304
+
305
+ try {
306
+ const app = TestApp.create({
307
+ auth: false,
308
+ logger: (entry) => void entries.push(entry),
309
+ rpc: { url: server.url },
310
+ })
311
+ const response = await app.fetch(
312
+ new Request('http://tempo-api.test/rpc', {
313
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
314
+ method: 'POST',
315
+ }),
316
+ )
317
+
318
+ expect(response.status).toBe(200)
319
+ expect(entries[0]).toMatchObject({
320
+ provider: {
321
+ chainId: runtime.chainId,
322
+ failure: 'payload',
323
+ id: 'rpc',
324
+ operation: 'request',
325
+ },
326
+ })
327
+ } finally {
328
+ await server.closeAsync()
329
+ }
330
+ })
331
+
332
+ test('accepts empty responses to JSON-RPC notifications', async () => {
333
+ const entries: Log.Entry[] = []
334
+ const server = await Relay.createServer(
335
+ RequestListener.fromFetchHandler(() => new Response(null, { status: 200 })),
336
+ )
337
+
338
+ try {
339
+ const app = TestApp.create({
340
+ auth: false,
341
+ logger: (entry) => void entries.push(entry),
342
+ rpc: { url: server.url },
343
+ })
344
+ const response = await app.fetch(
345
+ new Request('http://tempo-api.test/rpc', {
346
+ body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_sendRawTransaction' }),
347
+ method: 'POST',
348
+ }),
349
+ )
350
+
351
+ expect(response.status).toBe(200)
352
+ expect(entries[0]?.provider).toBeUndefined()
353
+ } finally {
354
+ await server.closeAsync()
355
+ }
356
+ })
357
+
358
+ test('preserves large streaming request bodies during inspection', async () => {
359
+ const bodies: string[] = []
360
+ const requestBody = JSON.stringify({
361
+ id: 1,
362
+ jsonrpc: '2.0',
363
+ method: 'eth_call',
364
+ params: [`0x${'ab'.repeat(40_000)}`, 'latest'],
365
+ })
366
+ const server = await Relay.createServer(
367
+ RequestListener.fromFetchHandler(async (request) => {
368
+ bodies.push(await request.text())
369
+ return Response.json({ id: 1, jsonrpc: '2.0', result: '0x' })
370
+ }),
371
+ )
372
+
373
+ try {
374
+ const app = TestApp.create({ auth: false, rpc: { url: server.url } })
375
+ const response = await app.fetch(
376
+ new Request('http://tempo-api.test/rpc', { body: requestBody, method: 'POST' }),
377
+ )
378
+
379
+ expect(response.status).toBe(200)
380
+ expect(bodies).toEqual([requestBody])
381
+ } finally {
382
+ await server.closeAsync()
383
+ }
384
+ })
385
+
386
+ test('preserves RPC responses larger than the inspection bound', async () => {
387
+ const result = `0x${'ab'.repeat(40_000)}`
388
+ const server = await Relay.createServer(
389
+ RequestListener.fromFetchHandler(() => Response.json({ id: 1, jsonrpc: '2.0', result })),
390
+ )
391
+
392
+ try {
393
+ const app = TestApp.create({ auth: false, rpc: { url: server.url } })
394
+ const response = await app.fetch(
395
+ new Request('http://tempo-api.test/rpc', {
396
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_getLogs' }),
397
+ method: 'POST',
398
+ }),
399
+ )
400
+
401
+ expect(response.status).toBe(200)
402
+ expect(await response.json()).toEqual({ id: 1, jsonrpc: '2.0', result })
403
+ } finally {
404
+ await server.closeAsync()
405
+ }
406
+ })
407
+
408
+ test('does not attribute Zone caller-auth responses to the RPC provider', async () => {
409
+ const entries: Log.Entry[] = []
410
+ const server = await Relay.createServer(
411
+ RequestListener.fromFetchHandler(() =>
412
+ Response.json(
413
+ {
414
+ error: { code: -32_000, message: 'invalid zone credential' },
415
+ id: 1,
416
+ jsonrpc: '2.0',
417
+ },
418
+ { status: 401 },
419
+ ),
420
+ ),
421
+ )
422
+
423
+ try {
424
+ const app = TestApp.create({
425
+ auth: false,
426
+ logger: (entry) => void entries.push(entry),
427
+ zones: [TestApp.zone({ chainId: zone, rpcUrl: server.url })],
428
+ })
429
+ const response = await app.fetch(
430
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
431
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
432
+ headers: { [ZoneRpcAuthentication.headerName]: 'invalid-zone-credential' },
433
+ method: 'POST',
434
+ }),
435
+ )
436
+
437
+ expect(response.status).toBe(401)
438
+ expect(entries[0]?.provider).toBeUndefined()
439
+ } finally {
440
+ await server.closeAsync()
441
+ }
442
+ })
443
+
444
+ test('forwards inferred RPC bearer auth', async () => {
445
+ const fetch = mockRpc()
446
+
447
+ try {
448
+ const app = TestApp.create({
449
+ auth: false,
450
+ rpc: { auth: 'rpc-token', url: 'https://internal.rpc.test/json-rpc' },
451
+ })
452
+ const response = await app.fetch(
453
+ new Request('http://tempo-api.test/rpc', {
454
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
455
+ method: 'POST',
456
+ }),
457
+ )
458
+
459
+ expect(response.status).toBe(200)
460
+ expect(fetch.calls[0]?.headers['authorization']).toBe('Bearer rpc-token')
461
+ } finally {
462
+ fetch.restore()
463
+ }
464
+ })
465
+
136
466
  test('allows eth-prefixed methods anonymously', async () => {
137
467
  const fetch = mockRpc()
138
468
 
139
469
  try {
140
470
  const app = TestApp.create({
141
471
  rpc: {
142
- basicAuth: 'rpc-secret',
472
+ auth: 'rpc:secret',
143
473
  url: (chainId) => `https://${chainId}.rpc.test/json-rpc`,
144
474
  },
145
475
  })
@@ -310,7 +640,8 @@ describe('POST /rpc', () => {
310
640
  try {
311
641
  const app = TestApp.create({
312
642
  auth: false,
313
- zones: [{ chainId: zone, forwardRpcUrl: `https://${zone}.rpc.test` }],
643
+ rpc: { auth: 'rpc:secret', url: () => 'https://internal.rpc.test' },
644
+ zones: [TestApp.zone({ chainId: zone, rpcUrl: `https://${zone}.rpc.test` })],
314
645
  })
315
646
 
316
647
  const response = await app.fetch(
@@ -327,10 +658,9 @@ describe('POST /rpc', () => {
327
658
 
328
659
  expect(response.status).toMatchInlineSnapshot(`200`)
329
660
  expect(call.url).toBe(`https://${zone}.rpc.test/`)
330
- // Zone RPC auth: the caller's signed token passes through; the API's own
331
- // credentials do not leak upstream.
661
+ // Public Zone URLs receive only the caller's token.
332
662
  expect(call.headers['x-authorization-token']).toMatchInlineSnapshot(`"zone-token"`)
333
- expect(call.headers['authorization']).toBeNull()
663
+ expect(call.headers['authorization']).toMatchInlineSnapshot(`null`)
334
664
  expect(call.headers['tempo-api-key']).toMatchInlineSnapshot(`null`)
335
665
  } finally {
336
666
  fetch.restore()
@@ -343,7 +673,7 @@ describe('POST /rpc', () => {
343
673
  try {
344
674
  const app = TestApp.create({
345
675
  auth: false,
346
- zones: [{ chainId: zone, forwardRpcUrl: `https://${zone}.rpc.test` }],
676
+ zones: [TestApp.zone({ chainId: zone, rpcUrl: `https://${zone}.rpc.test` })],
347
677
  })
348
678
 
349
679
  const response = await app.fetch(
@@ -391,42 +721,114 @@ describe('POST /rpc', () => {
391
721
  expect(response.status).toBe(200)
392
722
  })
393
723
 
394
- test('forwards RPC basic auth to the internal Zone RPC', async () => {
724
+ test('allows Zone-scoped metadata reads with internal RPC auth', async () => {
395
725
  const authorization: (string | null)[] = []
726
+ const bodies: string[] = []
396
727
  const server = await Relay.createServer(
397
728
  RequestListener.fromFetchHandler(async (request) => {
398
729
  authorization.push(request.headers.get('authorization'))
399
- return Response.json({ id: 1, jsonrpc: '2.0', result: Hex.fromNumber(zone) })
730
+ bodies.push(await request.text())
731
+ return Response.json({ id: 1, jsonrpc: '2.0', result: {} })
400
732
  }),
401
733
  )
402
734
  try {
403
735
  const app = TestApp.create({
404
736
  auth: { keys: [zoneReader] },
405
- rpc: ({ chainId }) =>
406
- chainId === zone ? { basicAuth: 'rpc-secret', url: server.url } : {},
737
+ rpc: ({ chainId }) => (chainId === zone ? { auth: 'rpc:secret', url: server.url } : {}),
407
738
  zones: [zoneOptions],
408
739
  })
740
+ for (const method of ['zone_getEncryptionKey', 'zone_getZoneInfo']) {
741
+ const response = await app.fetch(
742
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
743
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method }),
744
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneReader.token },
745
+ method: 'POST',
746
+ }),
747
+ )
748
+
749
+ expect(response.status).toBe(200)
750
+ }
751
+ expect(authorization).toEqual(['Basic cnBjOnNlY3JldA==', 'Basic cnBjOnNlY3JldA=='])
752
+ expect(bodies).toEqual([
753
+ '{"id":1,"jsonrpc":"2.0","method":"zone_getEncryptionKey"}',
754
+ '{"id":1,"jsonrpc":"2.0","method":"zone_getZoneInfo"}',
755
+ ])
756
+ } finally {
757
+ await server.closeAsync()
758
+ }
759
+ })
760
+
761
+ test('blocks caller-authenticated Zone methods for Zone read scopes', async () => {
762
+ const app = TestApp.create({ auth: { keys: [zoneReader] }, zones: [zoneOptions] })
763
+ const response = await app.fetch(
764
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
765
+ body: JSON.stringify({
766
+ id: 1,
767
+ jsonrpc: '2.0',
768
+ method: 'zone_getAuthorizationTokenInfo',
769
+ }),
770
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneReader.token },
771
+ method: 'POST',
772
+ }),
773
+ )
774
+
775
+ expect(response.status).toBe(403)
776
+ expect(await response.json()).toMatchObject({ error: { code: 'api_key_forbidden' } })
777
+ })
778
+
779
+ test('rejects writes without the matching Zone write scope', async () => {
780
+ for (const key of [zoneReader, zoneReaderOtherWriter]) {
781
+ const app = TestApp.create({ auth: { keys: [key] }, zones: [zoneOptions] })
409
782
  const response = await app.fetch(
410
783
  new Request(`http://tempo-api.test/rpc/${zone}`, {
411
- body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
412
- headers: { 'content-type': 'application/json', 'tempo-api-key': zoneReader.token },
784
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_sendRawTransaction' }),
785
+ headers: { 'content-type': 'application/json', 'tempo-api-key': key.token },
413
786
  method: 'POST',
414
787
  }),
415
788
  )
416
789
 
417
- expect(response.status).toBe(200)
418
- expect(authorization).toEqual(['Basic cnBjLXNlY3JldA=='])
419
- } finally {
420
- await server.closeAsync()
790
+ expect(response.status).toBe(403)
791
+ expect(await response.json()).toMatchObject({ error: { code: 'api_key_forbidden' } })
421
792
  }
422
793
  })
423
794
 
424
- test('rejects Zone-scoped writes before the internal RPC', async () => {
425
- const app = TestApp.create({ auth: { keys: [zoneReader] }, zones: [zoneOptions] })
795
+ test('allows Zone-scoped signed transaction broadcasts', async () => {
796
+ const app = TestApp.create({ auth: { keys: [zoneWriter] }, zones: [zoneOptions] })
426
797
  const response = await app.fetch(
427
798
  new Request(`http://tempo-api.test/rpc/${zone}`, {
428
- body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_sendRawTransaction' }),
429
- headers: { 'content-type': 'application/json', 'tempo-api-key': zoneReader.token },
799
+ body: JSON.stringify({
800
+ id: 1,
801
+ jsonrpc: '2.0',
802
+ method: 'eth_sendRawTransactionSync',
803
+ params: ['0x76'],
804
+ }),
805
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneWriter.token },
806
+ method: 'POST',
807
+ }),
808
+ )
809
+
810
+ expect(response.status).toBe(200)
811
+ })
812
+
813
+ test('allows Zone write scopes to read', async () => {
814
+ const app = TestApp.create({ auth: { keys: [zoneWriter] }, zones: [zoneOptions] })
815
+ const response = await app.fetch(
816
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
817
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
818
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneWriter.token },
819
+ method: 'POST',
820
+ }),
821
+ )
822
+
823
+ expect(response.status).toBe(200)
824
+ })
825
+
826
+ test('keeps unlocked-account methods blocked for Zone write scopes', async () => {
827
+ const app = TestApp.create({ auth: { keys: [zoneWriter] }, zones: [zoneOptions] })
828
+ const response = await app.fetch(
829
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
830
+ body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_sendTransaction' }),
831
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneWriter.token },
430
832
  method: 'POST',
431
833
  }),
432
834
  )
@@ -452,6 +854,22 @@ describe('POST /rpc', () => {
452
854
  expect(await response.json()).toMatchObject({ error: { code: 'api_key_forbidden' } })
453
855
  })
454
856
 
857
+ test('allows a Zone write scope to batch reads and signed broadcasts', async () => {
858
+ const app = TestApp.create({ auth: { keys: [zoneWriter] }, zones: [zoneOptions] })
859
+ const response = await app.fetch(
860
+ new Request(`http://tempo-api.test/rpc/${zone}`, {
861
+ body: JSON.stringify([
862
+ { id: 1, jsonrpc: '2.0', method: 'eth_chainId' },
863
+ { id: 2, jsonrpc: '2.0', method: 'eth_sendRawTransaction', params: ['0x76'] },
864
+ ]),
865
+ headers: { 'content-type': 'application/json', 'tempo-api-key': zoneWriter.token },
866
+ method: 'POST',
867
+ }),
868
+ )
869
+
870
+ expect(response.status).toBe(200)
871
+ })
872
+
455
873
  test('routes caller Zone tokens to the private RPC', async () => {
456
874
  const app = TestApp.create({ auth: false, zones: [zoneOptions] })
457
875
  const response = await app.fetch(