tapimo 0.11.0 → 0.13.0

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 (443) hide show
  1. package/dist/App.d.ts +6396 -4575
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +39 -4
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.d.ts +15 -0
  6. package/dist/Assets.d.ts.map +1 -1
  7. package/dist/Assets.js +7 -0
  8. package/dist/Assets.js.map +1 -1
  9. package/dist/Scope.d.ts +2 -0
  10. package/dist/Scope.d.ts.map +1 -1
  11. package/dist/Scope.js +17 -0
  12. package/dist/Scope.js.map +1 -1
  13. package/dist/admin/App.d.ts +176 -78
  14. package/dist/admin/App.d.ts.map +1 -1
  15. package/dist/admin/apps/api-keys.d.ts +84 -4
  16. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  17. package/dist/admin/apps/api-keys.js +54 -0
  18. package/dist/admin/apps/api-keys.js.map +1 -1
  19. package/dist/admin/apps/earn-vaults.d.ts +123 -9
  20. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  21. package/dist/admin/apps/earn-vaults.js +60 -7
  22. package/dist/admin/apps/earn-vaults.js.map +1 -1
  23. package/dist/admin/apps/organizations.d.ts.map +1 -1
  24. package/dist/admin/apps/organizations.js +4 -2
  25. package/dist/admin/apps/organizations.js.map +1 -1
  26. package/dist/admin/apps/verified-tokens.d.ts +90 -90
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.js +71 -71
  29. package/dist/admin/ui.generated.js.map +1 -1
  30. package/dist/apps/Zones.d.ts +16 -16
  31. package/dist/apps/Zones.js +4 -4
  32. package/dist/apps/data/App.d.ts +1699 -749
  33. package/dist/apps/data/App.d.ts.map +1 -1
  34. package/dist/apps/data/App.js +58 -9
  35. package/dist/apps/data/App.js.map +1 -1
  36. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  37. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  38. package/dist/apps/data/ZoneSelection.js +44 -0
  39. package/dist/apps/data/ZoneSelection.js.map +1 -0
  40. package/dist/apps/data/routes/activities.d.ts +2417 -50
  41. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  42. package/dist/apps/data/routes/activities.js +1896 -1293
  43. package/dist/apps/data/routes/activities.js.map +1 -1
  44. package/dist/apps/data/routes/addresses.d.ts +471 -340
  45. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  46. package/dist/apps/data/routes/balances.d.ts +12 -12
  47. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  48. package/dist/apps/data/routes/balances.js +44 -17
  49. package/dist/apps/data/routes/balances.js.map +1 -1
  50. package/dist/apps/data/routes/blocks.d.ts +42 -42
  51. package/dist/apps/data/routes/blocks.d.ts.map +1 -1
  52. package/dist/apps/data/routes/blocks.js +22 -12
  53. package/dist/apps/data/routes/blocks.js.map +1 -1
  54. package/dist/apps/data/routes/coingecko.d.ts +179 -179
  55. package/dist/apps/data/routes/earn.d.ts +144 -19
  56. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  57. package/dist/apps/data/routes/earn.js +160 -28
  58. package/dist/apps/data/routes/earn.js.map +1 -1
  59. package/dist/apps/data/routes/exchanges.d.ts +719 -13
  60. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  61. package/dist/apps/data/routes/exchanges.js +16 -13
  62. package/dist/apps/data/routes/exchanges.js.map +1 -1
  63. package/dist/apps/data/routes/fee-amm.d.ts +2 -2
  64. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  65. package/dist/apps/data/routes/fee-amm.js +9 -11
  66. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  67. package/dist/apps/data/routes/indexer.d.ts +34 -34
  68. package/dist/apps/data/routes/receipts.d.ts +363 -263
  69. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  70. package/dist/apps/data/routes/receipts.js +29 -11
  71. package/dist/apps/data/routes/receipts.js.map +1 -1
  72. package/dist/apps/data/routes/rpc.js +24 -10
  73. package/dist/apps/data/routes/rpc.js.map +1 -1
  74. package/dist/apps/data/routes/tokenlist.d.ts +13 -13
  75. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  76. package/dist/apps/data/routes/tokenlist.js +16 -15
  77. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  78. package/dist/apps/data/routes/tokens.d.ts +112 -98
  79. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  80. package/dist/apps/data/routes/tokens.js +85 -35
  81. package/dist/apps/data/routes/tokens.js.map +1 -1
  82. package/dist/apps/data/routes/transactions.d.ts +7 -2
  83. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  84. package/dist/apps/data/routes/transactions.js +38 -18
  85. package/dist/apps/data/routes/transactions.js.map +1 -1
  86. package/dist/apps/data/routes/transfers.d.ts +1 -1
  87. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  88. package/dist/apps/data/routes/transfers.js +25 -21
  89. package/dist/apps/data/routes/transfers.js.map +1 -1
  90. package/dist/apps/data/routes/valuation.d.ts +1 -1
  91. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  92. package/dist/apps/data/routes/valuation.js +12 -7
  93. package/dist/apps/data/routes/valuation.js.map +1 -1
  94. package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
  95. package/dist/apps/data/routes/webhooks.d.ts +15 -15
  96. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  97. package/dist/apps/data/routes/webhooks.js +2 -2
  98. package/dist/apps/data/routes/webhooks.js.map +1 -1
  99. package/dist/apps/data/routes/zones.d.ts +32 -32
  100. package/dist/apps/data/routes/zones.js +1 -1
  101. package/dist/apps/funding/App.d.ts +38 -27
  102. package/dist/apps/funding/App.d.ts.map +1 -1
  103. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  104. package/dist/apps/funding/routes/chains.js +5 -4
  105. package/dist/apps/funding/routes/chains.js.map +1 -1
  106. package/dist/apps/funding/routes/deposit-addresses.d.ts +16 -16
  107. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  108. package/dist/apps/funding/routes/deposit-addresses.js +24 -19
  109. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  110. package/dist/apps/funding/routes/providers.d.ts +13 -13
  111. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  112. package/dist/apps/funding/routes/providers.js +3 -2
  113. package/dist/apps/funding/routes/providers.js.map +1 -1
  114. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  115. package/dist/apps/funding/routes/quotes.js +2 -2
  116. package/dist/apps/funding/routes/quotes.js.map +1 -1
  117. package/dist/apps/funding/routes/transfers.d.ts +60 -48
  118. package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
  119. package/dist/apps/funding/routes/transfers.js +27 -19
  120. package/dist/apps/funding/routes/transfers.js.map +1 -1
  121. package/dist/apps/management/App.d.ts +4558 -3700
  122. package/dist/apps/management/App.d.ts.map +1 -1
  123. package/dist/apps/management/Billing.d.ts.map +1 -1
  124. package/dist/apps/management/Billing.js +19 -6
  125. package/dist/apps/management/Billing.js.map +1 -1
  126. package/dist/apps/management/routes/api-keys.d.ts +786 -175
  127. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  128. package/dist/apps/management/routes/api-keys.js +312 -34
  129. package/dist/apps/management/routes/api-keys.js.map +1 -1
  130. package/dist/apps/management/routes/billing.d.ts +103 -30
  131. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  132. package/dist/apps/management/routes/billing.js +91 -32
  133. package/dist/apps/management/routes/billing.js.map +1 -1
  134. package/dist/apps/management/routes/faucet.d.ts +35 -35
  135. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  136. package/dist/apps/management/routes/faucet.js +23 -12
  137. package/dist/apps/management/routes/faucet.js.map +1 -1
  138. package/dist/apps/management/routes/invitations.d.ts +46 -13
  139. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  140. package/dist/apps/management/routes/invitations.js +79 -29
  141. package/dist/apps/management/routes/invitations.js.map +1 -1
  142. package/dist/apps/management/routes/invite-links.d.ts +120 -75
  143. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  144. package/dist/apps/management/routes/invite-links.js +100 -41
  145. package/dist/apps/management/routes/invite-links.js.map +1 -1
  146. package/dist/apps/management/routes/me.d.ts +5 -5
  147. package/dist/apps/management/routes/me.d.ts.map +1 -1
  148. package/dist/apps/management/routes/me.js +14 -10
  149. package/dist/apps/management/routes/me.js.map +1 -1
  150. package/dist/apps/management/routes/members.d.ts +99 -78
  151. package/dist/apps/management/routes/members.d.ts.map +1 -1
  152. package/dist/apps/management/routes/members.js +37 -18
  153. package/dist/apps/management/routes/members.js.map +1 -1
  154. package/dist/apps/management/routes/orgs.d.ts +48 -8
  155. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  156. package/dist/apps/management/routes/orgs.js +48 -19
  157. package/dist/apps/management/routes/orgs.js.map +1 -1
  158. package/dist/apps/management/routes/projects.d.ts +108 -46
  159. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  160. package/dist/apps/management/routes/projects.js +72 -21
  161. package/dist/apps/management/routes/projects.js.map +1 -1
  162. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  163. package/dist/apps/management/routes/scopes.js +8 -5
  164. package/dist/apps/management/routes/scopes.js.map +1 -1
  165. package/dist/apps/management/routes/usage.d.ts +82 -82
  166. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  167. package/dist/apps/management/routes/usage.js +41 -31
  168. package/dist/apps/management/routes/usage.js.map +1 -1
  169. package/dist/apps/management/routes/verified-token-requests.d.ts +35 -7
  170. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  171. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  172. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  173. package/dist/apps/management/routes/webhooks.d.ts +200 -183
  174. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  175. package/dist/apps/management/routes/webhooks.js +80 -35
  176. package/dist/apps/management/routes/webhooks.js.map +1 -1
  177. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  178. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  179. package/dist/apps/mpp/internal/Adapter.js +12 -0
  180. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  181. package/dist/db/Db.d.ts +2 -0
  182. package/dist/db/Db.d.ts.map +1 -1
  183. package/dist/db/Db.js +52 -1
  184. package/dist/db/Db.js.map +1 -1
  185. package/dist/db/Schema.d.ts +26 -3
  186. package/dist/db/Schema.d.ts.map +1 -1
  187. package/dist/db/Schema.js +24 -5
  188. package/dist/db/Schema.js.map +1 -1
  189. package/dist/db/tables/earnVaults.d.ts +5 -1
  190. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  191. package/dist/db/tables/earnVaults.js +5 -0
  192. package/dist/db/tables/earnVaults.js.map +1 -1
  193. package/dist/db/tables/fundingCatalog.d.ts +4 -2
  194. package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
  195. package/dist/db/tables/fundingCatalog.js +5 -1
  196. package/dist/db/tables/fundingCatalog.js.map +1 -1
  197. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  198. package/dist/db/tables/webhookDeliveries.js +10 -0
  199. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  200. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  201. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  202. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  203. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  204. package/dist/db/tables/webhookQueueEvents.d.ts +14 -20
  205. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  206. package/dist/db/tables/webhookQueueEvents.js +68 -47
  207. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  208. package/dist/db/tables/webhookSubscriptions.d.ts +16 -5
  209. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  210. package/dist/db/tables/webhookSubscriptions.js +29 -5
  211. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  212. package/dist/handlers/internal/utils.d.ts.map +1 -1
  213. package/dist/handlers/internal/utils.js +9 -0
  214. package/dist/handlers/internal/utils.js.map +1 -1
  215. package/dist/internal/Auth.d.ts +11 -2
  216. package/dist/internal/Auth.d.ts.map +1 -1
  217. package/dist/internal/Auth.js +19 -6
  218. package/dist/internal/Auth.js.map +1 -1
  219. package/dist/internal/Cache.d.ts.map +1 -1
  220. package/dist/internal/Cache.js +11 -7
  221. package/dist/internal/Cache.js.map +1 -1
  222. package/dist/internal/EarnVaults.d.ts +43 -4
  223. package/dist/internal/EarnVaults.d.ts.map +1 -1
  224. package/dist/internal/EarnVaults.js +167 -0
  225. package/dist/internal/EarnVaults.js.map +1 -1
  226. package/dist/internal/Fetch.d.ts +23 -0
  227. package/dist/internal/Fetch.d.ts.map +1 -0
  228. package/dist/internal/Fetch.js +26 -0
  229. package/dist/internal/Fetch.js.map +1 -0
  230. package/dist/internal/Log.d.ts +3 -1
  231. package/dist/internal/Log.d.ts.map +1 -1
  232. package/dist/internal/Log.js +16 -3
  233. package/dist/internal/Log.js.map +1 -1
  234. package/dist/internal/OpenApi.d.ts +30 -24
  235. package/dist/internal/OpenApi.d.ts.map +1 -1
  236. package/dist/internal/OpenApi.js +140 -41
  237. package/dist/internal/OpenApi.js.map +1 -1
  238. package/dist/internal/Response.d.ts +14 -9
  239. package/dist/internal/Response.d.ts.map +1 -1
  240. package/dist/internal/Response.js +16 -5
  241. package/dist/internal/Response.js.map +1 -1
  242. package/dist/internal/Schema.d.ts +11 -10
  243. package/dist/internal/Schema.d.ts.map +1 -1
  244. package/dist/internal/Schema.js +14 -9
  245. package/dist/internal/Schema.js.map +1 -1
  246. package/dist/internal/Store.d.ts +28 -6
  247. package/dist/internal/Store.d.ts.map +1 -1
  248. package/dist/internal/Store.js +121 -25
  249. package/dist/internal/Store.js.map +1 -1
  250. package/dist/internal/Tidx.d.ts +2 -0
  251. package/dist/internal/Tidx.d.ts.map +1 -1
  252. package/dist/internal/Tidx.js +23 -6
  253. package/dist/internal/Tidx.js.map +1 -1
  254. package/dist/internal/Timeout.d.ts +36 -0
  255. package/dist/internal/Timeout.d.ts.map +1 -0
  256. package/dist/internal/Timeout.js +37 -0
  257. package/dist/internal/Timeout.js.map +1 -0
  258. package/dist/internal/Timing.d.ts +9 -0
  259. package/dist/internal/Timing.d.ts.map +1 -1
  260. package/dist/internal/Timing.js +7 -0
  261. package/dist/internal/Timing.js.map +1 -1
  262. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  263. package/dist/internal/WebhookDestination.js +3 -0
  264. package/dist/internal/WebhookDestination.js.map +1 -1
  265. package/dist/internal/Webhooks.d.ts +29 -12
  266. package/dist/internal/Webhooks.d.ts.map +1 -1
  267. package/dist/internal/Webhooks.js +37 -20
  268. package/dist/internal/Webhooks.js.map +1 -1
  269. package/dist/internal/funding/Action.d.ts +9 -0
  270. package/dist/internal/funding/Action.d.ts.map +1 -1
  271. package/dist/internal/funding/Action.js +16 -8
  272. package/dist/internal/funding/Action.js.map +1 -1
  273. package/dist/internal/funding/Catalog.d.ts +9 -2
  274. package/dist/internal/funding/Catalog.d.ts.map +1 -1
  275. package/dist/internal/funding/Catalog.js +19 -8
  276. package/dist/internal/funding/Catalog.js.map +1 -1
  277. package/dist/internal/funding/Deposit.d.ts +2 -2
  278. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  279. package/dist/internal/funding/Deposit.js +9 -8
  280. package/dist/internal/funding/Deposit.js.map +1 -1
  281. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  282. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  283. package/dist/internal/funding/DepositAddress.js +9 -8
  284. package/dist/internal/funding/DepositAddress.js.map +1 -1
  285. package/dist/internal/funding/Provider.d.ts +68 -13
  286. package/dist/internal/funding/Provider.d.ts.map +1 -1
  287. package/dist/internal/funding/Provider.js +42 -20
  288. package/dist/internal/funding/Provider.js.map +1 -1
  289. package/dist/internal/funding/Transfer.d.ts +13 -12
  290. package/dist/internal/funding/Transfer.d.ts.map +1 -1
  291. package/dist/internal/funding/Transfer.js +23 -21
  292. package/dist/internal/funding/Transfer.js.map +1 -1
  293. package/dist/internal/funding/providers/stargate.d.ts +38 -0
  294. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  295. package/dist/internal/funding/providers/stargate.js +277 -0
  296. package/dist/internal/funding/providers/stargate.js.map +1 -0
  297. package/dist/internal/index.d.ts +1 -0
  298. package/dist/internal/index.d.ts.map +1 -1
  299. package/dist/internal/index.js +1 -0
  300. package/dist/internal/index.js.map +1 -1
  301. package/dist/providers/index.d.ts +7 -0
  302. package/dist/providers/index.d.ts.map +1 -1
  303. package/dist/providers/index.js +3 -0
  304. package/dist/providers/index.js.map +1 -1
  305. package/package.json +3 -3
  306. package/src/App.test.ts +148 -0
  307. package/src/App.ts +45 -4
  308. package/src/Assets.test.ts +18 -0
  309. package/src/Assets.ts +22 -0
  310. package/src/Client.test-d.ts +311 -16
  311. package/src/Scope.test.ts +20 -0
  312. package/src/Scope.ts +16 -0
  313. package/src/admin/apps/api-keys.test.ts +75 -0
  314. package/src/admin/apps/api-keys.ts +64 -0
  315. package/src/admin/apps/earn-vaults.test.ts +143 -0
  316. package/src/admin/apps/earn-vaults.ts +84 -7
  317. package/src/admin/apps/organizations.ts +6 -2
  318. package/src/admin/ui/src/lib/api-keys.ts +19 -0
  319. package/src/admin/ui/src/routes/api-keys.tsx +125 -2
  320. package/src/admin/ui.generated.ts +71 -71
  321. package/src/apps/Zones.test.ts +4 -4
  322. package/src/apps/Zones.ts +4 -4
  323. package/src/apps/composition.test.ts +1 -1
  324. package/src/apps/data/App.test.ts +72 -0
  325. package/src/apps/data/App.ts +58 -10
  326. package/src/apps/data/ZoneSelection.test.ts +196 -0
  327. package/src/apps/data/ZoneSelection.ts +108 -0
  328. package/src/apps/data/routes/activities.test.ts +1843 -2
  329. package/src/apps/data/routes/activities.ts +2211 -1388
  330. package/src/apps/data/routes/balances.ts +134 -98
  331. package/src/apps/data/routes/blocks.test.ts +533 -0
  332. package/src/apps/data/routes/blocks.ts +36 -17
  333. package/src/apps/data/routes/earn.test.ts +187 -25
  334. package/src/apps/data/routes/earn.ts +228 -32
  335. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  336. package/src/apps/data/routes/exchanges.test.ts +31 -1
  337. package/src/apps/data/routes/exchanges.ts +19 -15
  338. package/src/apps/data/routes/fee-amm.ts +18 -11
  339. package/src/apps/data/routes/receipts.ts +48 -17
  340. package/src/apps/data/routes/rpc.test.ts +75 -0
  341. package/src/apps/data/routes/rpc.ts +23 -9
  342. package/src/apps/data/routes/tokenlist.ts +21 -18
  343. package/src/apps/data/routes/tokens.test.ts +607 -0
  344. package/src/apps/data/routes/tokens.ts +312 -231
  345. package/src/apps/data/routes/transactions.ts +69 -30
  346. package/src/apps/data/routes/transfers.test.ts +424 -3
  347. package/src/apps/data/routes/transfers.ts +57 -36
  348. package/src/apps/data/routes/valuation.ts +94 -78
  349. package/src/apps/data/routes/webhooks.ts +6 -2
  350. package/src/apps/data/routes/zones.test.ts +21 -15
  351. package/src/apps/data/routes/zones.ts +1 -1
  352. package/src/apps/funding/routes/chains.test.ts +211 -7
  353. package/src/apps/funding/routes/chains.ts +19 -12
  354. package/src/apps/funding/routes/deposit-addresses.test.ts +416 -0
  355. package/src/apps/funding/routes/deposit-addresses.ts +101 -84
  356. package/src/apps/funding/routes/providers.ts +9 -5
  357. package/src/apps/funding/routes/quotes.test.ts +42 -0
  358. package/src/apps/funding/routes/quotes.ts +8 -5
  359. package/src/apps/funding/routes/transfers.test.ts +430 -40
  360. package/src/apps/funding/routes/transfers.ts +76 -59
  361. package/src/apps/management/Billing.test.ts +26 -0
  362. package/src/apps/management/Billing.ts +24 -7
  363. package/src/apps/management/routes/api-keys.test.ts +398 -0
  364. package/src/apps/management/routes/api-keys.ts +481 -145
  365. package/src/apps/management/routes/billing.test.ts +209 -0
  366. package/src/apps/management/routes/billing.ts +254 -177
  367. package/src/apps/management/routes/faucet.test.ts +39 -0
  368. package/src/apps/management/routes/faucet.ts +75 -41
  369. package/src/apps/management/routes/invitations.test.ts +216 -0
  370. package/src/apps/management/routes/invitations.ts +186 -109
  371. package/src/apps/management/routes/invite-links.test.ts +263 -1
  372. package/src/apps/management/routes/invite-links.ts +295 -214
  373. package/src/apps/management/routes/me.test.ts +49 -0
  374. package/src/apps/management/routes/me.ts +42 -32
  375. package/src/apps/management/routes/members.test.ts +124 -1
  376. package/src/apps/management/routes/members.ts +81 -51
  377. package/src/apps/management/routes/orgs.test.ts +176 -0
  378. package/src/apps/management/routes/orgs.ts +101 -59
  379. package/src/apps/management/routes/projects.test.ts +183 -0
  380. package/src/apps/management/routes/projects.ts +124 -60
  381. package/src/apps/management/routes/scopes.test.ts +44 -0
  382. package/src/apps/management/routes/scopes.ts +37 -28
  383. package/src/apps/management/routes/usage.test.ts +92 -0
  384. package/src/apps/management/routes/usage.ts +186 -151
  385. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  386. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  387. package/src/apps/management/routes/webhooks.test.ts +234 -0
  388. package/src/apps/management/routes/webhooks.ts +191 -78
  389. package/src/apps/mpp/internal/Adapter.ts +13 -1
  390. package/src/db/Db.test.ts +41 -0
  391. package/src/db/Db.ts +75 -1
  392. package/src/db/Schema.ts +33 -5
  393. package/src/db/tables/earnVaults.test.ts +22 -0
  394. package/src/db/tables/earnVaults.ts +11 -1
  395. package/src/db/tables/fundingCatalog.test.ts +16 -2
  396. package/src/db/tables/fundingCatalog.ts +9 -3
  397. package/src/db/tables/webhookDeliveries.ts +13 -0
  398. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  399. package/src/db/tables/webhookQueueEvents.ts +95 -61
  400. package/src/db/tables/webhookSubscriptions.ts +45 -6
  401. package/src/handlers/internal/utils.test.ts +53 -0
  402. package/src/handlers/internal/utils.ts +15 -0
  403. package/src/internal/Auth.ts +35 -9
  404. package/src/internal/Cache.ts +14 -7
  405. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  406. package/src/internal/EarnVaults.test.ts +79 -0
  407. package/src/internal/EarnVaults.ts +277 -0
  408. package/src/internal/Fetch.test.ts +46 -0
  409. package/src/internal/Fetch.ts +56 -0
  410. package/src/internal/Log.test.ts +21 -0
  411. package/src/internal/Log.ts +20 -5
  412. package/src/internal/OpenApi.ts +177 -51
  413. package/src/internal/Response.test.ts +95 -0
  414. package/src/internal/Response.ts +41 -3
  415. package/src/internal/Schema.test.ts +18 -0
  416. package/src/internal/Schema.ts +19 -9
  417. package/src/internal/Store.test.ts +364 -0
  418. package/src/internal/Store.ts +153 -27
  419. package/src/internal/Tidx.test.ts +21 -1
  420. package/src/internal/Tidx.ts +23 -6
  421. package/src/internal/Timeout.test.ts +35 -0
  422. package/src/internal/Timeout.ts +73 -0
  423. package/src/internal/Timing.ts +16 -0
  424. package/src/internal/WebhookDestination.ts +3 -0
  425. package/src/internal/Webhooks.test.ts +122 -8
  426. package/src/internal/Webhooks.ts +59 -29
  427. package/src/internal/funding/Action.test.ts +41 -1
  428. package/src/internal/funding/Action.ts +69 -41
  429. package/src/internal/funding/Catalog.test.ts +34 -0
  430. package/src/internal/funding/Catalog.ts +28 -11
  431. package/src/internal/funding/Deposit.ts +71 -64
  432. package/src/internal/funding/DepositAddress.ts +50 -43
  433. package/src/internal/funding/Provider.test.ts +73 -0
  434. package/src/internal/funding/Provider.ts +246 -170
  435. package/src/internal/funding/Transfer.ts +133 -110
  436. package/src/internal/funding/providers/index.test.ts +22 -0
  437. package/src/internal/funding/providers/relay.test.ts +2 -2
  438. package/src/internal/funding/providers/stargate.test.ts +163 -0
  439. package/src/internal/funding/providers/stargate.ts +409 -0
  440. package/src/internal/index.test.ts +1 -0
  441. package/src/internal/index.ts +1 -0
  442. package/src/providers/index.test.ts +1 -0
  443. package/src/providers/index.ts +9 -0
