tapimo 0.5.3 → 0.7.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 (376) hide show
  1. package/dist/App.d.ts +15830 -7220
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +9 -1
  4. package/dist/App.js.map +1 -1
  5. package/dist/Scope.d.ts +4 -0
  6. package/dist/Scope.d.ts.map +1 -1
  7. package/dist/Scope.js +5 -0
  8. package/dist/Scope.js.map +1 -1
  9. package/dist/admin/App.d.ts +1011 -412
  10. package/dist/admin/App.d.ts.map +1 -1
  11. package/dist/admin/App.js +4 -0
  12. package/dist/admin/App.js.map +1 -1
  13. package/dist/admin/apps/api-keys.d.ts +2 -1
  14. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  15. package/dist/admin/apps/early-access.d.ts +148 -0
  16. package/dist/admin/apps/early-access.d.ts.map +1 -0
  17. package/dist/admin/apps/early-access.js +133 -0
  18. package/dist/admin/apps/early-access.js.map +1 -0
  19. package/dist/admin/apps/organizations.d.ts +124 -1
  20. package/dist/admin/apps/organizations.d.ts.map +1 -1
  21. package/dist/admin/apps/organizations.js +97 -6
  22. package/dist/admin/apps/organizations.js.map +1 -1
  23. package/dist/admin/apps/verified-tokens.d.ts +526 -1
  24. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  25. package/dist/admin/apps/verified-tokens.js +214 -1
  26. package/dist/admin/apps/verified-tokens.js.map +1 -1
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.d.ts.map +1 -1
  29. package/dist/admin/ui.generated.js +95 -75
  30. package/dist/admin/ui.generated.js.map +1 -1
  31. package/dist/analytics/Analytics.d.ts.map +1 -1
  32. package/dist/analytics/Analytics.js +20 -0
  33. package/dist/analytics/Analytics.js.map +1 -1
  34. package/dist/analytics/tables/requestEvents.d.ts +18 -0
  35. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  36. package/dist/analytics/tables/requestEvents.js +36 -7
  37. package/dist/analytics/tables/requestEvents.js.map +1 -1
  38. package/dist/apps/data/App.d.ts +6260 -4924
  39. package/dist/apps/data/App.d.ts.map +1 -1
  40. package/dist/apps/data/App.js +11 -6
  41. package/dist/apps/data/App.js.map +1 -1
  42. package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
  43. package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
  44. package/dist/apps/data/FundingQuoteProviders.js +194 -16
  45. package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
  46. package/dist/apps/data/FxOracle.d.ts +71 -0
  47. package/dist/apps/data/FxOracle.d.ts.map +1 -0
  48. package/dist/apps/data/FxOracle.js +97 -0
  49. package/dist/apps/data/FxOracle.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +1 -0
  51. package/dist/apps/data/index.d.ts.map +1 -1
  52. package/dist/apps/data/index.js +1 -0
  53. package/dist/apps/data/index.js.map +1 -1
  54. package/dist/apps/data/routes/activities.d.ts +3599 -1382
  55. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  56. package/dist/apps/data/routes/activities.js +250 -88
  57. package/dist/apps/data/routes/activities.js.map +1 -1
  58. package/dist/apps/data/routes/addresses.d.ts +872 -251
  59. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  60. package/dist/apps/data/routes/addresses.js +11 -9
  61. package/dist/apps/data/routes/addresses.js.map +1 -1
  62. package/dist/apps/data/routes/balances.d.ts +77 -26
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  64. package/dist/apps/data/routes/balances.js +88 -45
  65. package/dist/apps/data/routes/balances.js.map +1 -1
  66. package/dist/apps/data/routes/blocks.d.ts +39 -39
  67. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  68. package/dist/apps/data/routes/exchanges.d.ts +856 -105
  69. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  70. package/dist/apps/data/routes/exchanges.js +518 -76
  71. package/dist/apps/data/routes/exchanges.js.map +1 -1
  72. package/dist/apps/data/routes/fee-amm.d.ts +81 -67
  73. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  74. package/dist/apps/data/routes/fee-amm.js +76 -91
  75. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  76. package/dist/apps/data/routes/funding.d.ts +80 -36
  77. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  78. package/dist/apps/data/routes/funding.js +65 -31
  79. package/dist/apps/data/routes/funding.js.map +1 -1
  80. package/dist/apps/data/routes/receipts.d.ts +392 -315
  81. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  82. package/dist/apps/data/routes/receipts.js +152 -77
  83. package/dist/apps/data/routes/receipts.js.map +1 -1
  84. package/dist/apps/data/routes/tokens.d.ts +167 -174
  85. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  86. package/dist/apps/data/routes/tokens.js +15 -13
  87. package/dist/apps/data/routes/tokens.js.map +1 -1
  88. package/dist/apps/data/routes/transactions.d.ts +277 -536
  89. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  90. package/dist/apps/data/routes/transactions.js +96 -77
  91. package/dist/apps/data/routes/transactions.js.map +1 -1
  92. package/dist/apps/data/routes/transfers.d.ts +157 -81
  93. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  94. package/dist/apps/data/routes/transfers.js +272 -130
  95. package/dist/apps/data/routes/transfers.js.map +1 -1
  96. package/dist/apps/data/routes/valuation.d.ts +307 -0
  97. package/dist/apps/data/routes/valuation.d.ts.map +1 -0
  98. package/dist/apps/data/routes/valuation.js +292 -0
  99. package/dist/apps/data/routes/valuation.js.map +1 -0
  100. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  101. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  102. package/dist/apps/data/routes/verified-tokens.js +7 -5
  103. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  104. package/dist/apps/data/routes/webhooks.d.ts +103 -123
  105. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  106. package/dist/apps/data/routes/webhooks.js +124 -25
  107. package/dist/apps/data/routes/webhooks.js.map +1 -1
  108. package/dist/apps/index.d.ts +2 -1
  109. package/dist/apps/index.d.ts.map +1 -1
  110. package/dist/apps/index.js +2 -1
  111. package/dist/apps/index.js.map +1 -1
  112. package/dist/apps/management/App.d.ts +8554 -1692
  113. package/dist/apps/management/App.d.ts.map +1 -1
  114. package/dist/apps/management/App.js +12 -1
  115. package/dist/apps/management/App.js.map +1 -1
  116. package/dist/apps/management/routes/api-keys.d.ts +7 -0
  117. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  118. package/dist/apps/management/routes/api-keys.js +17 -3
  119. package/dist/apps/management/routes/api-keys.js.map +1 -1
  120. package/dist/apps/management/routes/billing.d.ts +157 -162
  121. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  122. package/dist/apps/management/routes/billing.js +31 -23
  123. package/dist/apps/management/routes/billing.js.map +1 -1
  124. package/dist/apps/management/routes/faucet.d.ts +232 -0
  125. package/dist/apps/management/routes/faucet.d.ts.map +1 -0
  126. package/dist/apps/management/routes/faucet.js +154 -0
  127. package/dist/apps/management/routes/faucet.js.map +1 -0
  128. package/dist/apps/management/routes/invitations.d.ts +60 -60
  129. package/dist/apps/management/routes/invite-links.d.ts +49 -20
  130. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  131. package/dist/apps/management/routes/invite-links.js +26 -1
  132. package/dist/apps/management/routes/invite-links.js.map +1 -1
  133. package/dist/apps/management/routes/me.d.ts +6 -6
  134. package/dist/apps/management/routes/members.d.ts +6 -6
  135. package/dist/apps/management/routes/orgs.d.ts +42 -42
  136. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  137. package/dist/apps/management/routes/orgs.js +5 -0
  138. package/dist/apps/management/routes/orgs.js.map +1 -1
  139. package/dist/apps/management/routes/projects.d.ts +44 -44
  140. package/dist/apps/management/routes/usage.d.ts +3 -0
  141. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  142. package/dist/apps/management/routes/usage.js +4 -0
  143. package/dist/apps/management/routes/usage.js.map +1 -1
  144. package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
  145. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
  146. package/dist/apps/management/routes/verified-token-requests.js +271 -0
  147. package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
  148. package/dist/apps/management/routes/webhooks.d.ts +6977 -0
  149. package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
  150. package/dist/apps/management/routes/webhooks.js +573 -0
  151. package/dist/apps/management/routes/webhooks.js.map +1 -0
  152. package/dist/apps/mpp/App.d.ts +363 -0
  153. package/dist/apps/mpp/App.d.ts.map +1 -0
  154. package/dist/apps/mpp/App.js +72 -0
  155. package/dist/apps/mpp/App.js.map +1 -0
  156. package/dist/apps/mpp/Mpp.d.ts +178 -0
  157. package/dist/apps/mpp/Mpp.d.ts.map +1 -0
  158. package/dist/apps/mpp/Mpp.js +183 -0
  159. package/dist/apps/mpp/Mpp.js.map +1 -0
  160. package/dist/apps/mpp/index.d.ts +3 -0
  161. package/dist/apps/mpp/index.d.ts.map +1 -0
  162. package/dist/apps/mpp/index.js +3 -0
  163. package/dist/apps/mpp/index.js.map +1 -0
  164. package/dist/apps/relay/App.d.ts.map +1 -1
  165. package/dist/apps/relay/App.js +56 -9
  166. package/dist/apps/relay/App.js.map +1 -1
  167. package/dist/db/Db.d.ts +6 -0
  168. package/dist/db/Db.d.ts.map +1 -1
  169. package/dist/db/Db.js +110 -0
  170. package/dist/db/Db.js.map +1 -1
  171. package/dist/db/Schema.d.ts +53 -0
  172. package/dist/db/Schema.d.ts.map +1 -1
  173. package/dist/db/Schema.js +56 -0
  174. package/dist/db/Schema.js.map +1 -1
  175. package/dist/db/tables/earlyAccess.d.ts +50 -0
  176. package/dist/db/tables/earlyAccess.d.ts.map +1 -0
  177. package/dist/db/tables/earlyAccess.js +63 -0
  178. package/dist/db/tables/earlyAccess.js.map +1 -0
  179. package/dist/db/tables/enabledBillingSources.d.ts +73 -0
  180. package/dist/db/tables/enabledBillingSources.d.ts.map +1 -0
  181. package/dist/db/tables/enabledBillingSources.js +69 -0
  182. package/dist/db/tables/enabledBillingSources.js.map +1 -0
  183. package/dist/db/tables/invitations.d.ts.map +1 -1
  184. package/dist/db/tables/invitations.js +3 -0
  185. package/dist/db/tables/invitations.js.map +1 -1
  186. package/dist/db/tables/inviteLinks.d.ts +10 -2
  187. package/dist/db/tables/inviteLinks.d.ts.map +1 -1
  188. package/dist/db/tables/inviteLinks.js +10 -1
  189. package/dist/db/tables/inviteLinks.js.map +1 -1
  190. package/dist/db/tables/organizations.d.ts +5 -2
  191. package/dist/db/tables/organizations.d.ts.map +1 -1
  192. package/dist/db/tables/organizations.js +13 -2
  193. package/dist/db/tables/organizations.js.map +1 -1
  194. package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
  195. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  196. package/dist/db/tables/sponsoredTransactions.js +2 -0
  197. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  198. package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
  199. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
  200. package/dist/db/tables/verifiedTokenRequests.js +120 -0
  201. package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
  202. package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
  203. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  204. package/dist/db/tables/webhookSubscriptions.js +16 -0
  205. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  206. package/dist/handlers/internal/utils.d.ts +1 -16
  207. package/dist/handlers/internal/utils.d.ts.map +1 -1
  208. package/dist/handlers/internal/utils.js +17 -6
  209. package/dist/handlers/internal/utils.js.map +1 -1
  210. package/dist/handlers/relay.d.ts.map +1 -1
  211. package/dist/handlers/relay.js +37 -5
  212. package/dist/handlers/relay.js.map +1 -1
  213. package/dist/internal/Auth.d.ts +11 -2
  214. package/dist/internal/Auth.d.ts.map +1 -1
  215. package/dist/internal/Auth.js +14 -47
  216. package/dist/internal/Auth.js.map +1 -1
  217. package/dist/internal/FundingQuotes.d.ts +147 -47
  218. package/dist/internal/FundingQuotes.d.ts.map +1 -1
  219. package/dist/internal/FundingQuotes.js +119 -33
  220. package/dist/internal/FundingQuotes.js.map +1 -1
  221. package/dist/internal/Log.d.ts +37 -5
  222. package/dist/internal/Log.d.ts.map +1 -1
  223. package/dist/internal/Log.js +52 -3
  224. package/dist/internal/Log.js.map +1 -1
  225. package/dist/internal/MetricSink.d.ts.map +1 -1
  226. package/dist/internal/MetricSink.js +24 -0
  227. package/dist/internal/MetricSink.js.map +1 -1
  228. package/dist/internal/OpenApi.d.ts +2 -2
  229. package/dist/internal/OpenApi.d.ts.map +1 -1
  230. package/dist/internal/OpenApi.js +3 -0
  231. package/dist/internal/OpenApi.js.map +1 -1
  232. package/dist/internal/Response.d.ts +2 -2
  233. package/dist/internal/Response.d.ts.map +1 -1
  234. package/dist/internal/Response.js +12 -4
  235. package/dist/internal/Response.js.map +1 -1
  236. package/dist/internal/Schema.d.ts +14 -5
  237. package/dist/internal/Schema.d.ts.map +1 -1
  238. package/dist/internal/Schema.js +23 -5
  239. package/dist/internal/Schema.js.map +1 -1
  240. package/dist/internal/Value.d.ts +18 -0
  241. package/dist/internal/Value.d.ts.map +1 -1
  242. package/dist/internal/Value.js +11 -1
  243. package/dist/internal/Value.js.map +1 -1
  244. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  245. package/dist/internal/VerifiedTokens.js +10 -1
  246. package/dist/internal/VerifiedTokens.js.map +1 -1
  247. package/dist/internal/Webhooks.d.ts +24 -3
  248. package/dist/internal/Webhooks.d.ts.map +1 -1
  249. package/dist/internal/Webhooks.js +34 -8
  250. package/dist/internal/Webhooks.js.map +1 -1
  251. package/package.json +7 -2
  252. package/src/App.test.ts +9 -4
  253. package/src/App.ts +23 -3
  254. package/src/Client.test-d.ts +733 -20
  255. package/src/Scope.ts +5 -0
  256. package/src/admin/App.test.ts +4 -0
  257. package/src/admin/App.ts +4 -0
  258. package/src/admin/apps/early-access.test.ts +125 -0
  259. package/src/admin/apps/early-access.ts +176 -0
  260. package/src/admin/apps/organizations.test.ts +86 -2
  261. package/src/admin/apps/organizations.ts +155 -31
  262. package/src/admin/apps/scopes.test.ts +5 -0
  263. package/src/admin/apps/verified-tokens.test.ts +201 -0
  264. package/src/admin/apps/verified-tokens.ts +532 -286
  265. package/src/admin/ui/plugin.ts +2 -1
  266. package/src/admin/ui/src/lib/early-access.ts +63 -0
  267. package/src/admin/ui/src/lib/organizations.test.ts +81 -1
  268. package/src/admin/ui/src/lib/organizations.ts +92 -0
  269. package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
  270. package/src/admin/ui/src/routeTree.gen.ts +33 -2
  271. package/src/admin/ui/src/routes/__root.tsx +2 -1
  272. package/src/admin/ui/src/routes/api-keys.tsx +1 -1
  273. package/src/admin/ui/src/routes/early-access.tsx +162 -0
  274. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +103 -0
  275. package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
  276. package/src/admin/ui.generated.ts +95 -94
  277. package/src/analytics/Analytics.test.ts +83 -0
  278. package/src/analytics/Analytics.ts +20 -0
  279. package/src/analytics/tables/requestEvents.ts +60 -7
  280. package/src/apps/composition.test.ts +11 -2
  281. package/src/apps/data/App.test.ts +1 -1
  282. package/src/apps/data/App.ts +22 -14
  283. package/src/apps/data/FundingQuoteProviders.test.ts +297 -4
  284. package/src/apps/data/FundingQuoteProviders.ts +255 -29
  285. package/src/apps/data/FxOracle.test.ts +118 -0
  286. package/src/apps/data/FxOracle.ts +153 -0
  287. package/src/apps/data/index.ts +1 -0
  288. package/src/apps/data/routes/activities.test.ts +177 -3
  289. package/src/apps/data/routes/activities.ts +441 -132
  290. package/src/apps/data/routes/addresses.ts +19 -9
  291. package/src/apps/data/routes/balances.test.ts +148 -11
  292. package/src/apps/data/routes/balances.ts +140 -51
  293. package/src/apps/data/routes/exchanges.test.ts +544 -9
  294. package/src/apps/data/routes/exchanges.ts +690 -103
  295. package/src/apps/data/routes/fee-amm.test.ts +47 -23
  296. package/src/apps/data/routes/fee-amm.ts +98 -119
  297. package/src/apps/data/routes/funding.test.ts +113 -8
  298. package/src/apps/data/routes/funding.ts +77 -51
  299. package/src/apps/data/routes/receipts.test.ts +129 -23
  300. package/src/apps/data/routes/receipts.ts +205 -100
  301. package/src/apps/data/routes/tokens.test.ts +43 -0
  302. package/src/apps/data/routes/tokens.ts +28 -13
  303. package/src/apps/data/routes/transactions.test.ts +72 -19
  304. package/src/apps/data/routes/transactions.ts +162 -92
  305. package/src/apps/data/routes/transfers.test.ts +341 -31
  306. package/src/apps/data/routes/transfers.ts +358 -158
  307. package/src/apps/data/routes/valuation.test.ts +437 -0
  308. package/src/apps/data/routes/valuation.ts +423 -0
  309. package/src/apps/data/routes/verified-tokens.ts +14 -2
  310. package/src/apps/data/routes/webhooks.test.ts +56 -8
  311. package/src/apps/data/routes/webhooks.ts +144 -27
  312. package/src/apps/index.ts +2 -1
  313. package/src/apps/management/App.ts +13 -0
  314. package/src/apps/management/routes/api-keys.test.ts +14 -0
  315. package/src/apps/management/routes/api-keys.ts +27 -3
  316. package/src/apps/management/routes/billing.test.ts +152 -20
  317. package/src/apps/management/routes/billing.ts +34 -18
  318. package/src/apps/management/routes/faucet.test.ts +87 -0
  319. package/src/apps/management/routes/faucet.ts +201 -0
  320. package/src/apps/management/routes/invite-links.test.ts +117 -0
  321. package/src/apps/management/routes/invite-links.ts +43 -1
  322. package/src/apps/management/routes/me.test.ts +9 -99
  323. package/src/apps/management/routes/orgs.test.ts +45 -2
  324. package/src/apps/management/routes/orgs.ts +6 -0
  325. package/src/apps/management/routes/scopes.test.ts +1 -0
  326. package/src/apps/management/routes/usage.test.ts +6 -0
  327. package/src/apps/management/routes/usage.ts +7 -0
  328. package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
  329. package/src/apps/management/routes/verified-token-requests.ts +397 -0
  330. package/src/apps/management/routes/webhooks.test.ts +426 -0
  331. package/src/apps/management/routes/webhooks.ts +672 -0
  332. package/src/apps/mpp/App.ts +86 -0
  333. package/src/apps/mpp/Mpp.test.ts +193 -0
  334. package/src/apps/mpp/Mpp.ts +353 -0
  335. package/src/apps/mpp/index.ts +2 -0
  336. package/src/apps/mpp/internal/Adapter.ts +11 -0
  337. package/src/apps/mpp/internal/Error.ts +9 -0
  338. package/src/apps/mpp/internal/Idempotency.ts +7 -0
  339. package/src/apps/mpp/internal/Screening.ts +10 -0
  340. package/src/apps/relay/App.test.ts +88 -6
  341. package/src/apps/relay/App.ts +61 -9
  342. package/src/db/Db.test.ts +19 -0
  343. package/src/db/Db.ts +125 -0
  344. package/src/db/Schema.ts +68 -0
  345. package/src/db/tables/earlyAccess.ts +86 -0
  346. package/src/db/tables/enabledBillingSources.test.ts +303 -0
  347. package/src/db/tables/enabledBillingSources.ts +118 -0
  348. package/src/db/tables/invitations.ts +3 -0
  349. package/src/db/tables/inviteLinks.ts +22 -3
  350. package/src/db/tables/organizations.test.ts +103 -0
  351. package/src/db/tables/organizations.ts +18 -2
  352. package/src/db/tables/sponsoredTransactions.ts +4 -0
  353. package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
  354. package/src/db/tables/verifiedTokenRequests.ts +182 -0
  355. package/src/db/tables/webhookSubscriptions.ts +31 -0
  356. package/src/handlers/internal/utils.ts +22 -6
  357. package/src/handlers/relay.errors.test.ts +153 -0
  358. package/src/handlers/relay.ts +42 -7
  359. package/src/internal/Auth.test.ts +3 -3
  360. package/src/internal/Auth.ts +15 -47
  361. package/src/internal/FundingQuotes.test.ts +161 -6
  362. package/src/internal/FundingQuotes.ts +141 -39
  363. package/src/internal/Log.test-d.ts +21 -0
  364. package/src/internal/Log.test.ts +141 -0
  365. package/src/internal/Log.ts +93 -6
  366. package/src/internal/MetricSink.test.ts +215 -0
  367. package/src/internal/MetricSink.ts +24 -0
  368. package/src/internal/OpenApi.ts +3 -0
  369. package/src/internal/Response.test.ts +28 -0
  370. package/src/internal/Response.ts +12 -4
  371. package/src/internal/Schema.ts +50 -5
  372. package/src/internal/Value.test.ts +20 -0
  373. package/src/internal/Value.ts +24 -1
  374. package/src/internal/VerifiedTokens.ts +9 -1
  375. package/src/internal/Webhooks.test.ts +140 -0
  376. package/src/internal/Webhooks.ts +53 -9
