tapimo 0.7.0 → 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 (689) 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 +151 -95
  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 +14377 -10165
  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 +1231 -324
  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.map +1 -1
  78. package/dist/apps/data/routes/fee-amm.js +59 -8
  79. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  80. package/dist/apps/data/routes/funding.d.ts +4092 -387
  81. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  82. package/dist/apps/data/routes/funding.js +1403 -256
  83. package/dist/apps/data/routes/funding.js.map +1 -1
  84. package/dist/apps/data/routes/indexer.d.ts +5 -5
  85. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  86. package/dist/apps/data/routes/indexer.js +19 -2
  87. package/dist/apps/data/routes/indexer.js.map +1 -1
  88. package/dist/apps/data/routes/receipts.d.ts +265 -265
  89. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  90. package/dist/apps/data/routes/receipts.js +11 -11
  91. package/dist/apps/data/routes/receipts.js.map +1 -1
  92. package/dist/apps/data/routes/rpc.d.ts +5 -5
  93. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  94. package/dist/apps/data/routes/rpc.js +211 -22
  95. package/dist/apps/data/routes/rpc.js.map +1 -1
  96. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  97. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  98. package/dist/apps/data/routes/tokenlist.js +49 -9
  99. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  100. package/dist/apps/data/routes/tokens.d.ts +116 -88
  101. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  102. package/dist/apps/data/routes/tokens.js +198 -91
  103. package/dist/apps/data/routes/tokens.js.map +1 -1
  104. package/dist/apps/data/routes/transactions.d.ts +55 -55
  105. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  106. package/dist/apps/data/routes/transactions.js +78 -39
  107. package/dist/apps/data/routes/transactions.js.map +1 -1
  108. package/dist/apps/data/routes/transfers.d.ts +78 -29
  109. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  110. package/dist/apps/data/routes/transfers.js +165 -67
  111. package/dist/apps/data/routes/transfers.js.map +1 -1
  112. package/dist/apps/data/routes/valuation.d.ts +10 -10
  113. package/dist/apps/data/routes/valuation.js +2 -2
  114. package/dist/apps/data/routes/valuation.js.map +1 -1
  115. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  116. package/dist/apps/data/routes/verified-tokens.js +34 -9
  117. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  118. package/dist/apps/data/routes/webhooks.d.ts +5 -3
  119. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  120. package/dist/apps/data/routes/webhooks.js +175 -65
  121. package/dist/apps/data/routes/webhooks.js.map +1 -1
  122. package/dist/apps/data/routes/zones.d.ts +281 -0
  123. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  124. package/dist/apps/data/routes/zones.js +252 -0
  125. package/dist/apps/data/routes/zones.js.map +1 -0
  126. package/dist/apps/docs/reference.js +6 -5
  127. package/dist/apps/docs/reference.js.map +1 -1
  128. package/dist/apps/index.d.ts +2 -1
  129. package/dist/apps/index.d.ts.map +1 -1
  130. package/dist/apps/index.js +2 -1
  131. package/dist/apps/index.js.map +1 -1
  132. package/dist/apps/management/App.d.ts +670 -670
  133. package/dist/apps/management/Billing.d.ts +8 -0
  134. package/dist/apps/management/Billing.d.ts.map +1 -1
  135. package/dist/apps/management/Billing.js +12 -0
  136. package/dist/apps/management/Billing.js.map +1 -1
  137. package/dist/apps/management/Error.d.ts +12 -0
  138. package/dist/apps/management/Error.d.ts.map +1 -0
  139. package/dist/apps/management/Error.js +10 -0
  140. package/dist/apps/management/Error.js.map +1 -0
  141. package/dist/apps/management/routes/api-keys.d.ts +5 -5
  142. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  143. package/dist/apps/management/routes/api-keys.js +2 -8
  144. package/dist/apps/management/routes/api-keys.js.map +1 -1
  145. package/dist/apps/management/routes/billing.d.ts +119 -119
  146. package/dist/apps/management/routes/faucet.d.ts +35 -35
  147. package/dist/apps/management/routes/invitations.d.ts +62 -62
  148. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  149. package/dist/apps/management/routes/invitations.js +4 -10
  150. package/dist/apps/management/routes/invitations.js.map +1 -1
  151. package/dist/apps/management/routes/invite-links.d.ts +30 -30
  152. package/dist/apps/management/routes/me.d.ts +6 -6
  153. package/dist/apps/management/routes/members.d.ts +78 -78
  154. package/dist/apps/management/routes/orgs.d.ts +48 -48
  155. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  156. package/dist/apps/management/routes/orgs.js +2 -8
  157. package/dist/apps/management/routes/orgs.js.map +1 -1
  158. package/dist/apps/management/routes/projects.d.ts +9 -9
  159. package/dist/apps/management/routes/scopes.js +2 -2
  160. package/dist/apps/management/routes/scopes.js.map +1 -1
  161. package/dist/apps/management/routes/usage.d.ts +80 -80
  162. package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
  163. package/dist/apps/management/routes/webhooks.d.ts +50 -50
  164. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  165. package/dist/apps/management/routes/webhooks.js +15 -3
  166. package/dist/apps/management/routes/webhooks.js.map +1 -1
  167. package/dist/apps/mpp/App.d.ts +55 -56
  168. package/dist/apps/mpp/App.d.ts.map +1 -1
  169. package/dist/apps/mpp/App.js +192 -27
  170. package/dist/apps/mpp/App.js.map +1 -1
  171. package/dist/apps/mpp/Mpp.d.ts +0 -20
  172. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  173. package/dist/apps/mpp/Mpp.js +0 -24
  174. package/dist/apps/mpp/Mpp.js.map +1 -1
  175. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  176. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  177. package/dist/apps/mpp/internal/Adapter.js +66 -0
  178. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  179. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  180. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  181. package/dist/apps/mpp/internal/Error.js +41 -0
  182. package/dist/apps/mpp/internal/Error.js.map +1 -0
  183. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  184. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  185. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  186. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  187. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  188. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  189. package/dist/apps/mpp/internal/Policy.js +57 -0
  190. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  191. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  192. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  193. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  194. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  195. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  196. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  197. package/dist/apps/mpp/internal/Screening.js +20 -0
  198. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  199. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  200. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  201. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  202. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  203. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  204. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  205. package/dist/apps/mpp/internal/Utils.js +24 -0
  206. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  207. package/dist/apps/relay/App.js +184 -24
  208. package/dist/apps/relay/App.js.map +1 -1
  209. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  210. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  211. package/dist/apps/relay/Sponsorships.js +16 -7
  212. package/dist/apps/relay/Sponsorships.js.map +1 -1
  213. package/dist/db/Db.d.ts +20 -0
  214. package/dist/db/Db.d.ts.map +1 -1
  215. package/dist/db/Db.js +342 -0
  216. package/dist/db/Db.js.map +1 -1
  217. package/dist/db/Schema.d.ts +921 -1
  218. package/dist/db/Schema.d.ts.map +1 -1
  219. package/dist/db/Schema.js +269 -1
  220. package/dist/db/Schema.js.map +1 -1
  221. package/dist/db/tables/earnVaults.d.ts +68 -0
  222. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  223. package/dist/db/tables/earnVaults.js +72 -0
  224. package/dist/db/tables/earnVaults.js.map +1 -0
  225. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  226. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  227. package/dist/db/tables/fundingCatalog.js +85 -0
  228. package/dist/db/tables/fundingCatalog.js.map +1 -0
  229. package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
  230. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  231. package/dist/db/tables/fundingDepositAddresses.js +206 -0
  232. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  233. package/dist/db/tables/fundingDeposits.d.ts +115 -0
  234. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  235. package/dist/db/tables/fundingDeposits.js +100 -0
  236. package/dist/db/tables/fundingDeposits.js.map +1 -0
  237. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  238. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  239. package/dist/db/tables/fundingIdempotency.js +103 -0
  240. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  241. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  242. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  243. package/dist/db/tables/fundingTransferEvents.js +18 -0
  244. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  245. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  246. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  247. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  248. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  249. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  250. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  251. package/dist/db/tables/fundingTransfers.js +89 -0
  252. package/dist/db/tables/fundingTransfers.js.map +1 -0
  253. package/dist/db/tables/organizations.d.ts +8 -0
  254. package/dist/db/tables/organizations.d.ts.map +1 -1
  255. package/dist/db/tables/organizations.js +35 -0
  256. package/dist/db/tables/organizations.js.map +1 -1
  257. package/dist/db/tables/projects.d.ts +8 -0
  258. package/dist/db/tables/projects.d.ts.map +1 -1
  259. package/dist/db/tables/projects.js +16 -0
  260. package/dist/db/tables/projects.js.map +1 -1
  261. package/dist/db/tables/requestUsage.d.ts +13 -0
  262. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  263. package/dist/db/tables/requestUsage.js +16 -0
  264. package/dist/db/tables/requestUsage.js.map +1 -1
  265. package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
  266. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  267. package/dist/db/tables/sponsoredTransactions.js +14 -4
  268. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  269. package/dist/db/tables/users.d.ts +8 -0
  270. package/dist/db/tables/users.d.ts.map +1 -1
  271. package/dist/db/tables/users.js +16 -0
  272. package/dist/db/tables/users.js.map +1 -1
  273. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  274. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  275. package/dist/db/tables/verifiedTokens.js +9 -7
  276. package/dist/db/tables/verifiedTokens.js.map +1 -1
  277. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  278. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  279. package/dist/db/tables/webhookSubscriptions.js +24 -3
  280. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  281. package/dist/handlers/relay.js +108 -108
  282. package/dist/handlers/relay.js.map +1 -1
  283. package/dist/internal/Auth.d.ts +26 -0
  284. package/dist/internal/Auth.d.ts.map +1 -1
  285. package/dist/internal/Auth.js +35 -2
  286. package/dist/internal/Auth.js.map +1 -1
  287. package/dist/internal/Cache.d.ts.map +1 -1
  288. package/dist/internal/Cache.js +16 -10
  289. package/dist/internal/Cache.js.map +1 -1
  290. package/dist/internal/Cursor.js +1 -1
  291. package/dist/internal/Cursor.js.map +1 -1
  292. package/dist/internal/EarnRates.d.ts +89 -0
  293. package/dist/internal/EarnRates.d.ts.map +1 -0
  294. package/dist/internal/EarnRates.js +266 -0
  295. package/dist/internal/EarnRates.js.map +1 -0
  296. package/dist/internal/EarnVaults.d.ts +171 -0
  297. package/dist/internal/EarnVaults.d.ts.map +1 -0
  298. package/dist/internal/EarnVaults.js +547 -0
  299. package/dist/internal/EarnVaults.js.map +1 -0
  300. package/dist/internal/EdgeCache.d.ts +9 -2
  301. package/dist/internal/EdgeCache.d.ts.map +1 -1
  302. package/dist/internal/EdgeCache.js +36 -9
  303. package/dist/internal/EdgeCache.js.map +1 -1
  304. package/dist/internal/Id.d.ts +11 -0
  305. package/dist/internal/Id.d.ts.map +1 -1
  306. package/dist/internal/Id.js +13 -0
  307. package/dist/internal/Id.js.map +1 -1
  308. package/dist/internal/Idempotency.d.ts +83 -0
  309. package/dist/internal/Idempotency.d.ts.map +1 -0
  310. package/dist/internal/Idempotency.js +113 -0
  311. package/dist/internal/Idempotency.js.map +1 -0
  312. package/dist/internal/Log.d.ts +64 -9
  313. package/dist/internal/Log.d.ts.map +1 -1
  314. package/dist/internal/Log.js +29 -7
  315. package/dist/internal/Log.js.map +1 -1
  316. package/dist/internal/MetricSink.d.ts.map +1 -1
  317. package/dist/internal/MetricSink.js +47 -1
  318. package/dist/internal/MetricSink.js.map +1 -1
  319. package/dist/internal/OpenApi.d.ts +1 -1
  320. package/dist/internal/OpenApi.d.ts.map +1 -1
  321. package/dist/internal/OpenApi.js +3 -0
  322. package/dist/internal/OpenApi.js.map +1 -1
  323. package/dist/internal/Provider.d.ts +14 -0
  324. package/dist/internal/Provider.d.ts.map +1 -0
  325. package/dist/internal/Provider.js +5 -0
  326. package/dist/internal/Provider.js.map +1 -0
  327. package/dist/internal/Schema.d.ts +8 -3
  328. package/dist/internal/Schema.d.ts.map +1 -1
  329. package/dist/internal/Schema.js +24 -13
  330. package/dist/internal/Schema.js.map +1 -1
  331. package/dist/internal/Store.d.ts +6 -0
  332. package/dist/internal/Store.d.ts.map +1 -1
  333. package/dist/internal/Store.js +35 -0
  334. package/dist/internal/Store.js.map +1 -1
  335. package/dist/internal/Tidx.d.ts +43 -24
  336. package/dist/internal/Tidx.d.ts.map +1 -1
  337. package/dist/internal/Tidx.js +79 -11
  338. package/dist/internal/Tidx.js.map +1 -1
  339. package/dist/internal/Viem.d.ts +82 -65
  340. package/dist/internal/Viem.d.ts.map +1 -1
  341. package/dist/internal/Viem.js +83 -12
  342. package/dist/internal/Viem.js.map +1 -1
  343. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  344. package/dist/internal/WebhookDestination.js +34 -28
  345. package/dist/internal/WebhookDestination.js.map +1 -1
  346. package/dist/internal/Webhooks.d.ts +9 -0
  347. package/dist/internal/Webhooks.d.ts.map +1 -1
  348. package/dist/internal/Webhooks.js +15 -10
  349. package/dist/internal/Webhooks.js.map +1 -1
  350. package/dist/internal/exchange/Provider.d.ts +219 -0
  351. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  352. package/dist/internal/exchange/Provider.js +117 -0
  353. package/dist/internal/exchange/Provider.js.map +1 -0
  354. package/dist/internal/exchange/index.d.ts +2 -0
  355. package/dist/internal/exchange/index.d.ts.map +1 -0
  356. package/dist/internal/exchange/index.js +2 -0
  357. package/dist/internal/exchange/index.js.map +1 -0
  358. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  359. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  360. package/dist/internal/exchange/providers/uniswap.js +553 -0
  361. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  362. package/dist/internal/funding/Action.d.ts +55 -0
  363. package/dist/internal/funding/Action.d.ts.map +1 -0
  364. package/dist/internal/funding/Action.js +74 -0
  365. package/dist/internal/funding/Action.js.map +1 -0
  366. package/dist/internal/funding/Catalog.d.ts +107 -0
  367. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  368. package/dist/internal/funding/Catalog.js +270 -0
  369. package/dist/internal/funding/Catalog.js.map +1 -0
  370. package/dist/internal/funding/Chain.d.ts +76 -0
  371. package/dist/internal/funding/Chain.d.ts.map +1 -0
  372. package/dist/internal/funding/Chain.js +38 -0
  373. package/dist/internal/funding/Chain.js.map +1 -0
  374. package/dist/internal/funding/Deposit.d.ts +366 -0
  375. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  376. package/dist/internal/funding/Deposit.js +286 -0
  377. package/dist/internal/funding/Deposit.js.map +1 -0
  378. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  379. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  380. package/dist/internal/funding/DepositAddress.js +189 -0
  381. package/dist/internal/funding/DepositAddress.js.map +1 -0
  382. package/dist/internal/funding/Evidence.d.ts +52 -0
  383. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  384. package/dist/internal/funding/Evidence.js +314 -0
  385. package/dist/internal/funding/Evidence.js.map +1 -0
  386. package/dist/internal/funding/Provider.d.ts +1186 -0
  387. package/dist/internal/funding/Provider.d.ts.map +1 -0
  388. package/dist/internal/funding/Provider.js +1081 -0
  389. package/dist/internal/funding/Provider.js.map +1 -0
  390. package/dist/internal/funding/Reconciliation.d.ts +113 -0
  391. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  392. package/dist/internal/funding/Reconciliation.js +676 -0
  393. package/dist/internal/funding/Reconciliation.js.map +1 -0
  394. package/dist/internal/funding/Route.d.ts +21 -0
  395. package/dist/internal/funding/Route.d.ts.map +1 -0
  396. package/dist/internal/funding/Route.js +5 -0
  397. package/dist/internal/funding/Route.js.map +1 -0
  398. package/dist/internal/funding/Subsidy.d.ts +113 -0
  399. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  400. package/dist/internal/funding/Subsidy.js +138 -0
  401. package/dist/internal/funding/Subsidy.js.map +1 -0
  402. package/dist/internal/funding/Token.d.ts +41 -0
  403. package/dist/internal/funding/Token.d.ts.map +1 -0
  404. package/dist/internal/funding/Token.js +22 -0
  405. package/dist/internal/funding/Token.js.map +1 -0
  406. package/dist/internal/funding/Transfer.d.ts +643 -0
  407. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  408. package/dist/internal/funding/Transfer.js +332 -0
  409. package/dist/internal/funding/Transfer.js.map +1 -0
  410. package/dist/internal/funding/index.d.ts +13 -0
  411. package/dist/internal/funding/index.d.ts.map +1 -0
  412. package/dist/internal/funding/index.js +13 -0
  413. package/dist/internal/funding/index.js.map +1 -0
  414. package/dist/internal/funding/providers/across.d.ts +21 -0
  415. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  416. package/dist/internal/funding/providers/across.js +117 -0
  417. package/dist/internal/funding/providers/across.js.map +1 -0
  418. package/dist/internal/funding/providers/relay.d.ts +46 -0
  419. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  420. package/dist/internal/funding/providers/relay.js +464 -0
  421. package/dist/internal/funding/providers/relay.js.map +1 -0
  422. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  423. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  424. package/dist/internal/funding/providers/rhino.js +116 -0
  425. package/dist/internal/funding/providers/rhino.js.map +1 -0
  426. package/dist/internal/funding/providers/squid.d.ts +19 -0
  427. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  428. package/dist/internal/funding/providers/squid.js +120 -0
  429. package/dist/internal/funding/providers/squid.js.map +1 -0
  430. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  431. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  432. package/dist/internal/funding/providers/symbiosis.js +176 -0
  433. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  434. package/dist/internal/index.d.ts +5 -1
  435. package/dist/internal/index.d.ts.map +1 -1
  436. package/dist/internal/index.js +5 -1
  437. package/dist/internal/index.js.map +1 -1
  438. package/dist/internal/webhookDestinations/url.js +61 -57
  439. package/dist/internal/webhookDestinations/url.js.map +1 -1
  440. package/dist/providers/index.d.ts +43 -0
  441. package/dist/providers/index.d.ts.map +1 -0
  442. package/dist/providers/index.js +19 -0
  443. package/dist/providers/index.js.map +1 -0
  444. package/package.json +9 -4
  445. package/src/ApiKeys.test.ts +11 -7
  446. package/src/ApiKeys.ts +37 -9
  447. package/src/App.test.ts +85 -10
  448. package/src/App.ts +224 -137
  449. package/src/Assets.ts +29 -4
  450. package/src/Client.test-d.ts +650 -30
  451. package/src/Scope.test.ts +19 -0
  452. package/src/Scope.ts +28 -11
  453. package/src/Webhooks.test.ts +25 -0
  454. package/src/Webhooks.ts +1 -1
  455. package/src/admin/App.test.ts +9 -2
  456. package/src/admin/App.ts +32 -9
  457. package/src/admin/apps/api-keys.test.ts +167 -23
  458. package/src/admin/apps/api-keys.ts +166 -28
  459. package/src/admin/apps/earn-vaults.test.ts +338 -0
  460. package/src/admin/apps/earn-vaults.ts +572 -0
  461. package/src/admin/apps/scopes.test.ts +16 -1
  462. package/src/admin/ui/plugin.ts +2 -2
  463. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  464. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  465. package/src/admin/ui/src/components/Page.tsx +1 -1
  466. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  467. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  468. package/src/admin/ui/src/lib/client.ts +1 -1
  469. package/src/admin/ui/src/lib/config.ts +1 -1
  470. package/src/admin/ui/src/lib/early-access.ts +8 -9
  471. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  472. package/src/admin/ui/src/lib/format.ts +13 -0
  473. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  474. package/src/admin/ui/src/lib/organizations.ts +7 -1
  475. package/src/admin/ui/src/lib/response.ts +22 -0
  476. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  477. package/src/admin/ui/src/lib/scopes.ts +28 -7
  478. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  479. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  480. package/src/admin/ui/src/router.tsx +2 -2
  481. package/src/admin/ui/src/routes/__root.tsx +9 -8
  482. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  483. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  484. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  485. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  486. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  487. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  488. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  489. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  490. package/src/admin/ui/vite.config.ts +4 -1
  491. package/src/admin/ui.generated.ts +189 -95
  492. package/src/analytics/Analytics.test.ts +69 -10
  493. package/src/analytics/Analytics.ts +20 -1
  494. package/src/analytics/tables/requestEvents.ts +79 -37
  495. package/src/apps/Zones.test.ts +33 -0
  496. package/src/apps/Zones.ts +40 -0
  497. package/src/apps/composition.test.ts +84 -1
  498. package/src/apps/data/App.test.ts +38 -9
  499. package/src/apps/data/App.ts +96 -33
  500. package/src/apps/data/FxOracle.ts +1 -1
  501. package/src/apps/data/index.ts +0 -1
  502. package/src/apps/data/routes/activities.test.ts +82 -6
  503. package/src/apps/data/routes/activities.ts +131 -71
  504. package/src/apps/data/routes/balances.test.ts +50 -37
  505. package/src/apps/data/routes/balances.ts +5 -5
  506. package/src/apps/data/routes/blocks.test.ts +2 -0
  507. package/src/apps/data/routes/coingecko.test.ts +22 -0
  508. package/src/apps/data/routes/coingecko.ts +84 -48
  509. package/src/apps/data/routes/earn.test.ts +1108 -0
  510. package/src/apps/data/routes/earn.ts +1391 -0
  511. package/src/apps/data/routes/exchanges.test.ts +82 -33
  512. package/src/apps/data/routes/exchanges.ts +842 -227
  513. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  514. package/src/apps/data/routes/fee-amm.ts +69 -12
  515. package/src/apps/data/routes/funding.test.ts +2712 -221
  516. package/src/apps/data/routes/funding.ts +1604 -387
  517. package/src/apps/data/routes/indexer.test.ts +43 -34
  518. package/src/apps/data/routes/indexer.ts +19 -2
  519. package/src/apps/data/routes/receipts.test.ts +5 -3
  520. package/src/apps/data/routes/receipts.ts +13 -11
  521. package/src/apps/data/routes/rpc.test.ts +446 -28
  522. package/src/apps/data/routes/rpc.ts +243 -25
  523. package/src/apps/data/routes/tokenlist.test.ts +15 -0
  524. package/src/apps/data/routes/tokenlist.ts +88 -22
  525. package/src/apps/data/routes/tokens.ts +262 -86
  526. package/src/apps/data/routes/transactions.test.ts +2 -0
  527. package/src/apps/data/routes/transactions.ts +77 -42
  528. package/src/apps/data/routes/transfers.test.ts +166 -4
  529. package/src/apps/data/routes/transfers.ts +216 -78
  530. package/src/apps/data/routes/valuation.test.ts +62 -9
  531. package/src/apps/data/routes/valuation.ts +2 -2
  532. package/src/apps/data/routes/verified-tokens.test.ts +51 -0
  533. package/src/apps/data/routes/verified-tokens.ts +52 -15
  534. package/src/apps/data/routes/webhooks.test.ts +432 -33
  535. package/src/apps/data/routes/webhooks.ts +189 -79
  536. package/src/apps/data/routes/zones.test.ts +473 -0
  537. package/src/apps/data/routes/zones.ts +338 -0
  538. package/src/apps/docs/reference.ts +8 -6
  539. package/src/apps/index.ts +2 -1
  540. package/src/apps/management/Billing.test.ts +29 -0
  541. package/src/apps/management/Billing.ts +23 -0
  542. package/src/apps/management/Error.ts +12 -0
  543. package/src/apps/management/routes/api-keys.test.ts +5 -3
  544. package/src/apps/management/routes/api-keys.ts +2 -9
  545. package/src/apps/management/routes/invitations.ts +4 -11
  546. package/src/apps/management/routes/orgs.ts +2 -9
  547. package/src/apps/management/routes/scopes.test.ts +7 -2
  548. package/src/apps/management/routes/scopes.ts +2 -2
  549. package/src/apps/management/routes/webhooks.test.ts +6 -1
  550. package/src/apps/management/routes/webhooks.ts +15 -3
  551. package/src/apps/mpp/App.ts +276 -29
  552. package/src/apps/mpp/Mpp.test.ts +631 -26
  553. package/src/apps/mpp/Mpp.ts +0 -42
  554. package/src/apps/mpp/internal/Adapter.ts +108 -3
  555. package/src/apps/mpp/internal/Error.test.ts +33 -0
  556. package/src/apps/mpp/internal/Error.ts +44 -6
  557. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  558. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  559. package/src/apps/mpp/internal/Policy.test.ts +122 -0
  560. package/src/apps/mpp/internal/Policy.ts +98 -0
  561. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  562. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  563. package/src/apps/mpp/internal/Screening.ts +40 -3
  564. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  565. package/src/apps/mpp/internal/Utils.ts +30 -0
  566. package/src/apps/relay/App.test.ts +495 -64
  567. package/src/apps/relay/App.ts +234 -24
  568. package/src/apps/relay/Sponsorships.test.ts +51 -0
  569. package/src/apps/relay/Sponsorships.ts +19 -7
  570. package/src/db/Db.ts +439 -0
  571. package/src/db/Schema.ts +325 -2
  572. package/src/db/tables/earnVaults.test.ts +185 -0
  573. package/src/db/tables/earnVaults.ts +151 -0
  574. package/src/db/tables/fundingCatalog.test.ts +108 -0
  575. package/src/db/tables/fundingCatalog.ts +157 -0
  576. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  577. package/src/db/tables/fundingDepositAddresses.ts +376 -0
  578. package/src/db/tables/fundingDeposits.test.ts +261 -0
  579. package/src/db/tables/fundingDeposits.ts +229 -0
  580. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  581. package/src/db/tables/fundingIdempotency.ts +180 -0
  582. package/src/db/tables/fundingTransferEvents.ts +28 -0
  583. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  584. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  585. package/src/db/tables/fundingTransfers.test.ts +89 -0
  586. package/src/db/tables/fundingTransfers.ts +153 -0
  587. package/src/db/tables/organizations.test.ts +88 -0
  588. package/src/db/tables/organizations.ts +42 -1
  589. package/src/db/tables/projects.ts +16 -0
  590. package/src/db/tables/requestUsage.ts +23 -0
  591. package/src/db/tables/sponsoredTransactions.test.ts +52 -2
  592. package/src/db/tables/sponsoredTransactions.ts +18 -6
  593. package/src/db/tables/users.ts +16 -0
  594. package/src/db/tables/verifiedTokens.ts +19 -14
  595. package/src/db/tables/webhookSubscriptions.ts +58 -3
  596. package/src/handlers/relay.test.ts +2 -0
  597. package/src/handlers/relay.ts +95 -99
  598. package/src/internal/Auth.test.ts +48 -0
  599. package/src/internal/Auth.ts +61 -2
  600. package/src/internal/Cache.ts +13 -9
  601. package/src/internal/Cursor.test.ts +2 -2
  602. package/src/internal/Cursor.ts +1 -1
  603. package/src/internal/EarnRates.test.ts +125 -0
  604. package/src/internal/EarnRates.ts +409 -0
  605. package/src/internal/EarnVaults.test.ts +195 -0
  606. package/src/internal/EarnVaults.ts +876 -0
  607. package/src/internal/EdgeCache.test.ts +37 -5
  608. package/src/internal/EdgeCache.ts +39 -7
  609. package/src/internal/Id.ts +14 -0
  610. package/src/internal/Idempotency.test.ts +109 -0
  611. package/src/internal/Idempotency.ts +237 -0
  612. package/src/internal/Log.test-d.ts +41 -8
  613. package/src/internal/Log.test.ts +189 -8
  614. package/src/internal/Log.ts +124 -17
  615. package/src/internal/MetricSink.test.ts +244 -4
  616. package/src/internal/MetricSink.ts +51 -1
  617. package/src/internal/OpenApi.ts +3 -0
  618. package/src/internal/Provider.test.ts +17 -0
  619. package/src/internal/Provider.ts +17 -0
  620. package/src/internal/Schema.test.ts +13 -0
  621. package/src/internal/Schema.ts +41 -24
  622. package/src/internal/Store.test.ts +25 -0
  623. package/src/internal/Store.ts +46 -0
  624. package/src/internal/Tidx.local.test.ts +78 -3
  625. package/src/internal/Tidx.test.ts +212 -18
  626. package/src/internal/Tidx.ts +112 -32
  627. package/src/internal/VerifiedTokens.test.ts +15 -0
  628. package/src/internal/Viem.test.ts +170 -17
  629. package/src/internal/Viem.ts +111 -28
  630. package/src/internal/WebhookDestination.ts +25 -23
  631. package/src/internal/Webhooks.test.ts +59 -0
  632. package/src/internal/Webhooks.ts +34 -10
  633. package/src/internal/exchange/Provider.test.ts +216 -0
  634. package/src/internal/exchange/Provider.ts +326 -0
  635. package/src/internal/exchange/index.test.ts +6 -0
  636. package/src/internal/exchange/index.ts +1 -0
  637. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  638. package/src/internal/exchange/providers/uniswap.ts +682 -0
  639. package/src/internal/funding/Action.test.ts +138 -0
  640. package/src/internal/funding/Action.ts +117 -0
  641. package/src/internal/funding/Catalog.test.ts +311 -0
  642. package/src/internal/funding/Catalog.ts +347 -0
  643. package/src/internal/funding/Chain.test.ts +79 -0
  644. package/src/internal/funding/Chain.ts +120 -0
  645. package/src/internal/funding/Deposit.test.ts +26 -0
  646. package/src/internal/funding/Deposit.ts +453 -0
  647. package/src/internal/funding/DepositAddress.test.ts +18 -0
  648. package/src/internal/funding/DepositAddress.ts +312 -0
  649. package/src/internal/funding/Evidence.test.ts +297 -0
  650. package/src/internal/funding/Evidence.ts +430 -0
  651. package/src/internal/funding/Provider.test.ts +1328 -0
  652. package/src/internal/funding/Provider.ts +1796 -0
  653. package/src/internal/funding/Reconciliation.local.test.ts +504 -0
  654. package/src/internal/funding/Reconciliation.test.ts +2020 -0
  655. package/src/internal/funding/Reconciliation.ts +930 -0
  656. package/src/internal/funding/Route.test.ts +66 -0
  657. package/src/internal/funding/Route.ts +29 -0
  658. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  659. package/src/internal/funding/Subsidy.test.ts +75 -0
  660. package/src/internal/funding/Subsidy.ts +260 -0
  661. package/src/internal/funding/Token.test.ts +47 -0
  662. package/src/internal/funding/Token.ts +59 -0
  663. package/src/internal/funding/Transfer.test.ts +369 -0
  664. package/src/internal/funding/Transfer.ts +522 -0
  665. package/src/internal/funding/index.test.ts +20 -0
  666. package/src/internal/funding/index.ts +12 -0
  667. package/src/internal/funding/providers/across.ts +149 -0
  668. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  669. package/src/internal/funding/providers/relay.test.ts +474 -0
  670. package/src/internal/funding/providers/relay.ts +559 -0
  671. package/src/internal/funding/providers/rhino.ts +139 -0
  672. package/src/internal/funding/providers/squid.ts +151 -0
  673. package/src/internal/funding/providers/symbiosis.ts +221 -0
  674. package/src/internal/index.test.ts +5 -1
  675. package/src/internal/index.ts +5 -1
  676. package/src/internal/webhookDestinations/url.ts +49 -45
  677. package/src/providers/index.test.ts +14 -0
  678. package/src/providers/index.ts +54 -0
  679. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  680. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  681. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  682. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  683. package/dist/internal/FundingQuotes.d.ts +0 -864
  684. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  685. package/dist/internal/FundingQuotes.js +0 -672
  686. package/dist/internal/FundingQuotes.js.map +0 -1
  687. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  688. package/src/internal/FundingQuotes.test.ts +0 -456
  689. package/src/internal/FundingQuotes.ts +0 -944
