@pear-protocol/symmio-client 0.2.46 → 0.2.49

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.
@@ -707,6 +707,17 @@ async function fetchAccessTokenEntry(walletClient, signerAddress, accountAddress
707
707
  // src/react/query-keys.ts
708
708
  var symmKeys = {
709
709
  all: ["symm"],
710
+ balancesRoot: ["symm", "balances"],
711
+ accountSummaryRoot: ["symm", "accountSummary"],
712
+ accountDataRoot: ["symm", "accountData"],
713
+ approvalRoot: ["symm", "approval"],
714
+ positionsRoot: ["symm", "positions"],
715
+ openOrdersRoot: ["symm", "openOrders"],
716
+ tradeHistoryRoot: ["symm", "tradeHistory"],
717
+ portfolioRoot: ["symm", "portfolio"],
718
+ tpslOrdersRoot: ["symm", "tpslOrders"],
719
+ twapOrdersRoot: ["symm", "twapOrders"],
720
+ triggerOrdersRoot: ["symm", "triggerOrders"],
710
721
  accounts: (address, chainId) => ["symm", "accounts", address, chainId],
711
722
  accountsApi: (address, chainId) => ["symm", "accountsApi", address, chainId],
712
723
  accountsLength: (address, chainId) => ["symm", "accountsLength", address, chainId],
@@ -714,7 +725,7 @@ var symmKeys = {
714
725
  accountSummary: (address, chainId) => ["symm", "accountSummary", address, chainId],
715
726
  accountData: (address, chainId, upnl) => ["symm", "accountData", address, chainId, upnl],
716
727
  signature: (address, chainId) => ["symm", "signature", address, chainId],
717
- auth: (accountAddress, chainId) => ["symm", "auth", accountAddress, chainId],
728
+ auth: (accountAddress, chainId, signerAddress) => ["symm", "auth", accountAddress, chainId, signerAddress],
718
729
  approval: (owner, spender, chainId, token) => ["symm", "approval", owner, spender, chainId, token],
719
730
  balances: (address, chainId) => ["symm", "balances", address, chainId],
720
731
  positions: (params) => ["symm", "positions", params],
@@ -745,23 +756,25 @@ var symmKeys = {
745
756
  };
746
757
 
747
758
  // src/react/auth-cache.ts
748
- function getAuthQueryData(queryClient, accountAddress, chainId) {
749
- return queryClient.getQueryData(symmKeys.auth(accountAddress, chainId)) ?? null;
759
+ function getAuthQueryData(queryClient, accountAddress, chainId, signerAddress) {
760
+ return queryClient.getQueryData(
761
+ symmKeys.auth(accountAddress, chainId, signerAddress)
762
+ ) ?? null;
750
763
  }
751
- function setAuthQueryData(queryClient, accountAddress, chainId, entry) {
752
- queryClient.setQueryData(symmKeys.auth(accountAddress, chainId), entry);
764
+ function setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, entry) {
765
+ queryClient.setQueryData(symmKeys.auth(accountAddress, chainId, signerAddress), entry);
753
766
  }
754
- function clearAuthQueryData(queryClient, accountAddress, chainId) {
767
+ function clearAuthQueryData(queryClient, accountAddress, chainId, signerAddress) {
755
768
  queryClient.removeQueries({
756
- queryKey: symmKeys.auth(accountAddress, chainId),
769
+ queryKey: symmKeys.auth(accountAddress, chainId, signerAddress),
757
770
  exact: true
758
771
  });
759
772
  }
760
773
  function clearPersistedAuthState(accountAddress, chainId) {
761
774
  clearCachedToken(accountAddress, chainId);
762
775
  }
763
- function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId) {
764
- const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
776
+ function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId, signerAddress) {
777
+ const inQuery = getAuthQueryData(queryClient, accountAddress, chainId, signerAddress) ?? getAuthQueryData(queryClient, accountAddress, chainId);
765
778
  if (inQuery && inQuery.expiresAt > Date.now()) {
766
779
  return inQuery.token;
767
780
  }
@@ -769,7 +782,7 @@ function getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId) {
769
782
  if (!persisted) {
770
783
  return null;
771
784
  }
772
- setAuthQueryData(queryClient, accountAddress, chainId, persisted);
785
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, persisted);
773
786
  return persisted.token;
774
787
  }
775
788
  async function resolveAuthTokenEntry({
@@ -785,13 +798,13 @@ async function resolveAuthTokenEntry({
785
798
  return null;
786
799
  }
787
800
  if (!force) {
788
- const inQuery = getAuthQueryData(queryClient, accountAddress, chainId);
801
+ const inQuery = getAuthQueryData(queryClient, accountAddress, chainId, signerAddress);
789
802
  if (inQuery && inQuery.expiresAt > Date.now()) {
790
803
  return inQuery;
791
804
  }
792
805
  const persisted = getCachedTokenEntry(accountAddress, chainId);
793
806
  if (persisted) {
794
- setAuthQueryData(queryClient, accountAddress, chainId, persisted);
807
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, persisted);
795
808
  return persisted;
796
809
  }
797
810
  }
@@ -802,12 +815,12 @@ async function resolveAuthTokenEntry({
802
815
  chainId,
803
816
  siweDomain
804
817
  );
805
- setAuthQueryData(queryClient, accountAddress, chainId, fresh);
818
+ setAuthQueryData(queryClient, accountAddress, chainId, signerAddress, fresh);
806
819
  return fresh;
807
820
  }
808
- function clearAuthState(queryClient, accountAddress, chainId) {
821
+ function clearAuthState(queryClient, accountAddress, chainId, signerAddress) {
809
822
  clearPersistedAuthState(accountAddress, chainId);
810
- clearAuthQueryData(queryClient, accountAddress, chainId);
823
+ clearAuthQueryData(queryClient, accountAddress, chainId, signerAddress);
811
824
  }
812
825
 
813
826
  // src/react/hooks/use-symm-auth.ts
@@ -881,7 +894,7 @@ function useSymmAuth(params) {
881
894
  ]
882
895
  );
883
896
  const authQuery = reactQuery.useQuery({
884
- queryKey: symmKeys.auth(activeAccountAddress, chainId),
897
+ queryKey: symmKeys.auth(activeAccountAddress, chainId, address),
885
898
  queryFn: async () => {
886
899
  const tokenEntry = await resolveAuthTokenEntry({
887
900
  queryClient,
@@ -903,9 +916,9 @@ function useSymmAuth(params) {
903
916
  });
904
917
  const clearAuth = react.useCallback(() => {
905
918
  if (activeAccountAddress) {
906
- clearAuthState(queryClient, activeAccountAddress, chainId);
919
+ clearAuthState(queryClient, activeAccountAddress, chainId, address);
907
920
  }
908
- }, [activeAccountAddress, chainId, queryClient]);
921
+ }, [activeAccountAddress, address, chainId, queryClient]);
909
922
  const token = authQuery.data?.token ?? null;
910
923
  return {
911
924
  accessToken: token,
@@ -1670,22 +1683,22 @@ function useSymmRevokeDelegationMutation(params = {}, options) {
1670
1683
 
1671
1684
  // src/react/cache.ts
1672
1685
  function invalidateBalances(qc) {
1673
- qc.invalidateQueries({ queryKey: ["symm", "balances"] });
1674
- qc.invalidateQueries({ queryKey: ["symm", "accountSummary"] });
1675
- qc.invalidateQueries({ queryKey: ["symm", "accountData"] });
1676
- qc.invalidateQueries({ queryKey: ["symm", "portfolio"] });
1686
+ qc.invalidateQueries({ queryKey: symmKeys.balancesRoot });
1687
+ qc.invalidateQueries({ queryKey: symmKeys.accountSummaryRoot });
1688
+ qc.invalidateQueries({ queryKey: symmKeys.accountDataRoot });
1689
+ qc.invalidateQueries({ queryKey: symmKeys.portfolioRoot });
1677
1690
  }
1678
1691
  function invalidatePositions(qc) {
1679
- qc.invalidateQueries({ queryKey: ["symm", "positions"] });
1680
- qc.invalidateQueries({ queryKey: ["symm", "openOrders"] });
1681
- qc.invalidateQueries({ queryKey: ["symm", "tradeHistory"] });
1682
- qc.invalidateQueries({ queryKey: ["symm", "portfolio"] });
1692
+ qc.invalidateQueries({ queryKey: symmKeys.positionsRoot });
1693
+ qc.invalidateQueries({ queryKey: symmKeys.openOrdersRoot });
1694
+ qc.invalidateQueries({ queryKey: symmKeys.tradeHistoryRoot });
1695
+ qc.invalidateQueries({ queryKey: symmKeys.portfolioRoot });
1683
1696
  }
1684
1697
  function invalidateOrders(qc) {
1685
- qc.invalidateQueries({ queryKey: ["symm", "openOrders"] });
1686
- qc.invalidateQueries({ queryKey: ["symm", "tpslOrders"] });
1687
- qc.invalidateQueries({ queryKey: ["symm", "twapOrders"] });
1688
- qc.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
1698
+ qc.invalidateQueries({ queryKey: symmKeys.openOrdersRoot });
1699
+ qc.invalidateQueries({ queryKey: symmKeys.tpslOrdersRoot });
1700
+ qc.invalidateQueries({ queryKey: symmKeys.twapOrdersRoot });
1701
+ qc.invalidateQueries({ queryKey: symmKeys.triggerOrdersRoot });
1689
1702
  }
1690
1703
 
1691
1704
  // src/react/hooks/use-symm-instant-trade.ts
@@ -1702,12 +1715,13 @@ function useInstantTradeDeps(params) {
1702
1715
  defaultTarget,
1703
1716
  multiAccount,
1704
1717
  publicClient: params.publicClient,
1718
+ signerAddress: address,
1705
1719
  symmCoreClient,
1706
1720
  walletClient: params.walletClient
1707
1721
  };
1708
1722
  }
1709
1723
  async function ensureInstantTradeReady(deps, queryClient, request) {
1710
- const { chainId, defaultAccountAddress, defaultSelectors, defaultTarget, multiAccount, publicClient, walletClient } = deps;
1724
+ const { chainId, defaultAccountAddress, defaultSelectors, defaultTarget, multiAccount, publicClient, signerAddress, walletClient } = deps;
1711
1725
  if (!publicClient || !walletClient) throw new Error("Clients not available");
1712
1726
  const accountAddress = request?.accountAddress ?? defaultAccountAddress;
1713
1727
  const target = request?.target ?? defaultTarget;
@@ -1717,7 +1731,12 @@ async function ensureInstantTradeReady(deps, queryClient, request) {
1717
1731
  if (selectors.length === 0) {
1718
1732
  throw new Error("at least one delegation selector is required");
1719
1733
  }
1720
- const accessToken = getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
1734
+ const accessToken = getAuthTokenFromRuntimeCache(
1735
+ queryClient,
1736
+ accountAddress,
1737
+ chainId,
1738
+ signerAddress
1739
+ );
1721
1740
  if (!accessToken) {
1722
1741
  throw new Error("auth token is required for instant trading");
1723
1742
  }
@@ -2130,7 +2149,12 @@ function useSymmCancelClose(options) {
2130
2149
  }
2131
2150
  const resolvedAccountAddress = accountAddress ?? address;
2132
2151
  const resolvedChainId = overrideChainId ?? chainId;
2133
- const resolvedAuthToken = authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, resolvedChainId) : null);
2152
+ const resolvedAuthToken = authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(
2153
+ queryClient,
2154
+ resolvedAccountAddress,
2155
+ resolvedChainId,
2156
+ address
2157
+ ) : null);
2134
2158
  if (!resolvedAuthToken) {
2135
2159
  throw new Error("auth token is required to cancel a pending close");
2136
2160
  }
@@ -2161,7 +2185,12 @@ function useSymmCloseOrder(options) {
2161
2185
  return symmCoreClient.orders.close(request.id, {
2162
2186
  kind: request.kind,
2163
2187
  type: request.type,
2164
- authToken: request.authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(queryClient, resolvedAccountAddress, chainId) ?? void 0 : void 0)
2188
+ authToken: request.authToken ?? (resolvedAccountAddress ? getAuthTokenFromRuntimeCache(
2189
+ queryClient,
2190
+ resolvedAccountAddress,
2191
+ chainId,
2192
+ address
2193
+ ) ?? void 0 : void 0)
2165
2194
  });
2166
2195
  }
2167
2196
  });
@@ -2234,7 +2263,7 @@ function useSymmDepositMutation(params = {}, options) {
2234
2263
  ...withSymmMutationConfig(options?.mutation, {
2235
2264
  onSuccess: () => {
2236
2265
  invalidateBalances(queryClient);
2237
- queryClient.invalidateQueries({ queryKey: ["symm", "approval"] });
2266
+ queryClient.invalidateQueries({ queryKey: symmKeys.approvalRoot });
2238
2267
  }
2239
2268
  }),
2240
2269
  mutationFn: async ({
@@ -2253,7 +2282,7 @@ function useSymmDepositAndAllocateMutation(params = {}, options) {
2253
2282
  ...withSymmMutationConfig(options?.mutation, {
2254
2283
  onSuccess: () => {
2255
2284
  invalidateBalances(queryClient);
2256
- queryClient.invalidateQueries({ queryKey: ["symm", "approval"] });
2285
+ queryClient.invalidateQueries({ queryKey: symmKeys.approvalRoot });
2257
2286
  }
2258
2287
  }),
2259
2288
  mutationFn: async ({
@@ -25294,13 +25323,6 @@ function useResolveTradeAuthToken(params = {}) {
25294
25323
  const queryClient = reactQuery.useQueryClient();
25295
25324
  const address = params.address ?? context.address;
25296
25325
  const chainId = params.chainId ?? context.chainId;
25297
- const { refreshAuth } = useSymmAuth({
25298
- address,
25299
- chainId,
25300
- walletClient: params.walletClient,
25301
- siweDomain: params.siweDomain
25302
- });
25303
- const refreshAuthFromContext = context.refreshAuth;
25304
25326
  return react.useCallback(
25305
25327
  async (providedAuthToken, accountAddress) => {
25306
25328
  if (providedAuthToken) {
@@ -25317,7 +25339,8 @@ function useResolveTradeAuthToken(params = {}) {
25317
25339
  const inMemoryToken = getAuthTokenFromRuntimeCache(
25318
25340
  queryClient,
25319
25341
  resolvedAccountAddress,
25320
- chainId
25342
+ chainId,
25343
+ address
25321
25344
  );
25322
25345
  if (inMemoryToken) {
25323
25346
  logTradeAuth("resolve-auth:store-hit", {
@@ -25326,20 +25349,13 @@ function useResolveTradeAuthToken(params = {}) {
25326
25349
  });
25327
25350
  return inMemoryToken;
25328
25351
  }
25329
- if (refreshAuthFromContext) {
25330
- logTradeAuth("resolve-auth:context-refresh", {
25331
- accountAddress: resolvedAccountAddress,
25332
- chainId
25333
- });
25334
- return refreshAuthFromContext(resolvedAccountAddress);
25335
- }
25336
- logTradeAuth("resolve-auth:hook-refresh", {
25352
+ logTradeAuth("resolve-auth:miss", {
25337
25353
  accountAddress: resolvedAccountAddress,
25338
25354
  chainId
25339
25355
  });
25340
- return refreshAuth(resolvedAccountAddress);
25356
+ return null;
25341
25357
  },
25342
- [address, chainId, queryClient, refreshAuth, refreshAuthFromContext]
25358
+ [address, chainId, queryClient]
25343
25359
  );
25344
25360
  }
25345
25361
  function useSymmOpenBasketMutation(options) {
@@ -25398,8 +25414,9 @@ function useSymmClosePositionMutation(paramsOrOptions, maybeOptions) {
25398
25414
  });
25399
25415
  }
25400
25416
  function useSymmCloseAllPositionsMutation(options) {
25401
- const { symmCoreClient } = useSymmContext();
25417
+ const { symmCoreClient, address, chainId } = useSymmContext();
25402
25418
  const queryClient = reactQuery.useQueryClient();
25419
+ const resolveAuthToken = useResolveTradeAuthToken({ address, chainId });
25403
25420
  return reactQuery.useMutation({
25404
25421
  ...withSymmMutationConfig(options?.mutation, {
25405
25422
  onSuccess: () => {
@@ -25408,7 +25425,18 @@ function useSymmCloseAllPositionsMutation(options) {
25408
25425
  }),
25409
25426
  mutationFn: async (request) => {
25410
25427
  if (!symmCoreClient) throw new Error("symm-core client not available");
25411
- return symmCoreClient.positions.closeAll(request);
25428
+ const typedRequest = request;
25429
+ const authToken = await resolveAuthToken(
25430
+ typedRequest.authToken,
25431
+ typedRequest.accountAddress
25432
+ );
25433
+ if (!authToken) {
25434
+ throw new Error("auth token is required to close all positions");
25435
+ }
25436
+ return symmCoreClient.positions.closeAll({
25437
+ ...request,
25438
+ authToken
25439
+ });
25412
25440
  }
25413
25441
  });
25414
25442
  }
@@ -25830,9 +25858,10 @@ async function fetch24hrTickers() {
25830
25858
  }
25831
25859
 
25832
25860
  // src/react/hooks/use-symm-token-selection-markets.ts
25861
+ var EMPTY_MARKETS = [];
25833
25862
  function useSymmTokenSelectionMarkets(params) {
25834
25863
  const query = useSymmHedgerMarkets(params);
25835
- const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? [];
25864
+ const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? EMPTY_MARKETS;
25836
25865
  const marketSymbols = react.useMemo(
25837
25866
  () => Array.from(
25838
25867
  new Set(
@@ -26089,7 +26118,8 @@ function useSymmPendingIds(params) {
26089
26118
  function useSymmPendingInstantOpens(params) {
26090
26119
  const {
26091
26120
  symmCoreClient,
26092
- chainId: ctxChainId
26121
+ chainId: ctxChainId,
26122
+ address
26093
26123
  } = useSymmContext();
26094
26124
  const queryClient = reactQuery.useQueryClient();
26095
26125
  const { accountAddress, authToken: providedAuthToken } = params;
@@ -26099,7 +26129,12 @@ function useSymmPendingInstantOpens(params) {
26099
26129
  ...params.query,
26100
26130
  queryKey: symmKeys.pendingInstantOpens(accountAddress, chainId),
26101
26131
  queryFn: async () => {
26102
- const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
26132
+ const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(
26133
+ queryClient,
26134
+ accountAddress,
26135
+ chainId,
26136
+ address
26137
+ );
26103
26138
  if (!authToken) {
26104
26139
  throw new Error("failed to acquire auth token for pending instant opens");
26105
26140
  }
@@ -26123,122 +26158,6 @@ function useSymmTwapOrder(params) {
26123
26158
  enabled: internalEnabled && (params.query?.enabled ?? true)
26124
26159
  });
26125
26160
  }
26126
- var useSymmWsStore = zustand.create((set) => ({
26127
- isConnected: false,
26128
- setConnected: (isConnected) => set({ isConnected })
26129
- }));
26130
-
26131
- // src/react/hooks/use-symm-ws.ts
26132
- function asUnsubscribeFn(value) {
26133
- return typeof value === "function" ? value : null;
26134
- }
26135
- function useSymmWs(params = {}) {
26136
- const {
26137
- symmCoreClient: ctxClient,
26138
- address: ctxAddress,
26139
- chainId: ctxChainId
26140
- } = useSymmContext();
26141
- const queryClient = reactQuery.useQueryClient();
26142
- const isConnected = useSymmWsStore((state) => state.isConnected);
26143
- const setConnected = useSymmWsStore((state) => state.setConnected);
26144
- const symmCoreClient = params.symmCoreClient ?? ctxClient;
26145
- const accountAddress = params.accountAddress ?? ctxAddress;
26146
- const chainId = params.chainId ?? ctxChainId;
26147
- react.useEffect(() => {
26148
- if (!symmCoreClient || !accountAddress) {
26149
- setConnected(false);
26150
- return;
26151
- }
26152
- const ws = symmCoreClient.ws;
26153
- const addr = accountAddress;
26154
- const unsubscribers = [];
26155
- const removeOnConnect = ws.onConnect(() => setConnected(true));
26156
- const removeOnDisconnect = ws.onDisconnect(() => setConnected(false));
26157
- unsubscribers.push(removeOnConnect, removeOnDisconnect);
26158
- const positionsUnsub = asUnsubscribeFn(
26159
- ws.subscribeToPositions(addr, chainId, () => {
26160
- queryClient.invalidateQueries({
26161
- queryKey: ["symm", "positions"]
26162
- });
26163
- })
26164
- );
26165
- if (positionsUnsub) unsubscribers.push(positionsUnsub);
26166
- const openOrdersUnsub = asUnsubscribeFn(
26167
- ws.subscribeToOpenOrders(addr, chainId, () => {
26168
- queryClient.invalidateQueries({
26169
- queryKey: ["symm", "openOrders"]
26170
- });
26171
- })
26172
- );
26173
- if (openOrdersUnsub) unsubscribers.push(openOrdersUnsub);
26174
- const tradesUnsub = asUnsubscribeFn(
26175
- ws.subscribeToTrades(addr, chainId, () => {
26176
- queryClient.invalidateQueries({
26177
- queryKey: ["symm", "tradeHistory"]
26178
- });
26179
- })
26180
- );
26181
- if (tradesUnsub) unsubscribers.push(tradesUnsub);
26182
- const accountSummaryUnsub = asUnsubscribeFn(
26183
- ws.subscribeToAccountSummary(addr, chainId, () => {
26184
- queryClient.invalidateQueries({
26185
- queryKey: symmKeys.balances(accountAddress, chainId)
26186
- });
26187
- queryClient.invalidateQueries({
26188
- queryKey: symmKeys.accountSummary(accountAddress, chainId)
26189
- });
26190
- })
26191
- );
26192
- if (accountSummaryUnsub) unsubscribers.push(accountSummaryUnsub);
26193
- const notificationsUnsub = asUnsubscribeFn(
26194
- ws.subscribeToNotifications(addr, chainId, () => {
26195
- queryClient.invalidateQueries({
26196
- queryKey: symmKeys.notifications(accountAddress, chainId)
26197
- });
26198
- queryClient.invalidateQueries({
26199
- queryKey: symmKeys.unreadCount(accountAddress, chainId)
26200
- });
26201
- })
26202
- );
26203
- if (notificationsUnsub) unsubscribers.push(notificationsUnsub);
26204
- const tpslUnsub = asUnsubscribeFn(
26205
- ws.subscribeToTpsl(addr, chainId, () => {
26206
- queryClient.invalidateQueries({ queryKey: ["symm", "tpslOrders"] });
26207
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26208
- })
26209
- );
26210
- if (tpslUnsub) unsubscribers.push(tpslUnsub);
26211
- const twapUnsub = asUnsubscribeFn(
26212
- ws.subscribeToTwapOrders(addr, chainId, () => {
26213
- queryClient.invalidateQueries({ queryKey: ["symm", "twapOrders"] });
26214
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26215
- })
26216
- );
26217
- if (twapUnsub) unsubscribers.push(twapUnsub);
26218
- const triggerOrdersUnsub = asUnsubscribeFn(
26219
- ws.subscribeToTriggerOrders(addr, chainId, () => {
26220
- queryClient.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
26221
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26222
- })
26223
- );
26224
- if (triggerOrdersUnsub) unsubscribers.push(triggerOrdersUnsub);
26225
- const executionsUnsub = asUnsubscribeFn(
26226
- ws.subscribeToExecutions(addr, chainId, () => {
26227
- queryClient.invalidateQueries({
26228
- queryKey: ["symm", "positions"]
26229
- });
26230
- queryClient.invalidateQueries({
26231
- queryKey: ["symm", "portfolio"]
26232
- });
26233
- })
26234
- );
26235
- if (executionsUnsub) unsubscribers.push(executionsUnsub);
26236
- return () => {
26237
- unsubscribers.forEach((unsubscribe) => unsubscribe());
26238
- };
26239
- }, [symmCoreClient, accountAddress, chainId, queryClient, setConnected]);
26240
- return { isConnected };
26241
- }
26242
26161
  var STABLE_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USD", "USDT", "USDE", "USDH", "USDT0"]);
26243
26162
  function useSymmChartSelection(input) {
26244
26163
  const {
@@ -26468,7 +26387,10 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26468
26387
  );
26469
26388
  const isUnsupported = unsupportedSymbols.length > 0;
26470
26389
  const unavailableReason = isUnsupported ? `Binance market data is unavailable for ${unsupportedSymbols.join(", ")}.` : null;
26471
- const symbolsKey = [...selectedSymbols].sort().join(",");
26390
+ const symbolsKey = react.useMemo(
26391
+ () => [...selectedSymbols].sort().join(","),
26392
+ [selectedSymbols]
26393
+ );
26472
26394
  const liveMarkPrices = useBinanceMarkPriceStore((state) => state.markPrices);
26473
26395
  const liveFundingRates = useBinanceMarkPriceStore(
26474
26396
  (state) => state.fundingRates
@@ -26565,7 +26487,6 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26565
26487
  }, [
26566
26488
  isUnsupported,
26567
26489
  longTokens,
26568
- query,
26569
26490
  query.data,
26570
26491
  query.isLoading,
26571
26492
  shortTokens,
@@ -26979,6 +26900,10 @@ function getSymmErrorMessage(error) {
26979
26900
  if (error instanceof Error) return error.message;
26980
26901
  return "An unexpected error occurred.";
26981
26902
  }
26903
+ var useSymmWsStore = zustand.create((set) => ({
26904
+ isConnected: false,
26905
+ setConnected: (isConnected) => set({ isConnected })
26906
+ }));
26982
26907
 
26983
26908
  exports.SymmProvider = SymmProvider;
26984
26909
  exports.getSymmErrorMessage = getSymmErrorMessage;
@@ -27053,7 +26978,6 @@ exports.useSymmTwapOrdersQuery = useSymmTwapOrdersQuery;
27053
26978
  exports.useSymmUnreadCountQuery = useSymmUnreadCountQuery;
27054
26979
  exports.useSymmUpdatePositionMutation = useSymmUpdatePositionMutation;
27055
26980
  exports.useSymmWithdraw = useSymmWithdraw;
27056
- exports.useSymmWs = useSymmWs;
27057
26981
  exports.useSymmWsStore = useSymmWsStore;
27058
26982
  //# sourceMappingURL=index.js.map
27059
26983
  //# sourceMappingURL=index.js.map