@@ -38,6 +38,15 @@ describe('FundingQuoteProviders', () => {
38
38
  })
39
39
  })
40
40
 
41
+ test('configures Symbiosis only when its quote user is present', () => {
42
+ expect(FundingQuoteProviders.configureSymbiosis()).toBeUndefined()
43
+ expect(
44
+ FundingQuoteProviders.configureSymbiosis({
45
+ userAddress: '0x1111111111111111111111111111111111111111',
46
+ }),
47
+ ).toEqual({ userAddress: '0x1111111111111111111111111111111111111111' })
48
+ })
49
+
41
50
  test('maps successful Across quotes to available quote probes', async () => {
42
51
  const requests: RecordedRequest[] = []
43
52
  const candidate = quoteCandidate('across')
@@ -75,7 +84,6 @@ describe('FundingQuoteProviders', () => {
75
84
  expiresAt: '2026-01-01T00:01:00.000Z',
76
85
  minimumOutputAmount: '988000',
77
86
  outputAmount: '990000',
78
- outputAmountFormatted: '0.99',
79
87
  quality: {
80
88
  estimatedSeconds: 2,
81
89
  liquiditySource: 'providerQuote',
@@ -176,7 +184,6 @@ describe('FundingQuoteProviders', () => {
176
184
  expect(result).toMatchObject({
177
185
  minimumOutputAmount: '980000',
178
186
  outputAmount: '990000',
179
- outputAmountFormatted: '0.99',
180
187
  quality: {
181
188
  estimatedSeconds: 15,
182
189
  liquiditySource: 'providerQuote',
@@ -221,7 +228,6 @@ describe('FundingQuoteProviders', () => {
221
228
  expect(result).toEqual({
222
229
  minimumOutputAmount: '989622',
223
230
  outputAmount: '999620',
224
- outputAmountFormatted: '0.99962',
225
231
  quality: {
226
232
  estimatedSeconds: 10,
227
233
  liquiditySource: 'providerQuote',
@@ -262,6 +268,179 @@ describe('FundingQuoteProviders', () => {
262
268
  })
263
269
  })
264
270
 
271
+ test('maps successful Symbiosis quotes to available quote probes', async () => {
272
+ const requests: RecordedRequest[] = []
273
+ const candidate = quoteCandidate('symbiosis')
274
+ const fetch = recordingFetch(requests, async () => jsonResponse(symbiosisQuote(candidate)))
275
+ const adapter = FundingQuoteProviders.symbiosis({
276
+ baseUrl: 'https://symbiosis.test/crosschain/',
277
+ fetch,
278
+ now,
279
+ userAddress: '0x1111111111111111111111111111111111111111',
280
+ })
281
+
282
+ const result = await adapter.probeQuote(probeInput(candidate), new AbortController().signal)
283
+
284
+ expect(requests).toHaveLength(1)
285
+ expect(requests[0]?.url.pathname).toBe('/crosschain/v2/quote')
286
+ expect(new Headers(requests[0]?.init?.headers).get('x-partner-id')).toBe('tempo')
287
+ expect(jsonRequestBody(requests[0])).toEqual({
288
+ from: '0x1111111111111111111111111111111111111111',
289
+ slippage: 100,
290
+ to: '0x1111111111111111111111111111111111111111',
291
+ tokenAmountIn: {
292
+ address: candidate.sourceToken.address,
293
+ amount: '1000000',
294
+ chainId: 8453,
295
+ decimals: 6,
296
+ symbol: 'USDC',
297
+ },
298
+ tokenOut: {
299
+ address: candidate.destinationToken.address,
300
+ chainId: 4217,
301
+ decimals: 6,
302
+ symbol: 'USDC.e',
303
+ },
304
+ })
305
+ expect(result).toEqual({
306
+ minimumOutputAmount: '979000',
307
+ outputAmount: '989000',
308
+ quality: {
309
+ estimatedSeconds: 18,
310
+ liquiditySource: 'providerQuote',
311
+ sourceDetail: 'symbiosis:quote-v2',
312
+ tier: 'liquid',
313
+ },
314
+ sampledAt: '2026-01-01T00:00:00.000Z',
315
+ status: 'available',
316
+ })
317
+ })
318
+
319
+ test('maps Tron identifiers into Symbiosis quote requests', async () => {
320
+ const requests: RecordedRequest[] = []
321
+ const candidate = quoteCandidate('symbiosis', {
322
+ destinationToken: 'USDT0',
323
+ sourceChain: 'tron',
324
+ sourceToken: 'USDT',
325
+ })
326
+ const fetch = recordingFetch(requests, async () => jsonResponse(symbiosisQuote(candidate)))
327
+ const adapter = FundingQuoteProviders.symbiosis({
328
+ fetch,
329
+ now,
330
+ userAddress: '0x1111111111111111111111111111111111111111',
331
+ })
332
+
333
+ await adapter.probeQuote(probeInput(candidate), new AbortController().signal)
334
+
335
+ expect(jsonRequestBody(requests[0])).toMatchObject({
336
+ tokenAmountIn: {
337
+ address: '0xa614f803b6fd780986a42c78ec9c7f77e6ded13c',
338
+ chainId: 728126428,
339
+ decimals: 6,
340
+ symbol: 'USDT',
341
+ },
342
+ tokenOut: {
343
+ address: candidate.destinationToken.address,
344
+ chainId: 4217,
345
+ decimals: 6,
346
+ symbol: 'USDT0',
347
+ },
348
+ })
349
+ })
350
+
351
+ test('rejects Symbiosis responses without route identity fields', async () => {
352
+ const candidate = quoteCandidate('symbiosis')
353
+ const quote = symbiosisQuote(candidate)
354
+ const response = {
355
+ tokenAmountOut: quote.tokenAmountOut,
356
+ tokenAmountOutMin: quote.tokenAmountOutMin,
357
+ }
358
+ const adapter = FundingQuoteProviders.symbiosis({
359
+ fetch: recordingFetch([], async () => jsonResponse(response)),
360
+ now,
361
+ userAddress: '0x1111111111111111111111111111111111111111',
362
+ })
363
+
364
+ await expect(
365
+ adapter.probeQuote(probeInput(candidate), new AbortController().signal),
366
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingQuoteProviders.ProviderPayloadError]`)
367
+ })
368
+
369
+ test('enforces the Symbiosis provider quota before fetching', async () => {
370
+ const requests: RecordedRequest[] = []
371
+ const candidate = quoteCandidate('symbiosis')
372
+ const adapter = FundingQuoteProviders.symbiosis({
373
+ fetch: recordingFetch(requests, async () => jsonResponse(symbiosisQuote(candidate))),
374
+ now,
375
+ userAddress: '0x1111111111111111111111111111111111111111',
376
+ })
377
+
378
+ await Promise.all(
379
+ Array.from({ length: 4 }, () =>
380
+ adapter.probeQuote(probeInput(candidate), new AbortController().signal),
381
+ ),
382
+ )
383
+ const cause = await adapter
384
+ .probeQuote(probeInput(candidate), new AbortController().signal)
385
+ .catch((error: unknown) => error)
386
+
387
+ expect(requests).toHaveLength(4)
388
+ expect(cause).toMatchObject({
389
+ name: 'FundingQuoteProviders.ProviderRateLimitError',
390
+ })
391
+ expect(FundingQuoteProviders.providerFailure({ cause, provider: 'symbiosis' })).toEqual({
392
+ failure: 'rate_limit',
393
+ id: 'symbiosis',
394
+ operation: 'v2/quote',
395
+ })
396
+ })
397
+
398
+ test('maps unavailable Symbiosis routes to unavailable quote probes', async () => {
399
+ const candidate = quoteCandidate('symbiosis')
400
+ const adapter = FundingQuoteProviders.symbiosis({
401
+ fetch: recordingFetch([], async () => jsonResponse({ code: 'NO_ROUTE' }, 400)),
402
+ now,
403
+ userAddress: '0x1111111111111111111111111111111111111111',
404
+ })
405
+
406
+ await expect(
407
+ adapter.probeQuote(probeInput(candidate), new AbortController().signal),
408
+ ).resolves.toMatchObject({
409
+ quality: {
410
+ sourceDetail: 'symbiosis:quote-v2:NO_ROUTE',
411
+ tier: 'unavailable',
412
+ },
413
+ status: 'unavailable',
414
+ })
415
+ })
416
+
417
+ test('maps Symbiosis fee-floor errors to unavailable quote probes', async () => {
418
+ const candidate = quoteCandidate('symbiosis')
419
+ const adapter = FundingQuoteProviders.symbiosis({
420
+ fetch: recordingFetch([], async () =>
421
+ jsonResponse({ code: 0, message: 'Amount is too low to cover fees' }, 400),
422
+ ),
423
+ now,
424
+ userAddress: '0x1111111111111111111111111111111111111111',
425
+ })
426
+
427
+ await expect(
428
+ adapter.probeQuote(probeInput(candidate), new AbortController().signal),
429
+ ).resolves.toMatchObject({
430
+ quality: {
431
+ sourceDetail: 'symbiosis:quote-v2:AMOUNT_TOO_LOW',
432
+ tier: 'unavailable',
433
+ },
434
+ status: 'unavailable',
435
+ })
436
+ })
437
+
438
+ test('rejects invalid Symbiosis configuration', () => {
439
+ expect(() =>
440
+ FundingQuoteProviders.symbiosis({ userAddress: 'invalid' }),
441
+ ).toThrowErrorMatchingInlineSnapshot(`[FundingQuoteProviders.ProviderConfigurationError]`)
442
+ })
443
+
265
444
  test('maps successful Rhino quotes to available quote probes', async () => {
266
445
  const requests: RecordedRequest[] = []
267
446
  const candidate = quoteCandidate('rhino')
@@ -297,7 +476,6 @@ describe('FundingQuoteProviders', () => {
297
476
  })
298
477
  expect(result).toEqual({
299
478
  outputAmount: '983000',
300
- outputAmountFormatted: '0.983',
301
479
  quality: {
302
480
  estimatedSeconds: 2,
303
481
  liquiditySource: 'providerQuote',
@@ -585,6 +763,73 @@ describe('FundingQuoteProviders', () => {
585
763
  ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingQuoteProviders.ProviderPayloadError]`)
586
764
  })
587
765
 
766
+ const invalidSymbiosisQuotes = [
767
+ [
768
+ 'unsupported route kinds',
769
+ (body: ReturnType<typeof symbiosisQuote>) => (body.kind = 'onchain-swap' as never),
770
+ ],
771
+ [
772
+ 'mismatched execution types',
773
+ (body: ReturnType<typeof symbiosisQuote>) => (body.type = 'tron'),
774
+ ],
775
+ [
776
+ 'mismatched transaction chains',
777
+ (body: ReturnType<typeof symbiosisQuote>) => (body.tx.chainId = 1),
778
+ ],
779
+ ['empty routes', (body: ReturnType<typeof symbiosisQuote>) => (body.routes = [])],
780
+ [
781
+ 'mismatched source token addresses',
782
+ (body: ReturnType<typeof symbiosisQuote>) =>
783
+ (body.routes[0]!.tokens[0]!.address = '0xfde4c96c8593536e31f229ea8f37b2ada2699bb2'),
784
+ ],
785
+ [
786
+ 'mismatched source chains',
787
+ (body: ReturnType<typeof symbiosisQuote>) => (body.routes[0]!.tokens[0]!.chainId = 1),
788
+ ],
789
+ [
790
+ 'mismatched route destination tokens',
791
+ (body: ReturnType<typeof symbiosisQuote>) =>
792
+ (body.routes[0]!.tokens[1]!.address = '0x20c00000000000000000000014f22ca97301eb73'),
793
+ ],
794
+ [
795
+ 'mismatched output token addresses',
796
+ (body: ReturnType<typeof symbiosisQuote>) =>
797
+ (body.tokenAmountOut.address = '0x20c00000000000000000000014f22ca97301eb73'),
798
+ ],
799
+ [
800
+ 'mismatched minimum output chains',
801
+ (body: ReturnType<typeof symbiosisQuote>) => (body.tokenAmountOutMin.chainId = 1),
802
+ ],
803
+ [
804
+ 'mismatched output decimals',
805
+ (body: ReturnType<typeof symbiosisQuote>) => (body.tokenAmountOut.decimals = 18 as never),
806
+ ],
807
+ [
808
+ 'zero output amounts',
809
+ (body: ReturnType<typeof symbiosisQuote>) => (body.tokenAmountOut.amount = '0'),
810
+ ],
811
+ [
812
+ 'invalid output bounds',
813
+ (body: ReturnType<typeof symbiosisQuote>) => (body.tokenAmountOutMin.amount = '990000'),
814
+ ],
815
+ ] as const
816
+
817
+ for (const [name, mutate] of invalidSymbiosisQuotes)
818
+ test(`rejects Symbiosis quotes with ${name}`, async () => {
819
+ const candidate = quoteCandidate('symbiosis')
820
+ const body = symbiosisQuote(candidate)
821
+ mutate(body)
822
+ const adapter = FundingQuoteProviders.symbiosis({
823
+ fetch: recordingFetch([], async () => jsonResponse(body)),
824
+ now,
825
+ userAddress: '0x1111111111111111111111111111111111111111',
826
+ })
827
+
828
+ await expect(
829
+ adapter.probeQuote(probeInput(candidate), new AbortController().signal),
830
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`[FundingQuoteProviders.ProviderPayloadError]`)
831
+ })
832
+
588
833
  test('returns bounded Across failure diagnostics', async () => {
589
834
  const candidate = quoteCandidate('across')
590
835
  const adapter = FundingQuoteProviders.across({
@@ -634,6 +879,19 @@ describe('FundingQuoteProviders', () => {
634
879
  operation: 'v2/route',
635
880
  })
636
881
  })
882
+
883
+ test('returns bounded Symbiosis failure diagnostics', () => {
884
+ expect(
885
+ FundingQuoteProviders.providerFailure({
886
+ cause: new TypeError('network failure'),
887
+ provider: 'symbiosis',
888
+ }),
889
+ ).toEqual({
890
+ failure: 'network',
891
+ id: 'symbiosis',
892
+ operation: 'v2/quote',
893
+ })
894
+ })
637
895
  })
638
896
 
639
897
  type RecordedRequest = {
@@ -711,6 +969,41 @@ function squidQuote(candidate: FundingQuotes.QuoteProbeInput['candidate']) {
711
969
  }
712
970
  }
713
971
 
972
+ function symbiosisQuote(candidate: FundingQuotes.QuoteProbeInput['candidate']) {
973
+ const source =
974
+ candidate.sourceChain.kind === 'tron'
975
+ ? {
976
+ address: '0xa614f803b6fd780986a42c78ec9c7f77e6ded13c',
977
+ chainId: 728126428,
978
+ decimals: candidate.sourceToken.decimals,
979
+ }
980
+ : {
981
+ address: candidate.sourceToken.address,
982
+ chainId: Number(candidate.sourceChain.id.replace('eip155:', '')),
983
+ decimals: candidate.sourceToken.decimals,
984
+ }
985
+ const destination = {
986
+ address: candidate.destinationToken.address,
987
+ chainId: 4217,
988
+ decimals: candidate.destinationToken.decimals,
989
+ }
990
+ return {
991
+ estimatedTime: 17.2,
992
+ kind: 'crosschain-swap' as const,
993
+ routes: [{ tokens: [source, destination] }],
994
+ tokenAmountOut: {
995
+ ...destination,
996
+ amount: '989000',
997
+ },
998
+ tokenAmountOutMin: {
999
+ ...destination,
1000
+ amount: '979000',
1001
+ },
1002
+ tx: { chainId: source.chainId },
1003
+ type: candidate.sourceChain.kind,
1004
+ }
1005
+ }
1006
+
714
1007
  function probeInput(
715
1008
  candidate: FundingQuotes.QuoteProbeInput['candidate'],
716
1009
  ): FundingQuotes.QuoteProbeInput {