@@ -1,5 +1,6 @@
1
1
  import { Hono } from 'hono'
2
2
  import { requestId } from 'hono/request-id'
3
+ import type { Hex } from 'ox'
3
4
 
4
5
  import * as Log from './Log.js'
5
6
  import * as Response from './Response.js'
@@ -50,6 +51,52 @@ describe('middleware', () => {
50
51
  `)
51
52
  })
52
53
 
54
+ test('includes a failed optional funding transfer count', async () => {
55
+ const entries: Log.Entry[] = []
56
+ const api = app({ emit: (entry) => void entries.push(entry) })
57
+ api.get('/v1/funding/transfers', (c) => {
58
+ c.set('fundingTransferCountFailed', true)
59
+ return c.json({ data: [], nextCursor: null }, 200)
60
+ })
61
+
62
+ await api.request('/v1/funding/transfers?include=totalCount')
63
+
64
+ expect(stable(entries[0]!)).toMatchInlineSnapshot(`
65
+ {
66
+ "fundingTransferCountFailed": true,
67
+ "level": "info",
68
+ "method": "GET",
69
+ "path": "/v1/funding/transfers",
70
+ "query": "include=totalCount",
71
+ "route": "/v1/funding/transfers",
72
+ "status": 200,
73
+ }
74
+ `)
75
+ })
76
+
77
+ test('keeps the longest duration when a timing name repeats', async () => {
78
+ vi.useFakeTimers()
79
+ try {
80
+ const entries: Log.Entry[] = []
81
+ const api = app({ emit: (entry) => void entries.push(entry) })
82
+ api.get('/', async (c) => {
83
+ await Timing.time(c, 'transactions', () => vi.advanceTimersByTime(20))
84
+ await Timing.time(c, 'transactions', () => vi.advanceTimersByTime(5))
85
+ return c.json({ ok: true }, 200)
86
+ })
87
+
88
+ await api.request('/')
89
+
90
+ expect(entries[0]?.timings).toMatchInlineSnapshot(`
91
+ {
92
+ "transactions": 20,
93
+ }
94
+ `)
95
+ } finally {
96
+ vi.useRealTimers()
97
+ }
98
+ })
99
+
53
100
  test('includes the caller principal, never the raw token', async () => {
54
101
  const entries: Log.Entry[] = []
55
102
  const api = app({ emit: (entry) => void entries.push(entry) })
@@ -174,6 +221,92 @@ describe('middleware', () => {
174
221
  `)
175
222
  })
