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