@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.
@@ -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],
@@ -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 ({
@@ -25292,13 +25321,6 @@ function useResolveTradeAuthToken(params = {}) {
25292
25321
  const queryClient = useQueryClient();
25293
25322
  const address = params.address ?? context.address;
25294
25323
  const chainId = params.chainId ?? context.chainId;
25295
- const { refreshAuth } = useSymmAuth({
25296
- address,
25297
- chainId,
25298
- walletClient: params.walletClient,
25299
- siweDomain: params.siweDomain
25300
- });
25301
- const refreshAuthFromContext = context.refreshAuth;
25302
25324
  return useCallback(
25303
25325
  async (providedAuthToken, accountAddress) => {
25304
25326
  if (providedAuthToken) {
@@ -25315,7 +25337,8 @@ function useResolveTradeAuthToken(params = {}) {
25315
25337
  const inMemoryToken = getAuthTokenFromRuntimeCache(
25316
25338
  queryClient,
25317
25339
  resolvedAccountAddress,
25318
- chainId
25340
+ chainId,
25341
+ address
25319
25342
  );
25320
25343
  if (inMemoryToken) {
25321
25344
  logTradeAuth("resolve-auth:store-hit", {
@@ -25324,20 +25347,13 @@ function useResolveTradeAuthToken(params = {}) {
25324
25347
  });
25325
25348
  return inMemoryToken;
25326
25349
  }
25327
- if (refreshAuthFromContext) {
25328
- logTradeAuth("resolve-auth:context-refresh", {
25329
- accountAddress: resolvedAccountAddress,
25330
- chainId
25331
- });
25332
- return refreshAuthFromContext(resolvedAccountAddress);
25333
- }
25334
- logTradeAuth("resolve-auth:hook-refresh", {
25350
+ logTradeAuth("resolve-auth:miss", {
25335
25351
  accountAddress: resolvedAccountAddress,
25336
25352
  chainId
25337
25353
  });
25338
- return refreshAuth(resolvedAccountAddress);
25354
+ return null;
25339
25355
  },
25340
- [address, chainId, queryClient, refreshAuth, refreshAuthFromContext]
25356
+ [address, chainId, queryClient]
25341
25357
  );
25342
25358
  }
25343
25359
  function useSymmOpenBasketMutation(options) {
@@ -25396,8 +25412,9 @@ function useSymmClosePositionMutation(paramsOrOptions, maybeOptions) {
25396
25412
  });
25397
25413
  }
25398
25414
  function useSymmCloseAllPositionsMutation(options) {
25399
- const { symmCoreClient } = useSymmContext();
25415
+ const { symmCoreClient, address, chainId } = useSymmContext();
25400
25416
  const queryClient = useQueryClient();
25417
+ const resolveAuthToken = useResolveTradeAuthToken({ address, chainId });
25401
25418
  return useMutation({
25402
25419
  ...withSymmMutationConfig(options?.mutation, {
25403
25420
  onSuccess: () => {
@@ -25406,7 +25423,18 @@ function useSymmCloseAllPositionsMutation(options) {
25406
25423
  }),
25407
25424
  mutationFn: async (request) => {
25408
25425
  if (!symmCoreClient) throw new Error("symm-core client not available");
25409
- return symmCoreClient.positions.closeAll(request);
25426
+ const typedRequest = request;
25427
+ const authToken = await resolveAuthToken(
25428
+ typedRequest.authToken,
25429
+ typedRequest.accountAddress
25430
+ );
25431
+ if (!authToken) {
25432
+ throw new Error("auth token is required to close all positions");
25433
+ }
25434
+ return symmCoreClient.positions.closeAll({
25435
+ ...request,
25436
+ authToken
25437
+ });
25410
25438
  }
25411
25439
  });
25412
25440
  }
@@ -25828,9 +25856,10 @@ async function fetch24hrTickers() {
25828
25856
  }
25829
25857
 
25830
25858
  // src/react/hooks/use-symm-token-selection-markets.ts
25859
+ var EMPTY_MARKETS = [];
25831
25860
  function useSymmTokenSelectionMarkets(params) {
25832
25861
  const query = useSymmHedgerMarkets(params);
25833
- const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? [];
25862
+ const baseMarkets = query.data?.filteredMarkets ?? query.data?.markets ?? EMPTY_MARKETS;
25834
25863
  const marketSymbols = useMemo(
25835
25864
  () => Array.from(
25836
25865
  new Set(
@@ -26087,7 +26116,8 @@ function useSymmPendingIds(params) {
26087
26116
  function useSymmPendingInstantOpens(params) {
26088
26117
  const {
26089
26118
  symmCoreClient,
26090
- chainId: ctxChainId
26119
+ chainId: ctxChainId,
26120
+ address
26091
26121
  } = useSymmContext();
26092
26122
  const queryClient = useQueryClient();
26093
26123
  const { accountAddress, authToken: providedAuthToken } = params;
@@ -26097,7 +26127,12 @@ function useSymmPendingInstantOpens(params) {
26097
26127
  ...params.query,
26098
26128
  queryKey: symmKeys.pendingInstantOpens(accountAddress, chainId),
26099
26129
  queryFn: async () => {
26100
- const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(queryClient, accountAddress, chainId);
26130
+ const authToken = providedAuthToken ?? getAuthTokenFromRuntimeCache(
26131
+ queryClient,
26132
+ accountAddress,
26133
+ chainId,
26134
+ address
26135
+ );
26101
26136
  if (!authToken) {
26102
26137
  throw new Error("failed to acquire auth token for pending instant opens");
26103
26138
  }
@@ -26121,122 +26156,6 @@ function useSymmTwapOrder(params) {
26121
26156
  enabled: internalEnabled && (params.query?.enabled ?? true)
26122
26157
  });
26123
26158
  }
26124
- var useSymmWsStore = create((set) => ({
26125
- isConnected: false,
26126
- setConnected: (isConnected) => set({ isConnected })
26127
- }));
26128
-
26129
- // src/react/hooks/use-symm-ws.ts
26130
- function asUnsubscribeFn(value) {
26131
- return typeof value === "function" ? value : null;
26132
- }
26133
- function useSymmWs(params = {}) {
26134
- const {
26135
- symmCoreClient: ctxClient,
26136
- address: ctxAddress,
26137
- chainId: ctxChainId
26138
- } = useSymmContext();
26139
- const queryClient = useQueryClient();
26140
- const isConnected = useSymmWsStore((state) => state.isConnected);
26141
- const setConnected = useSymmWsStore((state) => state.setConnected);
26142
- const symmCoreClient = params.symmCoreClient ?? ctxClient;
26143
- const accountAddress = params.accountAddress ?? ctxAddress;
26144
- const chainId = params.chainId ?? ctxChainId;
26145
- useEffect(() => {
26146
- if (!symmCoreClient || !accountAddress) {
26147
- setConnected(false);
26148
- return;
26149
- }
26150
- const ws = symmCoreClient.ws;
26151
- const addr = accountAddress;
26152
- const unsubscribers = [];
26153
- const removeOnConnect = ws.onConnect(() => setConnected(true));
26154
- const removeOnDisconnect = ws.onDisconnect(() => setConnected(false));
26155
- unsubscribers.push(removeOnConnect, removeOnDisconnect);
26156
- const positionsUnsub = asUnsubscribeFn(
26157
- ws.subscribeToPositions(addr, chainId, () => {
26158
- queryClient.invalidateQueries({
26159
- queryKey: ["symm", "positions"]
26160
- });
26161
- })
26162
- );
26163
- if (positionsUnsub) unsubscribers.push(positionsUnsub);
26164
- const openOrdersUnsub = asUnsubscribeFn(
26165
- ws.subscribeToOpenOrders(addr, chainId, () => {
26166
- queryClient.invalidateQueries({
26167
- queryKey: ["symm", "openOrders"]
26168
- });
26169
- })
26170
- );
26171
- if (openOrdersUnsub) unsubscribers.push(openOrdersUnsub);
26172
- const tradesUnsub = asUnsubscribeFn(
26173
- ws.subscribeToTrades(addr, chainId, () => {
26174
- queryClient.invalidateQueries({
26175
- queryKey: ["symm", "tradeHistory"]
26176
- });
26177
- })
26178
- );
26179
- if (tradesUnsub) unsubscribers.push(tradesUnsub);
26180
- const accountSummaryUnsub = asUnsubscribeFn(
26181
- ws.subscribeToAccountSummary(addr, chainId, () => {
26182
- queryClient.invalidateQueries({
26183
- queryKey: symmKeys.balances(accountAddress, chainId)
26184
- });
26185
- queryClient.invalidateQueries({
26186
- queryKey: symmKeys.accountSummary(accountAddress, chainId)
26187
- });
26188
- })
26189
- );
26190
- if (accountSummaryUnsub) unsubscribers.push(accountSummaryUnsub);
26191
- const notificationsUnsub = asUnsubscribeFn(
26192
- ws.subscribeToNotifications(addr, chainId, () => {
26193
- queryClient.invalidateQueries({
26194
- queryKey: symmKeys.notifications(accountAddress, chainId)
26195
- });
26196
- queryClient.invalidateQueries({
26197
- queryKey: symmKeys.unreadCount(accountAddress, chainId)
26198
- });
26199
- })
26200
- );
26201
- if (notificationsUnsub) unsubscribers.push(notificationsUnsub);
26202
- const tpslUnsub = asUnsubscribeFn(
26203
- ws.subscribeToTpsl(addr, chainId, () => {
26204
- queryClient.invalidateQueries({ queryKey: ["symm", "tpslOrders"] });
26205
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26206
- })
26207
- );
26208
- if (tpslUnsub) unsubscribers.push(tpslUnsub);
26209
- const twapUnsub = asUnsubscribeFn(
26210
- ws.subscribeToTwapOrders(addr, chainId, () => {
26211
- queryClient.invalidateQueries({ queryKey: ["symm", "twapOrders"] });
26212
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26213
- })
26214
- );
26215
- if (twapUnsub) unsubscribers.push(twapUnsub);
26216
- const triggerOrdersUnsub = asUnsubscribeFn(
26217
- ws.subscribeToTriggerOrders(addr, chainId, () => {
26218
- queryClient.invalidateQueries({ queryKey: ["symm", "triggerOrders"] });
26219
- queryClient.invalidateQueries({ queryKey: ["symm", "openOrders"] });
26220
- })
26221
- );
26222
- if (triggerOrdersUnsub) unsubscribers.push(triggerOrdersUnsub);
26223
- const executionsUnsub = asUnsubscribeFn(
26224
- ws.subscribeToExecutions(addr, chainId, () => {
26225
- queryClient.invalidateQueries({
26226
- queryKey: ["symm", "positions"]
26227
- });
26228
- queryClient.invalidateQueries({
26229
- queryKey: ["symm", "portfolio"]
26230
- });
26231
- })
26232
- );
26233
- if (executionsUnsub) unsubscribers.push(executionsUnsub);
26234
- return () => {
26235
- unsubscribers.forEach((unsubscribe) => unsubscribe());
26236
- };
26237
- }, [symmCoreClient, accountAddress, chainId, queryClient, setConnected]);
26238
- return { isConnected };
26239
- }
26240
26159
  var STABLE_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USD", "USDT", "USDE", "USDH", "USDT0"]);
26241
26160
  function useSymmChartSelection(input) {
26242
26161
  const {
@@ -26466,7 +26385,10 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26466
26385
  );
26467
26386
  const isUnsupported = unsupportedSymbols.length > 0;
26468
26387
  const unavailableReason = isUnsupported ? `Binance market data is unavailable for ${unsupportedSymbols.join(", ")}.` : null;
26469
- const symbolsKey = [...selectedSymbols].sort().join(",");
26388
+ const symbolsKey = useMemo(
26389
+ () => [...selectedSymbols].sort().join(","),
26390
+ [selectedSymbols]
26391
+ );
26470
26392
  const liveMarkPrices = useBinanceMarkPriceStore((state) => state.markPrices);
26471
26393
  const liveFundingRates = useBinanceMarkPriceStore(
26472
26394
  (state) => state.fundingRates
@@ -26563,7 +26485,6 @@ function useSymmTokenSelectionMetadata(selection, options = {}) {
26563
26485
  }, [
26564
26486
  isUnsupported,
26565
26487
  longTokens,
26566
- query,
26567
26488
  query.data,
26568
26489
  query.isLoading,
26569
26490
  shortTokens,
@@ -26977,7 +26898,11 @@ function getSymmErrorMessage(error) {
26977
26898
  if (error instanceof Error) return error.message;
26978
26899
  return "An unexpected error occurred.";
26979
26900
  }
26901
+ var useSymmWsStore = create((set) => ({
26902
+ isConnected: false,
26903
+ setConnected: (isConnected) => set({ isConnected })
26904
+ }));
26980
26905
 
26981
- 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 };
26906
+ 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 };
26982
26907
  //# sourceMappingURL=index.mjs.map
26983
26908
  //# sourceMappingURL=index.mjs.map