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
@@ -2,6 +2,7 @@ import { Address, Base58, Bytes, Hash, Value as core_Value } from 'ox'
2
2
  import * as z from 'zod/mini'
3
3
 
4
4
  import * as core_Provider from '../Provider.js'
5
+ import * as OpenApi from '../OpenApi.js'
5
6
  import * as Schema from '../Schema.js'
6
7
  import * as Value from '../Value.js'
7
8
  import * as Action from './Action.js'
@@ -42,85 +43,97 @@ export namespace schema {
42
43
  export const PositiveInteger = z.string().check(z.regex(/^(?=.*[1-9])\d+$/))
43
44
 
44
45
  /** Normalized chain reference passed to funding providers. */
45
- export const ChainRef = Schema.describe(
46
- z.object({
47
- addressFormat: z
48
- .enum(['base58', 'base58check', 'hex'])
49
- .check(
50
- z.describe('Address encoding used by accounts and token identifiers on this chain.'),
51
- z.meta({ examples: ['hex'] }),
52
- ),
53
- id: z.string().check(z.describe('CAIP-2 chain id.'), z.meta({ examples: ['eip155:8453'] })),
54
- kind: z
55
- .enum(['evm', 'solana', 'tron'])
56
- .check(
57
- z.describe('Chain execution family used for provider routing.'),
58
- z.meta({ examples: ['evm'] }),
59
- ),
60
- name: z
61
- .string()
62
- .check(z.describe('Human-readable chain name.'), z.meta({ examples: ['Base'] })),
63
- }),
64
- 'A normalized chain reference for funding quotes.',
46
+ export const ChainRef = OpenApi.component(
47
+ Schema.describe(
48
+ z.object({
49
+ addressFormat: z
50
+ .enum(['base58', 'base58check', 'hex'])
51
+ .check(
52
+ z.describe('Address encoding used by accounts and token identifiers on this chain.'),
53
+ z.meta({ examples: ['hex'] }),
54
+ ),
55
+ id: z.string().check(z.describe('CAIP-2 chain id.'), z.meta({ examples: ['eip155:8453'] })),
56
+ kind: z
57
+ .enum(['evm', 'solana', 'tron'])
58
+ .check(
59
+ z.describe('Chain execution family used for provider routing.'),
60
+ z.meta({ examples: ['evm'] }),
61
+ ),
62
+ name: z
63
+ .string()
64
+ .check(z.describe('Human-readable chain name.'), z.meta({ examples: ['Base'] })),
65
+ }),
66
+ 'A normalized chain reference for funding quotes.',
67
+ ),
68
+ 'FundingChain',
65
69
  )
66
70
 
67
71
  /** Normalized token reference passed to funding providers. */
68
- export const TokenRef = Schema.describe(
69
- z.object({
70
- address: z
71
- .string()
72
- .check(
73
- z.describe('Contract address, mint, or issuer address on the token chain.'),
74
- z.meta({ examples: ['0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'] }),
75
- ),
76
- currency: z
77
- .string()
78
- .check(
79
- z.describe('Monetary denomination represented by this token.'),
80
- z.meta({ examples: ['USD'] }),
81
- ),
82
- decimals: z
83
- .number()
84
- .check(
85
- z.int(),
86
- z.gte(0),
87
- z.describe('Number of decimal places this token uses.'),
88
- z.meta({ examples: [6] }),
89
- ),
90
- name: z
91
- .string()
92
- .check(z.describe('Human-readable token name.'), z.meta({ examples: ['USD Coin'] })),
93
- standard: z
94
- .string()
95
- .check(z.describe('Token standard on the token chain.'), z.meta({ examples: ['ERC-20'] })),
96
- symbol: z
97
- .string()
98
- .check(z.describe('Short token ticker symbol.'), z.meta({ examples: ['USDC'] })),
99
- tokenKey: z.string().check(
100
- z.describe('Stable Tempo token key scoped to the token chain.'),
101
- z.meta({
102
- examples: ['eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'],
103
- }),
104
- ),
105
- verified: z
106
- .boolean()
107
- .check(
108
- z.describe('Whether Tempo recognizes this token in its funding quote inventory.'),
109
- z.meta({ examples: [true] }),
72
+ export const TokenRef = OpenApi.component(
73
+ Schema.describe(
74
+ z.object({
75
+ address: z
76
+ .string()
77
+ .check(
78
+ z.describe('Contract address, mint, or issuer address on the token chain.'),
79
+ z.meta({ examples: ['0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'] }),
80
+ ),
81
+ currency: z
82
+ .string()
83
+ .check(
84
+ z.describe('Monetary denomination represented by this token.'),
85
+ z.meta({ examples: ['USD'] }),
86
+ ),
87
+ decimals: z
88
+ .number()
89
+ .check(
90
+ z.int(),
91
+ z.gte(0),
92
+ z.describe('Number of decimal places this token uses.'),
93
+ z.meta({ examples: [6] }),
94
+ ),
95
+ name: z
96
+ .string()
97
+ .check(z.describe('Human-readable token name.'), z.meta({ examples: ['USD Coin'] })),
98
+ standard: z
99
+ .string()
100
+ .check(
101
+ z.describe('Token standard on the token chain.'),
102
+ z.meta({ examples: ['ERC-20'] }),
103
+ ),
104
+ symbol: z
105
+ .string()
106
+ .check(z.describe('Short token ticker symbol.'), z.meta({ examples: ['USDC'] })),
107
+ tokenKey: z.string().check(
108
+ z.describe('Stable Tempo token key scoped to the token chain.'),
109
+ z.meta({
110
+ examples: ['eip155:8453/erc20:0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'],
111
+ }),
110
112
  ),
111
- }),
112
- 'A normalized token reference for funding quotes.',
113
+ verified: z
114
+ .boolean()
115
+ .check(
116
+ z.describe('Whether Tempo recognizes this token in its funding quote inventory.'),
117
+ z.meta({ examples: [true] }),
118
+ ),
119
+ }),
120
+ 'A normalized token reference for funding quotes.',
121
+ ),
122
+ 'FundingToken',
113
123
  )
114
124
 
115
125
  /** Provider identity embedded in funding resources. */
116
- export const ProviderRef = Schema.describe(
117
- z.object({
118
- id: z.string().check(z.describe('Stable provider id.'), z.meta({ examples: ['relay'] })),
119
- name: z
120
- .string()
121
- .check(z.describe('Human-readable provider name.'), z.meta({ examples: ['Relay'] })),
122
- }),
123
- 'Provider metadata embedded in a funding quote.',
126
+ export const ProviderRef = OpenApi.component(
127
+ Schema.describe(
128
+ z.object({
129
+ id: z.string().check(z.describe('Stable provider id.'), z.meta({ examples: ['relay'] })),
130
+ name: z
131
+ .string()
132
+ .check(z.describe('Human-readable provider name.'), z.meta({ examples: ['Relay'] })),
133
+ }),
134
+ 'Provider metadata embedded in a funding quote.',
135
+ ),
136
+ 'FundingProvider',
124
137
  )
125
138
 
126
139
  /** Source amount unit accepted by a funding quote request. */
@@ -203,10 +216,12 @@ export namespace schema {
203
216
  /** Executable preparation returned by a funding provider. */
204
217
  export const PrepareResult = z.object({
205
218
  action: Action.schema.Action,
206
- correlation: z.object({
207
- checkEndpoint: z.optional(z.string()),
208
- requestId: z.string().check(z.minLength(1)),
209
- }),
219
+ correlation: z.optional(
220
+ z.object({
221
+ checkEndpoint: z.optional(z.string()),
222
+ requestId: z.string().check(z.minLength(1)),
223
+ }),
224
+ ),
210
225
  destinationAmount: PositiveInteger,
211
226
  destinationAmountMin: PositiveInteger,
212
227
  expiresAt: z.optional(z.iso.datetime()),
@@ -214,6 +229,7 @@ export namespace schema {
214
229
  z.object({
215
230
  amount: Schema.DecimalString,
216
231
  side: z.enum(['destination', 'source']),
232
+ token: z.optional(TokenRef),
217
233
  }),
218
234
  ),
219
235
  quality: GetQuoteResult.shape.quality,
@@ -264,84 +280,93 @@ export namespace schema {
264
280
  })
265
281
 
266
282
  /** Quote quality signals exposed to funding API callers. */
267
- export const FundingQuoteQuality = Schema.describe(
268
- z.object({
269
- estimatedSeconds: z
270
- .optional(z.number().check(z.int(), z.nonnegative()))
271
- .check(
272
- z.describe('Estimated settlement time in seconds, when known.'),
273
- z.meta({ examples: [2] }),
274
- ),
275
- liquiditySource: z
276
- .string()
277
- .check(
278
- z.describe('Provider source for the live quote quality signal.'),
279
- z.meta({ examples: ['providerQuote'] }),
280
- ),
281
- sourceDetail: z
282
- .optional(z.string())
283
- .check(
284
- z.describe('Provider-specific source or endpoint detail for the quality signal.'),
285
- z.meta({ examples: ['providerEndpoint'] }),
286
- ),
287
- tier: z
288
- .enum(['liquid', 'thin'])
289
- .check(
290
- z.describe('Machine-readable quote quality tier for a successful quote.'),
291
- z.meta({ examples: ['liquid'] }),
292
- ),
293
- }),
294
- 'Machine-readable liquidity, fee, and source signals for a successful quote.',
283
+ export const FundingQuoteQuality = OpenApi.component(
284
+ Schema.describe(
285
+ z.object({
286
+ estimatedSeconds: z
287
+ .optional(z.number().check(z.int(), z.nonnegative()))
288
+ .check(
289
+ z.describe('Estimated settlement time in seconds, when known.'),
290
+ z.meta({ examples: [2] }),
291
+ ),
292
+ liquiditySource: z
293
+ .string()
294
+ .check(
295
+ z.describe('Provider source for the live quote quality signal.'),
296
+ z.meta({ examples: ['providerQuote'] }),
297
+ ),
298
+ sourceDetail: z
299
+ .optional(z.string())
300
+ .check(
301
+ z.describe('Provider-specific source or endpoint detail for the quality signal.'),
302
+ z.meta({ examples: ['providerEndpoint'] }),
303
+ ),
304
+ tier: z
305
+ .enum(['liquid', 'thin'])
306
+ .check(
307
+ z.describe('Machine-readable quote quality tier for a successful quote.'),
308
+ z.meta({ examples: ['liquid'] }),
309
+ ),
310
+ }),
311
+ 'Machine-readable liquidity, fee, and source signals for a successful quote.',
312
+ ),
313
+ 'FundingQuoteQuality',
295
314
  )
296
315
 
297
316
  /** Provider quote freshness data exposed to funding API callers. */
298
- export const QuoteDetails = Schema.describe(
299
- z.object({
300
- expiresAt: z
301
- .optional(z.iso.datetime())
302
- .check(
303
- z.describe('Timestamp after which the provider quote is no longer valid.'),
304
- z.meta({ examples: ['2026-01-01T00:01:00Z'] }),
305
- ),
306
- sampledAt: z.iso
307
- .datetime()
308
- .check(
309
- z.describe('Timestamp for the live quote request.'),
310
- z.meta({ examples: ['2026-01-01T00:00:00Z'] }),
311
- ),
312
- }),
313
- 'Freshness data for a provider funding quote.',
317
+ export const QuoteDetails = OpenApi.component(
318
+ Schema.describe(
319
+ z.object({
320
+ expiresAt: z
321
+ .optional(z.iso.datetime())
322
+ .check(
323
+ z.describe('Timestamp after which the provider quote is no longer valid.'),
324
+ z.meta({ examples: ['2026-01-01T00:01:00Z'] }),
325
+ ),
326
+ sampledAt: z.iso
327
+ .datetime()
328
+ .check(
329
+ z.describe('Timestamp for the live quote request.'),
330
+ z.meta({ examples: ['2026-01-01T00:00:00Z'] }),
331
+ ),
332
+ }),
333
+ 'Freshness data for a provider funding quote.',
334
+ ),
335
+ 'FundingQuoteDetails',
314
336
  )
315
337
 
316
338
  /** Successful normalized funding quote returned to callers. */
317
- export const FundingQuote = Schema.describe(
318
- z.object({
319
- destinationAmount: Schema.TokenAmount.check(z.describe('Expected destination amount.')),
320
- destinationAmountMin: z
321
- .optional(Schema.TokenAmount)
322
- .check(
323
- z.describe(
324
- 'Provider-derived minimum destination amount. Symbiosis and Squid quotes use a fixed 1% slippage tolerance.',
339
+ export const FundingQuote = OpenApi.component(
340
+ Schema.describe(
341
+ z.object({
342
+ destinationAmount: Schema.TokenAmount.check(z.describe('Expected destination amount.')),
343
+ destinationAmountMin: z
344
+ .optional(Schema.TokenAmount)
345
+ .check(
346
+ z.describe(
347
+ 'Provider-derived minimum destination amount. Symbiosis and Squid quotes use a fixed 1% slippage tolerance.',
348
+ ),
325
349
  ),
350
+ destinationChain: ChainRef.check(
351
+ z.describe('Destination chain, always Tempo mainnet in V1.'),
326
352
  ),
327
- destinationChain: ChainRef.check(
328
- z.describe('Destination chain, always Tempo mainnet in V1.'),
329
- ),
330
- destinationToken: TokenRef.check(z.describe('Tempo token expected from this quote.')),
331
- id: z
332
- .string()
333
- .check(
334
- z.describe('Stable deterministic funding quote id.'),
335
- z.meta({ examples: ['base-usdc-tempo-usdce-relay'] }),
336
- ),
337
- provider: ProviderRef,
338
- quality: FundingQuoteQuality,
339
- quote: QuoteDetails,
340
- sourceAmount: Schema.TokenAmount,
341
- sourceChain: ChainRef.check(z.describe('Chain where the caller currently holds funds.')),
342
- sourceToken: TokenRef.check(z.describe('Token the caller currently holds.')),
343
- }),
344
- 'One successful provider-specific funding quote.',
353
+ destinationToken: TokenRef.check(z.describe('Tempo token expected from this quote.')),
354
+ id: z
355
+ .string()
356
+ .check(
357
+ z.describe('Stable deterministic funding quote id.'),
358
+ z.meta({ examples: ['base-usdc-tempo-usdce-relay'] }),
359
+ ),
360
+ provider: ProviderRef,
361
+ quality: FundingQuoteQuality,
362
+ quote: QuoteDetails,
363
+ sourceAmount: Schema.TokenAmount,
364
+ sourceChain: ChainRef.check(z.describe('Chain where the caller currently holds funds.')),
365
+ sourceToken: TokenRef.check(z.describe('Token the caller currently holds.')),
366
+ }),
367
+ 'One successful provider-specific funding quote.',
368
+ ),
369
+ 'FundingQuote',
345
370
  )
346
371
  }
347
372
 
@@ -445,6 +470,21 @@ export declare namespace prepareTransfer {
445
470
  type ReturnType = z.output<typeof schema.PrepareResult>
446
471
  }
447
472
 
473
+ /** Contract for provider-specific executable action validation. */
474
+ export declare namespace validateTransferAction {
475
+ /** Prepared action and its curated route terms. */
476
+ type Parameters = prepareTransfer.Parameters & {
477
+ /** Executable action returned by the provider. */
478
+ action: Action.Action
479
+ }
480
+
481
+ /** Provider-specific constraints established by validation. */
482
+ type ReturnType = {
483
+ /** Exact native values independently validated against provider calldata. */
484
+ nativeValues?: readonly Action.NativeValue[] | undefined
485
+ }
486
+ }
487
+
448
488
  /** Contract of the provider `createDepositAddress` method. */
449
489
  export declare namespace createDepositAddress {
450
490
  /** Input passed to a provider provisioning one reusable deposit address. */
@@ -661,6 +701,10 @@ export type Provider<id extends string = string> = core_Provider.Provider<id, 'f
661
701
  input: prepareTransfer.Parameters,
662
702
  signal: AbortSignal,
663
703
  ): Promise<prepareTransfer.ReturnType>
704
+ /** Validates provider-specific action semantics before generic persistence checks. */
705
+ validateTransferAction?(
706
+ input: validateTransferAction.Parameters,
707
+ ): validateTransferAction.ReturnType
664
708
  /** Receives authenticated provider status events, when configured. */
665
709
  webhook?: Webhook | undefined
666
710
  }
@@ -930,6 +974,7 @@ export function getQuoteCandidates(options: getQuoteCandidates.Options) {
930
974
  .filter((entry) => provider === undefined || entry.provider.id === provider.id)
931
975
  .map((entry) =>
932
976
  createQuoteCandidate({
977
+ configuration: entry.configuration,
933
978
  destinationToken: entry.route.destination,
934
979
  provider: entry.provider,
935
980
  route: entry.route,
@@ -1102,20 +1147,17 @@ export async function prepareTransfer(
1102
1147
  candidates.map(async ({ candidate, provider }) => {
1103
1148
  const start = performance.now()
1104
1149
  try {
1150
+ const parameters = {
1151
+ candidate,
1152
+ method: options.method,
1153
+ mode: options.mode,
1154
+ recipient: options.recipient,
1155
+ sender: options.sender,
1156
+ slippageBps: options.slippageBps,
1157
+ }
1105
1158
  const parsed = schema.PrepareResult.safeParse(
1106
1159
  await withTimeout(
1107
- (signal) =>
1108
- provider.prepareTransfer(
1109
- {
1110
- candidate,
1111
- method: options.method,
1112
- mode: options.mode,
1113
- recipient: options.recipient,
1114
- sender: options.sender,
1115
- slippageBps: options.slippageBps,
1116
- },
1117
- signal,
1118
- ),
1160
+ (signal) => provider.prepareTransfer(parameters, signal),
1119
1161
  options.providerTimeoutMs ?? defaultPrepareTimeoutMs,
1120
1162
  ),
1121
1163
  )
@@ -1138,8 +1180,13 @@ export async function prepareTransfer(
1138
1180
  }
1139
1181
  if (result.action.type === 'evm:calls')
1140
1182
  try {
1183
+ const constraints = provider.validateTransferAction?.({
1184
+ ...parameters,
1185
+ action: result.action,
1186
+ })
1141
1187
  Action.validateEvmCalls({
1142
1188
  action: result.action,
1189
+ nativeValues: constraints?.nativeValues,
1143
1190
  sourceAmount: candidate.sourceAmount.amount,
1144
1191
  sourceTokenAddress: candidate.sourceToken.address,
1145
1192
  })
@@ -1253,7 +1300,14 @@ export function getDepositAddressCandidates(options: getDepositAddressCandidates
1253
1300
  const provider = options.providers.find((candidate) => candidate.id === entry.providerId)
1254
1301
  if (!provider || !canCreateDepositAddress(provider)) return []
1255
1302
  return [
1256
- { candidate: createDepositAddressCandidate({ provider, route: entry.route }), provider },
1303
+ {
1304
+ candidate: createDepositAddressCandidate({
1305
+ configuration: entry.configuration,
1306
+ provider,
1307
+ route: entry.route,
1308
+ }),
1309
+ provider,
1310
+ },
1257
1311
  ]
1258
1312
  })
1259
1313
  }
@@ -1286,6 +1340,9 @@ export function getPrepareCandidates(options: getPrepareCandidates.Options) {
1286
1340
  if (!amount.success) throw new InvalidAmountError()
1287
1341
  const sourceChain = resolveSourceChain(options.sourceChain, options.catalog)
1288
1342
  const destinationChainId = `eip155:${options.destinationChainId}`
1343
+ const selectedProvider = options.provider
1344
+ ? resolveProvider(options.provider, options.providers)
1345
+ : undefined
1289
1346
 
1290
1347
  return options.catalog.routes.flatMap((entry) => {
1291
1348
  if (entry.route.source.chain.id !== sourceChain.id) return []
@@ -1293,11 +1350,13 @@ export function getPrepareCandidates(options: getPrepareCandidates.Options) {
1293
1350
  if (!matchesToken(entry.route.source, options.sourceToken)) return []
1294
1351
  if (!matchesToken(entry.route.destination, options.destinationToken)) return []
1295
1352
  if (!entry.capabilities?.transfer?.modes.includes(options.mode)) return []
1296
- const provider = options.providers.find((candidate) => candidate.id === entry.providerId)
1297
- if (!provider || !canPrepareTransfer(provider)) return []
1353
+ const provider =
1354
+ selectedProvider ?? options.providers.find((candidate) => candidate.id === entry.providerId)
1355
+ if (!provider || provider.id !== entry.providerId || !canPrepareTransfer(provider)) return []
1298
1356
  return [
1299
1357
  {
1300
1358
  candidate: createQuoteCandidate({
1359
+ configuration: entry.configuration,
1301
1360
  destinationToken: entry.route.destination,
1302
1361
  provider,
1303
1362
  route: entry.route,
@@ -1327,6 +1386,8 @@ export declare namespace getPrepareCandidates {
1327
1386
  method: Transfer.Method
1328
1387
  /** Amount mode the caller selected. */
1329
1388
  mode: Transfer.Mode
1389
+ /** Funding provider ID selected by the caller. */
1390
+ provider?: string | undefined
1330
1391
  /** Funding providers considered by the request. */
1331
1392
  providers: readonly Provider[]
1332
1393
  /** Source amount in base units. */
@@ -1550,8 +1611,9 @@ function chainRef(chain: Chain): ChainRef {
1550
1611
  })
1551
1612
  }
1552
1613
 
1553
- function createDepositAddressCandidate(options: { provider: Provider; route: core_Route.Route }) {
1614
+ function createDepositAddressCandidate(options: createDepositAddressCandidate.Options) {
1554
1615
  return {
1616
+ ...(options.configuration ? { configuration: options.configuration } : {}),
1555
1617
  destinationChain: chainRef(options.route.destination.chain),
1556
1618
  destinationToken: tokenRef(options.route.destination),
1557
1619
  provider: schema.ProviderRef.parse(options.provider),
@@ -1561,14 +1623,17 @@ function createDepositAddressCandidate(options: { provider: Provider; route: cor
1561
1623
  } as const
1562
1624
  }
1563
1625
 
1564
- function createQuoteCandidate(options: {
1565
- destinationToken: Token
1566
- provider: Provider
1567
- route: core_Route.Route
1568
- sourceAmount: ReturnType<typeof resolveSourceAmount>
1569
- sourceToken: Token
1570
- }) {
1626
+ declare namespace createDepositAddressCandidate {
1627
+ type Options = {
1628
+ configuration?: core_Catalog.Configuration | undefined
1629
+ provider: Provider
1630
+ route: core_Route.Route
1631
+ }
1632
+ }
1633
+
1634
+ function createQuoteCandidate(options: createQuoteCandidate.Options) {
1571
1635
  return {
1636
+ ...(options.configuration ? { configuration: options.configuration } : {}),
1572
1637
  destinationChain: chainRef(options.destinationToken.chain),
1573
1638
  destinationToken: tokenRef(options.destinationToken),
1574
1639
  id: [
@@ -1586,6 +1651,17 @@ function createQuoteCandidate(options: {
1586
1651
  } as const
1587
1652
  }
1588
1653
 
1654
+ declare namespace createQuoteCandidate {
1655
+ type Options = {
1656
+ configuration?: core_Catalog.Configuration | undefined
1657
+ destinationToken: Token
1658
+ provider: Provider
1659
+ route: core_Route.Route
1660
+ sourceAmount: ReturnType<typeof resolveSourceAmount>
1661
+ sourceToken: Token
1662
+ }
1663
+ }
1664
+
1589
1665
  function normalizeInput(value: string) {
1590
1666
  return value.trim().toLowerCase()
1591
1667
  }
@@ -1785,7 +1861,7 @@ function resolveSourceChain(input: string, catalog: core_Catalog.Snapshot) {
1785
1861
 
1786
1862
  function getRoutes(catalog: core_Catalog.Snapshot, providers: readonly Provider[]) {
1787
1863
  return providers.flatMap((provider) =>
1788
- (catalog.routesByProvider.get(provider.id) ?? []).map((route) => ({ provider, route })),
1864
+ (catalog.routesByProvider.get(provider.id) ?? []).map((entry) => ({ ...entry, provider })),
1789
1865
  )
1790
1866
  }
1791
1867