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
@@ -10,6 +10,165 @@ type MetricEvent = {
10
10
  }
11
11
 
12
12
  describe('requests', () => {
13
+ test('records optional funding transfer count failures on successful pages', () => {
14
+ const events: MetricEvent[] = []
15
+ const metrics = Metrics.from({
16
+ count(name, value, tags) {
17
+ events.push({ name, tags, type: 'count', value })
18
+ },
19
+ flush() {},
20
+ gauge() {},
21
+ histogram() {},
22
+ })
23
+ const record = MetricSink.requests(metrics)
24
+
25
+ record({
26
+ duration: 10,
27
+ fundingTransferCountFailed: true,
28
+ level: 'info',
29
+ method: 'GET',
30
+ path: '/v1/funding/transfers',
31
+ requestId: 'request_private',
32
+ route: '/v1/funding/transfers',
33
+ status: 200,
34
+ })
35
+
36
+ expect(events.find((event) => event.name === 'funding_transfer_count_failure_count'))
37
+ .toMatchInlineSnapshot(`
38
+ {
39
+ "name": "funding_transfer_count_failure_count",
40
+ "tags": {
41
+ "cache": "miss",
42
+ "method": "GET",
43
+ "principal_environment": "none",
44
+ "principal_type": "unknown",
45
+ "route": "/v1/funding/transfers",
46
+ },
47
+ "type": "count",
48
+ "value": 1,
49
+ }
50
+ `)
51
+ })
52
+
53
+ test('records bounded operational failure signals', () => {
54
+ const events: MetricEvent[] = []
55
+ const metrics = Metrics.from({
56
+ count(name, value, tags) {
57
+ events.push({ name, tags, type: 'count', value })
58
+ },
59
+ flush() {},
60
+ gauge() {},
61
+ histogram() {},
62
+ })
63
+ const record = MetricSink.requests(metrics)
64
+
65
+ record({
66
+ duration: 10,
67
+ errorCode: 'upstream_error',
68
+ level: 'error',
69
+ method: 'POST',
70
+ path: '/rpc/sponsor',
71
+ providerFailures: [
72
+ {
73
+ chainId: 4217,
74
+ failure: 'http',
75
+ id: 'tidx',
76
+ operation: 'query',
77
+ status: 502,
78
+ },
79
+ ],
80
+ requestId: 'request_private',
81
+ route: '/rpc/sponsor',
82
+ rpc: { code: -32603, dataCode: 'internal_error', errors: 2, serverErrors: 2 },
83
+ sponsorship: {
84
+ chainId: 4217,
85
+ internalErrors: 2,
86
+ method: 'eth_sendRawTransaction',
87
+ outcome: 'rejected',
88
+ payloadHash: `0x${'aa'.repeat(32)}`,
89
+ rejections: 2,
90
+ },
91
+ status: 502,
92
+ })
93
+
94
+ expect(events.filter((event) => event.name !== 'http_response_count')).toMatchInlineSnapshot(`
95
+ [
96
+ {
97
+ "name": "http_server_error_count",
98
+ "tags": {
99
+ "cache": "miss",
100
+ "error_code": "upstream_error",
101
+ "method": "POST",
102
+ "principal_environment": "none",
103
+ "principal_type": "unknown",
104
+ "route": "/rpc/sponsor",
105
+ "status": 502,
106
+ },
107
+ "type": "count",
108
+ "value": 1,
109
+ },
110
+ {
111
+ "name": "rpc_response_error_count",
112
+ "tags": {
113
+ "cache": "miss",
114
+ "method": "POST",
115
+ "principal_environment": "none",
116
+ "principal_type": "unknown",
117
+ "route": "/rpc/sponsor",
118
+ "rpc_error_code": "-32603",
119
+ },
120
+ "type": "count",
121
+ "value": 2,
122
+ },
123
+ {
124
+ "name": "rpc_response_server_error_count",
125
+ "tags": {
126
+ "cache": "miss",
127
+ "method": "POST",
128
+ "principal_environment": "none",
129
+ "principal_type": "unknown",
130
+ "route": "/rpc/sponsor",
131
+ "rpc_error_code": "-32603",
132
+ },
133
+ "type": "count",
134
+ "value": 2,
135
+ },
136
+ {
137
+ "name": "upstream_failure_count",
138
+ "tags": {
139
+ "cache": "miss",
140
+ "chain_id": "4217",
141
+ "failure": "http",
142
+ "method": "POST",
143
+ "operation": "query",
144
+ "principal_environment": "none",
145
+ "principal_type": "unknown",
146
+ "provider": "tidx",
147
+ "route": "/rpc/sponsor",
148
+ "status": "502",
149
+ },
150
+ "type": "count",
151
+ "value": 1,
152
+ },
153
+ {
154
+ "name": "sponsorship_internal_error_count",
155
+ "tags": {
156
+ "cache": "miss",
157
+ "chain_id": "4217",
158
+ "method": "eth_sendRawTransaction",
159
+ "principal_environment": "none",
160
+ "principal_type": "unknown",
161
+ "route": "/rpc/sponsor",
162
+ },
163
+ "type": "count",
164
+ "value": 2,
165
+ },
166
+ ]
167
+ `)
168
+ expect(JSON.stringify(events)).not.toContain('request_private')
169
+ expect(JSON.stringify(events)).not.toContain('aa'.repeat(32))
170
+ })
171
+
13
172
  test('records JSON-RPC errors with bounded code tags', () => {
14
173
  const events: MetricEvent[] = []
15
174
  const metrics = Metrics.from({
@@ -90,26 +249,26 @@ describe('requests', () => {
90
249
  {
91
250
  durationMs: 10,
92
251
  id: 'relay',
93
- operation: 'quote/v2',
252
+ operation: 'getQuote',
94
253
  outcome: 'available',
95
254
  },
96
255
  {
97
256
  durationMs: 20,
98
257
  id: 'rhino',
99
- operation: 'quote/bridge-swap/public',
258
+ operation: 'getQuote',
100
259
  outcome: 'thin',
101
260
  },
102
261
  {
103
262
  durationMs: 30,
104
263
  id: 'squid',
105
- operation: 'v2/route',
264
+ operation: 'getQuote',
106
265
  outcome: 'unavailable',
107
266
  },
108
267
  {
109
268
  durationMs: 40,
110
269
  failure: 'timeout',
111
270
  id: 'across',
112
- operation: 'swap/approval',
271
+ operation: 'prepareTransfer',
113
272
  outcome: 'failed',
114
273
  },
115
274
  ],
@@ -134,6 +293,7 @@ describe('requests', () => {
134
293
  {
135
294
  "name": "funding_quote_provider_attempt_count",
136
295
  "tags": {
296
+ "operation": "getQuote",
137
297
  "outcome": "available",
138
298
  "provider": "relay",
139
299
  },
@@ -143,6 +303,7 @@ describe('requests', () => {
143
303
  {
144
304
  "name": "funding_quote_provider_duration_ms",
145
305
  "tags": {
306
+ "operation": "getQuote",
146
307
  "outcome": "available",
147
308
  "provider": "relay",
148
309
  },
@@ -152,6 +313,7 @@ describe('requests', () => {
152
313
  {
153
314
  "name": "funding_quote_provider_attempt_count",
154
315
  "tags": {
316
+ "operation": "getQuote",
155
317
  "outcome": "thin",
156
318
  "provider": "rhino",
157
319
  },
@@ -161,6 +323,7 @@ describe('requests', () => {
161
323
  {
162
324
  "name": "funding_quote_provider_duration_ms",
163
325
  "tags": {
326
+ "operation": "getQuote",
164
327
  "outcome": "thin",
165
328
  "provider": "rhino",
166
329
  },
@@ -170,6 +333,7 @@ describe('requests', () => {
170
333
  {
171
334
  "name": "funding_quote_provider_attempt_count",
172
335
  "tags": {
336
+ "operation": "getQuote",
173
337
  "outcome": "unavailable",
174
338
  "provider": "squid",
175
339
  },
@@ -179,6 +343,7 @@ describe('requests', () => {
179
343
  {
180
344
  "name": "funding_quote_provider_duration_ms",
181
345
  "tags": {
346
+ "operation": "getQuote",
182
347
  "outcome": "unavailable",
183
348
  "provider": "squid",
184
349
  },
@@ -189,6 +354,7 @@ describe('requests', () => {
189
354
  "name": "funding_quote_provider_attempt_count",
190
355
  "tags": {
191
356
  "failure": "timeout",
357
+ "operation": "prepareTransfer",
192
358
  "outcome": "failed",
193
359
  "provider": "across",
194
360
  },
@@ -199,6 +365,7 @@ describe('requests', () => {
199
365
  "name": "funding_quote_provider_duration_ms",
200
366
  "tags": {
201
367
  "failure": "timeout",
368
+ "operation": "prepareTransfer",
202
369
  "outcome": "failed",
203
370
  "provider": "across",
204
371
  },
@@ -212,4 +379,77 @@ describe('requests', () => {
212
379
  )
213
380
  expect(flushes).toBe(1)
214
381
  })
382
+
383
+ test('records MPP relay outcomes without credential data', () => {
384
+ const events: MetricEvent[] = []
385
+ const metrics = Metrics.from({
386
+ count(name, value, tags) {
387
+ events.push({ name, tags, type: 'count', value })
388
+ },
389
+ flush() {},
390
+ gauge() {},
391
+ histogram(name, value, tags) {
392
+ events.push({ name, tags, type: 'histogram', value })
393
+ },
394
+ })
395
+ const record = MetricSink.requests(metrics)
396
+
397
+ record({
398
+ duration: 42,
399
+ level: 'info',
400
+ method: 'POST',
401
+ mpp: {
402
+ chainId: 4217,
403
+ errorCode: 'invalid_payment',
404
+ feePayer: true,
405
+ idempotency: 'claimed',
406
+ operation: 'broadcast',
407
+ outcome: 'failure',
408
+ },
409
+ path: '/v1/mpp/broadcast',
410
+ requestId: 'request_private',
411
+ route: '/v1/mpp/broadcast',
412
+ status: 200,
413
+ } satisfies Log.Entry)
414
+
415
+ const mpp = events.filter((event) => event.name.startsWith('mpp_relay_'))
416
+ expect(mpp).toMatchInlineSnapshot(`
417
+ [
418
+ {
419
+ "name": "mpp_relay_operation_count",
420
+ "tags": {
421
+ "chain_id": "4217",
422
+ "error_code": "invalid_payment",
423
+ "fee_payer": true,
424
+ "operation": "broadcast",
425
+ "outcome": "failure",
426
+ },
427
+ "type": "count",
428
+ "value": 1,
429
+ },
430
+ {
431
+ "name": "mpp_relay_operation_duration_ms",
432
+ "tags": {
433
+ "chain_id": "4217",
434
+ "error_code": "invalid_payment",
435
+ "fee_payer": true,
436
+ "operation": "broadcast",
437
+ "outcome": "failure",
438
+ },
439
+ "type": "histogram",
440
+ "value": 42,
441
+ },
442
+ {
443
+ "name": "mpp_relay_idempotency_claim_count",
444
+ "tags": {
445
+ "chain_id": "4217",
446
+ "outcome": "claimed",
447
+ },
448
+ "type": "count",
449
+ "value": 1,
450
+ },
451
+ ]
452
+ `)
453
+ expect(JSON.stringify(mpp)).not.toMatch(/request_private|credential|payload|signature/)
454
+ })
215
455
  })
@@ -84,12 +84,24 @@ export function requests(backend: Metrics): RequestSink {
84
84
  status: entry.status,
85
85
  })
86
86
  backend.histogram('http_response_duration_ms', entry.duration, tags)
87
+ if (entry.status >= 500)
88
+ backend.count('http_server_error_count', 1, {
89
+ ...tags,
90
+ ...(entry.errorCode === undefined ? {} : { error_code: entry.errorCode }),
91
+ status: entry.status,
92
+ })
87
93
 
88
- if (entry.rpc)
94
+ if (entry.rpc) {
89
95
  backend.count('rpc_response_error_count', entry.rpc.errors, {
90
96
  ...tags,
91
97
  rpc_error_code: rpcErrorCode(entry.rpc.code),
92
98
  })
99
+ if ((entry.rpc.serverErrors ?? 0) > 0)
100
+ backend.count('rpc_response_server_error_count', entry.rpc.serverErrors ?? 0, {
101
+ ...tags,
102
+ rpc_error_code: rpcErrorCode(entry.rpc.code),
103
+ })
104
+ }
93
105
 
94
106
  if (entry.status === 429 || entry.errorCode === 'rate_limit_exceeded')
95
107
  backend.count('http_rate_limit_count', 1, {
@@ -104,6 +116,7 @@ export function requests(backend: Metrics): RequestSink {
104
116
  for (const attempt of entry.fundingProviderAttempts ?? []) {
105
117
  const tags_attempt = {
106
118
  ...(attempt.failure === undefined ? {} : { failure: attempt.failure }),
119
+ operation: attempt.operation,
107
120
  outcome: attempt.outcome,
108
121
  provider: attempt.id,
109
122
  }
@@ -111,6 +124,43 @@ export function requests(backend: Metrics): RequestSink {
111
124
  backend.histogram('funding_quote_provider_duration_ms', attempt.durationMs, tags_attempt)
112
125
  }
113
126
 
127
+ if (entry.fundingTransferCountFailed)
128
+ backend.count('funding_transfer_count_failure_count', 1, tags)
129
+
130
+ for (const failure of entry.providerFailures ?? (entry.provider ? [entry.provider] : []))
131
+ backend.count('upstream_failure_count', 1, {
132
+ ...tags,
133
+ chain_id: String(failure.chainId ?? 'unknown'),
134
+ failure: failure.failure,
135
+ operation: failure.operation,
136
+ provider: failure.id,
137
+ status: String(failure.status ?? 'unknown'),
138
+ })
139
+
140
+ if ((entry.sponsorship?.internalErrors ?? 0) > 0)
141
+ backend.count('sponsorship_internal_error_count', entry.sponsorship?.internalErrors ?? 0, {
142
+ ...tags,
143
+ chain_id: String(entry.sponsorship?.chainId ?? 'mixed'),
144
+ method: entry.sponsorship?.method ?? 'mixed',
145
+ })
146
+
147
+ if (entry.mpp) {
148
+ const tags_mpp = {
149
+ chain_id: String(entry.mpp.chainId),
150
+ ...(entry.mpp.errorCode === undefined ? {} : { error_code: entry.mpp.errorCode }),
151
+ fee_payer: entry.mpp.feePayer,
152
+ operation: entry.mpp.operation,
153
+ outcome: entry.mpp.outcome,
154
+ }
155
+ backend.count('mpp_relay_operation_count', 1, tags_mpp)
156
+ backend.histogram('mpp_relay_operation_duration_ms', entry.duration, tags_mpp)
157
+ if (entry.mpp.idempotency)
158
+ backend.count('mpp_relay_idempotency_claim_count', 1, {
159
+ chain_id: String(entry.mpp.chainId),
160
+ outcome: entry.mpp.idempotency,
161
+ })
162
+ }
163
+
114
164
  backend.flush()
115
165
  }
116
166
  }
@@ -64,6 +64,8 @@ export const errorCodes = {
64
64
  'address_invalid',
65
65
  'token_invalid',
66
66
  'symbol_invalid',
67
+ 'swap_continuation_invalid',
68
+ 'swap_provider_invalid',
67
69
  'quote_amount_out_of_range',
68
70
  'pair_invalid',
69
71
  'pair_id_invalid',
@@ -73,6 +75,7 @@ export const errorCodes = {
73
75
  'chain_id_invalid',
74
76
  'chain_id_unsupported',
75
77
  'destination_transition_invalid',
78
+ 'sender_tag_invalid',
76
79
  'url_invalid',
77
80
  'api_key_malformed',
78
81
  ],
@@ -0,0 +1,17 @@
1
+ import * as Provider from './Provider.js'
2
+
3
+ describe('from', () => {
4
+ test.each(['exchange', 'funding'] as const)('preserves %s provider identity', (type) => {
5
+ expect(
6
+ Provider.from({
7
+ id: 'relay',
8
+ name: 'Relay',
9
+ type,
10
+ }),
11
+ ).toEqual({
12
+ id: 'relay',
13
+ name: 'Relay',
14
+ type,
15
+ })
16
+ })
17
+ })
@@ -0,0 +1,17 @@
1
+ /** A provider registered with the Tempo API app. */
2
+ export type Provider<id extends string = string, type extends ProviderType = ProviderType> = {
3
+ /** Stable provider identifier. */
4
+ id: id
5
+ /** Human-readable provider name. */
6
+ name: string
7
+ /** Provider category used to select capability-specific implementations. */
8
+ type: type
9
+ }
10
+
11
+ /** Capability categories supported by registered providers. */
12
+ export type ProviderType = 'exchange' | 'funding'
13
+
14
+ /** Defines a provider while preserving its concrete identity and capabilities. */
15
+ export function from<const provider extends Provider>(options: provider): provider {
16
+ return options
17
+ }
@@ -32,3 +32,16 @@ describe('ChainIdQuery', () => {
32
32
  expect(Schema.ChainIdQuery.parse('42431')).toMatchInlineSnapshot(`42431`)
33
33
  })
34
34
  })
35
+
36
+ describe('timestampBound', () => {
37
+ test('normalizes RFC 3339 offsets to UTC', () => {
38
+ const bound = Schema.timestampBound('swaps', 'from')
39
+
40
+ expect(bound.parse('2026-06-04T12:00:00+05:30')).toMatchInlineSnapshot(
41
+ `"2026-06-04T06:30:00.000Z"`,
42
+ )
43
+ expect(bound.parse('2026-06-04T12:00:00-05:00')).toMatchInlineSnapshot(
44
+ `"2026-06-04T17:00:00.000Z"`,
45
+ )
46
+ })
47
+ })
@@ -25,25 +25,35 @@ const accountExample = '0xbe058e1c4df8a4366a387bf595b284246a93039e'
25
25
  // Pre-transform input for a 0x-prefixed 20-byte address. The OpenAPI example is
26
26
  // attached here (pre-transform) via `z.meta` so it surfaces on path/query
27
27
  // params; the lowercasing transform is applied after.
28
- const address = z.templateLiteral(['0x', z.string().check(z.regex(/^[0-9a-fA-F]{40}$/))])
28
+ const addressInput = z.templateLiteral(['0x', z.string().check(z.regex(/^[0-9a-fA-F]{40}$/))])
29
29
 
30
30
  // TODO(ox/zod): replace with ox's `Address` zod schema once ox ships a `zod`
31
31
  // entrypoint, so the wire format stays in lockstep with ox/viem.
32
32
  /** Lowercase 0x-prefixed 20-byte account address. */
33
- export const Address = z
34
- .pipe(
35
- address.check(z.meta({ examples: [accountExample] })),
36
- // `String.prototype.toLowerCase` widens its receiver from `Hex.Hex` to
37
- // `string`. Cast the result back so the schema's inferred output keeps the
38
- // hex-literal type — this is sound because lowercasing preserves both the
39
- // `0x` prefix and the upstream regex constraint.
40
- z.transform((value) => value.toLowerCase() as core_Hex.Hex),
41
- )
42
- .check(
43
- z.describe(
44
- 'An account address — the `0x`-prefixed 20-byte identifier for a wallet or contract, returned in lowercase.',
45
- ),
46
- )
33
+ export const Address = address(accountExample)
34
+
35
+ /**
36
+ * Builds an `Address`-shaped schema with the given OpenAPI example. Use when a
37
+ * path or query parameter needs a more specific address example.
38
+ */
39
+ export function address(example: core_Hex.Hex) {
40
+ if (!/^0x[0-9a-fA-F]{40}$/.test(example))
41
+ throw new Error(`address example ${example} is not a 0x-prefixed 20-byte address`)
42
+ return z
43
+ .pipe(
44
+ addressInput.check(z.meta({ examples: [example] })),
45
+ // `String.prototype.toLowerCase` widens its receiver from `Hex.Hex` to
46
+ // `string`. Cast the result back so the schema's inferred output keeps the
47
+ // hex-literal type — this is sound because lowercasing preserves both the
48
+ // `0x` prefix and the upstream regex constraint.
49
+ z.transform((value) => value.toLowerCase() as core_Hex.Hex),
50
+ )
51
+ .check(
52
+ z.describe(
53
+ 'An account address — the `0x`-prefixed 20-byte identifier for a wallet or contract, returned in lowercase.',
54
+ ),
55
+ )
56
+ }
47
57
 
48
58
  /**
49
59
  * Lowercase 0x-prefixed 20-byte TIP-20 token contract address. The OpenAPI
@@ -70,7 +80,7 @@ export function tokenAddress(example: core_Hex.Hex) {
70
80
  )
71
81
  return z
72
82
  .pipe(
73
- address.check(z.meta({ examples: [example] })),
83
+ addressInput.check(z.meta({ examples: [example] })),
74
84
  z.transform((value) => value.toLowerCase() as core_Hex.Hex),
75
85
  )
76
86
  .check(
@@ -335,7 +345,7 @@ export const Limit = z
335
345
  z.meta({ examples: [10] }),
336
346
  )
337
347
 
338
- /** Valuation denomination query parameter shared across valuation-bearing endpoints. */
348
+ /** Valuation currency query parameter shared across valuation-bearing endpoints. */
339
349
  export const Denomination = z
340
350
  .optional(
341
351
  z.pipe(
@@ -495,16 +505,23 @@ export function blockNumberBound(noun: string, bound: 'from' | 'to') {
495
505
 
496
506
  /**
497
507
  * Optional inclusive ISO-8601 timestamp bound query parameter (`timestamp.from`
498
- * / `timestamp.to`). `noun` is the resource being listed (e.g. `transfers`).
508
+ * / `timestamp.to`), normalized to UTC. `noun` is the listed resource.
499
509
  */
500
510
  export function timestampBound(noun: string, bound: 'from' | 'to') {
501
511
  const direction = bound === 'from' ? 'at or after' : 'at or before'
502
- return z.optional(z.iso.datetime({ offset: true })).check(
503
- z.describe(`Only include ${noun} ${direction} this ISO 8601 timestamp.`),
504
- z.meta({
505
- examples: [bound === 'from' ? '2024-01-01T00:00:00Z' : '2024-12-31T23:59:59Z'],
506
- }),
507
- )
512
+ return z
513
+ .optional(
514
+ z.pipe(
515
+ z.iso.datetime({ offset: true }),
516
+ z.transform((value) => new Date(value).toISOString()),
517
+ ),
518
+ )
519
+ .check(
520
+ z.describe(`Only include ${noun} ${direction} this ISO 8601 timestamp.`),
521
+ z.meta({
522
+ examples: [bound === 'from' ? '2024-01-01T00:00:00Z' : '2024-12-31T23:59:59Z'],
523
+ }),
524
+ )
508
525
  }
509
526
 
510
527
  /**
@@ -142,6 +142,31 @@ describe('update', () => {
142
142
  })
143
143
  })
144
144
 
145
+ describe('change', () => {
146
+ test('applies typed set, no-op, and delete transitions', async () => {
147
+ const store = Store.memory()
148
+
149
+ const first = await Store.change(store, 'value', (current) => ({
150
+ op: 'set',
151
+ result: current,
152
+ value: 'first',
153
+ }))
154
+ const second = await Store.change(store, 'value', (current) => ({
155
+ op: 'noop',
156
+ result: current,
157
+ }))
158
+ await Store.change(store, 'value', () => ({ op: 'delete', result: undefined }))
159
+
160
+ expect({ first, second, value: await store.get('value') }).toMatchInlineSnapshot(`
161
+ {
162
+ "first": null,
163
+ "second": "first",
164
+ "value": null,
165
+ }
166
+ `)
167
+ })
168
+ })
169
+
145
170
  describe('memory', () => {
146
171
  test('swaps atomically against the expected value', async () => {
147
172
  const store = Store.memory()
@@ -212,6 +212,52 @@ export declare namespace update {
212
212
  }
213
213
  }
214
214
 
215
+ /** Atomically applies a typed state transition without a get-and-put fallback. */
216
+ export async function change<result>(
217
+ state: State,
218
+ key: string,
219
+ fn: (current: null | string) => Change<string, result>,
220
+ options: change.Options = {},
221
+ ): Promise<result> {
222
+ const { attempts = updateAttempts, ...put } = options
223
+ const swap = state.swap
224
+ if (!swap) throw new AtomicStateRequiredError()
225
+
226
+ for (let attempt = 0; attempt < attempts; attempt++) {
227
+ const current = await state.get(key)
228
+ const next = fn(current)
229
+ if (next.op === 'noop') return next.result
230
+ if (next.op === 'delete') {
231
+ if (!state.deleteIf) throw new AtomicDeleteRequiredError()
232
+ if (await state.deleteIf(key, current)) return next.result
233
+ continue
234
+ }
235
+ if (await swap(key, current, next.value, put)) return next.result
236
+ }
237
+ throw new UpdateContentionError(key, attempts)
238
+ }
239
+
240
+ export declare namespace change {
241
+ /** Options for one atomic state transition. */
242
+ type Options = update.Options
243
+ }
244
+
245
+ class AtomicStateRequiredError extends Error {
246
+ override name = 'Store.AtomicStateRequiredError'
247
+
248
+ constructor() {
249
+ super('Atomic state requires compare-and-swap support.')
250
+ }
251
+ }
252
+
253
+ class AtomicDeleteRequiredError extends Error {
254
+ override name = 'Store.AtomicDeleteRequiredError'
255
+
256
+ constructor() {
257
+ super('Atomic deletion requires compare-and-delete support.')
258
+ }
259
+ }
260
+
215
261
  /** Creates an in-memory store with TTL support. */
216
262
  export function memory(options: memory.Options = {}): State {
217
263
  // Track value + optional expiration in one cell so `get` can lazily evict