@pear-protocol/hyperliquid-sdk 0.0.68 → 0.0.69

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.
@@ -126,3 +126,10 @@ export interface AdjustAdvanceResponseDto {
126
126
  }
127
127
  export declare function adjustAdvancePosition(baseUrl: string, positionId: string, payload: AdjustAdvanceItemInput[], displayToFull: Map<string, string>): Promise<ApiResponse<AdjustAdvanceResponseDto>>;
128
128
  export declare function cancelTwap(baseUrl: string, orderId: string): Promise<ApiResponse<CancelTwapResponseDto>>;
129
+ export interface UpdateLeverageRequestInput {
130
+ leverage: number;
131
+ }
132
+ export interface UpdateLeverageResponseDto {
133
+ message?: string;
134
+ }
135
+ export declare function updateLeverage(baseUrl: string, positionId: string, payload: UpdateLeverageRequestInput): Promise<ApiResponse<UpdateLeverageResponseDto | null>>;
@@ -1,4 +1,4 @@
1
- import { type CreatePositionRequestInput, type CreatePositionResponseDto, type UpdateRiskParametersRequestInput, type UpdateRiskParametersResponseDto, type ClosePositionRequestInput, type ClosePositionResponseDto, type CloseAllPositionsResponseDto, type AdjustPositionRequestInput, type AdjustPositionResponseDto, type AdjustAdvanceItemInput, type AdjustAdvanceResponseDto } from '../clients/positions';
1
+ import { type CreatePositionRequestInput, type CreatePositionResponseDto, type UpdateRiskParametersRequestInput, type UpdateRiskParametersResponseDto, type ClosePositionRequestInput, type ClosePositionResponseDto, type CloseAllPositionsResponseDto, type AdjustPositionRequestInput, type AdjustPositionResponseDto, type AdjustAdvanceItemInput, type AdjustAdvanceResponseDto, type UpdateLeverageResponseDto } from '../clients/positions';
2
2
  import type { ApiResponse, OpenPositionDto } from '../types';
