@pear-protocol/symmio-client 0.2.47 → 0.3.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.
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { createContext, useContext, useMemo, useCallback, useEffect, useRef } from 'react';
2
+ import { createContext, useContext, useMemo, useCallback, useRef, useEffect } 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';
@@ -705,6 +705,17 @@ async function fetchAccessTokenEntry(walletClient, signerAddress, accountAddress
705
705
  // src/react/query-keys.ts
706
706
  var symmKeys = {
707
707
  all: ["symm"],
708
+ balancesRoot: ["symm", "balances"],
709
+ accountSummaryRoot: ["symm", "accountSummary"],
710
+ accountDataRoot: ["symm", "accountData"],
711
+ approvalRoot: ["symm", "approval"],
712
+ positionsRoot: ["symm", "positions"],
713
+ openOrdersRoot: ["symm", "openOrders"],
714
+ tradeHistoryRoot: ["symm", "tradeHistory"],
715
+ portfolioRoot: ["symm", "portfolio"],
716
+ tpslOrdersRoot: ["symm", "tpslOrders"],
717
+ twapOrdersRoot: ["symm", "twapOrders"],
718
+ triggerOrdersRoot: ["symm", "triggerOrders"],
708
719
  accounts: (address, chainId) => ["symm", "accounts", address, chainId],
709
720
  accountsApi: (address, chainId) => ["symm", "accountsApi", address, chainId],
710
721
  accountsLength: (address, chainId) => ["symm", "accountsLength", address, chainId],
@@ -712,7 +723,7 @@ var symmKeys = {
712
723
  accountSummary: (address, chainId) => ["symm", "accountSummary", address, chainId],
713
724
  accountData: (address, chainId, upnl) => ["symm", "accountData", address, chainId, upnl],
714
725
  signature: (address, chainId) => ["symm", "signature", address, chainId],
715
- auth: (accountAddress, chainId) => ["symm", "auth", accountAddress, chainId],
726
+ auth: (accountAddress, chainId, signerAddress) => ["symm", "auth", accountAddress, chainId, signerAddress],
716
727
  approval: (owner, spender, chainId, token) => ["symm", "approval", owner, spender, chainId, token],
717
728
  balances: (address, chainId) => ["symm", "balances", address, chainId],
718
729
  positions: (params) => ["symm", "positions", params],
@@ -732,8 +743,8 @@ var symmKeys = {
732
743
  fundingPayments: (params) => ["symm", "fundingPayments", params],
733
744
  fundingHistory: (params) => ["symm", "fundingHistory", params],
734
745
  portfolio: (params) => ["symm", "portfolio", params],
735
- notifications: (address, chainId) => ["symm", "notifications", address, chainId],
736
- unreadCount: (address, chainId) => ["symm", "unreadCount", address, chainId],
746
+ notifications: (params) => ["symm", "notifications", params],
747
+ unreadCount: (params) => ["symm", "unreadCount", params],
737
748
  availableMargin: (address, chainId) => ["symm", "availableMargin", address, chainId],
738
749
  pendingIds: (address, chainId) => ["symm", "pendingIds", address, chainId],
739
750
  pendingInstantOpens: (accountAddress, chainId) => ["symm", "pendingInstantOpens", accountAddress, chainId],
@@ -743,23 +754,25 @@ var symmKeys = {
743
754
  };
744
755
 
745
756
  // src/react/auth-cache.ts
746
- function getAuthQueryData(queryClient, accountAddress, chainId) {
747
- return queryClient.getQueryData(symmKeys.auth(accountAddress, chainId)) ?? null;
757
+ function getAuthQueryData(queryClient, accountAddress, chainId, signerAddress) {
758
+ return queryClient.getQueryData(
759
+ symmKeys.auth(accountAddress, chainId, signerAddress)
760
+ ) ?? null;
748
761
  }
749
- function setAuthQueryData(queryClient, accountAddress, chainId, entry) {
750
- queryClient.setQueryData(symmKeys.auth(accountAddress, chainId), entry);
762
+ function setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, entry) {
763
+ queryClient.setQueryData(symmKeys.auth(accountAddress, chainId, signerAddress), entry);
751
764
  }
752
- function clearAuthQueryData(queryClient, accountAddress, chainId) {
765
+ function clearAuthQueryData(queryClient, accountAddress, chainId, signerAddress) {
753
766
  queryClient.removeQueries({
754
- queryKey: symmKeys.auth(accountAddress, chainId),
767
+ queryKey: symmKeys.auth(accountAddress, chainId, signerAddress),
755
768
  exact: true
756
769
  });
757
770
  }
758
771
  function clearPersistedAuthState(accountAddress, chainId) {
759
772
  clearCachedToken(accountAddress, chainId);
760
773
  }
761
- function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId) {
762
- const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
774
+ function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId, signerAddress) {
775
+ const inQuery = getAuthQueryData(queryClient, accountAddress, chainId, signerAddress) ?? getAuthQueryData(queryClient, accountAddress, chainId);
763
776
  if (inQuery && inQuery.expiresAt > Date.now()) {
764
777
  return inQuery.token;
765
778
  }
@@ -767,7 +780,7 @@ function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId) {
767
780
  if (!persisted) {
768
781
  return null;
769
782
  }
770
- setAuthQueryData(queryClient, accountAddress, chainId, persisted);
783
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, persisted);
771
784
  return persisted.token;
772
785
  }
773
786
  async function resolveAuthTokenEntry({
@@ -783,13 +796,13 @@ async function resolveAuthTokenEntry({
783
796
  return null;
784
797
  }
785
798
  if (!force) {
786
- const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
799
+ const inQuery = getAuthQueryData(queryClient, accountAddress, chainId, signerAddress);
787
800
  if (inQuery && inQuery.expiresAt > Date.now()) {
788
801
  return inQuery;
789
802
  }
790
803
  const persisted = getCachedTokenEntry(accountAddress, chainId);
791
804
  if (persisted) {
792
- setAuthQueryData(queryClient, accountAddress, chainId, persisted);
805
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, persisted);
793
806
  return persisted;
794
807
  }
795
808
  }
@@ -800,12 +813,12 @@ async function resolveAuthTokenEntry({
800
813
  chainId,
801
814
  siweDomain
802
815
  );
803
- setAuthQueryData(queryClient, accountAddress, chainId, fresh);
816
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, fresh);
804
817
  return fresh;
805
818
  }
806
- function clearAuthState(queryClient, accountAddress, chainId) {
819
+ function clearAuthState(queryClient, accountAddress, chainId, signerAddress) {
807
820
  clearPersistedAuthState(accountAddress, chainId);
808
- clearAuthQueryData(queryClient, accountAddress, chainId);
821
+ clearAuthQueryData(queryClient, accountAddress, chainId, signerAddress);
809
822
  }
810
823
 
811
824
  // src/react/hooks/use-symm-auth.ts
@@ -879,7 +892,7 @@ function useSymmAuth(params) {
879
892
  ]
880
893
  );
881
894
  const authQuery = useQuery({
882
- queryKey: symmKeys.auth(activeAccountAddress, chainId),
895
+ queryKey: symmKeys.auth(activeAccountAddress, chainId, address),
883
896
  queryFn: async () => {
884
897
  const tokenEntry = await resolveAuthTokenEntry({
885
898
  queryClient,
@@ -901,9 +914,9 @@ function useSymmAuth(params) {
901
914
  });
902
915
  const clearAuth = useCallback(() => {
903
916
  if (activeAccountAddress) {
904
- clearAuthState(queryClient, activeAccountAddress, chainId);
917
+ clearAuthState(queryClient, activeAccountAddress, chainId, address);
905
918
  }
906
- }, [activeAccountAddress, chainId, queryClient]);
919
+ }, [activeAccountAddress, address, chainId, queryClient]);
907
920
  const token = authQuery.data?.token ?? null;
908
921
  return {
909
922
  accessToken: token,
@@ -1668,22 +1681,22 @@ function useSymmRevokeDelegationMutation(params = {}, options) {
1668
1681
 
1669
1682
  // src/react/cache.ts
1670
1683
  function invalidateBalances(qc) {
1671
- qc.invalidateQueries({ queryKey: ["symm", "balances"] });
1672
- qc.invalidateQueries({ queryKey: ["symm", "accountSummary"] });
1673
- qc.invalidateQueries({ queryKey: ["symm", "accountData"] });
1674
- qc.invalidateQueries({ queryKey: ["symm", "portfolio"] });
1684
+ qc.invalidateQueries({ queryKey: symmKeys.balancesRoot });
1685
+ qc.invalidateQueries({ queryKey: symmKeys.accountSummaryRoot });
1686
+ qc.invalidateQueries({ queryKey: symmKeys.accountDataRoot });
1687
+ qc.invalidateQueries({ queryKey: symmKeys.portfolioRoot });
1675
1688
  }
1676
1689
  function invalidatePositions(qc) {
1677
- qc.invalidateQueries({ queryKey: ["symm", "positions"] });
1678
- qc.invalidateQueries({ queryKey: ["symm", "openOrders"] });
1679
- qc.invalidateQueries({ queryKey: ["symm", "tradeHistory"] });
1680
- qc.invalidateQueries({ queryKey: ["symm", "portfolio"] });
1690
+ qc.invalidateQueries({ queryKey: symmKeys.positionsRoot });
1691
+ qc.invalidateQueries({ queryKey: symmKeys.openOrdersRoot });
1692
+ qc.invalidateQueries({ queryKey: symmKeys.tradeHistoryRoot });
1693
+ qc.invalidateQueries({ queryKey: symmKeys.portfolioRoot });
1681
1694
  }
1682
1695
  function invalidateOrders(qc) {
1683
- qc.invalidateQueries({ queryKey: ["symm", "openOrders"] });
1684
- qc.invalidateQueries({ queryKey: ["symm", "tpslOrders"] });
1685
- qc.invalidateQueries({ queryKey: ["symm", "twapOrders"] });
1686
- qc.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
1696
+ qc.invalidateQueries({ queryKey: symmKeys.openOrdersRoot });
1697
+ qc.invalidateQueries({ queryKey: symmKeys.tpslOrdersRoot });
1698
+ qc.invalidateQueries({ queryKey: symmKeys.twapOrdersRoot });
1699
+ qc.invalidateQueries({ queryKey: symmKeys.triggerOrdersRoot });
1687
1700
  }
1688
1701
 
1689
1702
  // src/react/hooks/use-symm-instant-trade.ts
@@ -1700,12 +1713,13 @@ function useInstantTradeDeps(params) {
1700
1713
  defaultTarget,
1701
1714
  multiAccount,
1702
1715
  publicClient: params.publicClient,
1716
+ signerAddress: address,
1703
1717
  symmCoreClient,
1704
1718
  walletClient: params.walletClient
1705
1719
  };
1706
1720
  }
1707
1721
  async function ensureInstantTradeReady(deps, queryClient, request) {
1708
- const { chainId, defaultAccountAddress, defaultSelectors, defaultTarget, multiAccount, publicClient, walletClient } = deps;
1722
+ const { chainId, defaultAccountAddress, defaultSelectors, defaultTarget, multiAccount, publicClient, signerAddress, walletClient } = deps;
1709
1723
  if (!publicClient || !walletClient) throw new Error("Clients not available");
1710
1724
  const accountAddress = request?.accountAddress ?? defaultAccountAddress;
1711
1725
  const target = request?.target ?? defaultTarget;
@@ -1715,7 +1729,12 @@ async function ensureInstantTradeReady(deps, queryClient, request) {
1715
1729
  if (selectors.length === 0) {
1716
1730
  throw new Error("at least one delegation selector is required");
1717
1731
  }
1718
- const accessToken = getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
1732
+ const accessToken = getAuthTokenFromRuntimeCache(
1733
+ queryClient,
1734
+ accountAddress,
1735
+ chainId,
1736
+ signerAddress
1737
+ );
1719
1738
  if (!accessToken) {
1720
1739
  throw new Error("auth token is required for instant trading");
1721
1740
  }
@@ -2128,7 +2147,12 @@ function useSymmCancelClose(options) {
2128
2147
  }
2129
2148
  const resolvedAccountAddress = accountAddress ?? address;
2130
2149
  const resolvedChainId = overrideChainId ?? chainId;
2131
- const resolvedAuthToken = authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, resolvedChainId) : null);
2150
+ const resolvedAuthToken = authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(
2151
+ queryClient,
2152
+ resolvedAccountAddress,
2153
+ resolvedChainId,
2154
+ address
2155
+ ) : null);
2132
2156
  if (!resolvedAuthToken) {
2133
2157
  throw new Error("auth token is required to cancel a pending close");
2134
2158
  }
@@ -2159,7 +2183,12 @@ function useSymmCloseOrder(options) {
2159
2183
  return symmCoreClient.orders.close(request.id, {
2160
2184
  kind: request.kind,
2161
2185
  type: request.type,
2162
- authToken: request.authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, chainId) ?? void 0 : void 0)
2186
+ authToken: request.authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(
2187
+ queryClient,
2188
+ resolvedAccountAddress,
2189
+ chainId,
2190
+ address
2191
+ ) ?? void 0 : void 0)
2163
2192
  });
2164
2193
  }
2165
2194
  });
@@ -2232,7 +2261,7 @@ function useSymmDepositMutation(params = {}, options) {
2232
2261
  ...withSymmMutationConfig(options?.mutation, {
2233
2262
  onSuccess: () => {
2234
2263
  invalidateBalances(queryClient);
2235
- queryClient.invalidateQueries({ queryKey: ["symm", "approval"] });
2264
+ queryClient.invalidateQueries({ queryKey: symmKeys.approvalRoot });
2236
2265
  }
2237
2266
  }),
2238
2267
  mutationFn: async ({
@@ -2251,7 +2280,7 @@ function useSymmDepositAndAllocateMutation(params = {}, options) {
2251
2280
  ...withSymmMutationConfig(options?.mutation, {
2252
2281
  onSuccess: () => {
2253
2282
  invalidateBalances(queryClient);
2254
- queryClient.invalidateQueries({ queryKey: ["symm", "approval"] });
2283
+ queryClient.invalidateQueries({ queryKey: symmKeys.approvalRoot });
2255
2284
  }
2256
2285
  }),
2257
2286
  mutationFn: async ({
@@ -25308,7 +25337,8 @@ function useResolveTradeAuthToken(params = {}) {
25308
25337
  const inMemoryToken = getAuthTokenFromRuntimeCache(
25309
25338
  queryClient,
25310
25339
  resolvedAccountAddress,
25311
- chainId
25340
+ chainId,
25341
+ address
25312
25342
  );
25313
25343
  if (inMemoryToken) {
25314
25344
  logTradeAuth("resolve-auth:store-hit", {
@@ -25444,13 +25474,14 @@ function useSymmUpdatePositionMutation(paramsOrOptions, maybeOptions) {
25444
25474
  typedRequest.authToken,
25445
25475
  typedRequest.accountAddress
25446
25476
  );
25447
- if (!authToken) {
25448
- throw new Error("auth token is required to update a position");
25449
- }
25450
- return symmCoreClient.positions.update(positionId, {
25477
+ const requestWithOptionalAuth = authToken ? {
25451
25478
  ...request,
25452
25479
  authToken
25453
- });
25480
+ } : request;
25481
+ return symmCoreClient.positions.update(
25482
+ positionId,
25483
+ requestWithOptionalAuth
25484
+ );
25454
25485
  }
25455
25486
  });
25456
25487
  }
@@ -25826,9 +25857,10 @@ async function fetch24hrTickers() {
25826
25857
  }
25827
25858
 
25828
25859
  // src/react/hooks/use-symm-token-selection-markets.ts
25860
+ var EMPTY_MARKETS = [];
25829
25861
  function useSymmTokenSelectionMarkets(params) {
25830
25862
  const query = useSymmHedgerMarkets(params);
25831
- const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? [];
25863
+ const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? EMPTY_MARKETS;
25832
25864
  const marketSymbols = useMemo(
25833
25865
  () => Array.from(
25834
25866
  new Set(
@@ -26007,61 +26039,81 @@ function useSymmPortfolio(params) {
26007
26039
  function useResolvedNotificationsParams(params) {
26008
26040
  const { symmCoreClient, chainId: ctxChainId } = useSymmContext();
26009
26041
  const chainId = params.chainId ?? ctxChainId;
26042
+ const accountAddress = params.accountAddress;
26043
+ const address = accountAddress ? void 0 : params.address;
26010
26044
  return {
26011
26045
  symmCoreClient,
26012
26046
  chainId,
26013
- userAddress: params.userAddress,
26047
+ accountAddress,
26048
+ address,
26014
26049
  query: params.query
26015
26050
  };
26016
26051
  }
26017
26052
  function useSymmNotificationsQuery(params) {
26018
- const { symmCoreClient, chainId, userAddress, query } = useResolvedNotificationsParams(params);
26019
- const internalEnabled = !!symmCoreClient && !!userAddress;
26053
+ const { symmCoreClient, chainId, accountAddress, address, query } = useResolvedNotificationsParams(params);
26054
+ const internalEnabled = !!symmCoreClient && !!(accountAddress || address);
26055
+ const queryParams = {
26056
+ accountAddress,
26057
+ address,
26058
+ chainId
26059
+ };
26020
26060
  return useQuery({
26021
26061
  ...query,
26022
- queryKey: symmKeys.notifications(userAddress, chainId),
26062
+ queryKey: symmKeys.notifications(queryParams),
26023
26063
  queryFn: () => symmCoreClient.notifications.list({
26024
- userAddress,
26064
+ accountAddress,
26065
+ address,
26025
26066
  chainId
26026
26067
  }),
26027
26068
  enabled: internalEnabled && (query?.enabled ?? true)
26028
26069
  });
26029
26070
  }
26030
26071
  function useSymmUnreadCountQuery(params) {
26031
- const { symmCoreClient, chainId, userAddress, query } = useResolvedNotificationsParams(params);
26032
- const internalEnabled = !!symmCoreClient && !!userAddress;
26072
+ const { symmCoreClient, chainId, accountAddress, address, query } = useResolvedNotificationsParams(params);
26073
+ const internalEnabled = !!symmCoreClient && !!(accountAddress || address);
26074
+ const queryParams = {
26075
+ accountAddress,
26076
+ address,
26077
+ chainId
26078
+ };
26033
26079
  return useQuery({
26034
26080
  ...query,
26035
- queryKey: symmKeys.unreadCount(userAddress, chainId),
26081
+ queryKey: symmKeys.unreadCount(queryParams),
26036
26082
  queryFn: () => symmCoreClient.notifications.getUnreadCount({
26037
- userAddress,
26083
+ accountAddress,
26084
+ address,
26038
26085
  chainId
26039
26086
  }),
26040
26087
  enabled: internalEnabled && (query?.enabled ?? true)
26041
26088
  });
26042
26089
  }
26043
26090
  function useSymmMarkReadNotificationMutation(params, options) {
26044
- const { symmCoreClient, chainId, userAddress } = useResolvedNotificationsParams(params);
26091
+ const { symmCoreClient, chainId, accountAddress, address } = useResolvedNotificationsParams(params);
26045
26092
  const queryClient = useQueryClient();
26093
+ const queryParams = {
26094
+ accountAddress,
26095
+ address,
26096
+ chainId
26097
+ };
26046
26098
  return useMutation({
26047
26099
  ...withSymmMutationConfig(options?.mutation, {
26048
26100
  onSuccess: () => {
26049
26101
  queryClient.invalidateQueries({
26050
- queryKey: symmKeys.notifications(userAddress, chainId)
26102
+ queryKey: symmKeys.notifications(queryParams)
26051
26103
  });
26052
26104
  queryClient.invalidateQueries({
26053
- queryKey: symmKeys.unreadCount(userAddress, chainId)
26105
+ queryKey: symmKeys.unreadCount(queryParams)
26054
26106
  });
26055
26107
  }
26056
26108
  }),
26057
26109
  mutationFn: async ({ id, timestamp }) => {
26058
- if (!symmCoreClient || !userAddress) {
26110
+ if (!symmCoreClient || !accountAddress) {
26059
26111
  throw new Error("symm-core client not available");
26060
26112
  }
26061
26113
  return symmCoreClient.notifications.markRead({
26062
26114
  id,
26063
26115
  timestamp,
26064
- userAddress,
26116
+ accountAddress,
26065
26117
  chainId
26066
26118
  });
26067
26119
  }
@@ -26085,7 +26137,8 @@ function useSymmPendingIds(params) {
26085
26137
  function useSymmPendingInstantOpens(params) {
26086
26138
  const {
26087
26139
  symmCoreClient,
26088
- chainId: ctxChainId
26140
+ chainId: ctxChainId,
26141
+ address
26089
26142
  } = useSymmContext();
26090
26143
  const queryClient = useQueryClient();
26091
26144
  const { accountAddress, authToken: providedAuthToken } = params;
@@ -26095,7 +26148,12 @@ function useSymmPendingInstantOpens(params) {
26095
26148
  ...params.query,
26096
26149
  queryKey: symmKeys.pendingInstantOpens(accountAddress, chainId),
26097
26150
  queryFn: async () => {
26098
- const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
26151
+ const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(
26152
+ queryClient,
26153
+ accountAddress,
26154
+ chainId,
26155
+ address
26156
+ );
26099
26157
  if (!authToken) {
26100
26158
  throw new Error("failed to acquire auth token for pending instant opens");
26101
26159
  }
@@ -26119,122 +26177,6 @@ function useSymmTwapOrder(params) {
26119
26177
  enabled: internalEnabled && (params.query?.enabled ?? true)
26120
26178
  });
26121
26179
  }
26122
- var useSymmWsStore = create((set) => ({
26123
- isConnected: false,
26124
- setConnected: (isConnected) => set({ isConnected })
26125
- }));
26126
-
26127
- // src/react/hooks/use-symm-ws.ts
26128
- function asUnsubscribeFn(value) {
26129
- return typeof value === "function" ? value : null;
26130
- }
26131
- function useSymmWs(params = {}) {
26132
- const {
26133
- symmCoreClient: ctxClient,
26134
- address: ctxAddress,
26135
- chainId: ctxChainId
26136
- } = useSymmContext();
26137
- const queryClient = useQueryClient();
26138
- const isConnected = useSymmWsStore((state) => state.isConnected);
26139
- const setConnected = useSymmWsStore((state) => state.setConnected);
26140
- const symmCoreClient = params.symmCoreClient ?? ctxClient;
26141
- const accountAddress = params.accountAddress ?? ctxAddress;
26142
- const chainId = params.chainId ?? ctxChainId;
26143
- useEffect(() => {
26144
- if (!symmCoreClient || !accountAddress) {
26145
- setConnected(false);
26146
- return;
26147
- }
26148
- const ws = symmCoreClient.ws;
26149
- const addr = accountAddress;
26150
- const unsubscribers = [];
26151
- const removeOnConnect = ws.onConnect(() => setConnected(true));
26152
- const removeOnDisconnect = ws.onDisconnect(() => setConnected(false));
26153
- unsubscribers.push(removeOnConnect, removeOnDisconnect);
26154
- const positionsUnsub = asUnsubscribeFn(
26155
- ws.subscribeToPositions(addr, chainId, () => {
26156
- queryClient.invalidateQueries({
26157
- queryKey: ["symm", "positions"]
26158
- });
26159
- })
26160
- );
26161
- if (positionsUnsub) unsubscribers.push(positionsUnsub);
26162
- const openOrdersUnsub = asUnsubscribeFn(
26163
- ws.subscribeToOpenOrders(addr, chainId, () => {
26164
- queryClient.invalidateQueries({
26165
- queryKey: ["symm", "openOrders"]
26166
- });
26167
- })
26168
- );
26169
- if (openOrdersUnsub) unsubscribers.push(openOrdersUnsub);
26170
- const tradesUnsub = asUnsubscribeFn(
26171
- ws.subscribeToTrades(addr, chainId, () => {
26172
- queryClient.invalidateQueries({
26173
- queryKey: ["symm", "tradeHistory"]
26174
- });
26175
- })
26176
- );
26177
- if (tradesUnsub) unsubscribers.push(tradesUnsub);
26178
- const accountSummaryUnsub = asUnsubscribeFn(
26179
- ws.subscribeToAccountSummary(addr, chainId, () => {
26180
- queryClient.invalidateQueries({
26181
- queryKey: symmKeys.balances(accountAddress, chainId)
26182
- });
26183
- queryClient.invalidateQueries({
26184
- queryKey: symmKeys.accountSummary(accountAddress, chainId)
26185
- });
26186
- })
26187
- );
26188
- if (accountSummaryUnsub) unsubscribers.push(accountSummaryUnsub);
26189
- const notificationsUnsub = asUnsubscribeFn(
26190
- ws.subscribeToNotifications(addr, chainId, () => {
26191
- queryClient.invalidateQueries({
26192
- queryKey: symmKeys.notifications(accountAddress, chainId)
26193
- });
26194
- queryClient.invalidateQueries({
26195
- queryKey: symmKeys.unreadCount(accountAddress, chainId)
26196
- });
26197
- })
26198
- );
26199
- if (notificationsUnsub) unsubscribers.push(notificationsUnsub);
26200
- const tpslUnsub = asUnsubscribeFn(
26201
- ws.subscribeToTpsl(addr, chainId, () => {
26202
- queryClient.invalidateQueries({ queryKey: ["symm", "tpslOrders"] });
26203
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26204
- })
26205
- );
26206
- if (tpslUnsub) unsubscribers.push(tpslUnsub);
26207
- const twapUnsub = asUnsubscribeFn(
26208
- ws.subscribeToTwapOrders(addr, chainId, () => {
26209
- queryClient.invalidateQueries({ queryKey: ["symm", "twapOrders"] });
26210
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26211
- })
26212
- );
26213
- if (twapUnsub) unsubscribers.push(twapUnsub);
26214
- const triggerOrdersUnsub = asUnsubscribeFn(
26215
- ws.subscribeToTriggerOrders(addr, chainId, () => {
26216
- queryClient.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
26217
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26218
- })
26219
- );
26220
- if (triggerOrdersUnsub) unsubscribers.push(triggerOrdersUnsub);
26221
- const executionsUnsub = asUnsubscribeFn(
26222
- ws.subscribeToExecutions(addr, chainId, () => {
26223
- queryClient.invalidateQueries({
26224
- queryKey: ["symm", "positions"]
26225
- });
26226
- queryClient.invalidateQueries({
26227
- queryKey: ["symm", "portfolio"]
26228
- });
26229
- })
26230
- );
26231
- if (executionsUnsub) unsubscribers.push(executionsUnsub);
26232
- return () => {
26233
- unsubscribers.forEach((unsubscribe) => unsubscribe());
26234
- };
26235
- }, [symmCoreClient, accountAddress, chainId, queryClient, setConnected]);
26236
- return { isConnected };
26237
- }
26238
26180
  var STABLE_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USD", "USDT", "USDE", "USDH", "USDT0"]);
26239
26181
  function useSymmChartSelection(input) {
26240
26182
  const {
@@ -26464,7 +26406,10 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26464
26406
  );
26465
26407
  const isUnsupported = unsupportedSymbols.length > 0;
26466
26408
  const unavailableReason = isUnsupported ? `Binance market data is unavailable for ${unsupportedSymbols.join(", ")}.` : null;
26467
- const symbolsKey = [...selectedSymbols].sort().join(",");
26409
+ const symbolsKey = useMemo(
26410
+ () => [...selectedSymbols].sort().join(","),
26411
+ [selectedSymbols]
26412
+ );
26468
26413
  const liveMarkPrices = useBinanceMarkPriceStore((state) => state.markPrices);
26469
26414
  const liveFundingRates = useBinanceMarkPriceStore(
26470
26415
  (state) => state.fundingRates
@@ -26561,7 +26506,6 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26561
26506
  }, [
26562
26507
  isUnsupported,
26563
26508
  longTokens,
26564
- query,
26565
26509
  query.data,
26566
26510
  query.isLoading,
26567
26511
  shortTokens,
@@ -26975,7 +26919,11 @@ function getSymmErrorMessage(error) {
26975
26919
  if (error instanceof Error) return error.message;
26976
26920
  return "An unexpected error occurred.";
26977
26921
  }
26922
+ var useSymmWsStore = create((set) => ({
26923
+ isConnected: false,
26924
+ setConnected: (isConnected) => set({ isConnected })
26925
+ }));
26978
26926
 
26979
- 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 };
26927
+ 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, useSymmWsStore };
26980
26928
  //# sourceMappingURL=index.mjs.map
26981
26929
  //# sourceMappingURL=index.mjs.map