@@ -55,10 +55,16 @@ export namespace schema {
55
55
  z.describe('Funding capabilities enabled on one provider route.'),
56
56
  )
57
57
 
58
- // Absent or null `capabilities` keeps a route quote-only, so transfer and
59
- // deposit-address support enable through reviewed seed edits.
58
+ /** Provider-specific configuration for one funding route. */
59
+ export const Configuration = z
60
+ .record(z.string(), z.unknown())
61
+ .check(z.describe('Provider-specific configuration for one funding route.'))
62
+
63
+ // Absent or null `capabilities` keeps a route quote-only. Absent or null
64
+ // `configuration` lets providers decide whether a route is configured.
60
65
  const Route = z.extend(db_Schema.FundingRoute, {
61
66
  capabilities: z.optional(z.nullable(Capabilities)),
67
+ configuration: z.optional(z.nullable(Configuration)),
62
68
  })
63
69
 
64
70
  /** Complete funding catalog content accepted by the publish boundary. */
@@ -77,10 +83,15 @@ export namespace schema {
77
83
  /** Funding capabilities enabled on one provider route. */
78
84
  export type Capabilities = z.output<typeof schema.Capabilities>
79
85
 
86
+ /** Provider-specific configuration for one funding route. */
87
+ export type Configuration = z.output<typeof schema.Configuration>
88
+
80
89
  /** One hydrated provider route in a funding catalog snapshot. */
81
90
  export type ProviderRoute = {
82
91
  /** Funding capabilities; absent means the route is quote-only. */
83
92
  capabilities?: Capabilities | undefined
93
+ /** Provider-specific route configuration. */
94
+ configuration?: Configuration | undefined
84
95
  /** Funding provider that supports the route. */
85
96
  providerId: string
86
97
  /** Hydrated source-to-destination funding route. */
@@ -93,8 +104,8 @@ export type Snapshot = {
93
104
  chainsByKey: ReadonlyMap<string, Chain.Chain>
94
105
  /** Hydrated provider routes in stable catalog order. */
95
106
  routes: readonly ProviderRoute[]
96
- /** Hydrated routes grouped by provider id. */
97
- routesByProvider: ReadonlyMap<string, readonly Route.Route[]>
107
+ /** Hydrated provider routes grouped by provider id. */
108
+ routesByProvider: ReadonlyMap<string, readonly ProviderRoute[]>
98
109
  /** Canonical funding tokens indexed by stable id. */
99
110
  tokensById: ReadonlyMap<string, Token.Token>
100
111
  /** ISO timestamp of the catalog's last publish. */
@@ -176,7 +187,7 @@ export function compile(rows: core_Catalog.Rows): Snapshot {
176
187
  }
177
188
 
178
189
  const routes: ProviderRoute[] = []
179
- const routesByProvider = new Map<string, Route.Route[]>()
190
+ const routesByProvider = new Map<string, ProviderRoute[]>()
180
191
  for (const row of data.routes) {
181
192
  const route = {
182
193
  destination: resolvePlacement(
@@ -187,14 +198,16 @@ export function compile(rows: core_Catalog.Rows): Snapshot {
187
198
  ),
188
199
  source: resolvePlacement(chainsById, tokensById, row.sourceChainId, row.sourceTokenId),
189
200
  }
190
- routes.push({
201
+ const entry = {
191
202
  ...(row.capabilities ? { capabilities: row.capabilities } : {}),
203
+ ...(row.configuration ? { configuration: row.configuration } : {}),
192
204
  providerId: row.providerId,
193
205
  route,
194
- })
206
+ }
207
+ routes.push(entry)
195
208
  const providerRoutes = routesByProvider.get(row.providerId)
196
- if (providerRoutes) providerRoutes.push(route)
197
- else routesByProvider.set(row.providerId, [route])
209
+ if (providerRoutes) providerRoutes.push(entry)
210
+ else routesByProvider.set(row.providerId, [entry])
198
211
  }
199
212
 
200
213
  return {
@@ -219,10 +232,14 @@ export async function publish(db: Db.Db, input: publish.Input): Promise<Snapshot
219
232
  catalog: { id: 'default', updatedAt: emptyUpdatedAt, version: 'validation' },
220
233
  ...data,
221
234
  })
222
- // Absent `capabilities` persists as null; both mean indicative-only.
235
+ // Optional route data persists as null so every stored row has one shape.
223
236
  await core_Catalog.publish(db, {
224
237
  ...data,
225
- routes: data.routes.map((route) => ({ ...route, capabilities: route.capabilities ?? null })),
238
+ routes: data.routes.map((route) => ({
239
+ ...route,
240
+ capabilities: route.capabilities ?? null,
241
+ configuration: route.configuration ?? null,
242
+ })),
226
243
  })
227
244
  return prime(db, await read(db))
228
245
  }
@@ -4,6 +4,7 @@ import type * as Db from '../../db/Db.js'
4
4
  import * as FundingDepositAddresses from '../../db/tables/fundingDepositAddresses.js'
5
5
  import * as FundingDeposits from '../../db/tables/fundingDeposits.js'
6
6
  import * as Id from '../Id.js'
7
+ import * as OpenApi from '../OpenApi.js'
7
8
  import * as Schema from '../Schema.js'
8
9
  import * as Provider from './Provider.js'
9
10
 
@@ -115,22 +116,25 @@ export namespace schema {
115
116
  )
116
117
 
117
118
  /** Customer-safe explanation of a deposit status. */
118
- export const StatusReason = z
119
- .object({
120
- code: z
121
- .enum(statusReasonCodes)
122
- .check(
123
- z.describe('Stable machine-readable reason code.'),
124
- z.meta({ examples: ['delivery_liquidity_unavailable'] }),
125
- ),
126
- message: z
127
- .string()
128
- .check(
129
- z.describe('Human-readable explanation of the current status.'),
130
- z.meta({ examples: ['The required destination amount is not currently available.'] }),
131
- ),
132
- })
133
- .check(z.describe('Why a deposit needs attention or recovery.'))
119
+ export const StatusReason = OpenApi.component(
120
+ z
121
+ .object({
122
+ code: z
123
+ .enum(statusReasonCodes)
124
+ .check(
125
+ z.describe('Stable machine-readable reason code.'),
126
+ z.meta({ examples: ['delivery_liquidity_unavailable'] }),
127
+ ),
128
+ message: z
129
+ .string()
130
+ .check(
131
+ z.describe('Human-readable explanation of the current status.'),
132
+ z.meta({ examples: ['The required destination amount is not currently available.'] }),
133
+ ),
134
+ })
135
+ .check(z.describe('Why a deposit needs attention or recovery.')),
136
+ 'FundingDepositStatusReason',
137
+ )
134
138
 
135
139
  /** Public fields persisted as the deposit snapshot. */
136
140
  export const Snapshot = z
@@ -189,54 +193,57 @@ export namespace schema {
189
193
  )
190
194
 
191
195
  /** One detected funding deposit. */
192
- export const FundingDeposit = z
193
- .object({
194
- createdAt: z
195
- .string()
196
- .check(
197
- z.describe('When the deposit was first detected (ISO 8601).'),
198
- z.meta({ examples: ['2026-08-04T00:01:00.000Z'] }),
199
- ),
200
- depositAddressId: Snapshot.shape.depositAddressId,
201
- detectionTrigger: z.optional(DetectionTrigger),
202
- destinationAmount: Snapshot.shape.destinationAmount,
203
- destinationAmountRequired: Snapshot.shape.destinationAmountRequired,
204
- destinationChain: Snapshot.shape.destinationChain,
205
- destinationToken: Snapshot.shape.destinationToken,
206
- destinationTransactionHashes: Snapshot.shape.destinationTransactionHashes,
207
- id: z
208
- .string()
209
- .check(
210
- z.regex(/^fdp_[A-Za-z0-9_-]+$/),
211
- z.describe('Funding deposit id (`fdp_…`).'),
212
- z.meta({ examples: ['fdp_001785792060000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
213
- ),
214
- provider: Snapshot.shape.provider,
215
- recipient: Snapshot.shape.recipient,
216
- refundAddress: Snapshot.shape.refundAddress,
217
- refundAmount: Snapshot.shape.refundAmount,
218
- refundTransactionHashes: Snapshot.shape.refundTransactionHashes,
219
- sender: Snapshot.shape.sender,
220
- sourceAmount: Snapshot.shape.sourceAmount,
221
- sourceChain: Snapshot.shape.sourceChain,
222
- sourceToken: Snapshot.shape.sourceToken,
223
- sourceTransactionHashes: Snapshot.shape.sourceTransactionHashes,
224
- sourceTransferIndex: z
225
- .optional(z.number().check(z.int(), z.minimum(0)))
226
- .check(
227
- z.describe('Verified transfer position within the source transaction.'),
228
- z.meta({ examples: [0] }),
229
- ),
230
- status: Status,
231
- statusReason: z.optional(StatusReason),
232
- updatedAt: z
233
- .string()
234
- .check(
235
- z.describe('When the deposit last materially changed (ISO 8601).'),
236
- z.meta({ examples: ['2026-08-04T00:02:00.000Z'] }),
237
- ),
238
- })
239
- .check(z.describe('One detected deposit and its delivery status.'))
196
+ export const FundingDeposit = OpenApi.component(
197
+ z
198
+ .object({
199
+ createdAt: z.iso
200
+ .datetime()
201
+ .check(
202
+ z.describe('When the deposit was first detected (ISO 8601).'),
203
+ z.meta({ examples: ['2026-08-04T00:01:00.000Z'] }),
204
+ ),
205
+ depositAddressId: Snapshot.shape.depositAddressId,
206
+ detectionTrigger: z.optional(DetectionTrigger),
207
+ destinationAmount: Snapshot.shape.destinationAmount,
208
+ destinationAmountRequired: Snapshot.shape.destinationAmountRequired,
209
+ destinationChain: Snapshot.shape.destinationChain,
210
+ destinationToken: Snapshot.shape.destinationToken,
211
+ destinationTransactionHashes: Snapshot.shape.destinationTransactionHashes,
212
+ id: z
213
+ .string()
214
+ .check(
215
+ z.regex(/^fdp_[A-Za-z0-9_-]+$/),
216
+ z.describe('Funding deposit id (`fdp_…`).'),
217
+ z.meta({ examples: ['fdp_001785792060000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
218
+ ),
219
+ provider: Snapshot.shape.provider,
220
+ recipient: Snapshot.shape.recipient,
221
+ refundAddress: Snapshot.shape.refundAddress,
222
+ refundAmount: Snapshot.shape.refundAmount,
223
+ refundTransactionHashes: Snapshot.shape.refundTransactionHashes,
224
+ sender: Snapshot.shape.sender,
225
+ sourceAmount: Snapshot.shape.sourceAmount,
226
+ sourceChain: Snapshot.shape.sourceChain,
227
+ sourceToken: Snapshot.shape.sourceToken,
228
+ sourceTransactionHashes: Snapshot.shape.sourceTransactionHashes,
229
+ sourceTransferIndex: z
230
+ .optional(z.number().check(z.int(), z.minimum(0)))
231
+ .check(
232
+ z.describe('Verified transfer position within the source transaction.'),
233
+ z.meta({ examples: [0] }),
234
+ ),
235
+ status: Status,
236
+ statusReason: z.optional(StatusReason),
237
+ updatedAt: z.iso
238
+ .datetime()
239
+ .check(
240
+ z.describe('When the deposit last materially changed (ISO 8601).'),
241
+ z.meta({ examples: ['2026-08-04T00:02:00.000Z'] }),
242
+ ),
243
+ })
244
+ .check(z.describe('One detected deposit and its delivery status.')),
245
+ 'FundingDeposit',
246
+ )
240
247
  }
241
248
 
242
249
  /** Stored public snapshot of a funding deposit. */
@@ -3,6 +3,7 @@ import * as z from 'zod/mini'
3
3
  import type * as Db from '../../db/Db.js'
4
4
  import * as FundingDepositAddresses from '../../db/tables/fundingDepositAddresses.js'
5
5
  import * as Id from '../Id.js'
6
+ import * as OpenApi from '../OpenApi.js'
6
7
  import * as Provider from './Provider.js'
7
8
  import * as Transfer from './Transfer.js'
8
9
 
@@ -83,51 +84,57 @@ export namespace schema {
83
84
  .check(z.describe('Public route and ownership-independent fields of a deposit address.'))
84
85
 
85
86
  /** One reusable funding deposit address. */
86
- export const FundingDepositAddress = z
87
- .object({
88
- address: Snapshot.shape.address,
89
- createdAt: z
90
- .string()
91
- .check(
92
- z.describe('When the deposit address was created (ISO 8601).'),
93
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
94
- ),
95
- destinationChain: Snapshot.shape.destinationChain,
96
- destinationToken: Snapshot.shape.destinationToken,
97
- id: z
98
- .string()
99
- .check(
100
- z.regex(/^fda_[A-Za-z0-9_-]+$/),
101
- z.describe('Funding deposit address id (`fda_…`).'),
102
- z.meta({ examples: ['fda_001785792000000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
103
- ),
104
- provider: Snapshot.shape.provider,
105
- recipient: Snapshot.shape.recipient,
106
- refundAddress: Snapshot.shape.refundAddress,
107
- sourceChain: Snapshot.shape.sourceChain,
108
- sourceToken: Snapshot.shape.sourceToken,
109
- status: Status,
110
- subsidize: Snapshot.shape.subsidize,
111
- updatedAt: z
112
- .string()
113
- .check(
114
- z.describe('When the deposit address last materially changed (ISO 8601).'),
115
- z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
116
- ),
117
- })
118
- .check(z.describe('One reusable address for funding a Tempo account.'))
87
+ export const FundingDepositAddress = OpenApi.component(
88
+ z
89
+ .object({
90
+ address: Snapshot.shape.address,
91
+ createdAt: z.iso
92
+ .datetime()
93
+ .check(
94
+ z.describe('When the deposit address was created (ISO 8601).'),
95
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
96
+ ),
97
+ destinationChain: Snapshot.shape.destinationChain,
98
+ destinationToken: Snapshot.shape.destinationToken,
99
+ id: z
100
+ .string()
101
+ .check(
102
+ z.regex(/^fda_[A-Za-z0-9_-]+$/),
103
+ z.describe('Funding deposit address id (`fda_…`).'),
104
+ z.meta({ examples: ['fda_001785792000000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
105
+ ),
106
+ provider: Snapshot.shape.provider,
107
+ recipient: Snapshot.shape.recipient,
108
+ refundAddress: Snapshot.shape.refundAddress,
109
+ sourceChain: Snapshot.shape.sourceChain,
110
+ sourceToken: Snapshot.shape.sourceToken,
111
+ status: Status,
112
+ subsidize: Snapshot.shape.subsidize,
113
+ updatedAt: z.iso
114
+ .datetime()
115
+ .check(
116
+ z.describe('When the deposit address last materially changed (ISO 8601).'),
117
+ z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
118
+ ),
119
+ })
120
+ .check(z.describe('One reusable address for funding a Tempo account.')),
121
+ 'FundingDepositAddress',
122
+ )
119
123
 
120
124
  /** A reusable funding deposit address with terms sampled during creation. */
121
- export const CreatedFundingDepositAddress = z
122
- .object({
123
- ...FundingDepositAddress.shape,
124
- destinationAmount: Provider.schema.FundingQuote.shape.destinationAmount,
125
- destinationAmountMin: Provider.schema.FundingQuote.shape.destinationAmountMin,
126
- fees: z.array(Transfer.schema.Fee).check(z.describe('Fees applied to the quoted deposit.')),
127
- quote: Provider.schema.QuoteDetails,
128
- sourceAmount: Provider.schema.FundingQuote.shape.sourceAmount,
129
- })
130
- .check(z.describe('A reusable funding deposit address with current quoted delivery terms.'))
125
+ export const CreatedFundingDepositAddress = OpenApi.component(
126
+ z
127
+ .object({
128
+ ...FundingDepositAddress.shape,
129
+ destinationAmount: Provider.schema.FundingQuote.shape.destinationAmount,
130
+ destinationAmountMin: Provider.schema.FundingQuote.shape.destinationAmountMin,
131
+ fees: z.array(Transfer.schema.Fee).check(z.describe('Fees applied to the quoted deposit.')),
132
+ quote: Provider.schema.QuoteDetails,
133
+ sourceAmount: Provider.schema.FundingQuote.shape.sourceAmount,
134
+ })
135
+ .check(z.describe('A reusable funding deposit address with current quoted delivery terms.')),
136
+ 'CreatedFundingDepositAddress',
137
+ )
131
138
  }
132
139
 
133
140
  /** Stored public snapshot of a funding deposit address. */
@@ -5,6 +5,7 @@ import * as Across from './providers/across.js'
5
5
  import * as Relay from './providers/relay.js'
6
6
  import * as Rhino from './providers/rhino.js'
7
7
  import * as Squid from './providers/squid.js'
8
+ import * as Stargate from './providers/stargate.js'
8
9
  import * as Symbiosis from './providers/symbiosis.js'
9
10
 
10
11
  const providers = [
@@ -19,6 +20,7 @@ const providers = [
19
20
  integratorId: 'squid-integrator-id',
20
21
  userAddress: '0x1111111111111111111111111111111111111111',
21
22
  }),
23
+ Stargate.stargate(),
22
24
  Symbiosis.symbiosis({ userAddress: '0x1111111111111111111111111111111111111111' }),
23
25
  ] as const
24
26
 
@@ -831,9 +833,63 @@ describe('prepareTransfer', () => {
831
833
  { operation: 'prepareTransfer', outcome: 'unavailable', provider: 'relay' },
832
834
  ])
833
835
  })
836
+
837
+ test('accepts preparations without correlation', async () => {
838
+ const { correlation: _correlation, ...result } = preparedResult()
839
+ const spender = `0x${'44'.repeat(20)}`
840
+ const selected = FundingProvider.prepareTransfer({
841
+ ...prepareOptions,
842
+ providers: [
843
+ withPrepareTransfer('relay', async () => {
844
+ return {
845
+ ...result,
846
+ action: {
847
+ calls: [
848
+ {
849
+ data: `0x095ea7b3${spender.slice(2).padStart(64, '0')}${(1_000_000).toString(16).padStart(64, '0')}`,
850
+ to: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
851
+ value: '0x0',
852
+ },
853
+ { data: '0xe8017952', to: spender, value: '0x0' },
854
+ ],
855
+ type: 'evm:calls',
856
+ },
857
+ }
858
+ }),
859
+ ],
860
+ })
861
+
862
+ expect((await selected)?.result.correlation).toBeUndefined()
863
+ })
834
864
  })
835
865
 
836
866
  describe('getPrepareCandidates', () => {
867
+ test('restricts candidates to the requested provider', () => {
868
+ const relay = withPrepareTransfer('relay', async () => preparedResult())
869
+ const stargate = withPrepareTransfer('stargate', async () => preparedResult())
870
+ const route = TestFunding.data.routes.find(
871
+ (entry) => entry.providerId === 'relay' && entry.capabilities?.transfer,
872
+ )!
873
+ const catalog = FundingCatalog.compile({
874
+ catalog: {
875
+ id: 'default',
876
+ updatedAt: '2026-01-01T00:00:00.000Z',
877
+ version: 'test',
878
+ },
879
+ ...TestFunding.data,
880
+ routes: [...TestFunding.data.routes, { ...route, providerId: 'stargate' }],
881
+ })
882
+
883
+ expect(
884
+ FundingProvider.getPrepareCandidates({
885
+ ...prepareOptions,
886
+ catalog,
887
+ provider: 'stargate',
888
+ providers: [relay, stargate],
889
+ }).map(({ provider }) => provider.id),
890
+ ).toEqual(['stargate'])
891
+ })
892
+
837
893
  test('restricts candidates to the selected destination chain', () => {
838
894
  const provider = withPrepareTransfer('relay', async () => preparedResult())
839
895
  expect(
@@ -1110,6 +1166,19 @@ describe('getQuoteCandidates', () => {
1110
1166
  expect(candidate?.sourceAmount).toEqual({ amount: '1250000', formatted: '1.25' })
1111
1167
  })
1112
1168
 
1169
+ test('carries provider route configuration without duplicating token metadata', () => {
1170
+ const [candidate] = FundingProvider.getQuoteCandidates({
1171
+ ...baseUsdcRequest,
1172
+ provider: 'stargate',
1173
+ providers,
1174
+ })
1175
+
1176
+ expect(candidate?.configuration).toEqual({
1177
+ poolAddress: '0x27a16dc786820B16E5c9028b75B99F6f604b5d26',
1178
+ })
1179
+ expect(candidate?.sourceToken.address).toBe('0x833589fcd6edb6e08f4c7c32d4f71b54bda02913')
1180
+ })
1181
+
1113
1182
  test('resolves normalized catalog aliases', () => {
1114
1183
  const catalog = FundingCatalog.compile({
1115
1184
  catalog: {
@@ -1341,6 +1410,10 @@ describe('getProviders', () => {
1341
1410
  "id": "squid",
1342
1411
  "name": "Squid",
1343
1412
  },
1413
+ {
1414
+ "id": "stargate",
1415
+ "name": "Stargate",
1416
+ },
1344
1417
  {
1345
1418
  "id": "symbiosis",
1346
1419
  "name": "Symbiosis",