@pear-protocol/symmio-client 0.2.40 → 0.2.43
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/index.js +12 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -13
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +87 -61
- package/dist/react/index.d.ts +87 -61
- package/dist/react/index.js +392 -265
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +392 -267
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/{provider-BoNiSPy9.d.mts → provider-CMBaM64o.d.mts} +3 -2
- package/dist/react/{provider-BoNiSPy9.d.ts → provider-CMBaM64o.d.ts} +3 -2
- package/dist/react/provider.d.mts +1 -1
- package/dist/react/provider.d.ts +1 -1
- package/dist/react/provider.js +3 -1
- package/dist/react/provider.js.map +1 -1
- package/dist/react/provider.mjs +3 -1
- package/dist/react/provider.mjs.map +1 -1
- package/package.json +2 -1
package/dist/react/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { createContext, useContext, useMemo,
|
|
2
|
+
import { createContext, useContext, useMemo, useCallback, useEffect, useRef } from 'react';
|
|
3
3
|
import { createSymmSDK, isAuthExpiredError, isNetworkError, isInsufficientMarginError, isRateLimitedError, isTimeoutError } from '@pear-protocol/symm-core';
|
|
4
4
|
import { create } from 'zustand';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
|
-
import {
|
|
6
|
+
import { useQueryClient, useQuery, useMutation } from '@tanstack/react-query';
|
|
7
|
+
import { SiweMessage } from 'siwe';
|
|
7
8
|
import { isAddress, encodeFunctionData } from 'viem';
|
|
8
9
|
|
|
9
10
|
var SymmContext = createContext(null);
|
|
@@ -490,6 +491,7 @@ function useBinanceWs(params) {
|
|
|
490
491
|
function SymmProvider({
|
|
491
492
|
chainId = 42161,
|
|
492
493
|
address,
|
|
494
|
+
walletClient,
|
|
493
495
|
symmCoreConfig = {
|
|
494
496
|
apiUrl: "https://nginx-server-staging.up.railway.app",
|
|
495
497
|
wsUrl: "wss://nginx-server-staging.up.railway.app"
|
|
@@ -509,9 +511,10 @@ function SymmProvider({
|
|
|
509
511
|
symmCoreClient,
|
|
510
512
|
chainId,
|
|
511
513
|
address,
|
|
514
|
+
walletClient,
|
|
512
515
|
symmioConfig
|
|
513
516
|
}),
|
|
514
|
-
[symmCoreClient, chainId, address, symmioConfig]
|
|
517
|
+
[symmCoreClient, chainId, address, walletClient, symmioConfig]
|
|
515
518
|
);
|
|
516
519
|
useBinanceWs({
|
|
517
520
|
symmCoreClient,
|
|
@@ -554,19 +557,17 @@ function createSiweMessage(params) {
|
|
|
554
557
|
const expirationTime = new Date(
|
|
555
558
|
Date.now() + 30 * 24 * 60 * 60 * 1e3
|
|
556
559
|
).toISOString();
|
|
557
|
-
const message =
|
|
558
|
-
|
|
559
|
-
params.address,
|
|
560
|
-
|
|
561
|
-
params.
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
`Expiration Time: ${expirationTime}`
|
|
569
|
-
].join("\n");
|
|
560
|
+
const message = new SiweMessage({
|
|
561
|
+
domain: params.domain,
|
|
562
|
+
address: params.address,
|
|
563
|
+
statement: params.statement,
|
|
564
|
+
chainId: params.chainId,
|
|
565
|
+
nonce: params.nonce,
|
|
566
|
+
version,
|
|
567
|
+
uri: params.uri,
|
|
568
|
+
issuedAt,
|
|
569
|
+
expirationTime
|
|
570
|
+
}).prepareMessage();
|
|
570
571
|
return { message, issuedAt, expirationTime };
|
|
571
572
|
}
|
|
572
573
|
async function getNonce(chainId, subAccount) {
|
|
@@ -634,7 +635,7 @@ function cacheKey(address, chainId) {
|
|
|
634
635
|
function storageKey(address, chainId) {
|
|
635
636
|
return `${TOKEN_STORAGE_PREFIX}:${TOKEN_STORAGE_VERSION}:${cacheKey(address, chainId)}`;
|
|
636
637
|
}
|
|
637
|
-
function
|
|
638
|
+
function getCachedTokenEntry(address, chainId) {
|
|
638
639
|
if (typeof window === "undefined") return null;
|
|
639
640
|
try {
|
|
640
641
|
const raw = window.localStorage.getItem(storageKey(address, chainId));
|
|
@@ -664,17 +665,12 @@ function writeStoredToken(address, chainId, cached) {
|
|
|
664
665
|
} catch {
|
|
665
666
|
}
|
|
666
667
|
}
|
|
667
|
-
function getCachedToken(address, chainId) {
|
|
668
|
-
const stored = readStoredToken(address, chainId);
|
|
669
|
-
if (!stored) return null;
|
|
670
|
-
return stored.token;
|
|
671
|
-
}
|
|
672
668
|
function clearCachedToken(address, chainId) {
|
|
673
669
|
if (typeof window !== "undefined") {
|
|
674
670
|
window.localStorage.removeItem(storageKey(address, chainId));
|
|
675
671
|
}
|
|
676
672
|
}
|
|
677
|
-
async function
|
|
673
|
+
async function fetchAccessTokenEntry(walletClient, signerAddress, accountAddress, chainId, domain) {
|
|
678
674
|
const resolvedDomain = domain ?? (typeof window !== "undefined" ? window.location.host : "localhost");
|
|
679
675
|
const hedgerLoginUrl = new URL("login", getHedgerBaseUrl(chainId)).href;
|
|
680
676
|
const nonce = await getNonce(chainId, accountAddress);
|
|
@@ -703,39 +699,114 @@ async function fetchAccessToken(walletClient, signerAddress, accountAddress, cha
|
|
|
703
699
|
expiresAt: expiresAt - 6e4
|
|
704
700
|
};
|
|
705
701
|
writeStoredToken(accountAddress, chainId, cachedToken);
|
|
706
|
-
return
|
|
702
|
+
return cachedToken;
|
|
707
703
|
}
|
|
708
|
-
|
|
709
|
-
|
|
704
|
+
|
|
705
|
+
// src/react/query-keys.ts
|
|
706
|
+
var symmKeys = {
|
|
707
|
+
all: ["symm"],
|
|
708
|
+
accounts: (address, chainId) => ["symm", "accounts", address, chainId],
|
|
709
|
+
accountsApi: (address, chainId) => ["symm", "accountsApi", address, chainId],
|
|
710
|
+
accountsLength: (address, chainId) => ["symm", "accountsLength", address, chainId],
|
|
711
|
+
accountsWithPositions: (address, chainId) => ["symm", "accountsWithPositions", address, chainId],
|
|
712
|
+
accountSummary: (address, chainId) => ["symm", "accountSummary", address, chainId],
|
|
713
|
+
accountData: (address, chainId, upnl) => ["symm", "accountData", address, chainId, upnl],
|
|
714
|
+
signature: (address, chainId) => ["symm", "signature", address, chainId],
|
|
715
|
+
auth: (accountAddress, chainId) => ["symm", "auth", accountAddress, chainId],
|
|
716
|
+
approval: (owner, spender, chainId, token) => ["symm", "approval", owner, spender, chainId, token],
|
|
717
|
+
balances: (address, chainId) => ["symm", "balances", address, chainId],
|
|
718
|
+
positions: (params) => ["symm", "positions", params],
|
|
719
|
+
openOrders: (params) => ["symm", "openOrders", params],
|
|
720
|
+
tradeHistory: (params) => ["symm", "tradeHistory", params],
|
|
721
|
+
tpslOrders: (address, chainId) => ["symm", "tpslOrders", address, chainId],
|
|
722
|
+
tpslOrdersList: (params) => ["symm", "tpslOrders", params],
|
|
723
|
+
twapOrders: (address, chainId) => ["symm", "twapOrders", address, chainId],
|
|
724
|
+
triggerOrders: (params) => ["symm", "triggerOrders", params],
|
|
725
|
+
triggerConfig: (orderId) => ["symm", "triggerConfig", orderId],
|
|
726
|
+
markets: (chainId, search) => ["symm", "markets", chainId, search],
|
|
727
|
+
hedgerMarketById: (id, chainId) => ["symm", "hedgerMarketById", id, chainId],
|
|
728
|
+
hedgerMarketBySymbol: (symbol, chainId) => ["symm", "hedgerMarketBySymbol", symbol, chainId],
|
|
729
|
+
lockedParams: (marketName, leverage, chainId) => ["symm", "lockedParams", marketName, leverage, chainId],
|
|
730
|
+
hedgerMarkets: (request) => ["symm", "hedgerMarkets", request],
|
|
731
|
+
fundingRates: (chainId) => ["symm", "fundingRates", chainId],
|
|
732
|
+
fundingPayments: (params) => ["symm", "fundingPayments", params],
|
|
733
|
+
fundingHistory: (params) => ["symm", "fundingHistory", params],
|
|
734
|
+
portfolio: (params) => ["symm", "portfolio", params],
|
|
735
|
+
notifications: (address, chainId) => ["symm", "notifications", address, chainId],
|
|
736
|
+
unreadCount: (address, chainId) => ["symm", "unreadCount", address, chainId],
|
|
737
|
+
availableMargin: (address, chainId) => ["symm", "availableMargin", address, chainId],
|
|
738
|
+
pendingIds: (address, chainId) => ["symm", "pendingIds", address, chainId],
|
|
739
|
+
pendingInstantOpens: (accountAddress, chainId) => ["symm", "pendingInstantOpens", accountAddress, chainId],
|
|
740
|
+
twapOrder: (orderId) => ["symm", "twapOrder", orderId],
|
|
741
|
+
delegation: (account, target, selectors, chainId) => ["symm", "delegation", account, target, selectors, chainId],
|
|
742
|
+
chartMetadata: (symbolsKey, positionKey) => ["symm", "chartMetadata", symbolsKey, positionKey]
|
|
743
|
+
};
|
|
744
|
+
|
|
745
|
+
// src/react/auth-cache.ts
|
|
746
|
+
function getAuthQueryData(queryClient, accountAddress, chainId) {
|
|
747
|
+
return queryClient.getQueryData(symmKeys.auth(accountAddress, chainId)) ?? null;
|
|
710
748
|
}
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
const key = symmAuthTokenKey(address, chainId);
|
|
728
|
-
set((state) => {
|
|
729
|
-
if (!(key in state.tokensByKey)) return state;
|
|
730
|
-
const next = { ...state.tokensByKey };
|
|
731
|
-
delete next[key];
|
|
732
|
-
return { tokensByKey: next };
|
|
733
|
-
});
|
|
734
|
-
},
|
|
735
|
-
clearAll: () => {
|
|
736
|
-
set({ tokensByKey: {} });
|
|
749
|
+
function setAuthQueryData(queryClient, accountAddress, chainId, entry) {
|
|
750
|
+
queryClient.setQueryData(symmKeys.auth(accountAddress, chainId), entry);
|
|
751
|
+
}
|
|
752
|
+
function clearAuthQueryData(queryClient, accountAddress, chainId) {
|
|
753
|
+
queryClient.removeQueries({
|
|
754
|
+
queryKey: symmKeys.auth(accountAddress, chainId),
|
|
755
|
+
exact: true
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
function clearPersistedAuthState(accountAddress, chainId) {
|
|
759
|
+
clearCachedToken(accountAddress, chainId);
|
|
760
|
+
}
|
|
761
|
+
function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId) {
|
|
762
|
+
const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
|
|
763
|
+
if (inQuery && inQuery.expiresAt > Date.now()) {
|
|
764
|
+
return inQuery.token;
|
|
737
765
|
}
|
|
738
|
-
|
|
766
|
+
const persisted = getCachedTokenEntry(accountAddress, chainId);
|
|
767
|
+
if (!persisted) {
|
|
768
|
+
return null;
|
|
769
|
+
}
|
|
770
|
+
setAuthQueryData(queryClient, accountAddress, chainId, persisted);
|
|
771
|
+
return persisted.token;
|
|
772
|
+
}
|
|
773
|
+
async function resolveAuthTokenEntry({
|
|
774
|
+
queryClient,
|
|
775
|
+
walletClient,
|
|
776
|
+
signerAddress,
|
|
777
|
+
accountAddress,
|
|
778
|
+
chainId,
|
|
779
|
+
siweDomain,
|
|
780
|
+
force = false
|
|
781
|
+
}) {
|
|
782
|
+
if (!walletClient || !signerAddress || !accountAddress) {
|
|
783
|
+
return null;
|
|
784
|
+
}
|
|
785
|
+
if (!force) {
|
|
786
|
+
const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
|
|
787
|
+
if (inQuery && inQuery.expiresAt > Date.now()) {
|
|
788
|
+
return inQuery;
|
|
789
|
+
}
|
|
790
|
+
const persisted = getCachedTokenEntry(accountAddress, chainId);
|
|
791
|
+
if (persisted) {
|
|
792
|
+
setAuthQueryData(queryClient, accountAddress, chainId, persisted);
|
|
793
|
+
return persisted;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
const fresh = await fetchAccessTokenEntry(
|
|
797
|
+
walletClient,
|
|
798
|
+
signerAddress,
|
|
799
|
+
accountAddress,
|
|
800
|
+
chainId,
|
|
801
|
+
siweDomain
|
|
802
|
+
);
|
|
803
|
+
setAuthQueryData(queryClient, accountAddress, chainId, fresh);
|
|
804
|
+
return fresh;
|
|
805
|
+
}
|
|
806
|
+
function clearAuthState(queryClient, accountAddress, chainId) {
|
|
807
|
+
clearPersistedAuthState(accountAddress, chainId);
|
|
808
|
+
clearAuthQueryData(queryClient, accountAddress, chainId);
|
|
809
|
+
}
|
|
739
810
|
|
|
740
811
|
// src/react/hooks/use-symm-auth.ts
|
|
741
812
|
function logSymmAuth(event, details) {
|
|
@@ -744,59 +815,26 @@ function logSymmAuth(event, details) {
|
|
|
744
815
|
}
|
|
745
816
|
console.log("[symm-auth]", event, details ?? {});
|
|
746
817
|
}
|
|
747
|
-
function extractSubaccountAddresses(summary) {
|
|
748
|
-
const accounts = summary?.data?.accounts;
|
|
749
|
-
if (!Array.isArray(accounts)) {
|
|
750
|
-
return [];
|
|
751
|
-
}
|
|
752
|
-
return accounts.flatMap((account) => {
|
|
753
|
-
const accountAddress = account.accountAddress ?? account.address;
|
|
754
|
-
return accountAddress ? [accountAddress] : [];
|
|
755
|
-
});
|
|
756
|
-
}
|
|
757
818
|
function useSymmAuth(params) {
|
|
758
819
|
const context = useSymmContext();
|
|
759
|
-
const
|
|
760
|
-
const
|
|
761
|
-
const
|
|
762
|
-
const
|
|
763
|
-
const walletClient = params?.walletClient ?? ctx.walletClient;
|
|
820
|
+
const queryClient = useQueryClient();
|
|
821
|
+
const address = params?.address ?? context.address;
|
|
822
|
+
const chainId = params?.chainId ?? context.chainId ?? 42161;
|
|
823
|
+
const walletClient = params?.walletClient ?? context.walletClient;
|
|
764
824
|
const siweDomain = params?.siweDomain;
|
|
765
|
-
const
|
|
766
|
-
|
|
767
|
-
return state.tokensByKey[symmAuthTokenKey(address, chainId)] ?? null;
|
|
768
|
-
}
|
|
769
|
-
return ctx.accessToken ?? ctx.authToken ?? null;
|
|
770
|
-
});
|
|
771
|
-
const setToken = useSymmAuthStore((state) => state.setToken);
|
|
772
|
-
const getToken = useSymmAuthStore((state) => state.getToken);
|
|
773
|
-
const clearToken = useSymmAuthStore((state) => state.clearToken);
|
|
774
|
-
const previousAddressRef = useRef(address);
|
|
775
|
-
const previousChainIdRef = useRef(chainId);
|
|
776
|
-
const refreshAuthRef = useRef(async () => null);
|
|
825
|
+
const activeAccountAddress = params?.activeAccountAddress;
|
|
826
|
+
const canBootstrap = !!walletClient && !!address && !!activeAccountAddress;
|
|
777
827
|
const refreshAuth = useCallback(
|
|
778
828
|
async (accountAddress, options) => {
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
chainId
|
|
787
|
-
});
|
|
788
|
-
return inStore;
|
|
789
|
-
}
|
|
790
|
-
const cached = getCachedToken(resolvedAccountAddress, chainId);
|
|
791
|
-
if (cached) {
|
|
792
|
-
setToken(resolvedAccountAddress, chainId, cached);
|
|
793
|
-
logSymmAuth("refresh:local-storage-hit", {
|
|
794
|
-
accountAddress: resolvedAccountAddress,
|
|
795
|
-
chainId
|
|
796
|
-
});
|
|
797
|
-
return cached;
|
|
798
|
-
}
|
|
829
|
+
const resolvedAccountAddress = accountAddress ?? activeAccountAddress;
|
|
830
|
+
if (!resolvedAccountAddress) {
|
|
831
|
+
logSymmAuth("refresh:skip-no-active-account", {
|
|
832
|
+
signerAddress: address,
|
|
833
|
+
chainId
|
|
834
|
+
});
|
|
835
|
+
return null;
|
|
799
836
|
}
|
|
837
|
+
if (!walletClient || !address) return null;
|
|
800
838
|
try {
|
|
801
839
|
logSymmAuth("refresh:fetch-start", {
|
|
802
840
|
signerAddress: address,
|
|
@@ -804,14 +842,16 @@ function useSymmAuth(params) {
|
|
|
804
842
|
chainId,
|
|
805
843
|
force: options?.force ?? false
|
|
806
844
|
});
|
|
807
|
-
const
|
|
845
|
+
const tokenEntry = await resolveAuthTokenEntry({
|
|
846
|
+
queryClient,
|
|
808
847
|
walletClient,
|
|
809
|
-
address,
|
|
810
|
-
resolvedAccountAddress,
|
|
848
|
+
signerAddress: address,
|
|
849
|
+
accountAddress: resolvedAccountAddress,
|
|
811
850
|
chainId,
|
|
812
|
-
siweDomain
|
|
813
|
-
|
|
814
|
-
|
|
851
|
+
siweDomain,
|
|
852
|
+
force: options?.force
|
|
853
|
+
});
|
|
854
|
+
const token2 = tokenEntry?.token ?? null;
|
|
815
855
|
logSymmAuth("refresh:fetch-success", {
|
|
816
856
|
signerAddress: address,
|
|
817
857
|
accountAddress: resolvedAccountAddress,
|
|
@@ -819,7 +859,7 @@ function useSymmAuth(params) {
|
|
|
819
859
|
});
|
|
820
860
|
return token2;
|
|
821
861
|
} catch (error) {
|
|
822
|
-
|
|
862
|
+
clearPersistedAuthState(resolvedAccountAddress, chainId);
|
|
823
863
|
logSymmAuth("refresh:fetch-failed", {
|
|
824
864
|
signerAddress: address,
|
|
825
865
|
accountAddress: resolvedAccountAddress,
|
|
@@ -829,104 +869,49 @@ function useSymmAuth(params) {
|
|
|
829
869
|
return null;
|
|
830
870
|
}
|
|
831
871
|
},
|
|
832
|
-
[
|
|
833
|
-
|
|
834
|
-
refreshAuthRef.current = refreshAuth;
|
|
835
|
-
const clearAuth = useCallback(() => {
|
|
836
|
-
if (address) {
|
|
837
|
-
clearCachedToken(address, chainId);
|
|
838
|
-
clearToken(address, chainId);
|
|
839
|
-
}
|
|
840
|
-
}, [address, chainId, clearToken]);
|
|
841
|
-
useEffect(() => {
|
|
842
|
-
const previousAddress = previousAddressRef.current;
|
|
843
|
-
const previousChainId = previousChainIdRef.current;
|
|
844
|
-
const addressChanged = previousAddress !== address;
|
|
845
|
-
const chainChanged = previousChainId !== chainId;
|
|
846
|
-
let cancelled = false;
|
|
847
|
-
previousAddressRef.current = address;
|
|
848
|
-
previousChainIdRef.current = chainId;
|
|
849
|
-
logSymmAuth("bootstrap:dependencies", {
|
|
872
|
+
[
|
|
873
|
+
walletClient,
|
|
850
874
|
address,
|
|
875
|
+
activeAccountAddress,
|
|
851
876
|
chainId,
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
hasSymmCoreClient: !!symmCoreClient
|
|
865
|
-
});
|
|
866
|
-
return;
|
|
867
|
-
}
|
|
868
|
-
const userAddress = address;
|
|
869
|
-
if (previousAddress && (addressChanged || chainChanged)) {
|
|
870
|
-
clearCachedToken(previousAddress, previousChainId);
|
|
871
|
-
clearToken(previousAddress, previousChainId);
|
|
872
|
-
}
|
|
873
|
-
async function bootstrapAuth() {
|
|
874
|
-
logSymmAuth("bootstrap:run", {
|
|
875
|
-
userAddress,
|
|
876
|
-
chainId,
|
|
877
|
-
hasWalletClient: !!walletClient,
|
|
878
|
-
hasSymmCoreClient: !!symmCoreClient,
|
|
879
|
-
hasRefreshAuth: !!refreshAuthRef.current
|
|
880
|
-
});
|
|
881
|
-
let targets = [userAddress];
|
|
882
|
-
if (symmCoreClient) {
|
|
883
|
-
try {
|
|
884
|
-
const summary = await symmCoreClient.accounts.getSummary({
|
|
885
|
-
userAddress,
|
|
886
|
-
chainId
|
|
887
|
-
});
|
|
888
|
-
const subaccounts = extractSubaccountAddresses(summary);
|
|
889
|
-
if (subaccounts.length > 0) {
|
|
890
|
-
targets = subaccounts;
|
|
891
|
-
}
|
|
892
|
-
logSymmAuth("bootstrap:subaccounts-resolved", {
|
|
893
|
-
userAddress,
|
|
894
|
-
chainId,
|
|
895
|
-
subaccounts
|
|
896
|
-
});
|
|
897
|
-
} catch (error) {
|
|
898
|
-
logSymmAuth("bootstrap:subaccounts-failed", {
|
|
899
|
-
userAddress,
|
|
900
|
-
chainId,
|
|
901
|
-
error: error instanceof Error ? error.message : String(error)
|
|
902
|
-
});
|
|
903
|
-
}
|
|
904
|
-
}
|
|
905
|
-
const uniqueTargets = [...new Set(targets)].filter(
|
|
906
|
-
(accountAddress) => !!accountAddress
|
|
907
|
-
);
|
|
908
|
-
logSymmAuth("bootstrap:start", {
|
|
909
|
-
userAddress,
|
|
877
|
+
siweDomain,
|
|
878
|
+
queryClient
|
|
879
|
+
]
|
|
880
|
+
);
|
|
881
|
+
const authQuery = useQuery({
|
|
882
|
+
queryKey: symmKeys.auth(activeAccountAddress, chainId),
|
|
883
|
+
queryFn: async () => {
|
|
884
|
+
const tokenEntry = await resolveAuthTokenEntry({
|
|
885
|
+
queryClient,
|
|
886
|
+
walletClient,
|
|
887
|
+
signerAddress: address,
|
|
888
|
+
accountAddress: activeAccountAddress,
|
|
910
889
|
chainId,
|
|
911
|
-
|
|
912
|
-
walletReady: !!walletClient
|
|
890
|
+
siweDomain
|
|
913
891
|
});
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
return;
|
|
917
|
-
}
|
|
918
|
-
await refreshAuthRef.current(accountAddress);
|
|
892
|
+
if (!tokenEntry) {
|
|
893
|
+
return null;
|
|
919
894
|
}
|
|
895
|
+
return tokenEntry;
|
|
896
|
+
},
|
|
897
|
+
enabled: canBootstrap,
|
|
898
|
+
retry: false,
|
|
899
|
+
refetchOnWindowFocus: false,
|
|
900
|
+
refetchOnReconnect: false
|
|
901
|
+
});
|
|
902
|
+
const clearAuth = useCallback(() => {
|
|
903
|
+
if (activeAccountAddress) {
|
|
904
|
+
clearAuthState(queryClient, activeAccountAddress, chainId);
|
|
920
905
|
}
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
cancelled = true;
|
|
924
|
-
};
|
|
925
|
-
}, [address, walletClient, chainId, symmCoreClient]);
|
|
906
|
+
}, [activeAccountAddress, chainId, queryClient]);
|
|
907
|
+
const token = authQuery.data?.token ?? null;
|
|
926
908
|
return {
|
|
927
909
|
accessToken: token,
|
|
928
910
|
authToken: token,
|
|
929
911
|
isAuthenticated: !!token,
|
|
912
|
+
isLoading: authQuery.isLoading,
|
|
913
|
+
isFetching: authQuery.isFetching,
|
|
914
|
+
error: authQuery.error,
|
|
930
915
|
refresh: refreshAuth,
|
|
931
916
|
refreshAuth,
|
|
932
917
|
clear: clearAuth
|
|
@@ -1418,6 +1403,30 @@ function prepareDelegateAccess(multiAccount, account, params) {
|
|
|
1418
1403
|
config: { account, to: multiAccount, data, value: 0n }
|
|
1419
1404
|
};
|
|
1420
1405
|
}
|
|
1406
|
+
function prepareProposeRevoke(multiAccount, account, params) {
|
|
1407
|
+
const data = encodeFunctionData({
|
|
1408
|
+
abi: MultiAccountABI,
|
|
1409
|
+
functionName: "proposeToRevokeAccesses",
|
|
1410
|
+
args: [params.account, params.target, params.selectors]
|
|
1411
|
+
});
|
|
1412
|
+
return {
|
|
1413
|
+
functionName: "proposeToRevokeAccesses",
|
|
1414
|
+
args: [params.account, params.target, params.selectors],
|
|
1415
|
+
config: { account, to: multiAccount, data, value: 0n }
|
|
1416
|
+
};
|
|
1417
|
+
}
|
|
1418
|
+
function prepareRevokeAccess(multiAccount, account, params) {
|
|
1419
|
+
const data = encodeFunctionData({
|
|
1420
|
+
abi: MultiAccountABI,
|
|
1421
|
+
functionName: "revokeAccesses",
|
|
1422
|
+
args: [params.account, params.target, params.selectors]
|
|
1423
|
+
});
|
|
1424
|
+
return {
|
|
1425
|
+
functionName: "revokeAccesses",
|
|
1426
|
+
args: [params.account, params.target, params.selectors],
|
|
1427
|
+
config: { account, to: multiAccount, data, value: 0n }
|
|
1428
|
+
};
|
|
1429
|
+
}
|
|
1421
1430
|
async function delegateAccess(walletClient, publicClient, multiAccount, params) {
|
|
1422
1431
|
const account = walletClient.account?.address;
|
|
1423
1432
|
if (!account) throw new Error("Wallet client has no account");
|
|
@@ -1429,6 +1438,28 @@ async function delegateAccess(walletClient, publicClient, multiAccount, params)
|
|
|
1429
1438
|
chain: walletClient.chain
|
|
1430
1439
|
});
|
|
1431
1440
|
}
|
|
1441
|
+
async function proposeRevoke(walletClient, publicClient, multiAccount, params) {
|
|
1442
|
+
const account = walletClient.account?.address;
|
|
1443
|
+
if (!account) throw new Error("Wallet client has no account");
|
|
1444
|
+
const prepared = prepareProposeRevoke(multiAccount, account, params);
|
|
1445
|
+
const gas = await publicClient.estimateGas(prepared.config);
|
|
1446
|
+
return walletClient.sendTransaction({
|
|
1447
|
+
...prepared.config,
|
|
1448
|
+
gas: calculateGasMargin(gas),
|
|
1449
|
+
chain: walletClient.chain
|
|
1450
|
+
});
|
|
1451
|
+
}
|
|
1452
|
+
async function revokeAccess(walletClient, publicClient, multiAccount, params) {
|
|
1453
|
+
const account = walletClient.account?.address;
|
|
1454
|
+
if (!account) throw new Error("Wallet client has no account");
|
|
1455
|
+
const prepared = prepareRevokeAccess(multiAccount, account, params);
|
|
1456
|
+
const gas = await publicClient.estimateGas(prepared.config);
|
|
1457
|
+
return walletClient.sendTransaction({
|
|
1458
|
+
...prepared.config,
|
|
1459
|
+
gas: calculateGasMargin(gas),
|
|
1460
|
+
chain: walletClient.chain
|
|
1461
|
+
});
|
|
1462
|
+
}
|
|
1432
1463
|
async function hasDelegatedAccess(publicClient, multiAccount, params) {
|
|
1433
1464
|
validateAddress(params.account, "subAccount");
|
|
1434
1465
|
validateAddress(params.target, "target");
|
|
@@ -1441,52 +1472,61 @@ async function hasDelegatedAccess(publicClient, multiAccount, params) {
|
|
|
1441
1472
|
return Boolean(result);
|
|
1442
1473
|
}
|
|
1443
1474
|
|
|
1444
|
-
// src/react/
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
hedgerMarkets: (request) => ["symm", "hedgerMarkets", request],
|
|
1469
|
-
fundingRates: (chainId) => ["symm", "fundingRates", chainId],
|
|
1470
|
-
fundingPayments: (params) => ["symm", "fundingPayments", params],
|
|
1471
|
-
fundingHistory: (params) => ["symm", "fundingHistory", params],
|
|
1472
|
-
portfolio: (params) => ["symm", "portfolio", params],
|
|
1473
|
-
notifications: (address, chainId) => ["symm", "notifications", address, chainId],
|
|
1474
|
-
unreadCount: (address, chainId) => ["symm", "unreadCount", address, chainId],
|
|
1475
|
-
availableMargin: (address, chainId) => ["symm", "availableMargin", address, chainId],
|
|
1476
|
-
pendingIds: (address, chainId) => ["symm", "pendingIds", address, chainId],
|
|
1477
|
-
pendingInstantOpens: (accountAddress, chainId) => ["symm", "pendingInstantOpens", accountAddress, chainId],
|
|
1478
|
-
twapOrder: (orderId) => ["symm", "twapOrder", orderId],
|
|
1479
|
-
delegation: (account, target, selectors, chainId) => ["symm", "delegation", account, target, selectors, chainId],
|
|
1480
|
-
chartMetadata: (symbolsKey, positionKey) => ["symm", "chartMetadata", symbolsKey, positionKey]
|
|
1481
|
-
};
|
|
1475
|
+
// src/react/mutation-config.ts
|
|
1476
|
+
function withSymmMutationConfig(config, internal) {
|
|
1477
|
+
const {
|
|
1478
|
+
onSuccess: configOnSuccess,
|
|
1479
|
+
onError: configOnError,
|
|
1480
|
+
onSettled: configOnSettled,
|
|
1481
|
+
...rest
|
|
1482
|
+
} = config ?? {};
|
|
1483
|
+
return {
|
|
1484
|
+
...rest,
|
|
1485
|
+
onSuccess: async (...args) => {
|
|
1486
|
+
await internal?.onSuccess?.(...args);
|
|
1487
|
+
await configOnSuccess?.(...args);
|
|
1488
|
+
},
|
|
1489
|
+
onError: async (...args) => {
|
|
1490
|
+
await internal?.onError?.(...args);
|
|
1491
|
+
await configOnError?.(...args);
|
|
1492
|
+
},
|
|
1493
|
+
onSettled: async (...args) => {
|
|
1494
|
+
await internal?.onSettled?.(...args);
|
|
1495
|
+
await configOnSettled?.(...args);
|
|
1496
|
+
}
|
|
1497
|
+
};
|
|
1498
|
+
}
|
|
1482
1499
|
|
|
1483
1500
|
// src/react/hooks/use-symm-delegation.ts
|
|
1484
|
-
function
|
|
1501
|
+
function useResolvedDelegationConfig() {
|
|
1485
1502
|
const { chainId, address, symmioConfig } = useSymmContext();
|
|
1486
1503
|
const multiAccount = symmioConfig?.multiAccountAddress ?? getAddress(MULTI_ACCOUNT_ADDRESS, chainId, "MultiAccount");
|
|
1504
|
+
const target = DEFAULT_PARTY_B_ADDRESS[chainId];
|
|
1505
|
+
return {
|
|
1506
|
+
address,
|
|
1507
|
+
chainId,
|
|
1508
|
+
defaultTarget: target,
|
|
1509
|
+
multiAccount
|
|
1510
|
+
};
|
|
1511
|
+
}
|
|
1512
|
+
function resolveDelegationRequest(variables, defaultTarget, defaultSelectors) {
|
|
1513
|
+
const target = variables.target ?? defaultTarget;
|
|
1514
|
+
const selectors = variables.selectors ?? defaultSelectors ?? ALL_TRADING_SELECTORS;
|
|
1515
|
+
if (!target) throw new Error("delegation target is not configured");
|
|
1516
|
+
if (selectors.length === 0) {
|
|
1517
|
+
throw new Error("at least one delegation selector is required");
|
|
1518
|
+
}
|
|
1519
|
+
return {
|
|
1520
|
+
account: variables.account,
|
|
1521
|
+
selectors: [...selectors],
|
|
1522
|
+
target
|
|
1523
|
+
};
|
|
1524
|
+
}
|
|
1525
|
+
function useSymmDelegation(params) {
|
|
1526
|
+
const { chainId, address, multiAccount, defaultTarget } = useResolvedDelegationConfig();
|
|
1487
1527
|
const publicClient = params?.publicClient;
|
|
1488
1528
|
const accountAddress = params?.accountAddress ?? address;
|
|
1489
|
-
const target = params?.target ??
|
|
1529
|
+
const target = params?.target ?? defaultTarget;
|
|
1490
1530
|
const selectors = params?.selectors ?? ALL_TRADING_SELECTORS;
|
|
1491
1531
|
const consumerEnabled = params?.query?.enabled ?? params?.enabled ?? true;
|
|
1492
1532
|
const internalEnabled = !!publicClient && !!accountAddress && !!target && selectors.length > 0;
|
|
@@ -1521,6 +1561,110 @@ function useSymmDelegation(params) {
|
|
|
1521
1561
|
}
|
|
1522
1562
|
});
|
|
1523
1563
|
}
|
|
1564
|
+
function useSymmDelegateAccessMutation(params = {}, options) {
|
|
1565
|
+
const queryClient = useQueryClient();
|
|
1566
|
+
const { chainId, multiAccount, defaultTarget } = useResolvedDelegationConfig();
|
|
1567
|
+
const { publicClient, walletClient } = params;
|
|
1568
|
+
return useMutation({
|
|
1569
|
+
...withSymmMutationConfig(options?.mutation, {
|
|
1570
|
+
onSuccess: async (_data, variables) => {
|
|
1571
|
+
const request = resolveDelegationRequest(
|
|
1572
|
+
variables,
|
|
1573
|
+
params.target ?? defaultTarget,
|
|
1574
|
+
params.selectors
|
|
1575
|
+
);
|
|
1576
|
+
await queryClient.invalidateQueries({
|
|
1577
|
+
queryKey: symmKeys.delegation(
|
|
1578
|
+
request.account,
|
|
1579
|
+
request.target,
|
|
1580
|
+
request.selectors,
|
|
1581
|
+
chainId
|
|
1582
|
+
)
|
|
1583
|
+
});
|
|
1584
|
+
}
|
|
1585
|
+
}),
|
|
1586
|
+
mutationFn: async (variables) => {
|
|
1587
|
+
if (!walletClient || !publicClient) throw new Error("Clients not available");
|
|
1588
|
+
const request = resolveDelegationRequest(
|
|
1589
|
+
variables,
|
|
1590
|
+
params.target ?? defaultTarget,
|
|
1591
|
+
params.selectors
|
|
1592
|
+
);
|
|
1593
|
+
return delegateAccess(walletClient, publicClient, multiAccount, {
|
|
1594
|
+
account: request.account,
|
|
1595
|
+
target: request.target,
|
|
1596
|
+
selectors: request.selectors,
|
|
1597
|
+
activate: true
|
|
1598
|
+
});
|
|
1599
|
+
}
|
|
1600
|
+
});
|
|
1601
|
+
}
|
|
1602
|
+
function useSymmProposeRevokeDelegationMutation(params = {}, options) {
|
|
1603
|
+
const queryClient = useQueryClient();
|
|
1604
|
+
const { chainId, multiAccount, defaultTarget } = useResolvedDelegationConfig();
|
|
1605
|
+
const { publicClient, walletClient } = params;
|
|
1606
|
+
return useMutation({
|
|
1607
|
+
...withSymmMutationConfig(options?.mutation, {
|
|
1608
|
+
onSuccess: async (_data, variables) => {
|
|
1609
|
+
const request = resolveDelegationRequest(
|
|
1610
|
+
variables,
|
|
1611
|
+
params.target ?? defaultTarget,
|
|
1612
|
+
params.selectors
|
|
1613
|
+
);
|
|
1614
|
+
await queryClient.invalidateQueries({
|
|
1615
|
+
queryKey: symmKeys.delegation(
|
|
1616
|
+
request.account,
|
|
1617
|
+
request.target,
|
|
1618
|
+
request.selectors,
|
|
1619
|
+
chainId
|
|
1620
|
+
)
|
|
1621
|
+
});
|
|
1622
|
+
}
|
|
1623
|
+
}),
|
|
1624
|
+
mutationFn: async (variables) => {
|
|
1625
|
+
if (!walletClient || !publicClient) throw new Error("Clients not available");
|
|
1626
|
+
const request = resolveDelegationRequest(
|
|
1627
|
+
variables,
|
|
1628
|
+
params.target ?? defaultTarget,
|
|
1629
|
+
params.selectors
|
|
1630
|
+
);
|
|
1631
|
+
return proposeRevoke(walletClient, publicClient, multiAccount, request);
|
|
1632
|
+
}
|
|
1633
|
+
});
|
|
1634
|
+
}
|
|
1635
|
+
function useSymmRevokeDelegationMutation(params = {}, options) {
|
|
1636
|
+
const queryClient = useQueryClient();
|
|
1637
|
+
const { chainId, multiAccount, defaultTarget } = useResolvedDelegationConfig();
|
|
1638
|
+
const { publicClient, walletClient } = params;
|
|
1639
|
+
return useMutation({
|
|
1640
|
+
...withSymmMutationConfig(options?.mutation, {
|
|
1641
|
+
onSuccess: async (_data, variables) => {
|
|
1642
|
+
const request = resolveDelegationRequest(
|
|
1643
|
+
variables,
|
|
1644
|
+
params.target ?? defaultTarget,
|
|
1645
|
+
params.selectors
|
|
1646
|
+
);
|
|
1647
|
+
await queryClient.invalidateQueries({
|
|
1648
|
+
queryKey: symmKeys.delegation(
|
|
1649
|
+
request.account,
|
|
1650
|
+
request.target,
|
|
1651
|
+
request.selectors,
|
|
1652
|
+
chainId
|
|
1653
|
+
)
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
}),
|
|
1657
|
+
mutationFn: async (variables) => {
|
|
1658
|
+
if (!walletClient || !publicClient) throw new Error("Clients not available");
|
|
1659
|
+
const request = resolveDelegationRequest(
|
|
1660
|
+
variables,
|
|
1661
|
+
params.target ?? defaultTarget,
|
|
1662
|
+
params.selectors
|
|
1663
|
+
);
|
|
1664
|
+
return revokeAccess(walletClient, publicClient, multiAccount, request);
|
|
1665
|
+
}
|
|
1666
|
+
});
|
|
1667
|
+
}
|
|
1524
1668
|
|
|
1525
1669
|
// src/react/cache.ts
|
|
1526
1670
|
function invalidateBalances(qc) {
|
|
@@ -1542,31 +1686,6 @@ function invalidateOrders(qc) {
|
|
|
1542
1686
|
qc.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
|
|
1543
1687
|
}
|
|
1544
1688
|
|
|
1545
|
-
// src/react/mutation-config.ts
|
|
1546
|
-
function withSymmMutationConfig(config, internal) {
|
|
1547
|
-
const {
|
|
1548
|
-
onSuccess: configOnSuccess,
|
|
1549
|
-
onError: configOnError,
|
|
1550
|
-
onSettled: configOnSettled,
|
|
1551
|
-
...rest
|
|
1552
|
-
} = config ?? {};
|
|
1553
|
-
return {
|
|
1554
|
-
...rest,
|
|
1555
|
-
onSuccess: async (...args) => {
|
|
1556
|
-
await internal?.onSuccess?.(...args);
|
|
1557
|
-
await configOnSuccess?.(...args);
|
|
1558
|
-
},
|
|
1559
|
-
onError: async (...args) => {
|
|
1560
|
-
await internal?.onError?.(...args);
|
|
1561
|
-
await configOnError?.(...args);
|
|
1562
|
-
},
|
|
1563
|
-
onSettled: async (...args) => {
|
|
1564
|
-
await internal?.onSettled?.(...args);
|
|
1565
|
-
await configOnSettled?.(...args);
|
|
1566
|
-
}
|
|
1567
|
-
};
|
|
1568
|
-
}
|
|
1569
|
-
|
|
1570
1689
|
// src/react/hooks/use-symm-instant-trade.ts
|
|
1571
1690
|
function useInstantTradeDeps(params) {
|
|
1572
1691
|
const { symmCoreClient, chainId, address, symmioConfig } = useSymmContext();
|
|
@@ -1596,7 +1715,7 @@ async function ensureInstantTradeReady(deps, queryClient, request) {
|
|
|
1596
1715
|
if (selectors.length === 0) {
|
|
1597
1716
|
throw new Error("at least one delegation selector is required");
|
|
1598
1717
|
}
|
|
1599
|
-
const accessToken =
|
|
1718
|
+
const accessToken = getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
|
|
1600
1719
|
if (!accessToken) {
|
|
1601
1720
|
throw new Error("auth token is required for instant trading");
|
|
1602
1721
|
}
|
|
@@ -2009,7 +2128,7 @@ function useSymmCancelClose(options) {
|
|
|
2009
2128
|
}
|
|
2010
2129
|
const resolvedAccountAddress = accountAddress ?? address;
|
|
2011
2130
|
const resolvedChainId = overrideChainId ?? chainId;
|
|
2012
|
-
const resolvedAuthToken = authToken ?? (resolvedAccountAddress ?
|
|
2131
|
+
const resolvedAuthToken = authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, resolvedChainId) : null);
|
|
2013
2132
|
if (!resolvedAuthToken) {
|
|
2014
2133
|
throw new Error("auth token is required to cancel a pending close");
|
|
2015
2134
|
}
|
|
@@ -2040,7 +2159,7 @@ function useSymmCloseOrder(options) {
|
|
|
2040
2159
|
return symmCoreClient.orders.close(request.id, {
|
|
2041
2160
|
kind: request.kind,
|
|
2042
2161
|
type: request.type,
|
|
2043
|
-
authToken: request.authToken ?? (resolvedAccountAddress ?
|
|
2162
|
+
authToken: request.authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, chainId) ?? void 0 : void 0)
|
|
2044
2163
|
});
|
|
2045
2164
|
}
|
|
2046
2165
|
});
|
|
@@ -25170,6 +25289,7 @@ function splitTradeHookArgs(paramsOrOptions, options) {
|
|
|
25170
25289
|
}
|
|
25171
25290
|
function useResolveTradeAuthToken(params = {}) {
|
|
25172
25291
|
const context = useSymmContext();
|
|
25292
|
+
const queryClient = useQueryClient();
|
|
25173
25293
|
const address = params.address ?? context.address;
|
|
25174
25294
|
const chainId = params.chainId ?? context.chainId;
|
|
25175
25295
|
const { refreshAuth } = useSymmAuth({
|
|
@@ -25192,7 +25312,11 @@ function useResolveTradeAuthToken(params = {}) {
|
|
|
25192
25312
|
if (!resolvedAccountAddress) {
|
|
25193
25313
|
return null;
|
|
25194
25314
|
}
|
|
25195
|
-
const inMemoryToken =
|
|
25315
|
+
const inMemoryToken = getAuthTokenFromRuntimeCache(
|
|
25316
|
+
queryClient,
|
|
25317
|
+
resolvedAccountAddress,
|
|
25318
|
+
chainId
|
|
25319
|
+
);
|
|
25196
25320
|
if (inMemoryToken) {
|
|
25197
25321
|
logTradeAuth("resolve-auth:store-hit", {
|
|
25198
25322
|
accountAddress: resolvedAccountAddress,
|
|
@@ -25213,7 +25337,7 @@ function useResolveTradeAuthToken(params = {}) {
|
|
|
25213
25337
|
});
|
|
25214
25338
|
return refreshAuth(resolvedAccountAddress);
|
|
25215
25339
|
},
|
|
25216
|
-
[address, chainId, refreshAuth, refreshAuthFromContext]
|
|
25340
|
+
[address, chainId, queryClient, refreshAuth, refreshAuthFromContext]
|
|
25217
25341
|
);
|
|
25218
25342
|
}
|
|
25219
25343
|
function useSymmOpenBasketMutation(options) {
|
|
@@ -25952,6 +26076,7 @@ function useSymmPendingInstantOpens(params) {
|
|
|
25952
26076
|
symmCoreClient,
|
|
25953
26077
|
chainId: ctxChainId
|
|
25954
26078
|
} = useSymmContext();
|
|
26079
|
+
const queryClient = useQueryClient();
|
|
25955
26080
|
const { accountAddress, authToken: providedAuthToken } = params;
|
|
25956
26081
|
const chainId = params.chainId ?? ctxChainId;
|
|
25957
26082
|
const internalEnabled = !!symmCoreClient && !!accountAddress;
|
|
@@ -25959,7 +26084,7 @@ function useSymmPendingInstantOpens(params) {
|
|
|
25959
26084
|
...params.query,
|
|
25960
26085
|
queryKey: symmKeys.pendingInstantOpens(accountAddress, chainId),
|
|
25961
26086
|
queryFn: async () => {
|
|
25962
|
-
const authToken = providedAuthToken ??
|
|
26087
|
+
const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
|
|
25963
26088
|
if (!authToken) {
|
|
25964
26089
|
throw new Error("failed to acquire auth token for pending instant opens");
|
|
25965
26090
|
}
|
|
@@ -26840,6 +26965,6 @@ function getSymmErrorMessage(error) {
|
|
|
26840
26965
|
return "An unexpected error occurred.";
|
|
26841
26966
|
}
|
|
26842
26967
|
|
|
26843
|
-
export { SymmProvider, getSymmErrorMessage, symmKeys, useBinanceMarkPriceStore, useSymmAccountData, useSymmAccountSummary, useSymmAccountsApi, useSymmAccountsLength, useSymmAccountsQuery, useSymmAccountsWithPositions, useSymmAllocateCollateralMutation, useSymmApprovalQuery, useSymmApproveMutation, useSymmAuth,
|
|
26968
|
+
export { SymmProvider, getSymmErrorMessage, symmKeys, useBinanceMarkPriceStore, useSymmAccountData, useSymmAccountSummary, useSymmAccountsApi, useSymmAccountsLength, useSymmAccountsQuery, useSymmAccountsWithPositions, useSymmAllocateCollateralMutation, useSymmApprovalQuery, useSymmApproveMutation, useSymmAuth, useSymmAvailableMargin, useSymmBalances, useSymmCancelClose, useSymmCancelOpenMutation, useSymmCancelTpslMutation, useSymmCancelTwapOrderMutation, useSymmChartCandles, useSymmChartSelection, useSymmClearTriggerConfigMutation, useSymmCloseAllPositionsMutation, useSymmCloseOrder, useSymmClosePositionMutation, useSymmContext, useSymmCoreClient, useSymmCreateAccountMutation, useSymmDeallocateCollateralMutation, useSymmDelegateAccessMutation, useSymmDelegation, useSymmDepositAndAllocateMutation, useSymmDepositMutation, useSymmEditAccountNameMutation, useSymmFunding, useSymmFundingHistory, useSymmFundingPayments, useSymmHedgerMarketById, useSymmHedgerMarketBySymbol, useSymmHedgerMarkets, useSymmInstantTradeEnsureReadyMutation, useSymmInstantTradeExecuteMutation, useSymmInternalTransferCollateralMutation, useSymmLockedParams, useSymmMarkReadNotificationMutation, useSymmMarkets, useSymmNotificationsQuery, useSymmOpenBasketMutation, useSymmOpenOrders, useSymmPendingIds, useSymmPendingInstantOpens, useSymmPerformanceOverlays, useSymmPortfolio, useSymmPositions, useSymmProposeRevokeDelegationMutation, useSymmRevokeDelegationMutation, useSymmSetTpslMutation, useSymmSetTriggerConfigMutation, useSymmSignTermsMutation, useSymmSignatureQuery, useSymmTokenMarkPrice, useSymmTokenSelectionMarkets, useSymmTokenSelectionMetadata, useSymmTpslOrders, useSymmTradeHistory, useSymmTriggerConfigQuery, useSymmTriggerOrders, useSymmTwapOrder, useSymmTwapOrdersQuery, useSymmUnreadCountQuery, useSymmUpdatePositionMutation, useSymmWithdraw, useSymmWs, useSymmWsStore };
|
|
26844
26969
|
//# sourceMappingURL=index.mjs.map
|
|
26845
26970
|
//# sourceMappingURL=index.mjs.map
|