176
223
 
224
+ test('includes bounded sponsorship rejection diagnostics', async () => {
225
+ const entries: Log.Entry[] = []
226
+ const api = app({ emit: (entry) => void entries.push(entry) })
227
+ api.post('/rpc/sponsor', (c) => {
228
+ const body = {
229
+ error: {
230
+ code: -32602,
231
+ data: { code: 'production_api_key_required' },
232
+ message: 'Sponsorship rejected.',
233
+ },
234
+ id: 1,
235
+ jsonrpc: '2.0',
236
+ }
237
+ c.set('rpcResponse', Log.rpcErrors(body))
238
+ c.set('sponsorship', {
239
+ chainId: 4217,
240
+ method: 'eth_signRawTransaction',
241
+ outcome: 'rejected',
242
+ payloadHash: `0x${'aa'.repeat(32)}` as Hex.Hex,
243
+ reason: 'production_api_key_required',
244
+ rejections: 1,
245
+ })
246
+ return c.json(body)
247
+ })
248
+
249
+ await api.request('/rpc/sponsor', { method: 'POST' })
250
+
251
+ expect(stable(entries[0]!)).toMatchInlineSnapshot(`
252
+ {
253
+ "level": "warn",
254
+ "method": "POST",
255
+ "path": "/rpc/sponsor",
256
+ "route": "/rpc/sponsor",
257
+ "rpc": {
258
+ "code": -32602,
259
+ "dataCode": "production_api_key_required",
260
+ "errors": 1,
261
+ },
262
+ "sponsorship": {
263
+ "chainId": 4217,
264
+ "method": "eth_signRawTransaction",
265
+ "outcome": "rejected",
266
+ "payloadHash": "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
267
+ "reason": "production_api_key_required",
268
+ "rejections": 1,
269
+ },
270
+ "status": 200,
271
+ }
272
+ `)
273
+ })
274
+
275
+ test('records an MPP relay failure returned with HTTP 200', async () => {
276
+ const entries: Log.Entry[] = []
277
+ const api = app({ emit: (entry) => void entries.push(entry) })
278
+ api.post('/v1/mpp/validate', (c) => {
279
+ c.set('mpp', {
280
+ chainId: 4217,
281
+ errorCode: 'unknown',
282
+ feePayer: false,
283
+ operation: 'verify',
284
+ outcome: 'failure',
285
+ })
286
+ return c.json({ success: false }, 200)
287
+ })
288
+
289
+ const response = await api.request('/v1/mpp/validate', { method: 'POST' })
290
+
291
+ expect(response.status).toBe(200)
292
+ expect(stable(entries[0]!)).toMatchInlineSnapshot(`
293
+ {
294
+ "level": "error",
295
+ "method": "POST",
296
+ "mpp": {
297
+ "chainId": 4217,
298
+ "errorCode": "unknown",
299
+ "feePayer": false,
300
+ "operation": "verify",
301
+ "outcome": "failure",
302
+ },
303
+ "path": "/v1/mpp/validate",
304
+ "route": "/v1/mpp/validate",
305
+ "status": 200,
306
+ }
307
+ `)
308
+ })
309
+
177
310
  test('logs JSON-RPC server errors at error level', async () => {
178
311
  const entries: Log.Entry[] = []
179
312
  const api = app({ emit: (entry) => void entries.push(entry) })
@@ -196,7 +329,24 @@ describe('middleware', () => {
196
329
  expect(entries[0]?.level).toBe('error')
197
330
  })
198
331
 
199
- test('counts batch JSON-RPC errors without retaining mixed codes', async () => {
332
+ test('logs internal sponsorship failures at error level', async () => {
333
+ const entries: Log.Entry[] = []
334
+ const api = app({ emit: (entry) => void entries.push(entry) })
335
+ api.post('/rpc/sponsor', (c) => {
336
+ c.set('sponsorship', {
337
+ internalErrors: 1,
338
+ outcome: 'rejected',
339
+ rejections: 1,
340
+ })
341
+ return c.json({ id: 1, jsonrpc: '2.0', result: {} })
342
+ })
343
+
344
+ await api.request('/rpc/sponsor', { method: 'POST' })
345
+
346
+ expect(entries[0]?.level).toBe('error')
347
+ })
348
+
349
+ test('escalates mixed JSON-RPC batches containing server errors', async () => {
200
350
  const entries: Log.Entry[] = []
201
351
  const api = app({ emit: (entry) => void entries.push(entry) })
202
352
  api.post('/rpc/relay', (c) => {
@@ -217,12 +367,43 @@ describe('middleware', () => {
217
367
 
218
368
  expect(stable(entries[0]!)).toMatchInlineSnapshot(`
219
369
  {
220
- "level": "warn",
370
+ "level": "error",
221
371
  "method": "POST",
222
372
  "path": "/rpc/relay",
223
373
  "route": "/rpc/relay",
224
374
  "rpc": {
225
375
  "errors": 2,
376
+ "serverErrors": 1,
377
+ },
378
+ "status": 200,
379
+ }
380
+ `)
381
+ })
382
+
383
+ test('keeps routine node rejections out of server-error alerts', async () => {
384
+ const entries: Log.Entry[] = []
385
+ const api = app({ emit: (entry) => void entries.push(entry) })
386
+ api.post('/rpc/relay', (c) => {
387
+ const body = {
388
+ error: { code: -32_000, message: 'insufficient funds' },
389
+ id: 1,
390
+ jsonrpc: '2.0',
391
+ }
392
+ c.set('rpcResponse', Log.rpcErrors(body))
393
+ return c.json(body)
394
+ })
395
+
396
+ await api.request('/rpc/relay', { method: 'POST' })
397
+
398
+ expect(stable(entries[0]!)).toMatchInlineSnapshot(`
399
+ {
400
+ "level": "warn",
401
+ "method": "POST",
402
+ "path": "/rpc/relay",
403
+ "route": "/rpc/relay",
404
+ "rpc": {
405
+ "code": -32000,
406
+ "errors": 1,
226
407
  },
227
408
  "status": 200,
228
409
  }
@@ -237,7 +418,7 @@ describe('middleware', () => {
237
418
  code: 'UNAUTHORIZED',
238
419
  failure: 'http',
239
420
  id: 'relay',
240
- operation: 'quote/v2',
421
+ operation: 'getQuote',
241
422
  status: 401,
242
423
  })
243
424
  return Response.error(c, {
@@ -259,7 +440,7 @@ describe('middleware', () => {
259
440
  "code": "UNAUTHORIZED",
260
441
  "failure": "http",
261
442
  "id": "relay",
262
- "operation": "quote/v2",
443
+ "operation": "getQuote",
263
444
  "status": 401,
264
445
  },
265
446
  "route": "/provider",
@@ -276,14 +457,14 @@ describe('middleware', () => {
276
457
  {
277
458
  durationMs: 12.5,
278
459
  id: 'relay',
279
- operation: 'quote/v2',
460
+ operation: 'getQuote',
280
461
  outcome: 'available',
281
462
  },
282
463
  {
283
464
  durationMs: 25,
284
465
  failure: 'timeout',
285
466
  id: 'across',
286
- operation: 'swap/approval',
467
+ operation: 'getQuote',
287
468
  outcome: 'failed',
288
469
  },
289
470
  ])
@@ -298,14 +479,14 @@ describe('middleware', () => {
298
479
  {
299
480
  "durationMs": 12.5,
300
481
  "id": "relay",
301
- "operation": "quote/v2",
482
+ "operation": "getQuote",
302
483
  "outcome": "available",
303
484
  },
304
485
  {
305
486
  "durationMs": 25,
306
487
  "failure": "timeout",
307
488
  "id": "across",
308
- "operation": "swap/approval",
489
+ "operation": "getQuote",
309
490
  "outcome": "failed",
310
491
  },
311
492
  ],
@@ -1,24 +1,42 @@
1
1
  import type { MiddlewareHandler } from 'hono'
2
2
  import type { RequestIdVariables } from 'hono/request-id'
3
+ import type { Hex } from 'ox'
3
4
 
4
5
  import * as ApiKey from '../ApiKey.js'
5
6
  import type * as Auth from './Auth.js'
6
7
  import type * as EdgeCache from './EdgeCache.js'
7
- import type * as FundingQuotes from './FundingQuotes.js'
8
+ import type * as FundingProvider from './funding/Provider.js'
8
9
  import type * as Timing from './Timing.js'
9
10
 
10
11
  /** Hono variables read by the request logger and written by other layers. */
11
12
  export type Variables = {
13
+ /** Whether the original request exception was already reported. */
14
+ errorCaptured?: boolean | undefined
12
15
  /** Stable error code recorded by `Response.error` for the request log entry. */
13
16
  errorCode?: string | undefined
17
+ /** Bounded MPP relay outcome emitted by the credential routes. */
18
+ mpp?: Entry['mpp'] | undefined
14
19
  /** Bounded outcomes for funding providers attempted by the request. */
15
20
  fundingProviderAttempts?: Entry['fundingProviderAttempts'] | undefined
16
- /** Redacted provider failure details recorded by an upstream adapter. */
21
+ /** Whether the optional funding transfer count query failed. */
22
+ fundingTransferCountFailed?: true | undefined
23
+ /** Redacted provider failure details recorded by an upstream provider. */
17
24
  providerFailure?: Entry['provider'] | undefined
18
- /** Redacted provider failures when multiple upstream adapters fail. */
25
+ /** Redacted provider failures when multiple upstream providers fail. */
19
26
  providerFailures?: Entry['providerFailures'] | undefined
20
27
  /** Bounded JSON-RPC failure metadata recorded by a composed RPC handler. */
21
28
  rpcResponse?: Entry['rpc'] | undefined
29
+ /** Bounded sponsorship rejection details recorded by the relay app. */
30
+ sponsorship?: Sponsorship | undefined
31
+ }
32
+
33
+ type ErrorMetadata = {
34
+ /** Bounded provider attempts attached to a caught error. */
35
+ fundingProviderAttempts?: Entry['fundingProviderAttempts'] | undefined
36
+ /** Redacted first provider failure attached to a caught error. */
37
+ providerFailure?: Entry['provider'] | undefined
38
+ /** Redacted provider failures attached to a caught error. */
39
+ providerFailures?: Entry['providerFailures'] | undefined
22
40
  }
23
41
 
24
42
  /** Hono environment shape used by the request logger. */
@@ -37,10 +55,12 @@ export type Level = 'error' | 'info' | 'warn'
37
55
 
38
56
  /** Redacted upstream provider failure details. */
39
57
  export type ProviderFailure = {
58
+ /** Chain whose upstream request failed, when the request selected one. */
59
+ chainId?: number | undefined
40
60
  /** Stable provider error code, when one is safe to retain. */
41
61
  code?: string | undefined
42
62
  /** Failure boundary that rejected the provider request. */
43
- failure: 'http' | 'network' | 'payload' | 'rate_limit' | 'timeout' | 'unknown'
63
+ failure: 'http' | 'network' | 'payload' | 'query' | 'rate_limit' | 'timeout' | 'unknown'
44
64
  /** Provider identifier. */
45
65
  id: string
46
66
  /** Provider operation identifier. */
@@ -56,23 +76,65 @@ export type FundingProviderAttempt = {
56
76
  /** Failure class, present only when the provider attempt failed. */
57
77
  failure?: ProviderFailure['failure'] | undefined
58
78
  /** Provider identifier. */
59
- id: FundingQuotes.ProviderId
79
+ id: FundingProvider.ProviderId
60
80
  /** Stable upstream operation identifier. */
61
- operation: string
81
+ operation: FundingProvider.ProviderOperation
62
82
  /** Provider attempt outcome. */
63
83
  outcome: 'available' | 'failed' | 'thin' | 'unavailable'
64
84
  }
65
85
 
86
+ /** JSON-RPC methods that can request managed sponsorship. */
87
+ export type SponsorshipMethod =
88
+ | 'eth_fillTransaction'
89
+ | 'eth_sendRawTransaction'
90
+ | 'eth_sendRawTransactionSync'
91
+ | 'eth_signRawTransaction'
92
+
93
+ /** Stable client error codes for sponsorship rejections. */
94
+ export type SponsorshipReason =
95
+ | 'api_key_forbidden'
96
+ | 'api_key_required'
97
+ | 'billing_past_due'
98
+ | 'billing_required'
99
+ | 'chain_id_unsupported'
100
+ | 'fee_token_unsupported'
101
+ | 'internal_error'
102
+ | 'production_api_key_required'
103
+ | 'spend_limit_exceeded'
104
+ | 'tx_fee_limit_exceeded'
105
+
106
+ /** Bounded diagnostics for sponsorship rejections in one JSON-RPC request. */
107
+ export type Sponsorship = {
108
+ /** Common target chain, absent when rejected batch items disagree or are invalid. */
109
+ chainId?: number | undefined
110
+ /** Number of internal sponsorship failures, capped at 65,535; absent when zero. */
111
+ internalErrors?: number | undefined
112
+ /** Common sponsorship method, absent when rejected batch items use different methods. */
113
+ method?: SponsorshipMethod | undefined
114
+ /** Sponsorship request outcome. */
115
+ outcome: 'rejected'
116
+ /** Keccak256 of the caller's raw transaction, present only for a single-request body. */
117
+ payloadHash?: Hex.Hex | undefined
118
+ /** Common client error code, absent when rejected batch items have different codes. */
119
+ reason?: SponsorshipReason | undefined
120
+ /** Number of sponsorship policy rejections, capped at 65,535. */
121
+ rejections: number
122
+ }
123
+
66
124
  /** One canonical request log entry. */
67
125
  export type Entry = {
68
126
  /** `'hit'` when the edge response cache served the request without reaching the origin handlers. */
69
127
  cache?: 'hit' | undefined
70
128
  /** Total request duration in milliseconds. */
71
129
  duration: number
130
+ /** Whether the original request exception was already reported. */
131
+ errorCaptured?: boolean | undefined
72
132
  /** Stable error code when the response is a JSON error envelope (e.g. `not_found`, `api_key_invalid`). */
73
133
  errorCode?: string | undefined
74
134
  /** Bounded funding provider attempts made while serving the request. */
75
135
  fundingProviderAttempts?: readonly FundingProviderAttempt[] | undefined
136
+ /** Whether the optional funding transfer count query failed. */
137
+ fundingTransferCountFailed?: true | undefined
76
138
  /** Log level: 5xx `error`; 4xx or JSON-RPC failure `warn`; otherwise `info`. */
77
139
  level: Level
78
140
  /** Request method. */
@@ -81,6 +143,21 @@ export type Entry = {
81
143
  path: string
82
144
  /** MPP payment reason when the request was paid per call. */
83
145
  payment?: Auth.Payment['reason'] | undefined
146
+ /** Bounded outcome for an MPP relay operation. */
147
+ mpp?: {
148
+ /** Resolved Tempo chain selected by the credential. */
149
+ chainId: number
150
+ /** Stable relay failure code, absent when the operation succeeded. */
151
+ errorCode?: string | undefined
152
+ /** Idempotency claim outcome for broadcast operations. */
153
+ idempotency?: 'claimed' | 'pending' | 'replay' | undefined
154
+ /** Whether a fee payer was supplied for the credential. */
155
+ feePayer: boolean
156
+ /** Relay route operation. */
157
+ operation: 'broadcast' | 'verify'
158
+ /** Relay operation outcome, independent of the HTTP status. */
159
+ outcome: 'failure' | 'success'
160
+ }
84
161
  /** Caller identity. Raw API-key tokens and the super admin secret are never logged. */
85
162
  principal?:
86
163
  | {
@@ -100,9 +177,9 @@ export type Entry = {
100
177
  type: 'api_key' | 'public' | 'session' | 'super_admin'
101
178
  }
102
179
  | undefined
103
- /** Redacted upstream provider failure details, when an adapter request fails. */
180
+ /** Redacted upstream provider failure details, when a provider request fails. */
104
181
  provider?: ProviderFailure | undefined
105
- /** Redacted failures for every provider when multiple adapters fail. */
182
+ /** Redacted failures for every provider when multiple providers fail. */
106
183
  providerFailures?: readonly ProviderFailure[] | undefined
107
184
  /** Raw query string (no leading `?`) with API-key tokens redacted, when present. */
108
185
  query?: string | undefined
@@ -131,10 +208,14 @@ export type Entry = {
131
208
  dataCode?: string | undefined
132
209
  /** Number of failed responses in the single or batch JSON-RPC response. */
133
210
  errors: number
211
+ /** Number of JSON-RPC server errors, capped at 65,535; absent when zero. */
212
+ serverErrors?: number | undefined
134
213
  }
214
+ /** Bounded sponsorship rejection diagnostics, without request or response bodies. */
215
+ sponsorship?: Sponsorship | undefined
135
216
  /** HTTP response status code. JSON-RPC failures retain their protocol-native `200`. */
136
217
  status: number
137
- /** Upstream operation durations in milliseconds, from the request's Server-Timing metrics (e.g. RPC and TIDX calls). */
218
+ /** Longest upstream operation duration per Server-Timing name, in milliseconds (e.g. RPC and TIDX calls). */
138
219
  timings?: Record<string, number> | undefined
139
220
  }
140
221
 
@@ -169,14 +250,23 @@ export function middleware<environment extends Environment = Environment>(
169
250
  // Hono cannot resolve variable types through the generic `environment`,
170
251
  // so shared-variable reads are cast from the environment contract above
171
252
  // (the same pattern EdgeCache uses for its cross-layer reads).
253
+ const error = c.error as ErrorMetadata | undefined
172
254
  const principal = c.get('principal' as never) as Auth.Principal | undefined
255
+ const errorCaptured = c.get('errorCaptured' as never) as boolean | undefined
173
256
  const errorCode = c.get('errorCode' as never) as string | undefined
174
- const fundingProviderAttempts = c.get('fundingProviderAttempts' as never) as
175
- | Entry['fundingProviderAttempts']
257
+ const fundingProviderAttempts =
258
+ error?.fundingProviderAttempts ??
259
+ (c.get('fundingProviderAttempts' as never) as Entry['fundingProviderAttempts'] | undefined)
260
+ const fundingTransferCountFailed = c.get('fundingTransferCountFailed' as never) as
261
+ | true
176
262
  | undefined
177
- const provider = c.get('providerFailure' as never) as Entry['provider']
178
- const providerFailures = c.get('providerFailures' as never) as Entry['providerFailures']
263
+ const mpp = c.get('mpp' as never) as Entry['mpp']
264
+ const provider =
265
+ error?.providerFailure ?? (c.get('providerFailure' as never) as Entry['provider'])
266
+ const providerFailures =
267
+ error?.providerFailures ?? (c.get('providerFailures' as never) as Entry['providerFailures'])
179
268
  const rpc = c.get('rpcResponse' as never) as Entry['rpc']
269
+ const sponsorship = c.get('sponsorship' as never) as Entry['sponsorship']
180
270
 
181
271
  // The `request` total metric duplicates `duration` (measured here, one
182
272
  // layer further out), so only operation timings are kept.
@@ -184,7 +274,14 @@ export function middleware<environment extends Environment = Environment>(
184
274
  (metric) => metric.name !== 'request',
185
275
  )
186
276
  const timings = metrics?.length
187
- ? Object.fromEntries(metrics.map((metric) => [metric.name, round(metric.duration)]))
277
+ ? Object.fromEntries(
278
+ metrics.reduce((result, metric) => {
279
+ const duration = round(metric.duration)
280
+ const existing = result.get(metric.name)
281
+ if (existing === undefined || duration > existing) result.set(metric.name, duration)
282
+ return result
283
+ }, new Map<string, number>()),
284
+ )
188
285
  : undefined
189
286
 
190
287
  const rateLimit = (() => {
@@ -204,15 +301,22 @@ export function middleware<environment extends Environment = Environment>(
204
301
  const result = fn({
205
302
  ...(c.get('edgeCacheStatus' as never) === 'hit' ? { cache: 'hit' as const } : {}),
206
303
  duration: round(duration),
304
+ ...(errorCaptured === undefined ? {} : { errorCaptured }),
207
305
  ...(errorCode === undefined ? {} : { errorCode }),
208
306
  ...(fundingProviderAttempts === undefined ? {} : { fundingProviderAttempts }),
307
+ ...(fundingTransferCountFailed === undefined ? {} : { fundingTransferCountFailed }),
209
308
  level:
210
- status >= 500 || rpcServerError(rpc?.code)
309
+ status >= 500 ||
310
+ rpcServerError(rpc?.code) ||
311
+ (rpc?.serverErrors ?? 0) > 0 ||
312
+ (sponsorship?.internalErrors ?? 0) > 0 ||
313
+ mpp?.errorCode === 'unknown'
211
314
  ? 'error'
212
- : status >= 400 || rpc
315
+ : status >= 400 || rpc || sponsorship
213
316
  ? 'warn'
214
317
  : 'info',
215
318
  method: c.req.method,
319
+ ...(mpp === undefined ? {} : { mpp }),
216
320
  path: url.pathname,
217
321
  ...(principal?.payment === undefined ? {} : { payment: principal.payment.reason }),
218
322
  ...(principal === undefined
@@ -239,6 +343,7 @@ export function middleware<environment extends Environment = Environment>(
239
343
  requestId: c.get('requestId' as never) as string,
240
344
  route: c.req.routePath,
241
345
  ...(rpc === undefined ? {} : { rpc }),
346
+ ...(sponsorship === undefined ? {} : { sponsorship }),
242
347
  status,
243
348
  ...(timings === undefined ? {} : { timings }),
244
349
  })
@@ -289,17 +394,19 @@ export function rpcErrors(body: unknown): Entry['rpc'] {
289
394
 
290
395
  const codes = new Set(errors.map((error) => error.code))
291
396
  const dataCodes = new Set(errors.map((error) => error.dataCode).filter(Boolean))
397
+ const serverErrors = errors.filter((error) => rpcServerError(error.code)).length
292
398
  return {
293
399
  ...(codes.size === 1 ? { code: errors[0]!.code } : {}),
294
400
  ...(dataCodes.size === 1 && errors.every((error) => error.dataCode !== undefined)
295
401
  ? { dataCode: errors[0]!.dataCode }
296
402
  : {}),
297
403
  errors: Math.min(errors.length, 65_535),
404
+ ...(serverErrors === 0 ? {} : { serverErrors: Math.min(serverErrors, 65_535) }),
298
405
  }
299
406
  }
300
407
 
301
408
  function rpcServerError(code: number | undefined) {
302
- return code === -32603 || (code !== undefined && code >= -32099 && code <= -32000)
409
+ return code === -32603
303
410
  }
304
411
 
305
412
  export declare namespace middleware {