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.
- package/dist/App.d.ts +15830 -7220
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +9 -1
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +4 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +1011 -412
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +4 -0
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +2 -1
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/early-access.d.ts +148 -0
- package/dist/admin/apps/early-access.d.ts.map +1 -0
- package/dist/admin/apps/early-access.js +133 -0
- package/dist/admin/apps/early-access.js.map +1 -0
- package/dist/admin/apps/organizations.d.ts +124 -1
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +97 -6
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +526 -1
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +214 -1
- package/dist/admin/apps/verified-tokens.js.map +1 -1
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +95 -75
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +20 -0
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +18 -0
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +36 -7
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/data/App.d.ts +6260 -4924
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +11 -6
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.js +194 -16
- package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +71 -0
- package/dist/apps/data/FxOracle.d.ts.map +1 -0
- package/dist/apps/data/FxOracle.js +97 -0
- package/dist/apps/data/FxOracle.js.map +1 -0
- package/dist/apps/data/index.d.ts +1 -0
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +1 -0
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +3599 -1382
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +250 -88
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +872 -251
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/addresses.js +11 -9
- package/dist/apps/data/routes/addresses.js.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +77 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +88 -45
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +39 -39
- package/dist/apps/data/routes/coingecko.d.ts +54 -54
- package/dist/apps/data/routes/exchanges.d.ts +856 -105
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +518 -76
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +81 -67
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +76 -91
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +80 -36
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +65 -31
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +392 -315
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +152 -77
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +167 -174
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +15 -13
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +277 -536
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +96 -77
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +157 -81
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +272 -130
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +307 -0
- package/dist/apps/data/routes/valuation.d.ts.map +1 -0
- package/dist/apps/data/routes/valuation.js +292 -0
- package/dist/apps/data/routes/valuation.js.map +1 -0
- package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +7 -5
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +103 -123
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +124 -25
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +8554 -1692
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +12 -1
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +7 -0
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +17 -3
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +157 -162
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +31 -23
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +232 -0
- package/dist/apps/management/routes/faucet.d.ts.map +1 -0
- package/dist/apps/management/routes/faucet.js +154 -0
- package/dist/apps/management/routes/faucet.js.map +1 -0
- package/dist/apps/management/routes/invitations.d.ts +60 -60
- package/dist/apps/management/routes/invite-links.d.ts +49 -20
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +26 -1
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +6 -6
- package/dist/apps/management/routes/orgs.d.ts +42 -42
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +5 -0
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +44 -44
- package/dist/apps/management/routes/usage.d.ts +3 -0
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +4 -0
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
- package/dist/apps/management/routes/verified-token-requests.js +271 -0
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
- package/dist/apps/management/routes/webhooks.d.ts +6977 -0
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
- package/dist/apps/management/routes/webhooks.js +573 -0
- package/dist/apps/management/routes/webhooks.js.map +1 -0
- package/dist/apps/mpp/App.d.ts +363 -0
- package/dist/apps/mpp/App.d.ts.map +1 -0
- package/dist/apps/mpp/App.js +72 -0
- package/dist/apps/mpp/App.js.map +1 -0
- package/dist/apps/mpp/Mpp.d.ts +178 -0
- package/dist/apps/mpp/Mpp.d.ts.map +1 -0
- package/dist/apps/mpp/Mpp.js +183 -0
- package/dist/apps/mpp/Mpp.js.map +1 -0
- package/dist/apps/mpp/index.d.ts +3 -0
- package/dist/apps/mpp/index.d.ts.map +1 -0
- package/dist/apps/mpp/index.js +3 -0
- package/dist/apps/mpp/index.js.map +1 -0
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +56 -9
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/db/Db.d.ts +6 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +110 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +53 -0
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +56 -0
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earlyAccess.d.ts +50 -0
- package/dist/db/tables/earlyAccess.d.ts.map +1 -0
- package/dist/db/tables/earlyAccess.js +63 -0
- package/dist/db/tables/earlyAccess.js.map +1 -0
- package/dist/db/tables/enabledBillingSources.d.ts +73 -0
- package/dist/db/tables/enabledBillingSources.d.ts.map +1 -0
- package/dist/db/tables/enabledBillingSources.js +69 -0
- package/dist/db/tables/enabledBillingSources.js.map +1 -0
- package/dist/db/tables/invitations.d.ts.map +1 -1
- package/dist/db/tables/invitations.js +3 -0
- package/dist/db/tables/invitations.js.map +1 -1
- package/dist/db/tables/inviteLinks.d.ts +10 -2
- package/dist/db/tables/inviteLinks.d.ts.map +1 -1
- package/dist/db/tables/inviteLinks.js +10 -1
- package/dist/db/tables/inviteLinks.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +5 -2
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +13 -2
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +2 -0
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
- package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
- package/dist/db/tables/verifiedTokenRequests.js +120 -0
- package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
- package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +16 -0
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts +1 -16
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +17 -6
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +37 -5
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +11 -2
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +14 -47
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/FundingQuotes.d.ts +147 -47
- package/dist/internal/FundingQuotes.d.ts.map +1 -1
- package/dist/internal/FundingQuotes.js +119 -33
- package/dist/internal/FundingQuotes.js.map +1 -1
- package/dist/internal/Log.d.ts +37 -5
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +52 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +24 -0
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +2 -2
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +3 -0
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +2 -2
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +12 -4
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +14 -5
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +23 -5
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Value.d.ts +18 -0
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js +11 -1
- package/dist/internal/Value.js.map +1 -1
- package/dist/internal/VerifiedTokens.d.ts.map +1 -1
- package/dist/internal/VerifiedTokens.js +10 -1
- package/dist/internal/VerifiedTokens.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +24 -3
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +34 -8
- package/dist/internal/Webhooks.js.map +1 -1
- package/package.json +7 -2
- package/src/App.test.ts +9 -4
- package/src/App.ts +23 -3
- package/src/Client.test-d.ts +733 -20
- package/src/Scope.ts +5 -0
- package/src/admin/App.test.ts +4 -0
- package/src/admin/App.ts +4 -0
- package/src/admin/apps/early-access.test.ts +125 -0
- package/src/admin/apps/early-access.ts +176 -0
- package/src/admin/apps/organizations.test.ts +86 -2
- package/src/admin/apps/organizations.ts +155 -31
- package/src/admin/apps/scopes.test.ts +5 -0
- package/src/admin/apps/verified-tokens.test.ts +201 -0
- package/src/admin/apps/verified-tokens.ts +532 -286
- package/src/admin/ui/plugin.ts +2 -1
- package/src/admin/ui/src/lib/early-access.ts +63 -0
- package/src/admin/ui/src/lib/organizations.test.ts +81 -1
- package/src/admin/ui/src/lib/organizations.ts +92 -0
- package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
- package/src/admin/ui/src/routeTree.gen.ts +33 -2
- package/src/admin/ui/src/routes/__root.tsx +2 -1
- package/src/admin/ui/src/routes/api-keys.tsx +1 -1
- package/src/admin/ui/src/routes/early-access.tsx +162 -0
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +103 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
- package/src/admin/ui.generated.ts +95 -94
- package/src/analytics/Analytics.test.ts +83 -0
- package/src/analytics/Analytics.ts +20 -0
- package/src/analytics/tables/requestEvents.ts +60 -7
- package/src/apps/composition.test.ts +11 -2
- package/src/apps/data/App.test.ts +1 -1
- package/src/apps/data/App.ts +22 -14
- package/src/apps/data/FundingQuoteProviders.test.ts +297 -4
- package/src/apps/data/FundingQuoteProviders.ts +255 -29
- package/src/apps/data/FxOracle.test.ts +118 -0
- package/src/apps/data/FxOracle.ts +153 -0
- package/src/apps/data/index.ts +1 -0
- package/src/apps/data/routes/activities.test.ts +177 -3
- package/src/apps/data/routes/activities.ts +441 -132
- package/src/apps/data/routes/addresses.ts +19 -9
- package/src/apps/data/routes/balances.test.ts +148 -11
- package/src/apps/data/routes/balances.ts +140 -51
- package/src/apps/data/routes/exchanges.test.ts +544 -9
- package/src/apps/data/routes/exchanges.ts +690 -103
- package/src/apps/data/routes/fee-amm.test.ts +47 -23
- package/src/apps/data/routes/fee-amm.ts +98 -119
- package/src/apps/data/routes/funding.test.ts +113 -8
- package/src/apps/data/routes/funding.ts +77 -51
- package/src/apps/data/routes/receipts.test.ts +129 -23
- package/src/apps/data/routes/receipts.ts +205 -100
- package/src/apps/data/routes/tokens.test.ts +43 -0
- package/src/apps/data/routes/tokens.ts +28 -13
- package/src/apps/data/routes/transactions.test.ts +72 -19
- package/src/apps/data/routes/transactions.ts +162 -92
- package/src/apps/data/routes/transfers.test.ts +341 -31
- package/src/apps/data/routes/transfers.ts +358 -158
- package/src/apps/data/routes/valuation.test.ts +437 -0
- package/src/apps/data/routes/valuation.ts +423 -0
- package/src/apps/data/routes/verified-tokens.ts +14 -2
- package/src/apps/data/routes/webhooks.test.ts +56 -8
- package/src/apps/data/routes/webhooks.ts +144 -27
- package/src/apps/index.ts +2 -1
- package/src/apps/management/App.ts +13 -0
- package/src/apps/management/routes/api-keys.test.ts +14 -0
- package/src/apps/management/routes/api-keys.ts +27 -3
- package/src/apps/management/routes/billing.test.ts +152 -20
- package/src/apps/management/routes/billing.ts +34 -18
- package/src/apps/management/routes/faucet.test.ts +87 -0
- package/src/apps/management/routes/faucet.ts +201 -0
- package/src/apps/management/routes/invite-links.test.ts +117 -0
- package/src/apps/management/routes/invite-links.ts +43 -1
- package/src/apps/management/routes/me.test.ts +9 -99
- package/src/apps/management/routes/orgs.test.ts +45 -2
- package/src/apps/management/routes/orgs.ts +6 -0
- package/src/apps/management/routes/scopes.test.ts +1 -0
- package/src/apps/management/routes/usage.test.ts +6 -0
- package/src/apps/management/routes/usage.ts +7 -0
- package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
- package/src/apps/management/routes/verified-token-requests.ts +397 -0
- package/src/apps/management/routes/webhooks.test.ts +426 -0
- package/src/apps/management/routes/webhooks.ts +672 -0
- package/src/apps/mpp/App.ts +86 -0
- package/src/apps/mpp/Mpp.test.ts +193 -0
- package/src/apps/mpp/Mpp.ts +353 -0
- package/src/apps/mpp/index.ts +2 -0
- package/src/apps/mpp/internal/Adapter.ts +11 -0
- package/src/apps/mpp/internal/Error.ts +9 -0
- package/src/apps/mpp/internal/Idempotency.ts +7 -0
- package/src/apps/mpp/internal/Screening.ts +10 -0
- package/src/apps/relay/App.test.ts +88 -6
- package/src/apps/relay/App.ts +61 -9
- package/src/db/Db.test.ts +19 -0
- package/src/db/Db.ts +125 -0
- package/src/db/Schema.ts +68 -0
- package/src/db/tables/earlyAccess.ts +86 -0
- package/src/db/tables/enabledBillingSources.test.ts +303 -0
- package/src/db/tables/enabledBillingSources.ts +118 -0
- package/src/db/tables/invitations.ts +3 -0
- package/src/db/tables/inviteLinks.ts +22 -3
- package/src/db/tables/organizations.test.ts +103 -0
- package/src/db/tables/organizations.ts +18 -2
- package/src/db/tables/sponsoredTransactions.ts +4 -0
- package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
- package/src/db/tables/verifiedTokenRequests.ts +182 -0
- package/src/db/tables/webhookSubscriptions.ts +31 -0
- package/src/handlers/internal/utils.ts +22 -6
- package/src/handlers/relay.errors.test.ts +153 -0
- package/src/handlers/relay.ts +42 -7
- package/src/internal/Auth.test.ts +3 -3
- package/src/internal/Auth.ts +15 -47
- package/src/internal/FundingQuotes.test.ts +161 -6
- package/src/internal/FundingQuotes.ts +141 -39
- package/src/internal/Log.test-d.ts +21 -0
- package/src/internal/Log.test.ts +141 -0
- package/src/internal/Log.ts +93 -6
- package/src/internal/MetricSink.test.ts +215 -0
- package/src/internal/MetricSink.ts +24 -0
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Response.test.ts +28 -0
- package/src/internal/Response.ts +12 -4
- package/src/internal/Schema.ts +50 -5
- package/src/internal/Value.test.ts +20 -0
- package/src/internal/Value.ts +24 -1
- package/src/internal/VerifiedTokens.ts +9 -1
- package/src/internal/Webhooks.test.ts +140 -0
- 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 {
|