3
3
  export declare function usePosition(): {
4
4
  readonly createPosition: (payload: CreatePositionRequestInput) => Promise<ApiResponse<CreatePositionResponseDto>>;
@@ -7,6 +7,7 @@ export declare function usePosition(): {
7
7
  readonly closeAllPositions: (payload: ClosePositionRequestInput) => Promise<ApiResponse<CloseAllPositionsResponseDto>>;
8
8
  readonly adjustPosition: (positionId: string, payload: AdjustPositionRequestInput) => Promise<ApiResponse<AdjustPositionResponseDto>>;
9
9
  readonly adjustAdvancePosition: (positionId: string, payload: AdjustAdvanceItemInput[]) => Promise<ApiResponse<AdjustAdvanceResponseDto>>;
10
+ readonly updateLeverage: (positionId: string, leverage: number) => Promise<ApiResponse<UpdateLeverageResponseDto | null>>;
10
11
  readonly openPositions: OpenPositionDto[] | null;
11
12
  readonly isLoading: boolean;
12
13
  };
package/dist/index.d.ts CHANGED
@@ -1008,6 +1008,13 @@ interface AdjustAdvanceResponseDto {
1008
1008
  }
1009
1009
  declare function adjustAdvancePosition(baseUrl: string, positionId: string, payload: AdjustAdvanceItemInput[], displayToFull: Map<string, string>): Promise<ApiResponse<AdjustAdvanceResponseDto>>;
1010
1010
  declare function cancelTwap(baseUrl: string, orderId: string): Promise<ApiResponse<CancelTwapResponseDto>>;
1011
+ interface UpdateLeverageRequestInput {
1012
+ leverage: number;
1013
+ }
1014
+ interface UpdateLeverageResponseDto {
1015
+ message?: string;
1016
+ }
1017
+ declare function updateLeverage(baseUrl: string, positionId: string, payload: UpdateLeverageRequestInput): Promise<ApiResponse<UpdateLeverageResponseDto | null>>;
1011
1018
 
1012
1019
  declare function usePosition(): {
1013
1020
  readonly createPosition: (payload: CreatePositionRequestInput) => Promise<ApiResponse<CreatePositionResponseDto>>;
@@ -1016,6 +1023,7 @@ declare function usePosition(): {
1016
1023
  readonly closeAllPositions: (payload: ClosePositionRequestInput) => Promise<ApiResponse<CloseAllPositionsResponseDto>>;
1017
1024
  readonly adjustPosition: (positionId: string, payload: AdjustPositionRequestInput) => Promise<ApiResponse<AdjustPositionResponseDto>>;
1018
1025
  readonly adjustAdvancePosition: (positionId: string, payload: AdjustAdvanceItemInput[]) => Promise<ApiResponse<AdjustAdvanceResponseDto>>;
1026
+ readonly updateLeverage: (positionId: string, leverage: number) => Promise<ApiResponse<UpdateLeverageResponseDto | null>>;
1019
1027
  readonly openPositions: OpenPositionDto[] | null;
1020
1028
  readonly isLoading: boolean;
1021
1029
  };
@@ -1325,5 +1333,5 @@ declare function validatePositionSize(usdValue: number, longAssets?: PairAssetIn
1325
1333
 
1326
1334
  declare const useMarketData: any;
1327
1335
 
1328
- export { AccountSummaryCalculator, ConflictDetector, MAX_ASSETS_PER_LEG, MINIMUM_ASSET_USD_VALUE, MaxAssetsPerLegError, MinimumPositionSizeError, PearHyperliquidProvider, TokenMetadataExtractor, adjustAdvancePosition, adjustOrder, adjustPosition, calculateMinimumPositionValue, calculateWeightedRatio, cancelOrder, cancelTwap, cancelTwapOrder, closeAllPositions, closePosition, computeBasketCandles, createCandleLookups, createPosition, getCompleteTimestamps, getPortfolio, mapCandleIntervalToTradingViewInterval, mapTradingViewIntervalToCandleInterval, markNotificationReadById, markNotificationsRead, toggleWatchlist, updateRiskParameters, useAccountSummary, useActiveBaskets, useAgentWallet, useAllBaskets, useAuth, useAutoSyncFills, useBasketCandles, useFindBasket, useHighlightedBaskets, useHistoricalPriceData, useHistoricalPriceDataStore, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMarketData, useMarketDataAllPayload, useMarketDataPayload, useNotifications, useOpenOrders, useOrders, usePearHyperliquid, usePerformanceOverlays, usePortfolio, usePosition, useTokenSelectionMetadata, useTopGainers, useTopLosers, useTradeHistories, useTwap, useUserSelection, useWatchlist, useWatchlistBaskets, useWebData, validateMaxAssetsPerLeg, validateMinimumAssetSize, validatePositionSize };
1329
- export type { AccountSummaryResponseDto, ActiveAssetGroupItem, ActiveAssetsResponse, AdjustAdvanceAssetInput, AdjustAdvanceItemInput, AdjustAdvanceResponseDto, AdjustExecutionType, AdjustOrderRequestInput, AdjustOrderResponseDto, AdjustPositionRequestInput, AdjustPositionResponseDto, AgentWalletDto, AgentWalletState, ApiErrorResponse, ApiResponse, AssetCtx, AssetInformationDetail, AssetMarketData, AssetPosition, AutoSyncFillsOptions, AutoSyncFillsState, BalanceSummaryDto, CancelOrderResponseDto, CancelTwapResponseDto, CandleChartData, CandleData, CandleInterval, CandleSnapshotRequest, ClearinghouseState, CloseAllPositionsResponseDto, CloseAllPositionsResultDto, CloseExecutionType, ClosePositionRequestInput, ClosePositionResponseDto, CreatePositionRequestInput, CreatePositionResponseDto, CrossMarginSummaryDto, CumFundingDto, ExecutionType, ExtraAgent, HLWebSocketResponse, HistoricalRange, LadderConfigInput, MarginSummaryDto, NotificationCategory, NotificationDto, OpenLimitOrderDto, OpenPositionDto, OrderAssetDto, OrderStatus, PairAssetDto, PairAssetInput, PerformanceOverlay, PlatformAccountSummaryResponseDto, PortfolioBucketDto, PortfolioInterval, PortfolioIntervalsDto, PortfolioOverallDto, PortfolioResponseDto, PositionAdjustmentType, PositionAssetDetailDto, PositionAssetSummaryDto, PositionResponseStatus, RealtimeBar, RealtimeBarsCallback, ToggleWatchlistResponseDto, TokenConflict, TokenHistoricalPriceData, TokenMetadata, TokenSelection, TpSlThresholdInput, TpSlThresholdType, TradeHistoryAssetDataDto, TradeHistoryDataDto, TwapChunkStatusDto, TwapMonitoringDto, TwapSliceFillResponseItem, UniverseAsset, UpdateRiskParametersRequestInput, UpdateRiskParametersResponseDto, UseAuthOptions, UseBasketCandlesReturn, UseHistoricalPriceDataReturn, UseNotificationsResult, UsePerformanceOverlaysReturn, UsePortfolioResult, UseTokenSelectionMetadataReturn, UserProfile, UserSelectionState, WatchlistItemDto, WebSocketAckResponse, WebSocketChannel, WebSocketConnectionState, WebSocketDataMessage, WebSocketMessage, WebSocketSubscribeMessage, WsAllMidsData };
1336
+ export { AccountSummaryCalculator, ConflictDetector, MAX_ASSETS_PER_LEG, MINIMUM_ASSET_USD_VALUE, MaxAssetsPerLegError, MinimumPositionSizeError, PearHyperliquidProvider, TokenMetadataExtractor, adjustAdvancePosition, adjustOrder, adjustPosition, calculateMinimumPositionValue, calculateWeightedRatio, cancelOrder, cancelTwap, cancelTwapOrder, closeAllPositions, closePosition, computeBasketCandles, createCandleLookups, createPosition, getCompleteTimestamps, getPortfolio, mapCandleIntervalToTradingViewInterval, mapTradingViewIntervalToCandleInterval, markNotificationReadById, markNotificationsRead, toggleWatchlist, updateLeverage, updateRiskParameters, useAccountSummary, useActiveBaskets, useAgentWallet, useAllBaskets, useAuth, useAutoSyncFills, useBasketCandles, useFindBasket, useHighlightedBaskets, useHistoricalPriceData, useHistoricalPriceDataStore, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMarketData, useMarketDataAllPayload, useMarketDataPayload, useNotifications, useOpenOrders, useOrders, usePearHyperliquid, usePerformanceOverlays, usePortfolio, usePosition, useTokenSelectionMetadata, useTopGainers, useTopLosers, useTradeHistories, useTwap, useUserSelection, useWatchlist, useWatchlistBaskets, useWebData, validateMaxAssetsPerLeg, validateMinimumAssetSize, validatePositionSize };
1337
+ export type { AccountSummaryResponseDto, ActiveAssetGroupItem, ActiveAssetsResponse, AdjustAdvanceAssetInput, AdjustAdvanceItemInput, AdjustAdvanceResponseDto, AdjustExecutionType, AdjustOrderRequestInput, AdjustOrderResponseDto, AdjustPositionRequestInput, AdjustPositionResponseDto, AgentWalletDto, AgentWalletState, ApiErrorResponse, ApiResponse, AssetCtx, AssetInformationDetail, AssetMarketData, AssetPosition, AutoSyncFillsOptions, AutoSyncFillsState, BalanceSummaryDto, CancelOrderResponseDto, CancelTwapResponseDto, CandleChartData, CandleData, CandleInterval, CandleSnapshotRequest, ClearinghouseState, CloseAllPositionsResponseDto, CloseAllPositionsResultDto, CloseExecutionType, ClosePositionRequestInput, ClosePositionResponseDto, CreatePositionRequestInput, CreatePositionResponseDto, CrossMarginSummaryDto, CumFundingDto, ExecutionType, ExtraAgent, HLWebSocketResponse, HistoricalRange, LadderConfigInput, MarginSummaryDto, NotificationCategory, NotificationDto, OpenLimitOrderDto, OpenPositionDto, OrderAssetDto, OrderStatus, PairAssetDto, PairAssetInput, PerformanceOverlay, PlatformAccountSummaryResponseDto, PortfolioBucketDto, PortfolioInterval, PortfolioIntervalsDto, PortfolioOverallDto, PortfolioResponseDto, PositionAdjustmentType, PositionAssetDetailDto, PositionAssetSummaryDto, PositionResponseStatus, RealtimeBar, RealtimeBarsCallback, ToggleWatchlistResponseDto, TokenConflict, TokenHistoricalPriceData, TokenMetadata, TokenSelection, TpSlThresholdInput, TpSlThresholdType, TradeHistoryAssetDataDto, TradeHistoryDataDto, TwapChunkStatusDto, TwapMonitoringDto, TwapSliceFillResponseItem, UniverseAsset, UpdateLeverageRequestInput, UpdateLeverageResponseDto, UpdateRiskParametersRequestInput, UpdateRiskParametersResponseDto, UseAuthOptions, UseBasketCandlesReturn, UseHistoricalPriceDataReturn, UseNotificationsResult, UsePerformanceOverlaysReturn, UsePortfolioResult, UseTokenSelectionMetadataReturn, UserProfile, UserSelectionState, WatchlistItemDto, WebSocketAckResponse, WebSocketChannel, WebSocketConnectionState, WebSocketDataMessage, WebSocketMessage, WebSocketSubscribeMessage, WsAllMidsData };
package/dist/index.js CHANGED
@@ -625,11 +625,11 @@ const useUserSelection$1 = create((set, get) => ({
625
625
  }));
626
626
 
627
627
  const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
628
- const { setAllMids, setActiveAssetData, upsertActiveAssetData, setCandleData, deleteCandleSymbol, deleteActiveAssetData, addCandleData, setFinalAssetContexts, setFinalAtOICaps, setAggregatedClearingHouseState } = useHyperliquidData();
628
+ const { setAllMids, setActiveAssetData, upsertActiveAssetData, setCandleData, deleteCandleSymbol, deleteActiveAssetData, addCandleData, setFinalAssetContexts, setFinalAtOICaps, setAggregatedClearingHouseState, } = useHyperliquidData();
629
629
  const { candleInterval } = useUserSelection$1();
630
630
  const longTokens = useUserSelection$1((s) => s.longTokens);
631
631
  const shortTokens = useUserSelection$1((s) => s.shortTokens);
632
- const selectedTokenSymbols = useMemo(() => ([...longTokens, ...shortTokens].map((t) => t.symbol)), [longTokens, shortTokens]);
632
+ const selectedTokenSymbols = useMemo(() => [...longTokens, ...shortTokens].map((t) => t.symbol), [longTokens, shortTokens]);
633
633
  const [lastError, setLastError] = useState(null);
634
634
  const [subscribedAddress, setSubscribedAddress] = useState(null);
635
635
  const [subscribedTokens, setSubscribedTokens] = useState([]);
@@ -644,9 +644,9 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
644
644
  try {
645
645
  const message = JSON.parse(event.data);
646
646
  // Handle subscription responses
647
- if ('success' in message || 'error' in message) {
647
+ if ("success" in message || "error" in message) {
648
648
  if (message.error) {
649
- console.error('[HyperLiquid WS] Subscription error:', message.error);
649
+ console.error("[HyperLiquid WS] Subscription error:", message.error);
650
650
  setLastError(message.error);
651
651
  }
652
652
  else {
@@ -655,36 +655,30 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
655
655
  return;
656
656
  }
657
657
  // Handle channel data messages
658
- if ('channel' in message && 'data' in message) {
658
+ if ("channel" in message && "data" in message) {
659
659
  const response = message;
660
660
  switch (response.channel) {
661
- case 'webData3':
661
+ case "webData3":
662
662
  const webData3 = response.data;
663
663
  // finalAssetContexts now sourced from allDexsAssetCtxs channel
664
664
  const finalAtOICaps = webData3.perpDexStates.flatMap((dex) => dex.perpsAtOpenInterestCap);
665
665
  setFinalAtOICaps(finalAtOICaps);
666
666
  break;
667
- case 'allDexsAssetCtxs':
667
+ case "allDexsAssetCtxs":
668
668
  {
669
669
  const data = response.data;
670
670
  const finalAssetContexts = (data.ctxs || []).flatMap(([, ctxs]) => ctxs || []);
671
671
  setFinalAssetContexts(finalAssetContexts);
672
672
  }
673
673
  break;
674
- case 'allDexsClearinghouseState':
674
+ case "allDexsClearinghouseState":
675
675
  {
676
- // If the user is not authenticated, ignore clearinghouse state to avoid
677
- // populating summaries with the default zero address data.
678
- if (!address) {
679
- setAggregatedClearingHouseState(null);
680
- break;
681
- }
682
676
  const data = response.data;
683
677
  const states = (data.clearinghouseStates || [])
684
678
  .map(([, s]) => s)
685
679
  .filter(Boolean);
686
- const sum = (values) => values.reduce((acc, v) => acc + (parseFloat(v || '0') || 0), 0);
687
- const toStr = (n) => (Number.isFinite(n) ? n.toString() : '0');
680
+ const sum = (values) => values.reduce((acc, v) => acc + (parseFloat(v || "0") || 0), 0);
681
+ const toStr = (n) => Number.isFinite(n) ? n.toString() : "0";
688
682
  const assetPositions = states.flatMap((s) => s.assetPositions || []);
689
683
  const crossMaintenanceMarginUsed = toStr(sum(states.map((s) => s.crossMaintenanceMarginUsed)));
690
684
  const crossMarginSummary = {
@@ -712,29 +706,34 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
712
706
  setAggregatedClearingHouseState(aggregatedClearingHouseState);
713
707
  }
714
708
  break;
715
- case 'allMids':
709
+ case "allMids":
716
710
  {
717
711
  const data = response.data;
718
712
  const remapped = {
719
713
  mids: Object.fromEntries(
720
714
  // only support non hip-3 and xyz market
721
- Object.entries(data.mids || {}).filter(([k, v]) => !k.includes(':') || k.includes('xyz:')).map(([k, v]) => [toDisplaySymbol(k), v]))
715
+ Object.entries(data.mids || {})
716
+ .filter(([k, v]) => !k.includes(":") || k.includes("xyz:"))
717
+ .map(([k, v]) => [toDisplaySymbol(k), v])),
722
718
  };
723
719
  setAllMids(remapped);
724
720
  }
725
721
  break;
726
- case 'activeAssetData':
722
+ case "activeAssetData":
727
723
  {
728
724
  const assetData = response.data;
729
725
  const symbol = toDisplaySymbol(assetData.coin);
730
- const normalized = { ...assetData, coin: symbol };
726
+ const normalized = {
727
+ ...assetData,
728
+ coin: symbol,
729
+ };
731
730
  upsertActiveAssetData(symbol, normalized);
732
731
  }
733
732
  break;
734
- case 'candle':
733
+ case "candle":
735
734
  {
736
735
  const candleDataItem = response.data;
737
- const symbol = toDisplaySymbol(candleDataItem.s || '');
736
+ const symbol = toDisplaySymbol(candleDataItem.s || "");
738
737
  const normalized = { ...candleDataItem, s: symbol };
739
738
  addCandleData(symbol, normalized);
740
739
  }
@@ -746,10 +745,17 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
746
745
  }
747
746
  catch (error) {
748
747
  const errorMessage = `Failed to parse message: ${error instanceof Error ? error.message : String(error)}`;
749
- console.error('[HyperLiquid WS] Parse error:', errorMessage, 'Raw message:', event.data);
748
+ console.error("[HyperLiquid WS] Parse error:", errorMessage, "Raw message:", event.data);
750
749
  setLastError(errorMessage);
751
750
  }
752
- }, [setAllMids, upsertActiveAssetData, addCandleData, setFinalAssetContexts, setFinalAtOICaps, setAggregatedClearingHouseState]);
751
+ }, [
752
+ setAllMids,
753
+ upsertActiveAssetData,
754
+ addCandleData,
755
+ setFinalAssetContexts,
756
+ setFinalAtOICaps,
757
+ setAggregatedClearingHouseState,
758
+ ]);
753
759
  const connect = useCallback(() => {
754
760
  if (!enabled)
755
761
  return;
@@ -762,7 +768,7 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
762
768
  }
763
769
  manualCloseRef.current = false;
764
770
  setReadyState(ReadyState.CONNECTING);
765
- const ws = new WebSocket('wss://api.hyperliquid.xyz/ws');
771
+ const ws = new WebSocket("wss://api.hyperliquid.xyz/ws");
766
772
  wsRef.current = ws;
767
773
  ws.onopen = () => {
768
774
  reconnectAttemptsRef.current = 0;
@@ -771,15 +777,15 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
771
777
  };
772
778
  ws.onmessage = handleMessage;
773
779
  ws.onerror = (event) => {
774
- console.error('[HyperLiquid WS] Connection error:', event);
775
- setLastError('WebSocket error');
780
+ console.error("[HyperLiquid WS] Connection error:", event);
781
+ setLastError("WebSocket error");
776
782
  };
777
783
  ws.onclose = () => {
778
784
  setReadyState(ReadyState.CLOSED);
779
785
  if (!manualCloseRef.current && reconnectAttemptsRef.current < 5) {
780
786
  reconnectAttemptsRef.current += 1;
781
787
  if (reconnectAttemptsRef.current === 5) {
782
- console.error('[HyperLiquid WS] Reconnection stopped after 5 attempts');
788
+ console.error("[HyperLiquid WS] Reconnection stopped after 5 attempts");
783
789
  }
784
790
  setTimeout(() => connect(), 3000);
785
791
  }
@@ -813,7 +819,7 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
813
819
  if (isConnected) {
814
820
  // Send ping every 30 seconds
815
821
  pingIntervalRef.current = setInterval(() => {
816
- sendJsonMessage({ method: 'ping' });
822
+ sendJsonMessage({ method: "ping" });
817
823
  }, 30000);
818
824
  }
819
825
  else {
@@ -833,57 +839,57 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
833
839
  useEffect(() => {
834
840
  if (!isConnected)
835
841
  return;
836
- const DEFAULT_ADDRESS = '0x0000000000000000000000000000000000000000';
842
+ const DEFAULT_ADDRESS = "0x0000000000000000000000000000000000000000";
837
843
  const userAddress = address || DEFAULT_ADDRESS;
838
844
  if (subscribedAddress === userAddress)
839
845
  return;
840
846
  // Unsubscribe from previous address if exists
841
847
  if (subscribedAddress) {
842
848
  const unsubscribeMessage = {
843
- method: 'unsubscribe',
849
+ method: "unsubscribe",
844
850
  subscription: {
845
- type: 'webData3',
851
+ type: "webData3",
846
852
  user: subscribedAddress,
847
853
  },
848
854
  };
849
855
  sendJsonMessage(unsubscribeMessage);
850
856
  const unsubscribeAllDexsClearinghouseState = {
851
- method: 'unsubscribe',
857
+ method: "unsubscribe",
852
858
  subscription: {
853
- type: 'allDexsClearinghouseState',
859
+ type: "allDexsClearinghouseState",
854
860
  user: subscribedAddress,
855
861
  },
856
862
  };
857
863
  sendJsonMessage(unsubscribeAllDexsClearinghouseState);
858
864
  }
859
865
  const subscribeWebData3 = {
860
- method: 'subscribe',
866
+ method: "subscribe",
861
867
  subscription: {
862
- type: 'webData3',
868
+ type: "webData3",
863
869
  user: userAddress,
864
870
  },
865
871
  };
866
872
  // Subscribe to allDexsClearinghouseState with the same payload as webData3
867
873
  const subscribeAllDexsClearinghouseState = {
868
- method: 'subscribe',
874
+ method: "subscribe",
869
875
  subscription: {
870
- type: 'allDexsClearinghouseState',
876
+ type: "allDexsClearinghouseState",
871
877
  user: userAddress,
872
878
  },
873
879
  };
874
880
  // Subscribe to allMids
875
881
  const subscribeAllMids = {
876
- method: 'subscribe',
882
+ method: "subscribe",
877
883
  subscription: {
878
- type: 'allMids',
879
- dex: 'ALL_DEXS',
884
+ type: "allMids",
885
+ dex: "ALL_DEXS",
880
886
  },
881
887
  };
882
888
  // Subscribe to allDexsAssetCtxs (no payload params, global feed)
883
889
  const subscribeAllDexsAssetCtxs = {
884
- method: 'subscribe',
890
+ method: "subscribe",
885
891
  subscription: {
886
- type: 'allDexsAssetCtxs',
892
+ type: "allDexsAssetCtxs",
887
893
  },
888
894
  };
889
895
  sendJsonMessage(subscribeWebData3);
@@ -896,7 +902,13 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
896
902
  // clear aggregatedClearingHouseState
897
903
  setAggregatedClearingHouseState(null);
898
904
  }
899
- }, [isConnected, address, subscribedAddress, sendJsonMessage, setAggregatedClearingHouseState]);
905
+ }, [
906
+ isConnected,
907
+ address,
908
+ subscribedAddress,
909
+ sendJsonMessage,
910
+ setAggregatedClearingHouseState,
911
+ ]);
900
912
  // Handle token subscriptions for activeAssetData
901
913
  useEffect(() => {
902
914
  if (!isConnected || !address)
@@ -905,11 +917,11 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
905
917
  const tokensToSubscribe = effectiveTokens.filter((token) => token && !subscribedTokens.includes(token));
906
918
  const tokensToUnsubscribe = subscribedTokens.filter((token) => !effectiveTokens.includes(token));
907
919
  // Unsubscribe from tokens no longer in the list
908
- tokensToUnsubscribe.forEach(token => {
920
+ tokensToUnsubscribe.forEach((token) => {
909
921
  const unsubscribeMessage = {
910
- method: 'unsubscribe',
922
+ method: "unsubscribe",
911
923
  subscription: {
912
- type: 'activeAssetData',
924
+ type: "activeAssetData",
913
925
  user: address,
914
926
  coin: token,
915
927
  },
@@ -917,11 +929,11 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
917
929
  sendJsonMessage(unsubscribeMessage);
918
930
  });
919
931
  // Subscribe to new tokens
920
- tokensToSubscribe.forEach(token => {
932
+ tokensToSubscribe.forEach((token) => {
921
933
  const subscribeMessage = {
922
- method: 'subscribe',
934
+ method: "subscribe",
923
935
  subscription: {
924
- type: 'activeAssetData',
936
+ type: "activeAssetData",
925
937
  user: address,
926
938
  coin: token,
927
939
  },
@@ -932,7 +944,14 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
932
944
  setSubscribedTokens(effectiveTokens.filter((token) => token));
933
945
  tokensToSubscribe.forEach((token) => deleteActiveAssetData(token));
934
946
  }
935
- }, [isConnected, address, selectedTokenSymbols, subscribedTokens, sendJsonMessage, setActiveAssetData]);
947
+ }, [
948
+ isConnected,
949
+ address,
950
+ selectedTokenSymbols,
951
+ subscribedTokens,
952
+ sendJsonMessage,
953
+ setActiveAssetData,
954
+ ]);
936
955
  // Handle candle subscriptions for tokens and interval changes
937
956
  useEffect(() => {
938
957
  if (!isConnected)
@@ -941,11 +960,11 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
941
960
  // Unsubscribe from previous candle subscriptions if interval changed
942
961
  const prevInterval = prevCandleIntervalRef.current;
943
962
  if (prevInterval && prevInterval !== candleInterval) {
944
- subscribedCandleTokens.forEach(token => {
963
+ subscribedCandleTokens.forEach((token) => {
945
964
  const unsubscribeMessage = {
946
- method: 'unsubscribe',
965
+ method: "unsubscribe",
947
966
  subscription: {
948
- type: 'candle',
967
+ type: "candle",
949
968
  coin: token,
950
969
  interval: prevInterval,
951
970
  },
@@ -960,9 +979,9 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
960
979
  // Unsubscribe from tokens no longer in the list
961
980
  tokensToUnsubscribe.forEach((token) => {
962
981
  const unsubscribeMessage = {
963
- method: 'unsubscribe',
982
+ method: "unsubscribe",
964
983
  subscription: {
965
- type: 'candle',
984
+ type: "candle",
966
985
  coin: token,
967
986
  interval: candleInterval,
968
987
  },
@@ -972,9 +991,9 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
972
991
  // Subscribe to new tokens
973
992
  tokensToSubscribe.forEach((token) => {
974
993
  const subscribeMessage = {
975
- method: 'subscribe',
994
+ method: "subscribe",
976
995
  subscription: {
977
- type: 'candle',
996
+ type: "candle",
978
997
  coin: token,
979
998
  interval: candleInterval,
980
999
  },
@@ -982,12 +1001,21 @@ const useHyperliquidNativeWebSocket = ({ address, enabled = true, }) => {
982
1001
  sendJsonMessage(subscribeMessage);
983
1002
  });
984
1003
  // Update subscribed state
985
- if (tokensToSubscribe.length > 0 || tokensToUnsubscribe.length > 0 || prevInterval !== candleInterval) {
1004
+ if (tokensToSubscribe.length > 0 ||
1005
+ tokensToUnsubscribe.length > 0 ||
1006
+ prevInterval !== candleInterval) {
986
1007
  setSubscribedCandleTokens(effectiveTokens.filter((token) => token));
987
1008
  prevCandleIntervalRef.current = candleInterval;
988
1009
  tokensToUnsubscribe.forEach((token) => deleteCandleSymbol(token));
989
1010
  }
990
- }, [isConnected, selectedTokenSymbols, candleInterval, subscribedCandleTokens, sendJsonMessage, setCandleData]);
1011
+ }, [
1012
+ isConnected,
1013
+ selectedTokenSymbols,
1014
+ candleInterval,
1015
+ subscribedCandleTokens,
1016
+ sendJsonMessage,
1017
+ setCandleData,
1018
+ ]);
991
1019
  return {
992
1020
  isConnected,
993
1021
  lastError,
@@ -6572,6 +6600,28 @@ async function cancelTwap(baseUrl, orderId) {
6572
6600
  throw toApiError(error);
6573
6601
  }
6574
6602
  }
6603
+ async function updateLeverage(baseUrl, positionId, payload) {
6604
+ var _a;
6605
+ const url = joinUrl(baseUrl, `/positions/${positionId}/adjust-leverage`);
6606
+ try {
6607
+ const resp = await apiClient.post(url, payload, {
6608
+ headers: {
6609
+ "Content-Type": "application/json",
6610
+ },
6611
+ timeout: 60000,
6612
+ });
6613
+ // If backend returns 204, resp.data may be empty; normalize to null for callers
6614
+ const normalizedData = ((_a = resp.data) !== null && _a !== void 0 ? _a : null);
6615
+ return {
6616
+ data: normalizedData,
6617
+ status: resp.status,
6618
+ headers: resp.headers,
6619
+ };
6620
+ }
6621
+ catch (error) {
6622
+ throw toApiError(error);
6623
+ }
6624
+ }
6575
6625
 
6576
6626
  const calculatePositionAsset = (asset, currentPrice, totalInitialPositionSize, leverage, isLong = true) => {
6577
6627
  var _a;
@@ -6685,6 +6735,9 @@ function usePosition() {
6685
6735
  const adjustAdvancePosition$1 = async (positionId, payload) => {
6686
6736
  return adjustAdvancePosition(apiBaseUrl, positionId, payload, displayToFull);
6687
6737
  };
6738
+ const updateLeverage$1 = async (positionId, leverage) => {
6739
+ return updateLeverage(apiBaseUrl, positionId, { leverage });
6740
+ };
6688
6741
  // Open positions using WS data, with derived values
6689
6742
  const userOpenPositions = useUserData((state) => state.rawOpenPositions);
6690
6743
  const aggregatedClearingHouseState = useHyperliquidData((state) => state.aggregatedClearingHouseState);
@@ -6697,7 +6750,7 @@ function usePosition() {
6697
6750
  return null;
6698
6751
  return buildPositionValue(userOpenPositions, aggregatedClearingHouseState, allMids);
6699
6752
  }, [userOpenPositions, aggregatedClearingHouseState, allMids]);
6700
- return { createPosition: createPosition$1, updateRiskParameters: updateRiskParameters$1, closePosition: closePosition$1, closeAllPositions: closeAllPositions$1, adjustPosition: adjustPosition$1, adjustAdvancePosition: adjustAdvancePosition$1, openPositions, isLoading };
6753
+ return { createPosition: createPosition$1, updateRiskParameters: updateRiskParameters$1, closePosition: closePosition$1, closeAllPositions: closeAllPositions$1, adjustPosition: adjustPosition$1, adjustAdvancePosition: adjustAdvancePosition$1, updateLeverage: updateLeverage$1, openPositions, isLoading };
6701
6754
  }
6702
6755
 
6703
6756
  async function adjustOrder(baseUrl, orderId, payload) {
@@ -7393,4 +7446,4 @@ function mapCandleIntervalToTradingViewInterval(interval) {
7393
7446
  }
7394
7447
  }
7395
7448
 
7396
- export { AccountSummaryCalculator, ConflictDetector, MAX_ASSETS_PER_LEG, MINIMUM_ASSET_USD_VALUE, MaxAssetsPerLegError, MinimumPositionSizeError, PearHyperliquidProvider, TokenMetadataExtractor, adjustAdvancePosition, adjustOrder, adjustPosition, calculateMinimumPositionValue, calculateWeightedRatio, cancelOrder, cancelTwap, cancelTwapOrder, closeAllPositions, closePosition, computeBasketCandles, createCandleLookups, createPosition, getCompleteTimestamps, getPortfolio, mapCandleIntervalToTradingViewInterval, mapTradingViewIntervalToCandleInterval, markNotificationReadById, markNotificationsRead, toggleWatchlist, updateRiskParameters, useAccountSummary, useActiveBaskets, useAgentWallet, useAllBaskets, useAuth, useAutoSyncFills, useBasketCandles, useFindBasket, useHighlightedBaskets, useHistoricalPriceData, useHistoricalPriceDataStore, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMarketData, useMarketDataAllPayload, useMarketDataPayload, useNotifications, useOpenOrders, useOrders, usePearHyperliquid, usePerformanceOverlays, usePortfolio, usePosition, useTokenSelectionMetadata, useTopGainers, useTopLosers, useTradeHistories, useTwap, useUserSelection, useWatchlist, useWatchlistBaskets, useWebData, validateMaxAssetsPerLeg, validateMinimumAssetSize, validatePositionSize };
7449
+ export { AccountSummaryCalculator, ConflictDetector, MAX_ASSETS_PER_LEG, MINIMUM_ASSET_USD_VALUE, MaxAssetsPerLegError, MinimumPositionSizeError, PearHyperliquidProvider, TokenMetadataExtractor, adjustAdvancePosition, adjustOrder, adjustPosition, calculateMinimumPositionValue, calculateWeightedRatio, cancelOrder, cancelTwap, cancelTwapOrder, closeAllPositions, closePosition, computeBasketCandles, createCandleLookups, createPosition, getCompleteTimestamps, getPortfolio, mapCandleIntervalToTradingViewInterval, mapTradingViewIntervalToCandleInterval, markNotificationReadById, markNotificationsRead, toggleWatchlist, updateLeverage, updateRiskParameters, useAccountSummary, useActiveBaskets, useAgentWallet, useAllBaskets, useAuth, useAutoSyncFills, useBasketCandles, useFindBasket, useHighlightedBaskets, useHistoricalPriceData, useHistoricalPriceDataStore, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMarketData, useMarketDataAllPayload, useMarketDataPayload, useNotifications, useOpenOrders, useOrders, usePearHyperliquid, usePerformanceOverlays, usePortfolio, usePosition, useTokenSelectionMetadata, useTopGainers, useTopLosers, useTradeHistories, useTwap, useUserSelection, useWatchlist, useWatchlistBaskets, useWebData, validateMaxAssetsPerLeg, validateMinimumAssetSize, validatePositionSize };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pear-protocol/hyperliquid-sdk",
3
- "version": "0.0.68",
3
+ "version": "0.0.69",
4
4
  "description": "React SDK for Pear Protocol Hyperliquid API integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",