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
@@ -0,0 +1,66 @@
1
+ import * as Chain from './Chain.js'
2
+ import * as Route from './Route.js'
3
+ import * as Token from './Token.js'
4
+
5
+ const base = Chain.from({ id: 'eip155:8453', name: 'Base', slug: 'base' })
6
+ const ethereum = Chain.from({ id: 'eip155:1', name: 'Ethereum', slug: 'ethereum' })
7
+ const tempo = Chain.from({ id: 'eip155:4217', name: 'Tempo', slug: 'tempo' })
8
+ const usdc = Token.from({
9
+ chains: {
10
+ [base.id]: {
11
+ address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
12
+ decimals: 6,
13
+ standard: 'ERC-20',
14
+ },
15
+ [ethereum.id]: {
16
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
17
+ decimals: 6,
18
+ standard: 'ERC-20',
19
+ },
20
+ },
21
+ currency: 'USD',
22
+ name: 'USD Coin',
23
+ slug: 'usdc',
24
+ symbol: 'USDC',
25
+ })
26
+ const usdce = Token.from({
27
+ chains: {
28
+ [tempo.id]: {
29
+ address: '0x20c000000000000000000000b9537d11c60e8b50',
30
+ decimals: 6,
31
+ standard: 'TIP-20',
32
+ },
33
+ },
34
+ currency: 'USD',
35
+ name: 'Bridged USDC (Stargate)',
36
+ slug: 'usdce',
37
+ symbol: 'USDC.e',
38
+ })
39
+
40
+ describe('from', () => {
41
+ test('expands source tokens into destination routes', () => {
42
+ expect(
43
+ Route.from({
44
+ destination: tempo({ tokens: [usdce] }),
45
+ sources: [ethereum({ tokens: [usdc] }), base({ tokens: [usdc] })],
46
+ }),
47
+ ).toEqual([
48
+ {
49
+ destination: expect.objectContaining({
50
+ address: '0x20c000000000000000000000b9537d11c60e8b50',
51
+ }),
52
+ source: expect.objectContaining({
53
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
54
+ }),
55
+ },
56
+ {
57
+ destination: expect.objectContaining({
58
+ address: '0x20c000000000000000000000b9537d11c60e8b50',
59
+ }),
60
+ source: expect.objectContaining({
61
+ address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
62
+ }),
63
+ },
64
+ ])
65
+ })
66
+ })
@@ -0,0 +1,29 @@
1
+ import type * as Chain from './Chain.js'
2
+ import type * as Token from './Token.js'
3
+
4
+ /** A supported funding path between two chain-scoped tokens. */
5
+ export type Route = {
6
+ /** Token received on Tempo. */
7
+ destination: Token.Resolved
8
+ /** Token supplied by the caller. */
9
+ source: Token.Resolved
10
+ }
11
+
12
+ /** Creates funding routes from destination and source chain-token selections. */
13
+ export function from(options: from.Options): Route[] {
14
+ return options.sources.flatMap((source) =>
15
+ source.tokens.flatMap((token) =>
16
+ options.destination.tokens.map((destination) => ({ destination, source: token })),
17
+ ),
18
+ )
19
+ }
20
+
21
+ export declare namespace from {
22
+ /** Funding route definition. */
23
+ type Options = {
24
+ /** Chain and tokens received on Tempo. */
25
+ destination: Chain.Selection
26
+ /** Chains and tokens accepted as funding inputs. */
27
+ sources: readonly Chain.Selection[]
28
+ }
29
+ }
@@ -0,0 +1,152 @@
1
+ /** @module-tag localnet */
2
+
3
+ import { waitForTransactionReceipt } from 'viem/actions'
4
+ import { Actions, Addresses } from 'viem/tempo'
5
+ import { TxEnvelopeTempo } from 'ox/tempo'
6
+
7
+ import * as Runtime from '../../../test/runtime.js'
8
+ import * as TestTempo from '../../../test/Tempo.js'
9
+ import * as Subsidy from './Subsidy.js'
10
+
11
+ const account = TestTempo.accounts[6]!
12
+ const recipient = TestTempo.accounts[7]!
13
+ const runtime = Runtime.get()
14
+ const client = TestTempo.getClient()
15
+ const settler = Subsidy.create({
16
+ account,
17
+ getClient: TestTempo.readClient(),
18
+ policy: { maxAmount: '10' },
19
+ })
20
+
21
+ beforeAll(async () => {
22
+ await Actions.faucet.fundSync(client, { account, timeout: 60_000 })
23
+ })
24
+
25
+ describe.skipIf(runtime.mode !== 'localnet')('create', () => {
26
+ test('transfers a pathUSD subsidy through a persisted signed transaction', async () => {
27
+ const before = await Actions.token.getBalance(client, {
28
+ account: recipient.address,
29
+ decimals: 6,
30
+ token: Addresses.pathUsd,
31
+ })
32
+ const prepared = await settler.prepare({
33
+ amount: 100_000n,
34
+ depositId: 'fdp_local_pathusd',
35
+ recipient: recipient.address,
36
+ token: Addresses.pathUsd,
37
+ })
38
+ const envelope = TxEnvelopeTempo.deserialize(prepared.transaction as TxEnvelopeTempo.Serialized)
39
+
40
+ expect({
41
+ nonceKey: envelope.nonceKey,
42
+ validBefore: envelope.validBefore,
43
+ }).toMatchInlineSnapshot(`
44
+ {
45
+ "nonceKey": 30469680684220070457389426308647765119962481996559904707083080710737939923517n,
46
+ "validBefore": undefined,
47
+ }
48
+ `)
49
+
50
+ await settler.broadcast(prepared)
51
+ await waitForTransactionReceipt(client, { hash: prepared.hash })
52
+ await expect
53
+ .poll(async () => (await settler.status({ hash: prepared.hash })).type)
54
+ .toBe('success')
55
+ const [after, status] = await Promise.all([
56
+ Actions.token.getBalance(client, {
57
+ account: recipient.address,
58
+ decimals: 6,
59
+ token: Addresses.pathUsd,
60
+ }),
61
+ settler.status({ hash: prepared.hash }),
62
+ ])
63
+
64
+ expect({ delivered: after.amount - before.amount, status }).toMatchInlineSnapshot(
65
+ {
66
+ status: { tempoGasPaid: expect.any(String) },
67
+ },
68
+ `
69
+ {
70
+ "delivered": 100000n,
71
+ "status": {
72
+ "tempoGasPaid": Any<String>,
73
+ "type": "success",
74
+ },
75
+ }
76
+ `,
77
+ )
78
+ })
79
+
80
+ test('buys the exact destination amount with pathUSD and transfers it atomically', async () => {
81
+ const destinationToken = runtime.fixtures?.crossTokenTransfer?.destinationToken
82
+ if (!destinationToken) throw new Error('Expected a seeded local DEX pair.')
83
+ const before = await Actions.token.getBalance(client, {
84
+ account: recipient.address,
85
+ decimals: 6,
86
+ token: destinationToken,
87
+ })
88
+ const prepared = await settler.prepare({
89
+ amount: 100_000n,
90
+ depositId: 'fdp_local_activity_usd',
91
+ recipient: recipient.address,
92
+ token: destinationToken,
93
+ })
94
+
95
+ await settler.broadcast(prepared)
96
+ await waitForTransactionReceipt(client, { hash: prepared.hash })
97
+ await expect
98
+ .poll(async () => (await settler.status({ hash: prepared.hash })).type)
99
+ .toBe('success')
100
+ const [after, status] = await Promise.all([
101
+ Actions.token.getBalance(client, {
102
+ account: recipient.address,
103
+ decimals: 6,
104
+ token: destinationToken,
105
+ }),
106
+ settler.status({ hash: prepared.hash }),
107
+ ])
108
+
109
+ expect({ delivered: after.amount - before.amount, status }).toMatchInlineSnapshot(
110
+ {
111
+ status: { tempoGasPaid: expect.any(String) },
112
+ },
113
+ `
114
+ {
115
+ "delivered": 100000n,
116
+ "status": {
117
+ "tempoGasPaid": Any<String>,
118
+ "type": "success",
119
+ },
120
+ }
121
+ `,
122
+ )
123
+ })
124
+
125
+ test('reports unavailable native DEX liquidity', async () => {
126
+ const { token } = await Actions.token.createSync(TestTempo.getClient({ account }), {
127
+ currency: 'USD',
128
+ name: 'Unlisted USD',
129
+ symbol: 'UNLISTED',
130
+ })
131
+
132
+ await expect(
133
+ settler.prepare({
134
+ amount: 100_000n,
135
+ depositId: 'fdp_local_unlisted',
136
+ recipient: recipient.address,
137
+ token,
138
+ }),
139
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[Funding.Subsidy.LiquidityUnavailableError]`)
140
+ })
141
+
142
+ test('reports unavailable pathUSD balance from transaction simulation', async () => {
143
+ await expect(
144
+ settler.prepare({
145
+ amount: 2n ** 120n,
146
+ depositId: 'fdp_local_insufficient_balance',
147
+ recipient: recipient.address,
148
+ token: Addresses.pathUsd,
149
+ }),
150
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[Funding.Subsidy.BalanceUnavailableError]`)
151
+ })
152
+ })
@@ -0,0 +1,75 @@
1
+ import { privateKeyToAccount } from 'viem/accounts'
2
+
3
+ import * as TestFunding from '../../../test/Funding.js'
4
+ import * as Viem from '../Viem.js'
5
+ import * as Subsidy from './Subsidy.js'
6
+
7
+ const privateKey = `0x${'11'.repeat(32)}` as const
8
+
9
+ describe('supports', () => {
10
+ test('accepts only corresponding USD routes within the deposit limit', () => {
11
+ const route = TestFunding.transferSnapshot()
12
+ expect({
13
+ aboveLimit: Subsidy.supports(
14
+ { maxAmount: '1' },
15
+ {
16
+ amount: '1000001',
17
+ destinationToken: route.destinationToken,
18
+ sourceToken: route.sourceToken,
19
+ },
20
+ ),
21
+ invalidLimit: Subsidy.supports(
22
+ { maxAmount: 'invalid' },
23
+ {
24
+ amount: '1000000',
25
+ destinationToken: route.destinationToken,
26
+ sourceToken: route.sourceToken,
27
+ },
28
+ ),
29
+ withinLimit: Subsidy.supports(
30
+ { maxAmount: '1' },
31
+ {
32
+ amount: '1000000',
33
+ destinationToken: route.destinationToken,
34
+ sourceToken: route.sourceToken,
35
+ },
36
+ ),
37
+ wrongCurrency: Subsidy.supports(
38
+ { maxAmount: '1' },
39
+ {
40
+ amount: '1000000',
41
+ destinationToken: { ...route.destinationToken, currency: 'EUR' },
42
+ sourceToken: route.sourceToken,
43
+ },
44
+ ),
45
+ }).toMatchInlineSnapshot(`
46
+ {
47
+ "aboveLimit": false,
48
+ "invalidLimit": false,
49
+ "withinLimit": true,
50
+ "wrongCurrency": false,
51
+ }
52
+ `)
53
+ })
54
+ })
55
+
56
+ describe('create', () => {
57
+ test('exposes the dedicated account and policy without network access', () => {
58
+ const account = privateKeyToAccount(privateKey)
59
+ const policy = { maxAmount: '10' }
60
+ const settler = Subsidy.create({
61
+ account,
62
+ getClient: Viem.createGetClient(),
63
+ policy,
64
+ })
65
+
66
+ expect({ account: settler.account, policy: settler.policy }).toMatchInlineSnapshot(`
67
+ {
68
+ "account": "0x19E7E376E7C213B7E7e7e46cc70A5dD086DAff2A",
69
+ "policy": {
70
+ "maxAmount": "10",
71
+ },
72
+ }
73
+ `)
74
+ })
75
+ })
@@ -0,0 +1,260 @@
1
+ import { Address as core_Address, Hash, Hex, Value } from 'ox'
2
+ import {
3
+ type Address,
4
+ BaseError,
5
+ ContractFunctionRevertedError,
6
+ type LocalAccount,
7
+ TransactionReceiptNotFoundError,
8
+ } from 'viem'
9
+ import {
10
+ getTransactionReceipt,
11
+ prepareTransactionRequest,
12
+ sendRawTransaction,
13
+ signTransaction,
14
+ } from 'viem/actions'
15
+ import { Actions, Addresses } from 'viem/tempo'
16
+
17
+ import * as Fees from '../Fees.js'
18
+ import type * as Viem from '../Viem.js'
19
+ import type * as Provider from './Provider.js'
20
+
21
+ const slippageBps = 100n
22
+ const slippageDenominator = 10_000n
23
+
24
+ /** Maximum subsidized deposit value expressed as a decimal USD amount. */
25
+ export type Policy = {
26
+ /** Maximum source deposit value that Tempo will subsidize. */
27
+ maxAmount: string
28
+ }
29
+
30
+ /** Returns whether one USD stablecoin deposit is within the subsidy policy. */
31
+ export function supports(policy: Policy, options: supports.Options): boolean {
32
+ if (
33
+ options.destinationToken.currency !== 'USD' ||
34
+ options.sourceToken.currency !== options.destinationToken.currency
35
+ )
36
+ return false
37
+ const maximum = (() => {
38
+ try {
39
+ return Value.from(policy.maxAmount, options.sourceToken.decimals)
40
+ } catch {
41
+ return 0n
42
+ }
43
+ })()
44
+ return maximum > 0n && BigInt(options.amount) <= maximum
45
+ }
46
+
47
+ export declare namespace supports {
48
+ /** Route and source amount evaluated against a subsidy policy. */
49
+ type Options = {
50
+ /** Source amount in base units. */
51
+ amount: string
52
+ /** Token that the recipient receives on Tempo. */
53
+ destinationToken: Provider.TokenRef
54
+ /** Token deposited on the source chain. */
55
+ sourceToken: Provider.TokenRef
56
+ }
57
+ }
58
+
59
+ /** Prepares and submits durable pathUSD-funded subsidy transactions. */
60
+ export type Settler = {
61
+ /** Tempo account that supplies pathUSD. */
62
+ account: Address
63
+ /** Broadcasts one previously persisted signed transaction. */
64
+ broadcast(parameters: Settler.broadcast.Parameters): Promise<void>
65
+ /** Maximum subsidized deposit policy enforced at creation and settlement. */
66
+ policy: Policy
67
+ /** Prepares one signed transaction without broadcasting it. */
68
+ prepare(parameters: Settler.prepare.Parameters): Promise<Settler.prepare.ReturnType>
69
+ /** Reads the receipt state of one persisted subsidy transaction. */
70
+ status(parameters: Settler.status.Parameters): Promise<Settler.status.ReturnType>
71
+ }
72
+
73
+ /** Contracts for subsidy settlement operations. */
74
+ export declare namespace Settler {
75
+ /** Contracts for broadcasting one signed subsidy transaction. */
76
+ namespace broadcast {
77
+ /** Persisted transaction passed to the broadcaster. */
78
+ type Parameters = {
79
+ /** Expected transaction hash. */
80
+ hash: Hex.Hex
81
+ /** Signed Tempo transaction bytes. */
82
+ transaction: Hex.Hex
83
+ }
84
+ }
85
+
86
+ /** Contracts for preparing one subsidy transaction. */
87
+ namespace prepare {
88
+ /** Deposit deficit used to construct a subsidy transaction. */
89
+ type Parameters = {
90
+ /** Destination-token deficit in base units. */
91
+ amount: bigint
92
+ /** Deposit id hashed into the destination transfer memo. */
93
+ depositId: string
94
+ /** Tempo account that receives the subsidy. */
95
+ recipient: Address
96
+ /** Destination token address supplied by Tempo. */
97
+ token: Address
98
+ }
99
+
100
+ /** Signed transaction prepared for durable persistence. */
101
+ type ReturnType = {
102
+ /** Hash of the signed transaction. */
103
+ hash: Hex.Hex
104
+ /** Signed Tempo transaction bytes. */
105
+ transaction: Hex.Hex
106
+ }
107
+ }
108
+
109
+ /** Contracts for reading subsidy transaction state. */
110
+ namespace status {
111
+ /** Persisted transaction inspected by receipt hash. */
112
+ type Parameters = {
113
+ /** Persisted transaction hash. */
114
+ hash: Hex.Hex
115
+ }
116
+
117
+ /** Receipt state used by reconciliation. */
118
+ type ReturnType =
119
+ | {
120
+ /** No verified receipt exists yet. */
121
+ type: 'pending'
122
+ }
123
+ | {
124
+ /** Tempo gas cost persisted for subsidy accounting, in fee-token base units. */
125
+ tempoGasPaid: string
126
+ /** Verified settlement execution result. */
127
+ type: 'reverted' | 'success'
128
+ }
129
+ }
130
+ }
131
+
132
+ /** Creates a subsidy settler backed by one dedicated pathUSD account. */
133
+ export function create(options: create.Options): Settler {
134
+ const client = options.getClient()
135
+ return {
136
+ account: options.account.address,
137
+ async broadcast(parameters) {
138
+ const hash = await sendRawTransaction(client, {
139
+ serializedTransaction: parameters.transaction,
140
+ })
141
+ if (!Hex.isEqual(hash, parameters.hash)) throw new TransactionHashMismatchError()
142
+ },
143
+ policy: options.policy,
144
+ async prepare(parameters) {
145
+ const destinationToken = parameters.token
146
+ const direct = core_Address.isEqual(destinationToken, Addresses.pathUsd)
147
+ const memo = Hash.keccak256(Hex.fromString(parameters.depositId))
148
+ const nonceKey = (BigInt(memo) >> 1n) + 1n
149
+ const maximumAmount = await (async () => {
150
+ if (direct) return parameters.amount
151
+ const quotedAmount = await Actions.dex
152
+ .getBuyQuote(client, {
153
+ amountOut: parameters.amount,
154
+ tokenIn: Addresses.pathUsd,
155
+ tokenOut: destinationToken,
156
+ })
157
+ .catch((cause) => {
158
+ if (hasRevert(cause, ['InsufficientLiquidity', 'PairDoesNotExist']))
159
+ throw new LiquidityUnavailableError()
160
+ throw cause
161
+ })
162
+ if (quotedAmount === 0n) throw new LiquidityUnavailableError()
163
+ return (
164
+ (quotedAmount * (slippageDenominator + slippageBps) + slippageDenominator - 1n) /
165
+ slippageDenominator
166
+ )
167
+ })()
168
+ const calls = direct
169
+ ? [
170
+ Actions.token.transfer.call(client, {
171
+ amount: parameters.amount,
172
+ memo,
173
+ to: parameters.recipient,
174
+ token: destinationToken,
175
+ }),
176
+ ]
177
+ : [
178
+ Actions.token.approve.call(client, {
179
+ amount: maximumAmount,
180
+ spender: Addresses.stablecoinDex,
181
+ token: Addresses.pathUsd,
182
+ }),
183
+ Actions.dex.buy.call({
184
+ amountOut: parameters.amount,
185
+ maxAmountIn: maximumAmount,
186
+ tokenIn: Addresses.pathUsd,
187
+ tokenOut: destinationToken,
188
+ }),
189
+ Actions.token.transfer.call(client, {
190
+ amount: parameters.amount,
191
+ memo,
192
+ to: parameters.recipient,
193
+ token: destinationToken,
194
+ }),
195
+ ]
196
+ const request = await prepareTransactionRequest(client, {
197
+ account: options.account,
198
+ calls,
199
+ // A stable per-deposit nonce lets durable retries rebroadcast without paying twice.
200
+ nonceKey,
201
+ }).catch((cause) => {
202
+ if (hasRevert(cause, ['InsufficientBalance'])) throw new BalanceUnavailableError()
203
+ throw cause
204
+ })
205
+ const transaction = await signTransaction(client, {
206
+ ...request,
207
+ account: options.account,
208
+ })
209
+ return { hash: Hash.keccak256(transaction), transaction }
210
+ },
211
+ async status(parameters) {
212
+ const receipt = await getTransactionReceipt(client, parameters).catch((cause) => {
213
+ if (cause instanceof TransactionReceiptNotFoundError) return undefined
214
+ throw cause
215
+ })
216
+ if (!receipt) return { type: 'pending' }
217
+ return {
218
+ tempoGasPaid: Fees.fromGas(receipt.gasUsed, receipt.effectiveGasPrice).toString(),
219
+ type: receipt.status === 'success' ? 'success' : 'reverted',
220
+ }
221
+ },
222
+ }
223
+ }
224
+
225
+ export declare namespace create {
226
+ /** Dependencies and policy for one subsidy settler. */
227
+ type Options = {
228
+ /** Dedicated account that signs subsidies and holds pathUSD. */
229
+ account: LocalAccount
230
+ /** Trusted Tempo RPC client resolver. */
231
+ getClient: Viem.GetClient
232
+ /** Maximum subsidized deposit policy. */
233
+ policy: Policy
234
+ }
235
+ }
236
+
237
+ function hasRevert(cause: unknown, names: readonly string[]): boolean {
238
+ if (!(cause instanceof BaseError)) return false
239
+ const decoded = cause.walk(
240
+ (error) =>
241
+ error instanceof ContractFunctionRevertedError &&
242
+ Boolean(error.data?.errorName && names.includes(error.data.errorName)),
243
+ )
244
+ return Boolean(decoded) || names.some((name) => cause.details.includes(`${name}(`))
245
+ }
246
+
247
+ /** The subsidy account lacks enough pathUSD. */
248
+ export class BalanceUnavailableError extends Error {
249
+ override name = 'Funding.Subsidy.BalanceUnavailableError'
250
+ }
251
+
252
+ /** The Tempo DEX cannot quote the required destination amount. */
253
+ export class LiquidityUnavailableError extends Error {
254
+ override name = 'Funding.Subsidy.LiquidityUnavailableError'
255
+ }
256
+
257
+ /** The RPC returned a hash that differs from the persisted transaction. */
258
+ export class TransactionHashMismatchError extends Error {
259
+ override name = 'Funding.Subsidy.TransactionHashMismatchError'
260
+ }
@@ -0,0 +1,47 @@
1
+ import * as Chain from './Chain.js'
2
+ import * as Token from './Token.js'
3
+
4
+ const base = Chain.from({ id: 'eip155:8453', name: 'Base', slug: 'base' })
5
+
6
+ describe('from', () => {
7
+ test('creates a token with chain-specific metadata', () => {
8
+ const token = Token.from({
9
+ chains: {
10
+ [base.id]: {
11
+ address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
12
+ decimals: 6,
13
+ standard: 'ERC-20',
14
+ },
15
+ },
16
+ currency: 'USD',
17
+ name: 'USD Coin',
18
+ slug: 'usdc',
19
+ symbol: 'USDC',
20
+ })
21
+
22
+ const resolved = base({ tokens: [token] }).tokens[0]
23
+ expect(resolved).toMatchObject({
24
+ address: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
25
+ decimals: 6,
26
+ standard: 'ERC-20',
27
+ symbol: 'USDC',
28
+ })
29
+ expect(resolved?.chain.id).toBe('eip155:8453')
30
+ })
31
+ })
32
+
33
+ describe('resolve', () => {
34
+ test('rejects a token that is unavailable on the chain', () => {
35
+ const token = Token.from({
36
+ chains: {},
37
+ currency: 'USD',
38
+ name: 'USD Coin',
39
+ slug: 'usdc',
40
+ symbol: 'USDC',
41
+ })
42
+
43
+ expect(() => base({ tokens: [token] })).toThrowErrorMatchingInlineSnapshot(
44
+ `[Funding.Token.MissingChainError]`,
45
+ )
46
+ })
47
+ })
@@ -0,0 +1,59 @@
1
+ import type * as Chain from './Chain.js'
2
+
3
+ /** A token accepted or returned by a funding provider. */
4
+ export type Token = {
5
+ /** Chain-specific token metadata keyed by CAIP-2 chain id. */
6
+ chains: Partial<Record<Chain.Id, ChainConfig>>
7
+ /** Monetary denomination represented by the token. */
8
+ currency: string
9
+ /** Human-readable token name. */
10
+ name: string
11
+ /** Stable token segment used in quote identifiers. */
12
+ slug: string
13
+ /** Short token ticker symbol. */
14
+ symbol: string
15
+ }
16
+
17
+ /** Chain-specific token metadata. */
18
+ export type ChainConfig = {
19
+ /** Contract address, mint, or issuer address on the chain. */
20
+ address: string
21
+ /** Number of decimal places used by the token on the chain. */
22
+ decimals: number
23
+ /** Chain-specific token name override. */
24
+ name?: string | undefined
25
+ /** Token standard on the chain. */
26
+ standard: string
27
+ }
28
+
29
+ /** A token resolved to one funding chain. */
30
+ export type Resolved = Omit<Token, 'chains'> &
31
+ Omit<ChainConfig, 'name'> & {
32
+ /** Chain where the token exists. */
33
+ chain: Chain.Chain
34
+ /** Human-readable token name for this chain. */
35
+ name: string
36
+ }
37
+
38
+ /** Creates a canonical funding token. */
39
+ export function from<const token extends Token>(options: token): token {
40
+ return options
41
+ }
42
+
43
+ /** Resolves a funding token to its metadata on one chain. */
44
+ export function resolve(token: Token, chain: Chain.Chain): Resolved {
45
+ const config = token.chains[chain.id]
46
+ if (!config) throw new MissingChainError()
47
+ const { chains: _chains, ...metadata } = token
48
+ return {
49
+ ...metadata,
50
+ ...config,
51
+ chain,
52
+ name: config.name ?? token.name,
53
+ }
54
+ }
55
+
56
+ /** Error thrown when a token is not configured for a selected chain. */
57
+ export class MissingChainError extends Error {
58
+ override name = 'Funding.Token.MissingChainError'
59
+ }