@pear-protocol/hyperliquid-sdk 0.0.12 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/use-webdata2.d.ts +10 -0
- package/dist/hooks/useTokenSelection.d.ts +1 -0
- package/dist/hyperliquid-websocket.d.ts +4 -2
- package/dist/index.d.ts +43 -5
- package/dist/index.js +4 -4
- package/dist/provider.d.ts +3 -1
- package/dist/types.d.ts +22 -1
- package/dist/utils/token-metadata-extractor.d.ts +5 -3
- package/package.json +3 -3
package/dist/hooks/index.d.ts
CHANGED
|
@@ -4,3 +4,4 @@ export { useCalculatedOpenPositions } from './useCalculatedPositions';
|
|
|
4
4
|
export { useCalculatedAccountSummary } from './useCalculatedAccountSummary';
|
|
5
5
|
export { useTokenSelection } from './useTokenSelection';
|
|
6
6
|
export type { TokenSelectorConfig, UseTokenSelectionReturn } from './useTokenSelection';
|
|
7
|
+
export { useWebData2 } from './use-webdata2';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to access webData2 and native WebSocket state
|
|
3
|
+
*/
|
|
4
|
+
export declare const useWebData2: () => {
|
|
5
|
+
webData2: import("..").WebData2Response | null;
|
|
6
|
+
allMids: import("..").WsAllMidsData | null;
|
|
7
|
+
isConnected: boolean;
|
|
8
|
+
connectionStatus: import("react-use-websocket").ReadyState;
|
|
9
|
+
error: string | null;
|
|
10
|
+
};
|
|
@@ -15,6 +15,7 @@ export interface UseTokenSelectionReturn {
|
|
|
15
15
|
sumNetFunding: number;
|
|
16
16
|
maxLeverage: number;
|
|
17
17
|
minMargin: number;
|
|
18
|
+
leverageMatched: boolean;
|
|
18
19
|
setLongTokens: (tokens: TokenSelection[]) => void;
|
|
19
20
|
setShortTokens: (tokens: TokenSelection[]) => void;
|
|
20
21
|
updateTokenWeight: (isLong: boolean, index: number, newWeight: number) => void;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { ReadyState } from 'react-use-websocket';
|
|
2
|
-
import type { WebData2Response, WsAllMidsData } from './types';
|
|
2
|
+
import type { WebData2Response, WsAllMidsData, ActiveAssetData } from './types';
|
|
3
3
|
export interface UseHyperliquidNativeWebSocketProps {
|
|
4
4
|
address: string | null;
|
|
5
|
+
tokens?: string[];
|
|
5
6
|
}
|
|
6
7
|
export interface UseHyperliquidNativeWebSocketReturn {
|
|
7
8
|
webData2: WebData2Response | null;
|
|
8
9
|
allMids: WsAllMidsData | null;
|
|
10
|
+
activeAssetData: Record<string, ActiveAssetData> | null;
|
|
9
11
|
connectionStatus: ReadyState;
|
|
10
12
|
isConnected: boolean;
|
|
11
13
|
lastError: string | null;
|
|
12
14
|
}
|
|
13
|
-
export declare const useHyperliquidNativeWebSocket: ({ address }: UseHyperliquidNativeWebSocketProps) => UseHyperliquidNativeWebSocketReturn;
|
|
15
|
+
export declare const useHyperliquidNativeWebSocket: ({ address, tokens }: UseHyperliquidNativeWebSocketProps) => UseHyperliquidNativeWebSocketReturn;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
|
+
import * as react_use_websocket from 'react-use-websocket';
|
|
2
3
|
import { ReadyState } from 'react-use-websocket';
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -215,7 +216,7 @@ type WebSocketConnectionState = 'connecting' | 'connected' | 'disconnected' | 'e
|
|
|
215
216
|
/**
|
|
216
217
|
* WebSocket channels
|
|
217
218
|
*/
|
|
218
|
-
type WebSocketChannel = 'trade-histories' | 'open-positions' | 'open-orders' | 'account-summary' | 'webData2' | 'allMids';
|
|
219
|
+
type WebSocketChannel = 'trade-histories' | 'open-positions' | 'open-orders' | 'account-summary' | 'webData2' | 'allMids' | 'activeAssetData';
|
|
219
220
|
/**
|
|
220
221
|
* WebSocket subscription message
|
|
221
222
|
*/
|
|
@@ -542,6 +543,24 @@ interface RawPositionDto {
|
|
|
542
543
|
longAssets: RawAssetDto[];
|
|
543
544
|
shortAssets: RawAssetDto[];
|
|
544
545
|
}
|
|
546
|
+
/**
|
|
547
|
+
* Leverage information from activeAssetData
|
|
548
|
+
*/
|
|
549
|
+
interface LeverageInfo {
|
|
550
|
+
type: string;
|
|
551
|
+
value: number;
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Active asset data from WebSocket
|
|
555
|
+
*/
|
|
556
|
+
interface ActiveAssetData {
|
|
557
|
+
user: string;
|
|
558
|
+
coin: string;
|
|
559
|
+
leverage: LeverageInfo;
|
|
560
|
+
maxTradeSzs: [string, string];
|
|
561
|
+
availableToTrade: [string, string];
|
|
562
|
+
markPx: string;
|
|
563
|
+
}
|
|
545
564
|
/**
|
|
546
565
|
* Token metadata from WebData2 and AllMids
|
|
547
566
|
*/
|
|
@@ -556,6 +575,9 @@ interface TokenMetadata {
|
|
|
556
575
|
oraclePrice: number;
|
|
557
576
|
openInterest: string;
|
|
558
577
|
dayVolume: string;
|
|
578
|
+
leverage?: LeverageInfo;
|
|
579
|
+
maxTradeSzs?: [string, string];
|
|
580
|
+
availableToTrade?: [string, string];
|
|
559
581
|
}
|
|
560
582
|
/**
|
|
561
583
|
* Enhanced token selection with weight and metadata for basket trading
|
|
@@ -764,6 +786,7 @@ interface UseTokenSelectionReturn {
|
|
|
764
786
|
sumNetFunding: number;
|
|
765
787
|
maxLeverage: number;
|
|
766
788
|
minMargin: number;
|
|
789
|
+
leverageMatched: boolean;
|
|
767
790
|
setLongTokens: (tokens: TokenSelection[]) => void;
|
|
768
791
|
setShortTokens: (tokens: TokenSelection[]) => void;
|
|
769
792
|
updateTokenWeight: (isLong: boolean, index: number, newWeight: number) => void;
|
|
@@ -781,6 +804,17 @@ interface UseTokenSelectionReturn {
|
|
|
781
804
|
*/
|
|
782
805
|
declare const useTokenSelection: () => UseTokenSelectionReturn;
|
|
783
806
|
|
|
807
|
+
/**
|
|
808
|
+
* Hook to access webData2 and native WebSocket state
|
|
809
|
+
*/
|
|
810
|
+
declare const useWebData2: () => {
|
|
811
|
+
webData2: WebData2Response | null;
|
|
812
|
+
allMids: WsAllMidsData | null;
|
|
813
|
+
isConnected: boolean;
|
|
814
|
+
connectionStatus: react_use_websocket.ReadyState;
|
|
815
|
+
error: string | null;
|
|
816
|
+
};
|
|
817
|
+
|
|
784
818
|
interface WebSocketData {
|
|
785
819
|
tradeHistories: TradeHistoryDataDto[] | null;
|
|
786
820
|
openPositions: RawPositionDto[] | null;
|
|
@@ -801,15 +835,17 @@ declare const useHyperliquidWebSocket: ({ wsUrl, address }: UseHyperliquidWebSoc
|
|
|
801
835
|
|
|
802
836
|
interface UseHyperliquidNativeWebSocketProps {
|
|
803
837
|
address: string | null;
|
|
838
|
+
tokens?: string[];
|
|
804
839
|
}
|
|
805
840
|
interface UseHyperliquidNativeWebSocketReturn {
|
|
806
841
|
webData2: WebData2Response | null;
|
|
807
842
|
allMids: WsAllMidsData | null;
|
|
843
|
+
activeAssetData: Record<string, ActiveAssetData> | null;
|
|
808
844
|
connectionStatus: ReadyState;
|
|
809
845
|
isConnected: boolean;
|
|
810
846
|
lastError: string | null;
|
|
811
847
|
}
|
|
812
|
-
declare const useHyperliquidNativeWebSocket: ({ address }: UseHyperliquidNativeWebSocketProps) => UseHyperliquidNativeWebSocketReturn;
|
|
848
|
+
declare const useHyperliquidNativeWebSocket: ({ address, tokens }: UseHyperliquidNativeWebSocketProps) => UseHyperliquidNativeWebSocketReturn;
|
|
813
849
|
|
|
814
850
|
/**
|
|
815
851
|
* Account summary calculation utility class
|
|
@@ -875,17 +911,19 @@ declare class TokenMetadataExtractor {
|
|
|
875
911
|
* @param symbol - Token symbol
|
|
876
912
|
* @param webData2 - WebData2 response containing asset context and universe data
|
|
877
913
|
* @param allMids - AllMids data containing current prices
|
|
914
|
+
* @param activeAssetData - Optional active asset data containing leverage information
|
|
878
915
|
* @returns TokenMetadata or null if token not found
|
|
879
916
|
*/
|
|
880
|
-
static extractTokenMetadata(symbol: string, webData2: WebData2Response | null, allMids: WsAllMidsData | null): TokenMetadata | null;
|
|
917
|
+
static extractTokenMetadata(symbol: string, webData2: WebData2Response | null, allMids: WsAllMidsData | null, activeAssetData?: Record<string, ActiveAssetData> | null): TokenMetadata | null;
|
|
881
918
|
/**
|
|
882
919
|
* Extracts metadata for multiple tokens
|
|
883
920
|
* @param symbols - Array of token symbols
|
|
884
921
|
* @param webData2 - WebData2 response
|
|
885
922
|
* @param allMids - AllMids data
|
|
923
|
+
* @param activeAssetData - Optional active asset data containing leverage information
|
|
886
924
|
* @returns Record of symbol to TokenMetadata
|
|
887
925
|
*/
|
|
888
|
-
static extractMultipleTokensMetadata(symbols: string[], webData2: WebData2Response | null, allMids: WsAllMidsData | null): Record<string, TokenMetadata | null>;
|
|
926
|
+
static extractMultipleTokensMetadata(symbols: string[], webData2: WebData2Response | null, allMids: WsAllMidsData | null, activeAssetData?: Record<string, ActiveAssetData> | null): Record<string, TokenMetadata | null>;
|
|
889
927
|
/**
|
|
890
928
|
* Checks if token data is available in WebData2
|
|
891
929
|
* @param symbol - Token symbol
|
|
@@ -895,5 +933,5 @@ declare class TokenMetadataExtractor {
|
|
|
895
933
|
static isTokenAvailable(symbol: string, webData2: WebData2Response | null): boolean;
|
|
896
934
|
}
|
|
897
935
|
|
|
898
|
-
export { AccountSummaryCalculator, ConflictDetector, PearHyperliquidClient, PearHyperliquidProvider, PearMigrationSDK, TokenMetadataExtractor, PearHyperliquidClient as default, useAccountSummary, useAddress, useCalculatedAccountSummary, useCalculatedOpenPositions, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMigrationSDK, useOpenOrders, useOpenPositions, usePearHyperliquidClient, useTokenSelection, useTradeHistories };
|
|
936
|
+
export { AccountSummaryCalculator, ConflictDetector, PearHyperliquidClient, PearHyperliquidProvider, PearMigrationSDK, TokenMetadataExtractor, PearHyperliquidClient as default, useAccountSummary, useAddress, useCalculatedAccountSummary, useCalculatedOpenPositions, useHyperliquidNativeWebSocket, useHyperliquidWebSocket, useMigrationSDK, useOpenOrders, useOpenPositions, usePearHyperliquidClient, useTokenSelection, useTradeHistories, useWebData2 };
|
|
899
937
|
export type { AccountSummaryResponseDto, AgentWalletDto, ApiErrorResponse, ApiResponse, AssetCtx, AssetInformationDetail, AssetPosition, BalanceSummaryDto, CrossMarginSummaryDto, CumFundingDto, MarginSummaryDto, MigrationHookState, MigrationHooks, OpenLimitOrderDto, OpenOrderV1Dto, OpenPositionDto, OpenPositionV1Dto, OrderAssetDto, OrderStatus, PearHyperliquidConfig, PnlDto, PositionAssetDetailDto, PositionSideDto, PositionSyncStatus, RawValueDto, SyncOpenOrderDto, SyncOpenOrderResponseDto, SyncOpenPositionDto, SyncOpenPositionResponseDto, SyncTradeHistoryDto, SyncTradeHistoryResponseDto, TokenConflict, TokenMetadata, TokenSelection, TokenSelectorConfig, TpSlDto, TradeHistoryAssetDataDto, TradeHistoryDataDto, TradeHistoryV1Dto, UniverseAsset, UseTokenSelectionReturn, WebData2Response, WebSocketChannel, WebSocketConnectionState, WebSocketDataMessage, WebSocketMessage, WebSocketResponse, WebSocketSubscribeMessage, WsAllMidsData };
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var et=Object.defineProperty;var d=(t,e)=>et(t,"name",{value:e,configurable:!0});import tt from"axios";import ve,{useState as
|
|
1
|
+
var et=Object.defineProperty;var d=(t,e)=>et(t,"name",{value:e,configurable:!0});import tt from"axios";import ve,{useState as V,useEffect as se,useRef as nt,createContext as rt,useMemo as W,useContext as Z,useCallback as q}from"react";import ot from"react-dom";class Me{static{d(this,"PearHyperliquidClient")}constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.httpClient=tt.create({baseURL:this.baseUrl,timeout:e.timeout||3e4,headers:{"Content-Type":"application/json",...e.headers}}),this.httpClient.interceptors.response.use(n=>n,n=>{var a,o,r,s,c;const l={statusCode:((a=n.response)===null||a===void 0?void 0:a.status)||500,message:((r=(o=n.response)===null||o===void 0?void 0:o.data)===null||r===void 0?void 0:r.message)||n.message,error:(c=(s=n.response)===null||s===void 0?void 0:s.data)===null||c===void 0?void 0:c.error};return Promise.reject(l)})}getBaseUrl(){return this.baseUrl}setHeaders(e){this.httpClient.defaults.headers={...this.httpClient.defaults.headers,...e}}setAuthToken(e){this.setHeaders({Authorization:`Bearer ${e}`})}async makeRequest(e,n,a){const o=await this.httpClient.request({method:e,url:n,data:a});return{data:o.data,status:o.status,headers:o.headers}}async syncTradeHistory(e){return this.makeRequest("POST","/syncer/trade-histories",e)}async syncOpenPositions(e){return this.makeRequest("POST","/syncer/open-positions",e)}async syncOpenOrders(e){return this.makeRequest("POST","/syncer/open-orders",e)}}class je{static{d(this,"PearMigrationSDK")}constructor(e){this.isTradeHistorySyncRunning=!1,this.isOpenPositionsSyncRunning=!1,this.isOpenOrdersSyncRunning=!1,this.client=e}async syncTradeHistory(e){if(this.isTradeHistorySyncRunning)return null;try{return this.isTradeHistorySyncRunning=!0,await this.client.syncTradeHistory(e)}finally{this.isTradeHistorySyncRunning=!1}}async syncOpenPositions(e){if(this.isOpenPositionsSyncRunning)return null;try{return this.isOpenPositionsSyncRunning=!0,await this.client.syncOpenPositions(e)}finally{this.isOpenPositionsSyncRunning=!1}}async syncOpenOrders(e){if(this.isOpenOrdersSyncRunning)return null;try{return this.isOpenOrdersSyncRunning=!0,await this.client.syncOpenOrders(e)}finally{this.isOpenOrdersSyncRunning=!1}}isSyncInProgress(){return this.isTradeHistorySyncRunning||this.isOpenPositionsSyncRunning||this.isOpenOrdersSyncRunning}isTradeHistorySyncInProgress(){return this.isTradeHistorySyncRunning}isOpenPositionsSyncInProgress(){return this.isOpenPositionsSyncRunning}isOpenOrdersSyncInProgress(){return this.isOpenOrdersSyncRunning}getClient(){return this.client}setAuthToken(e){this.client.setAuthToken(e)}setHeaders(e){this.client.setHeaders(e)}getBaseUrl(){return this.client.getBaseUrl()}}var L=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function at(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}d(at,"getDefaultExportFromCjs");var Re={exports:{}},ue={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@ var et=Object.defineProperty;var d=(t,e)=>et(t,"name",{value:e,configurable:!0})
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var Fe;function st(){if(Fe)return ue;Fe=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(a,r
|
|
9
|
+
*/var Fe;function st(){if(Fe)return ue;Fe=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(a,o,r){var s=null;if(r!==void 0&&(s=""+r),o.key!==void 0&&(s=""+o.key),"key"in o){r={};for(var c in o)c!=="key"&&(r[c]=o[c])}else r=o;return o=r.ref,{$$typeof:t,type:a,key:s,ref:o!==void 0?o:null,props:r}}return d(n,"jsxProd"),ue.Fragment=e,ue.jsx=n,ue.jsxs=n,ue}d(st,"requireReactJsxRuntime_production");var le={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@ var et=Object.defineProperty;var d=(t,e)=>et(t,"name",{value:e,configurable:!0})
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var He;function it(){return He||(He=1,process.env.NODE_ENV!=="production"&&(function(){function t(
|
|
17
|
+
*/var He;function it(){return He||(He=1,process.env.NODE_ENV!=="production"&&(function(){function t(v){if(v==null)return null;if(typeof v=="function")return v.$$typeof===T?null:v.displayName||v.name||null;if(typeof v=="string")return v;switch(v){case A:return"Fragment";case m:return"Profiler";case E:return"StrictMode";case I:return"Suspense";case j:return"SuspenseList";case J:return"Activity"}if(typeof v=="object")switch(typeof v.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),v.$$typeof){case S:return"Portal";case w:return(v.displayName||"Context")+".Provider";case k:return(v._context.displayName||"Context")+".Consumer";case O:var p=v.render;return v=v.displayName,v||(v=p.displayName||p.name||"",v=v!==""?"ForwardRef("+v+")":"ForwardRef"),v;case N:return p=v.displayName||null,p!==null?p:t(v.type)||"Memo";case U:p=v._payload,v=v._init;try{return t(v(p))}catch{}}return null}d(t,"getComponentNameFromType");function e(v){return""+v}d(e,"testStringCoercion");function n(v){try{e(v);var p=!1}catch{p=!0}if(p){p=console;var C=p.error,R=typeof Symbol=="function"&&Symbol.toStringTag&&v[Symbol.toStringTag]||v.constructor.name||"Object";return C.call(p,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",R),e(v)}}d(n,"checkKeyStringCoercion");function a(v){if(v===A)return"<>";if(typeof v=="object"&&v!==null&&v.$$typeof===U)return"<...>";try{var p=t(v);return p?"<"+p+">":"<...>"}catch{return"<...>"}}d(a,"getTaskName");function o(){var v=y.A;return v===null?null:v.getOwner()}d(o,"getOwner");function r(){return Error("react-stack-top-frame")}d(r,"UnknownOwner");function s(v){if(b.call(v,"key")){var p=Object.getOwnPropertyDescriptor(v,"key").get;if(p&&p.isReactWarning)return!1}return v.key!==void 0}d(s,"hasValidKey");function c(v,p){function C(){M||(M=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",p))}d(C,"warnAboutAccessingKey"),C.isReactWarning=!0,Object.defineProperty(v,"key",{get:C,configurable:!0})}d(c,"defineKeyPropWarningGetter");function l(){var v=t(this.type);return D[v]||(D[v]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),v=this.props.ref,v!==void 0?v:null}d(l,"elementRefGetterWithDeprecationWarning");function i(v,p,C,R,ee,G,Ce,Ae){return C=G.ref,v={$$typeof:f,type:v,key:p,props:G,_owner:ee},(C!==void 0?C:null)!==null?Object.defineProperty(v,"ref",{enumerable:!1,get:l}):Object.defineProperty(v,"ref",{enumerable:!1,value:null}),v._store={},Object.defineProperty(v._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(v,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(v,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:Ce}),Object.defineProperty(v,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Ae}),Object.freeze&&(Object.freeze(v.props),Object.freeze(v)),v}d(i,"ReactElement");function u(v,p,C,R,ee,G,Ce,Ae){var F=p.children;if(F!==void 0)if(R)if(_(F)){for(R=0;R<F.length;R++)h(F[R]);Object.freeze&&Object.freeze(F)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else h(F);if(b.call(p,"key")){F=t(v);var ae=Object.keys(p).filter(function(Ze){return Ze!=="key"});R=0<ae.length?"{key: someKey, "+ae.join(": ..., ")+": ...}":"{key: someKey}",$[F+R]||(ae=0<ae.length?"{"+ae.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
18
|
let props = %s;
|
|
19
19
|
<%s {...props} />
|
|
20
20
|
React keys must be passed directly to JSX without using spread:
|
|
21
21
|
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,L,I,ae,I),Q[I+L]=!0)}if(I=null,N!==void 0&&(n(N),I=""+N),s(_)&&(n(_.key),I=""+_.key),"key"in _){N={};for(var Ne in _)Ne!=="key"&&(N[Ne]=_[Ne])}else N=_;return I&&f(N,typeof l=="function"?l.displayName||l.name||"Unknown":l),i(l,I,q,Z,r(),N,Ce,Ae)}d(v,"jsxDEVImpl");function h(l){typeof l=="object"&&l!==null&&l.$$typeof===u&&l._store&&(l._store.validated=1)}d(h,"validateChildKeys");var g=ve,u=Symbol.for("react.transitional.element"),S=Symbol.for("react.portal"),O=Symbol.for("react.fragment"),w=Symbol.for("react.strict_mode"),T=Symbol.for("react.profiler"),P=Symbol.for("react.consumer"),F=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),X=Symbol.for("react.suspense"),Y=Symbol.for("react.suspense_list"),k=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),m=Symbol.for("react.activity"),b=Symbol.for("react.client.reference"),E=g.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,p=Object.prototype.hasOwnProperty,C=Array.isArray,M=console.createTask?console.createTask:function(){return null};g={react_stack_bottom_frame:d(function(l){return l()},"react_stack_bottom_frame")};var j,$={},R=g.react_stack_bottom_frame.bind(g,o)(),H=M(a(o)),Q={};le.Fragment=O,le.jsx=function(l,_,N,L,Z){var q=1e4>E.recentlyCreatedOwnerStacks++;return v(l,_,N,!1,L,Z,q?Error("react-stack-top-frame"):R,q?M(a(l)):H)},le.jsxs=function(l,_,N,L,Z){var q=1e4>E.recentlyCreatedOwnerStacks++;return v(l,_,N,!0,L,Z,q?Error("react-stack-top-frame"):R,q?M(a(l)):H)}})()),le}d(it,"requireReactJsxRuntime_development"),process.env.NODE_ENV==="production"?Re.exports=st():Re.exports=it();var ct=Re.exports,he={},se={},V={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.isEventSourceSupported=t.isReactNative=t.ReadyState=t.DEFAULT_HEARTBEAT=t.UNPARSABLE_JSON_OBJECT=t.DEFAULT_RECONNECT_INTERVAL_MS=t.DEFAULT_RECONNECT_LIMIT=t.SOCKET_IO_PING_CODE=t.SOCKET_IO_PATH=t.SOCKET_IO_PING_INTERVAL=t.DEFAULT_EVENT_SOURCE_OPTIONS=t.EMPTY_EVENT_HANDLERS=t.DEFAULT_OPTIONS=void 0;var e=1,n=1e3*e;t.DEFAULT_OPTIONS={},t.EMPTY_EVENT_HANDLERS={},t.DEFAULT_EVENT_SOURCE_OPTIONS={withCredentials:!1,events:t.EMPTY_EVENT_HANDLERS},t.SOCKET_IO_PING_INTERVAL=25*n,t.SOCKET_IO_PATH="/socket.io/?EIO=3&transport=websocket",t.SOCKET_IO_PING_CODE="2",t.DEFAULT_RECONNECT_LIMIT=20,t.DEFAULT_RECONNECT_INTERVAL_MS=5e3,t.UNPARSABLE_JSON_OBJECT={},t.DEFAULT_HEARTBEAT={message:"ping",timeout:6e4,interval:25e3};var a;(function(o){o[o.UNINSTANTIATED=-1]="UNINSTANTIATED",o[o.CONNECTING=0]="CONNECTING",o[o.OPEN=1]="OPEN",o[o.CLOSING=2]="CLOSING",o[o.CLOSED=3]="CLOSED"})(a||(t.ReadyState=a={}));var r=d(function(){try{return"EventSource"in globalThis}catch{return!1}},"eventSourceSupported");t.isReactNative=typeof navigator<"u"&&navigator.product==="ReactNative",t.isEventSourceSupported=!t.isReactNative&&r()})(V);var ge={},Se={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetWebSockets=t.sharedWebSockets=void 0,t.sharedWebSockets={};var e=d(function(n){if(n&&t.sharedWebSockets.hasOwnProperty(n))delete t.sharedWebSockets[n];else for(var a in t.sharedWebSockets)t.sharedWebSockets.hasOwnProperty(a)&&delete t.sharedWebSockets[a]},"resetWebSockets");t.resetWebSockets=e})(Se);var ye={},x={};Object.defineProperty(x,"__esModule",{value:!0}),x.setUpSocketIOPing=x.appendQueryParams=x.parseSocketIOUrl=void 0;var me=V,ut=d(function(t){if(t){var e=/^https|wss/.test(t),n=t.replace(/^(https?|wss?)(:\/\/)?/,""),a=n.replace(/\/$/,""),r=e?"wss":"ws";return"".concat(r,"://").concat(a).concat(me.SOCKET_IO_PATH)}else if(t===""){var e=/^https/.test(window.location.protocol),r=e?"wss":"ws",o=window.location.port?":".concat(window.location.port):"";return"".concat(r,"://").concat(window.location.hostname).concat(o).concat(me.SOCKET_IO_PATH)}return t},"parseSocketIOUrl");x.parseSocketIOUrl=ut;var lt=d(function(t,e){e===void 0&&(e={});var n=/\?([\w]+=[\w]+)/,a=n.test(t),r="".concat(Object.entries(e).reduce(function(o,s){var f=s[0],c=s[1];return o+"".concat(f,"=").concat(c,"&")},"").slice(0,-1));return"".concat(t).concat(a?"&":"?").concat(r)},"appendQueryParams");x.appendQueryParams=lt;var dt=d(function(t,e){e===void 0&&(e=me.SOCKET_IO_PING_INTERVAL);var n=d(function(){return t(me.SOCKET_IO_PING_CODE)},"ping");return window.setInterval(n,e)},"setUpSocketIOPing");x.setUpSocketIOPing=dt;var be={};Object.defineProperty(be,"__esModule",{value:!0}),be.heartbeat=vt;var Le=V;function ft(t){return Array.isArray(t)?t.reduce(function(e,n){return e.current>n.current?e:n}).current:t.current}d(ft,"getLastMessageTime");function vt(t,e,n){var a=n||{},r=a.interval,o=r===void 0?Le.DEFAULT_HEARTBEAT.interval:r,s=a.timeout,f=s===void 0?Le.DEFAULT_HEARTBEAT.timeout:s,c=a.message,i=c===void 0?Le.DEFAULT_HEARTBEAT.message:c,v=Math.max(100,o/10),h=Date.now(),g=setInterval(function(){var u=Date.now(),S=ft(e);if(S+f<=u)console.warn("Heartbeat timed out, closing connection, last message received ".concat(u-S,"ms ago, last ping sent ").concat(u-h,"ms ago")),t.close();else if(S+o<=u&&h+o<=u)try{typeof i=="function"?t.send(i()):t.send(i),h=u}catch(O){console.error("Heartbeat failed, closing connection",O instanceof Error?O.message:O),t.close()}},v);return t.addEventListener("close",function(){clearInterval(g)}),function(){}}d(vt,"heartbeat");var ie={},Te={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetSubscribers=t.removeSubscriber=t.addSubscriber=t.hasSubscribers=t.getSubscribers=void 0;var e={},n=[],a=d(function(c){return(0,t.hasSubscribers)(c)?Array.from(e[c]):n},"getSubscribers");t.getSubscribers=a;var r=d(function(c){var i;return((i=e[c])===null||i===void 0?void 0:i.size)>0},"hasSubscribers");t.hasSubscribers=r;var o=d(function(c,i){e[c]=e[c]||new Set,e[c].add(i)},"addSubscriber");t.addSubscriber=o;var s=d(function(c,i){e[c].delete(i)},"removeSubscriber");t.removeSubscriber=s;var f=d(function(c){if(c&&e.hasOwnProperty(c))delete e[c];else for(var i in e)e.hasOwnProperty(i)&&delete e[i]},"resetSubscribers");t.resetSubscribers=f})(Te),Object.defineProperty(ie,"__esModule",{value:!0}),ie.assertIsWebSocket=St,ie.resetGlobalState=yt;var ht=Se,gt=Te;function St(t,e){if(!e&&!(t instanceof WebSocket))throw new Error("")}d(St,"assertIsWebSocket");function yt(t){(0,gt.resetSubscribers)(t),(0,ht.resetWebSockets)(t)}d(yt,"resetGlobalState");var Ee=A&&A.__assign||function(){return Ee=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},Ee.apply(this,arguments)};Object.defineProperty(ye,"__esModule",{value:!0}),ye.attachListeners=void 0;var mt=x,bt=be,J=V,Tt=ie,Et=d(function(t,e,n,a){t.onmessage=function(r){var o;e.current.onMessage&&e.current.onMessage(r),typeof a?.current=="number"&&(a.current=Date.now()),!(typeof e.current.filter=="function"&&e.current.filter(r)!==!0)&&(e.current.heartbeat&&typeof e.current.heartbeat!="boolean"&&((o=e.current.heartbeat)===null||o===void 0?void 0:o.returnMessage)===r.data||n(r))}},"bindMessageHandler$1"),_t=d(function(t,e,n,a,r){t.onopen=function(o){if(e.current.onOpen&&e.current.onOpen(o),a.current=0,n(J.ReadyState.OPEN),e.current.heartbeat&&t instanceof WebSocket){var s=typeof e.current.heartbeat=="boolean"?void 0:e.current.heartbeat;r.current=Date.now(),(0,bt.heartbeat)(t,r,s)}}},"bindOpenHandler$1"),Ot=d(function(t,e,n,a,r){if(J.isEventSourceSupported&&t instanceof EventSource)return function(){};(0,Tt.assertIsWebSocket)(t,e.current.skipAssert);var o;return t.onclose=function(s){var f;if(e.current.onClose&&e.current.onClose(s),n(J.ReadyState.CLOSED),e.current.shouldReconnect&&e.current.shouldReconnect(s)){var c=(f=e.current.reconnectAttempts)!==null&&f!==void 0?f:J.DEFAULT_RECONNECT_LIMIT;if(r.current<c){var i=typeof e.current.reconnectInterval=="function"?e.current.reconnectInterval(r.current):e.current.reconnectInterval;o=window.setTimeout(function(){r.current++,a()},i??J.DEFAULT_RECONNECT_INTERVAL_MS)}else e.current.onReconnectStop&&e.current.onReconnectStop(c),console.warn("Max reconnect attempts of ".concat(c," exceeded"))}},function(){return o&&window.clearTimeout(o)}},"bindCloseHandler$1"),pt=d(function(t,e,n,a,r){var o;return t.onerror=function(s){var f;if(e.current.onError&&e.current.onError(s),J.isEventSourceSupported&&t instanceof EventSource&&(e.current.onClose&&e.current.onClose(Ee(Ee({},s),{code:1006,reason:"An error occurred with the EventSource: ".concat(s),wasClean:!1})),n(J.ReadyState.CLOSED),t.close()),e.current.retryOnError)if(r.current<((f=e.current.reconnectAttempts)!==null&&f!==void 0?f:J.DEFAULT_RECONNECT_LIMIT)){var c=typeof e.current.reconnectInterval=="function"?e.current.reconnectInterval(r.current):e.current.reconnectInterval;o=window.setTimeout(function(){r.current++,a()},c??J.DEFAULT_RECONNECT_INTERVAL_MS)}else e.current.onReconnectStop&&e.current.onReconnectStop(e.current.reconnectAttempts),console.warn("Max reconnect attempts of ".concat(e.current.reconnectAttempts," exceeded"))},function(){return o&&window.clearTimeout(o)}},"bindErrorHandler$1"),wt=d(function(t,e,n,a,r,o,s){var f=e.setLastMessage,c=e.setReadyState,i,v,h;return n.current.fromSocketIO&&(i=(0,mt.setUpSocketIOPing)(s)),Et(t,n,f,o),_t(t,n,c,r,o),v=Ot(t,n,c,a,r),h=pt(t,n,c,a,r),function(){c(J.ReadyState.CLOSING),v(),h(),t.close(),i&&clearInterval(i)}},"attachListeners");ye.attachListeners=wt;var _e={},Oe=A&&A.__assign||function(){return Oe=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},Oe.apply(this,arguments)};Object.defineProperty(_e,"__esModule",{value:!0}),_e.attachSharedListeners=void 0;var Pt=Se,oe=V,de=Te,kt=x,Ct=be,At=d(function(t,e,n){t.onmessage=function(a){(0,de.getSubscribers)(e).forEach(function(r){var o;r.optionsRef.current.onMessage&&r.optionsRef.current.onMessage(a),typeof((o=r?.lastMessageTime)===null||o===void 0?void 0:o.current)=="number"&&(r.lastMessageTime.current=Date.now()),!(typeof r.optionsRef.current.filter=="function"&&r.optionsRef.current.filter(a)!==!0)&&(n&&typeof n!="boolean"&&n?.returnMessage===a.data||r.setLastMessage(a))})}},"bindMessageHandler"),Nt=d(function(t,e,n){t.onopen=function(a){var r=(0,de.getSubscribers)(e);r.forEach(function(o){o.reconnectCount.current=0,o.optionsRef.current.onOpen&&o.optionsRef.current.onOpen(a),o.setReadyState(oe.ReadyState.OPEN),n&&t instanceof WebSocket&&(o.lastMessageTime.current=Date.now())}),n&&t instanceof WebSocket&&(0,Ct.heartbeat)(t,r.map(function(o){return o.lastMessageTime}),typeof n=="boolean"?void 0:n)}},"bindOpenHandler"),Mt=d(function(t,e){t instanceof WebSocket&&(t.onclose=function(n){(0,de.getSubscribers)(e).forEach(function(a){a.optionsRef.current.onClose&&a.optionsRef.current.onClose(n),a.setReadyState(oe.ReadyState.CLOSED)}),delete Pt.sharedWebSockets[e],(0,de.getSubscribers)(e).forEach(function(a){var r;if(a.optionsRef.current.shouldReconnect&&a.optionsRef.current.shouldReconnect(n)){var o=(r=a.optionsRef.current.reconnectAttempts)!==null&&r!==void 0?r:oe.DEFAULT_RECONNECT_LIMIT;if(a.reconnectCount.current<o){var s=typeof a.optionsRef.current.reconnectInterval=="function"?a.optionsRef.current.reconnectInterval(a.reconnectCount.current):a.optionsRef.current.reconnectInterval;setTimeout(function(){a.reconnectCount.current++,a.reconnect.current()},s??oe.DEFAULT_RECONNECT_INTERVAL_MS)}else a.optionsRef.current.onReconnectStop&&a.optionsRef.current.onReconnectStop(a.optionsRef.current.reconnectAttempts),console.warn("Max reconnect attempts of ".concat(o," exceeded"))}})})},"bindCloseHandler"),Rt=d(function(t,e){t.onerror=function(n){(0,de.getSubscribers)(e).forEach(function(a){a.optionsRef.current.onError&&a.optionsRef.current.onError(n),oe.isEventSourceSupported&&t instanceof EventSource&&(a.optionsRef.current.onClose&&a.optionsRef.current.onClose(Oe(Oe({},n),{code:1006,reason:"An error occurred with the EventSource: ".concat(n),wasClean:!1})),a.setReadyState(oe.ReadyState.CLOSED))}),oe.isEventSourceSupported&&t instanceof EventSource&&t.close()}},"bindErrorHandler"),Lt=d(function(t,e,n,a){var r;return n.current.fromSocketIO&&(r=(0,kt.setUpSocketIOPing)(a)),At(t,e,n.current.heartbeat),Mt(t,e),Nt(t,e,n.current.heartbeat),Rt(t,e),function(){r&&clearInterval(r)}},"attachSharedListeners");_e.attachSharedListeners=Lt,Object.defineProperty(ge,"__esModule",{value:!0}),ge.createOrJoinSocket=void 0;var te=Se,fe=V,It=ye,Dt=_e,Ie=Te,Ut=d(function(t,e,n,a,r){return function(){if((0,Ie.removeSubscriber)(t,e),!(0,Ie.hasSubscribers)(t)){try{var o=te.sharedWebSockets[t];o instanceof WebSocket&&(o.onclose=function(s){n.current.onClose&&n.current.onClose(s),a(fe.ReadyState.CLOSED)}),o.close()}catch{}r&&r(),delete te.sharedWebSockets[t]}}},"cleanSubscribers"),Wt=d(function(t,e,n,a,r,o,s,f,c){if(!fe.isEventSourceSupported&&a.current.eventSourceOptions)throw fe.isReactNative?new Error("EventSource is not supported in ReactNative"):new Error("EventSource is not supported");if(a.current.share){var i=null;te.sharedWebSockets[e]===void 0?(te.sharedWebSockets[e]=a.current.eventSourceOptions?new EventSource(e,a.current.eventSourceOptions):new WebSocket(e,a.current.protocols),t.current=te.sharedWebSockets[e],n(fe.ReadyState.CONNECTING),i=(0,Dt.attachSharedListeners)(te.sharedWebSockets[e],e,a,c)):(t.current=te.sharedWebSockets[e],n(te.sharedWebSockets[e].readyState));var v={setLastMessage:r,setReadyState:n,optionsRef:a,reconnectCount:s,lastMessageTime:f,reconnect:o};return(0,Ie.addSubscriber)(e,v),Ut(e,v,a,n,i)}else{if(t.current=a.current.eventSourceOptions?new EventSource(e,a.current.eventSourceOptions):new WebSocket(e,a.current.protocols),n(fe.ReadyState.CONNECTING),!t.current)throw new Error("WebSocket failed to be created");return(0,It.attachListeners)(t.current,{setLastMessage:r,setReadyState:n},a,o.current,s,f,c)}},"createOrJoinSocket");ge.createOrJoinSocket=Wt;var $e={};(function(t){var e=A&&A.__awaiter||function(c,i,v,h){function g(u){return u instanceof v?u:new v(function(S){S(u)})}return d(g,"adopt"),new(v||(v=Promise))(function(u,S){function O(P){try{T(h.next(P))}catch(F){S(F)}}d(O,"fulfilled");function w(P){try{T(h.throw(P))}catch(F){S(F)}}d(w,"rejected");function T(P){P.done?u(P.value):g(P.value).then(O,w)}d(T,"step"),T((h=h.apply(c,i||[])).next())})},n=A&&A.__generator||function(c,i){var v={label:0,sent:d(function(){if(u[0]&1)throw u[1];return u[1]},"sent"),trys:[],ops:[]},h,g,u,S=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return S.next=O(0),S.throw=O(1),S.return=O(2),typeof Symbol=="function"&&(S[Symbol.iterator]=function(){return this}),S;function O(T){return function(P){return w([T,P])}}function w(T){if(h)throw new TypeError("Generator is already executing.");for(;S&&(S=0,T[0]&&(v=0)),v;)try{if(h=1,g&&(u=T[0]&2?g.return:T[0]?g.throw||((u=g.return)&&u.call(g),0):g.next)&&!(u=u.call(g,T[1])).done)return u;switch(g=0,u&&(T=[T[0]&2,u.value]),T[0]){case 0:case 1:u=T;break;case 4:return v.label++,{value:T[1],done:!1};case 5:v.label++,g=T[1],T=[0];continue;case 7:T=v.ops.pop(),v.trys.pop();continue;default:if(u=v.trys,!(u=u.length>0&&u[u.length-1])&&(T[0]===6||T[0]===2)){v=0;continue}if(T[0]===3&&(!u||T[1]>u[0]&&T[1]<u[3])){v.label=T[1];break}if(T[0]===6&&v.label<u[1]){v.label=u[1],u=T;break}if(u&&v.label<u[2]){v.label=u[2],v.ops.push(T);break}u[2]&&v.ops.pop(),v.trys.pop();continue}T=i.call(c,v)}catch(P){T=[6,P],g=0}finally{h=u=0}if(T[0]&5)throw T[1];return{value:T[0]?T[1]:void 0,done:!0}}},a=A&&A.__spreadArray||function(c,i,v){if(v||arguments.length===2)for(var h=0,g=i.length,u;h<g;h++)(u||!(h in i))&&(u||(u=Array.prototype.slice.call(i,0,h)),u[h]=i[h]);return c.concat(u||Array.prototype.slice.call(i))};Object.defineProperty(t,"__esModule",{value:!0}),t.getUrl=void 0;var r=x,o=V,s=d(function(c){return new Promise(function(i){return window.setTimeout(i,c)})},"waitFor"),f=d(function(c,i){for(var v=[],h=2;h<arguments.length;h++)v[h-2]=arguments[h];return e(void 0,a([c,i],v,!0),void 0,function(g,u,S){var O,w,T,P,F,W,X,Y;return S===void 0&&(S=0),n(this,function(k){switch(k.label){case 0:if(typeof g!="function")return[3,10];k.label=1;case 1:return k.trys.push([1,3,,9]),[4,g()];case 2:return O=k.sent(),[3,9];case 3:return k.sent(),u.current.retryOnError?(w=(W=u.current.reconnectAttempts)!==null&&W!==void 0?W:o.DEFAULT_RECONNECT_LIMIT,S<w?(T=typeof u.current.reconnectInterval=="function"?u.current.reconnectInterval(S):u.current.reconnectInterval,[4,s(T??o.DEFAULT_RECONNECT_INTERVAL_MS)]):[3,5]):[3,7];case 4:return k.sent(),[2,(0,t.getUrl)(g,u,S+1)];case 5:return(Y=(X=u.current).onReconnectStop)===null||Y===void 0||Y.call(X,S),[2,null];case 6:return[3,8];case 7:return[2,null];case 8:return[3,9];case 9:return[3,11];case 10:O=g,k.label=11;case 11:return P=u.current.fromSocketIO?(0,r.parseSocketIOUrl)(O):O,F=u.current.queryParams?(0,r.appendQueryParams)(P,u.current.queryParams):P,[2,F]}})})},"getUrl");t.getUrl=f})($e);var ze={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.websocketWrapper=void 0;var e=d(function(n,a){return new Proxy(n,{get:d(function(r,o){var s=r[o];return o==="reconnect"?a:typeof s=="function"?(console.error("Calling methods directly on the websocket is not supported at this moment. You must use the methods returned by useWebSocket."),function(){}):s},"get"),set:d(function(r,o,s){return/^on/.test(o)?(console.warn("The websocket's event handlers should be defined through the options object passed into useWebSocket."),!1):(r[o]=s,!0)},"set")})},"websocketWrapper");t.websocketWrapper=e,t.default=t.websocketWrapper})(ze);var ne=A&&A.__assign||function(){return ne=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},ne.apply(this,arguments)},jt=A&&A.__awaiter||function(t,e,n,a){function r(o){return o instanceof n?o:new n(function(s){s(o)})}return d(r,"adopt"),new(n||(n=Promise))(function(o,s){function f(v){try{i(a.next(v))}catch(h){s(h)}}d(f,"fulfilled");function c(v){try{i(a.throw(v))}catch(h){s(h)}}d(c,"rejected");function i(v){v.done?o(v.value):r(v.value).then(f,c)}d(i,"step"),i((a=a.apply(t,e||[])).next())})},Ft=A&&A.__generator||function(t,e){var n={label:0,sent:d(function(){if(o[0]&1)throw o[1];return o[1]},"sent"),trys:[],ops:[]},a,r,o,s=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return s.next=f(0),s.throw=f(1),s.return=f(2),typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function f(i){return function(v){return c([i,v])}}function c(i){if(a)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(n=0)),n;)try{if(a=1,r&&(o=i[0]&2?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[i[0]&2,o.value]),i[0]){case 0:case 1:o=i;break;case 4:return n.label++,{value:i[1],done:!1};case 5:n.label++,r=i[1],i=[0];continue;case 7:i=n.ops.pop(),n.trys.pop();continue;default:if(o=n.trys,!(o=o.length>0&&o[o.length-1])&&(i[0]===6||i[0]===2)){n=0;continue}if(i[0]===3&&(!o||i[1]>o[0]&&i[1]<o[3])){n.label=i[1];break}if(i[0]===6&&n.label<o[1]){n.label=o[1],o=i;break}if(o&&n.label<o[2]){n.label=o[2],n.ops.push(i);break}o[2]&&n.ops.pop(),n.trys.pop();continue}i=e.call(t,n)}catch(v){i=[6,v],r=0}finally{a=o=0}if(i[0]&5)throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}},Ht=A&&A.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(se,"__esModule",{value:!0}),se.useWebSocket=void 0;var U=ve,De=ot,G=V,$t=ge,zt=$e,Vt=Ht(ze),Ve=ie,qt=d(function(t,e,n){e===void 0&&(e=G.DEFAULT_OPTIONS),n===void 0&&(n=!0);var a=(0,U.useState)(null),r=a[0],o=a[1],s=(0,U.useState)({}),f=s[0],c=s[1],i=(0,U.useMemo)(function(){if(!e.disableJson&&r)try{return JSON.parse(r.data)}catch{return G.UNPARSABLE_JSON_OBJECT}return null},[r,e.disableJson]),v=(0,U.useRef)(null),h=(0,U.useRef)(null),g=(0,U.useRef)(function(){}),u=(0,U.useRef)(0),S=(0,U.useRef)(Date.now()),O=(0,U.useRef)([]),w=(0,U.useRef)(null),T=(0,U.useRef)(e);T.current=e;var P=v.current&&f[v.current]!==void 0?f[v.current]:t!==null&&n===!0?G.ReadyState.CONNECTING:G.ReadyState.UNINSTANTIATED,F=e.queryParams?JSON.stringify(e.queryParams):null,W=(0,U.useCallback)(function(k,y){var m;if(y===void 0&&(y=!0),G.isEventSourceSupported&&h.current instanceof EventSource){console.warn("Unable to send a message from an eventSource");return}((m=h.current)===null||m===void 0?void 0:m.readyState)===G.ReadyState.OPEN?((0,Ve.assertIsWebSocket)(h.current,T.current.skipAssert),h.current.send(k)):y&&O.current.push(k)},[]),X=(0,U.useCallback)(function(k,y){y===void 0&&(y=!0),W(JSON.stringify(k),y)},[W]),Y=(0,U.useCallback)(function(){return T.current.share!==!0||G.isEventSourceSupported&&h.current instanceof EventSource?h.current:(w.current===null&&h.current&&((0,Ve.assertIsWebSocket)(h.current,T.current.skipAssert),w.current=(0,Vt.default)(h.current,g)),w.current)},[]);return(0,U.useEffect)(function(){if(t!==null&&n===!0){var k,y=!1,m=!0,b=d(function(){return jt(void 0,void 0,void 0,function(){var E,p,C;return Ft(this,function(M){switch(M.label){case 0:return E=v,[4,(0,zt.getUrl)(t,T)];case 1:return E.current=M.sent(),v.current===null?(console.error("Failed to get a valid URL. WebSocket connection aborted."),v.current="ABORTED",(0,De.flushSync)(function(){return c(function(j){return ne(ne({},j),{ABORTED:G.ReadyState.CLOSED})})}),[2]):(p=d(function(j){y||(0,De.flushSync)(function(){return o(j)})},"protectedSetLastMessage"),C=d(function(j){y||(0,De.flushSync)(function(){return c(function($){var R;return ne(ne({},$),v.current&&(R={},R[v.current]=j,R))})})},"protectedSetReadyState"),m&&(k=(0,$t.createOrJoinSocket)(h,v.current,C,T,p,g,u,S,W)),[2])}})})},"start_1");return g.current=function(){y||(w.current&&(w.current=null),k?.(),b())},b(),function(){y=!0,m=!1,w.current&&(w.current=null),k?.(),o(null)}}else(t===null||n===!1)&&(u.current=0,c(function(E){var p;return ne(ne({},E),v.current&&(p={},p[v.current]=G.ReadyState.CLOSED,p))}))},[t,n,F,W]),(0,U.useEffect)(function(){P===G.ReadyState.OPEN&&O.current.splice(0).forEach(function(k){W(k)})},[P]),{sendMessage:W,sendJsonMessage:X,lastMessage:r,lastJsonMessage:i,readyState:P,getWebSocket:Y}},"useWebSocket$1");se.useWebSocket=qt;var pe={},we=A&&A.__assign||function(){return we=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},we.apply(this,arguments)};Object.defineProperty(pe,"__esModule",{value:!0}),pe.useSocketIO=void 0;var qe=ve,xt=se,Jt=V,Ue={type:"empty",payload:null},Gt=d(function(t){if(!t||!t.data)return Ue;var e=t.data.match(/\[.*]/);if(!e)return Ue;var n=JSON.parse(e);return!Array.isArray(n)||!n[1]?Ue:{type:n[0],payload:n[1]}},"getSocketData"),Yt=d(function(t,e,n){e===void 0&&(e=Jt.DEFAULT_OPTIONS),n===void 0&&(n=!0);var a=(0,qe.useMemo)(function(){return we(we({},e),{fromSocketIO:!0})},[]),r=(0,xt.useWebSocket)(t,a,n),o=r.sendMessage,s=r.sendJsonMessage,f=r.lastMessage,c=r.readyState,i=r.getWebSocket,v=(0,qe.useMemo)(function(){return Gt(f)},[f]);return{sendMessage:o,sendJsonMessage:s,lastMessage:v,lastJsonMessage:v,readyState:c,getWebSocket:i}},"useSocketIO");pe.useSocketIO=Yt;var Pe={},ke=A&&A.__assign||function(){return ke=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])}return t},ke.apply(this,arguments)},Bt=A&&A.__rest||function(t,e){var n={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,a=Object.getOwnPropertySymbols(t);r<a.length;r++)e.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(t,a[r])&&(n[a[r]]=t[a[r]]);return n};Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.useEventSource=void 0;var xe=ve,Kt=se,Je=V,Xt=d(function(t,e,n){e===void 0&&(e=Je.DEFAULT_EVENT_SOURCE_OPTIONS);var a=e.withCredentials,r=e.events,o=Bt(e,["withCredentials","events"]);n===void 0&&(n=!0);var s=ke(ke({},o),{eventSourceOptions:{withCredentials:a}}),f=(0,xe.useRef)(Je.EMPTY_EVENT_HANDLERS);r&&(f.current=r);var c=(0,Kt.useWebSocket)(t,s,n),i=c.lastMessage,v=c.readyState,h=c.getWebSocket;return(0,xe.useEffect)(function(){i?.type&&Object.entries(f.current).forEach(function(g){var u=g[0],S=g[1];u===i.type&&S(i)})},[i]),{lastEvent:i,readyState:v,getEventSource:h}},"useEventSource");Pe.useEventSource=Xt,(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetGlobalState=t.useEventSource=t.ReadyState=t.useSocketIO=t.default=void 0;var e=se;Object.defineProperty(t,"default",{enumerable:!0,get:d(function(){return e.useWebSocket},"get")});var n=pe;Object.defineProperty(t,"useSocketIO",{enumerable:!0,get:d(function(){return n.useSocketIO},"get")});var a=V;Object.defineProperty(t,"ReadyState",{enumerable:!0,get:d(function(){return a.ReadyState},"get")});var r=Pe;Object.defineProperty(t,"useEventSource",{enumerable:!0,get:d(function(){return r.useEventSource},"get")});var o=ie;Object.defineProperty(t,"resetGlobalState",{enumerable:!0,get:d(function(){return o.resetGlobalState},"get")})})(he);var Ge=at(he);const Ye=d(({wsUrl:t,address:e})=>{const[n,a]=B({tradeHistories:null,openPositions:null,openOrders:null,accountSummary:null}),[r,o]=B(null),[s,f]=B(null),{readyState:c,sendMessage:i}=Ge(t,{shouldReconnect:d(()=>!0,"shouldReconnect"),reconnectAttempts:5,reconnectInterval:3e3,onMessage:d(h=>{try{const g=JSON.parse(h.data);if(("success"in g||"error"in g)&&!("channel"in g)){g.error?o(g.error):o(null);return}if("channel"in g&&"data"in g){const u=g;if(u.data===null||u.data===void 0)return;switch(u.channel){case"trade-histories":Array.isArray(u.data)&&a(S=>({...S,tradeHistories:u.data}));break;case"open-positions":Array.isArray(u.data)&&a(S=>({...S,openPositions:u.data}));break;case"open-orders":Array.isArray(u.data)&&a(S=>({...S,openOrders:u.data}));break;case"account-summary":typeof u.data=="object"&&u.data!==null&&a(S=>({...S,accountSummary:u.data}));break}}}catch(g){o(`Failed to parse message: ${g instanceof Error?g.message:String(g)}`)}},"onMessage")}),v=c===he.ReadyState.OPEN;return ce(()=>{v&&e&&e!==s?(s&&i(JSON.stringify({action:"unsubscribe",address:s})),i(JSON.stringify({action:"subscribe",address:e})),f(e),o(null)):v&&!e&&s&&(i(JSON.stringify({action:"unsubscribe",address:s})),f(null))},[v,e,s,i]),ce(()=>{e!==s&&(a({tradeHistories:null,openPositions:null,openOrders:null,accountSummary:null}),o(null))},[e,s]),{data:n,connectionStatus:c,isConnected:v,lastError:r}},"useHyperliquidWebSocket"),Be=d(({address:t})=>{const[e,n]=B(null),[a,r]=B(null),[o,s]=B(null),[f,c]=B(null),i=nt(null),{readyState:v,sendJsonMessage:h}=Ge("wss://api.hyperliquid.xyz/ws",{shouldReconnect:d(()=>!0,"shouldReconnect"),reconnectAttempts:5,reconnectInterval:3e3,onOpen:d(()=>{},"onOpen"),onClose:d(()=>{},"onClose"),onError:d(u=>console.error("[HyperLiquid WS] Connection error:",u),"onError"),onReconnectStop:d(()=>console.error("[HyperLiquid WS] Reconnection stopped after 5 attempts"),"onReconnectStop"),onMessage:d(u=>{try{const S=JSON.parse(u.data);if("success"in S||"error"in S){S.error?(console.error("[HyperLiquid WS] Subscription error:",S.error),s(S.error)):s(null);return}if("channel"in S&&"data"in S){const O=S;switch(O.channel){case"webData2":n(O.data);break;case"allMids":r(O.data);break;default:console.warn(`[HyperLiquid WS] Unknown channel: ${O.channel}`)}}}catch(S){const O=`Failed to parse message: ${S instanceof Error?S.message:String(S)}`;console.error("[HyperLiquid WS] Parse error:",O,"Raw message:",u.data),s(O)}},"onMessage")}),g=v===he.ReadyState.OPEN;return ce(()=>(g?i.current=setInterval(()=>{h({method:"ping"})},3e4):i.current&&(clearInterval(i.current),i.current=null),()=>{i.current&&(clearInterval(i.current),i.current=null)}),[g,h]),ce(()=>{if(!g)return;const S=t||"0x0000000000000000000000000000000000000000";if(f===S)return;f&&h({method:"unsubscribe",subscription:{type:"webData2",user:f}});const O={method:"subscribe",subscription:{type:"webData2",user:S}},w={method:"subscribe",subscription:{type:"allMids"}};h(O),h(w),c(S),f&&f!==S&&n(null)},[g,t,f,h]),{webData2:e,allMids:a,connectionStatus:v,isConnected:g,lastError:o}},"useHyperliquidNativeWebSocket"),Qt={longTokens:[{symbol:"HYPE",weight:25},{symbol:"BTC",weight:25}],shortTokens:[{symbol:"AVAX",weight:10},{symbol:"SEI",weight:10},{symbol:"ADA",weight:10},{symbol:"TRUMP",weight:10},{symbol:"SUI",weight:10}],openTokenSelector:!1,selectorConfig:null,openConflictModal:!1,conflicts:[]},K=rt(void 0),Zt=d(({config:t,wsUrl:e="wss://hl-v2.pearprotocol.io/ws",children:n})=>{const a=D(()=>new Me(t),[t]),r=D(()=>new je(a),[a]),[o,s]=B(null),[f,c]=B(Qt),{data:i,connectionStatus:v,isConnected:h,lastError:g}=Ye({wsUrl:e,address:o}),{webData2:u,allMids:S,connectionStatus:O,isConnected:w,lastError:T}=Be({address:o}),P=D(()=>({client:a,migrationSDK:r,address:o,setAddress:s,connectionStatus:v,isConnected:h,data:i,lastError:g,nativeConnectionStatus:O,nativeIsConnected:w,nativeLastError:T,webData2:u,allMids:S,tokenSelection:f,setTokenSelection:c}),[a,r,o,v,h,i,g,O,w,T,u,S,f,c]);return ct.jsx(K.Provider,{value:P,children:n})},"PearHyperliquidProvider"),en=d(()=>{const t=ee(K);if(!t)throw new Error("usePearHyperliquidClient must be used within a PearHyperliquidProvider");return t.client},"usePearHyperliquidClient"),tn=d(()=>{const t=ee(K);if(!t)throw new Error("useMigrationSDK must be used within a PearHyperliquidProvider");return t.migrationSDK},"useMigrationSDK"),nn=d(()=>{const t=ee(K);if(!t)throw new Error("useAddress must be used within a PearHyperliquidProvider");return{address:t.address,setAddress:t.setAddress,clearAddress:d(()=>t.setAddress(null),"clearAddress"),isLoggedIn:!!t.address}},"useAddress");var re;(function(t){t.LONG="LONG",t.SHORT="SHORT"})(re||(re={}));class rn{static{d(this,"PositionProcessor")}constructor(e,n){this.webData2=e,this.allMids=n}execute(e){if(!e||e.length===0)return[];const n=this.getUserPositions(),a=this.calculatePlatformTotalsByAsset(e),r=new Map;(n||[]).forEach(s=>{var f;!((f=s.position)===null||f===void 0)&&f.coin&&r.set(s.position.coin,s)});const o=[];for(const s of e){const f=this.syncPositionWithAggregateData(s,r,a);o.push(f)}return o}getUserPositions(){var e,n;return((n=(e=this.webData2)===null||e===void 0?void 0:e.clearinghouseState)===null||n===void 0?void 0:n.assetPositions)||[]}getMarketPrice(e){var n;if(!(!((n=this.allMids)===null||n===void 0)&&n.mids))return 0;const a=this.allMids.mids[e];if(a)return Number(a);const r=this.extractBaseCurrency(e),o=this.allMids.mids[r];return o?Number(o):0}calculatePlatformTotalsByAsset(e){const n=new Map;for(const a of e){for(const r of a.longAssets||[]){const o=this.extractBaseCurrency(r.coin);n.has(o)||n.set(o,{totalSize:0,positions:[]});const s=n.get(o),f=Number(r.size||0);s.totalSize+=f,s.positions.push({positionId:a.positionId,asset:r,size:f})}for(const r of a.shortAssets||[]){const o=this.extractBaseCurrency(r.coin);n.has(o)||n.set(o,{totalSize:0,positions:[]});const s=n.get(o),f=Number(r.size||0);s.totalSize+=f,s.positions.push({positionId:a.positionId,asset:r,size:f})}}return n}extractBaseCurrency(e){return e.split("/")[0]||e}syncPositionWithAggregateData(e,n,a){const r=[];let o=!1,s=!0,f={total:0,closed:0},c={total:0,closed:0};for(const v of e.longAssets||[]){const h=this.extractBaseCurrency(v.coin),g=n.get(h),u=a.get(h),S=this.syncAssetWithAggregateData({...v,side:re.LONG},g,u?.totalSize||0);r.push(S),f.total++,S.actualSize===0&&f.closed++,S.isExternallyModified&&(o=!0),S.actualSize!==0&&(s=!1)}for(const v of e.shortAssets||[]){const h=this.extractBaseCurrency(v.coin),g=n.get(h),u=a.get(h),S=this.syncAssetWithAggregateData({...v,side:re.SHORT},g,u?.totalSize||0);r.push(S),c.total++,S.actualSize===0&&c.closed++,S.isExternallyModified&&(o=!0),S.actualSize!==0&&(s=!1)}const i=this.determineSyncStatus(o,s,f,c);return this.mapPositionToDtoWithSyncData(e,r,i)}determineSyncStatus(e,n,a,r){if(n)return"EXTERNALLY_CLOSED";const o=a.total>0&&a.closed===a.total,s=r.total>0&&r.closed===r.total;return o&&!s||!o&&s?"PAIR_BROKEN":e?"EXTERNALLY_MODIFIED":"SYNCED"}syncAssetWithAggregateData(e,n,a){const r=Number(e.size||0);if(!n||!n.position||!n.position.szi)return{asset:e,actualSize:0,isExternallyModified:!0,cumFunding:{allTime:0,sinceChange:0,sinceOpen:0},unrealizedPnl:0,liquidationPrice:0};const o=Math.abs(Number(n.position.szi||0)),s=Math.abs(o-a),f=a*.001,c=s>f,i=a>0?r/a:0,v=o*i,h=n.position.cumFunding,g={allTime:Number(h?.allTime||0),sinceChange:Number(h?.sinceChange||0)*i,sinceOpen:Number(h?.sinceOpen||0)*i},u=Number(n.position.unrealizedPnl||0)*i,S=Number(n.position.liquidationPx||0);return{asset:e,actualSize:v,isExternallyModified:c,cumFunding:g,unrealizedPnl:u,liquidationPrice:S}}mapPositionToDtoWithSyncData(e,n,a){var r,o;const s=((r=e.longAssets)===null||r===void 0?void 0:r.filter(g=>g))||[],f=((o=e.shortAssets)===null||o===void 0?void 0:o.filter(g=>g))||[],c=new Map;n.forEach(g=>{c.set(`${g.asset.coin}-${g.asset.side}`,g)});const i=this.calculateCurrentTotalPositionValue(n),h=this.calculateEntryTotalPositionValue(n)/e.leverage;return{syncStatus:a,positionId:e.positionId,address:e.address,leverage:e.leverage,stopLoss:e.stopLoss,takeProfit:e.takeProfit,entryRatio:this.calculateEntryRatio(n),markRatio:this.calculateMarkRatio(n),netFunding:this.calculateNetFundingFromSyncResults(n),positionValue:i,marginUsed:h,unrealizedPnl:this.calculateTotalUnrealizedPnlFromSyncResults(n),lastSyncAt:new Date().toISOString(),longAssets:s.map(g=>this.mapAssetToDetailDto(g,c.get(`${g.coin}-LONG`))),shortAssets:f.map(g=>this.mapAssetToDetailDto(g,c.get(`${g.coin}-SHORT`))),createdAt:e.createdAt,updatedAt:e.updatedAt}}mapAssetToDetailDto(e,n){const a=this.getMarketPrice(e.coin),r=n?.actualSize||Number(e.size||0),o=r*a,s=Number(e.size||0)*Number(e.entryPrice||0);return{coin:e.coin,entryPrice:Number(e.entryPrice||0),platformSize:Number(e.size||0),actualSize:r,isExternallyModified:n?.isExternallyModified||!1,cumFunding:n?.cumFunding||{allTime:0,sinceChange:0,sinceOpen:0},marginUsed:s,positionValue:o,unrealizedPnl:n?.unrealizedPnl||0,liquidationPrice:n?.liquidationPrice||0}}calculateEntryRatio(e){var n,a;const r=e.filter(c=>c.asset.side===re.LONG),o=e.filter(c=>c.asset.side===re.SHORT);if(r.length===0||o.length===0)return 0;const s=!((n=r[0])===null||n===void 0)&&n.asset.entryPrice?Number(r[0].asset.entryPrice):0,f=!((a=o[0])===null||a===void 0)&&a.asset.entryPrice?Number(o[0].asset.entryPrice):0;return f>0?s/f:0}calculateMarkRatio(e){var n,a;const r=e.filter(c=>c.asset.side===re.LONG),o=e.filter(c=>c.asset.side===re.SHORT);if(r.length===0||o.length===0)return 0;const s=!((n=r[0])===null||n===void 0)&&n.asset.coin?this.getMarketPrice(r[0].asset.coin):0,f=!((a=o[0])===null||a===void 0)&&a.asset.coin?this.getMarketPrice(o[0].asset.coin):0;return f>0?s/f:0}calculateNetFundingFromSyncResults(e){return e.reduce((a,r)=>{const o=r.cumFunding.sinceOpen;return a+o},0)}calculateTotalUnrealizedPnlFromSyncResults(e){return e.reduce((n,a)=>n+a.unrealizedPnl,0)}calculateCurrentTotalPositionValue(e){return e.reduce((n,a)=>{const r=this.getMarketPrice(a.asset.coin);return n+a.actualSize*r},0)}calculateEntryTotalPositionValue(e){return e.reduce((n,a)=>n+Number(a.asset.size||0)*Number(a.asset.entryPrice||0),0)}}const Ke=d((t,e,n)=>D(()=>!t||!e||!n?null:new rn(e,n).execute(t),[t,e,n]),"useCalculatedOpenPositions");class Xe{static{d(this,"AccountSummaryCalculator")}constructor(e){this.webData2=e}calculateAccountSummary(e,n,a,r){var o,s,f,c,i,v,h,g,u,S,O;if(!(!((o=this.webData2)===null||o===void 0)&&o.clearinghouseState))return e;const w=this.webData2.clearinghouseState,T=this.calculateTotalLimitOrderValue(n||[]),P=parseFloat(w.withdrawable||"0"),F=Math.max(0,P-T);return{balanceSummary:{crossMaintenanceMarginUsed:w.crossMaintenanceMarginUsed||"0",crossMarginSummary:{accountValue:((s=w.crossMarginSummary)===null||s===void 0?void 0:s.accountValue)||"0",totalMarginUsed:((f=w.crossMarginSummary)===null||f===void 0?void 0:f.totalMarginUsed)||"0",totalNtlPos:((c=w.crossMarginSummary)===null||c===void 0?void 0:c.totalNtlPos)||"0",totalRawUsd:((i=w.crossMarginSummary)===null||i===void 0?void 0:i.totalRawUsd)||"0"},marginSummary:{accountValue:((v=w.marginSummary)===null||v===void 0?void 0:v.accountValue)||"0",totalMarginUsed:((h=w.marginSummary)===null||h===void 0?void 0:h.totalMarginUsed)||"0",totalNtlPos:((g=w.marginSummary)===null||g===void 0?void 0:g.totalNtlPos)||"0",totalRawUsd:((u=w.marginSummary)===null||u===void 0?void 0:u.totalRawUsd)||"0"},time:w.time||Date.now(),withdrawable:F.toString()},agentWallet:{address:a||((S=e?.agentWallet)===null||S===void 0?void 0:S.address)||"",status:r||((O=e?.agentWallet)===null||O===void 0?void 0:O.status)||"UNKNOWN"}}}calculateTotalLimitOrderValue(e){return e?.length?e.filter(a=>a.status==="OPEN"||a.status==="PROCESSING").reduce((a,r)=>a+r.usdValue,0):0}getClearinghouseState(){var e;return((e=this.webData2)===null||e===void 0?void 0:e.clearinghouseState)||null}hasRealTimeData(){var e;return!!(!((e=this.webData2)===null||e===void 0)&&e.clearinghouseState)}}const Qe=d((t,e,n,a,r)=>D(()=>t?n?.clearinghouseState?new Xe(n).calculateAccountSummary(t,e,a,r):t:null,[t,e,n,a,r]),"useCalculatedAccountSummary"),on=d(()=>{const t=ee(K);if(!t)throw new Error("useTradeHistories must be used within a PearHyperliquidProvider");const e=D(()=>t.data.tradeHistories===null&&t.isConnected,[t.data.tradeHistories,t.isConnected]);return{data:t.data.tradeHistories,isLoading:e}},"useTradeHistories"),an=d(()=>{const t=ee(K);if(!t)throw new Error("useOpenPositions must be used within a PearHyperliquidProvider");const e=Ke(t.data.openPositions,t.webData2,t.allMids),n=D(()=>t.isConnected&&(t.data.openPositions===null||!t.webData2||!t.allMids),[t.data.openPositions,t.webData2,t.allMids,t.isConnected]);return{data:e,isLoading:n}},"useOpenPositions"),sn=d(()=>{const t=ee(K);if(!t)throw new Error("useOpenOrders must be used within a PearHyperliquidProvider");const e=D(()=>t.data.openOrders===null&&t.isConnected,[t.data.openOrders,t.isConnected]);return{data:t.data.openOrders,isLoading:e}},"useOpenOrders"),cn=d(()=>{var t,e,n,a;const r=ee(K);if(!r)throw new Error("useAccountSummary must be used within a PearHyperliquidProvider");const o=Qe(r.data.accountSummary,r.data.openOrders,r.webData2,(e=(t=r.data.accountSummary)===null||t===void 0?void 0:t.agentWallet)===null||e===void 0?void 0:e.address,(a=(n=r.data.accountSummary)===null||n===void 0?void 0:n.agentWallet)===null||a===void 0?void 0:a.status),s=D(()=>r.data.accountSummary===null&&r.isConnected,[r.data.accountSummary,r.isConnected]);return{data:o,isLoading:s}},"useAccountSummary");class We{static{d(this,"TokenMetadataExtractor")}static extractTokenMetadata(e,n,a){if(!n||!a)return null;const r=n.meta.universe.findIndex(O=>O.name===e);if(r===-1)return null;const o=n.meta.universe[r],s=n.assetCtxs[r];if(!s)return null;const f=a.mids[e],c=f?parseFloat(f):0,i=parseFloat(s.prevDayPx),v=c-i,h=i!==0?v/i*100:0,g=parseFloat(s.funding)*100,u=parseFloat(s.markPx),S=parseFloat(s.oraclePx);return{currentPrice:c,prevDayPrice:i,priceChange24h:v,priceChange24hPercent:h,netFunding:g,maxLeverage:o.maxLeverage,markPrice:u,oraclePrice:S,openInterest:s.openInterest,dayVolume:s.dayNtlVlm}}static extractMultipleTokensMetadata(e,n,a){const r={};for(const o of e)r[o]=this.extractTokenMetadata(o,n,a);return r}static isTokenAvailable(e,n){return n?n.meta.universe.some(a=>a.name===e):!1}}const un=d(()=>{var t;const e=ee(K);if(!e)throw new Error("useTokenSelection must be used within PearHyperliquidProvider");const{webData2:n,allMids:a,tokenSelection:r,setTokenSelection:o}=e,s=D(()=>!!(n&&a),[n,a]),f=D(()=>{if(!s)return!0;const y=[...r.longTokens,...r.shortTokens];return y.length===0?!1:y.some(m=>!m.metadata)},[s,r.longTokens,r.shortTokens]);ce(()=>{if(!n||!a)return;const y=[...r.longTokens,...r.shortTokens].map(b=>b.symbol);if(y.length===0)return;const m=We.extractMultipleTokensMetadata(y,n,a);o(b=>({...b,longTokens:b.longTokens.map(E=>({...E,metadata:m[E.symbol]||void 0})),shortTokens:b.shortTokens.map(E=>({...E,metadata:m[E.symbol]||void 0}))}))},[n,a,o]);const c=D(()=>{let y=1,m=1;return r.longTokens.forEach(b=>{var E;if(!((E=b.metadata)===null||E===void 0)&&E.currentPrice&&b.weight>0){const p=b.weight/100;y*=Math.pow(b.metadata.currentPrice,p)}}),r.shortTokens.forEach(b=>{var E;if(!((E=b.metadata)===null||E===void 0)&&E.currentPrice&&b.weight>0){const p=b.weight/100;m*=Math.pow(b.metadata.currentPrice,-p)}}),y*m},[r.longTokens,r.shortTokens]),i=D(()=>{let y=1,m=1;return r.longTokens.forEach(b=>{var E;if(!((E=b.metadata)===null||E===void 0)&&E.prevDayPrice&&b.weight>0){const p=b.weight/100;y*=Math.pow(b.metadata.prevDayPrice,p)}}),r.shortTokens.forEach(b=>{var E;if(!((E=b.metadata)===null||E===void 0)&&E.prevDayPrice&&b.weight>0){const p=b.weight/100;m*=Math.pow(b.metadata.prevDayPrice,-p)}}),y*m},[r.longTokens,r.shortTokens]),v=D(()=>{let y=0;return r.longTokens.forEach(m=>{var b;if(!((b=m.metadata)===null||b===void 0)&&b.netFunding&&m.weight>0){const E=m.weight/100;y+=m.metadata.netFunding*E}}),r.shortTokens.forEach(m=>{var b;if(!((b=m.metadata)===null||b===void 0)&&b.netFunding&&m.weight>0){const E=m.weight/100;y-=m.metadata.netFunding*E}}),y*100},[r.longTokens,r.shortTokens]),h=D(()=>{var y;if(!(!((y=n?.meta)===null||y===void 0)&&y.universe))return 0;const m=[...r.longTokens,...r.shortTokens].map(E=>E.symbol);if(m.length===0)return 0;let b=1/0;return m.forEach(E=>{const p=n.meta.universe.find(C=>C.name===E);p?.maxLeverage&&(b=Math.min(b,p.maxLeverage))}),b===1/0?0:b},[(t=n?.meta)===null||t===void 0?void 0:t.universe,r.longTokens,r.shortTokens]),g=D(()=>10*(r.longTokens.length+r.shortTokens.length),[r.longTokens.length,r.shortTokens.length]),u=z(y=>{o(m=>({...m,longTokens:y}))},[o]),S=z(y=>{o(m=>({...m,shortTokens:y}))},[o]),O=z((y,m,b)=>{const E=Math.max(1,Math.min(100,b));o(p=>{var C,M;const j=p.longTokens.reduce((R,H)=>R+H.weight,0),$=p.shortTokens.reduce((R,H)=>R+H.weight,0);if(y){const R=((C=p.longTokens[m])===null||C===void 0?void 0:C.weight)||0,H=E-R;if(j+H+$>100){const l=Math.max(1,100-$-(j-R)),_=[...p.longTokens];return _[m]={..._[m],weight:l},{...p,longTokens:_}}else{const l=[...p.longTokens];return l[m]={...l[m],weight:E},{...p,longTokens:l}}}else{const R=((M=p.shortTokens[m])===null||M===void 0?void 0:M.weight)||0,H=E-R,Q=$+H;if(j+Q>100){const l=Math.max(1,100-j-($-R)),_=[...p.shortTokens];return _[m]={..._[m],weight:l},{...p,shortTokens:_}}else{const l=[...p.shortTokens];return l[m]={...l[m],weight:E},{...p,shortTokens:l}}}})},[o]),w=z(y=>{const b=(y?r.longTokens:r.shortTokens).length;o(E=>({...E,selectorConfig:{isLong:y,index:b},openTokenSelector:!0}))},[r.longTokens,r.shortTokens,o]),T=z((y,m)=>{o(b=>{if(y){const E=b.longTokens.filter((p,C)=>C!==m);return{...b,longTokens:E}}else{const E=b.shortTokens.filter((p,C)=>C!==m);return{...b,shortTokens:E}}})},[o]),P=z(y=>{o(m=>({...m,openTokenSelector:y}))},[o]),F=z(y=>{o(m=>({...m,selectorConfig:y}))},[o]),W=z(y=>{o(m=>({...m,openConflictModal:y}))},[o]),X=z(y=>{o(m=>({...m,conflicts:y}))},[o]),Y=z(()=>{o(y=>({...y,longTokens:[{symbol:"HYPE",weight:25},{symbol:"BTC",weight:25}],shortTokens:[{symbol:"AVAX",weight:10},{symbol:"SEI",weight:10},{symbol:"ADA",weight:10},{symbol:"TRUMP",weight:10},{symbol:"SUI",weight:10}],openTokenSelector:!1,selectorConfig:null,openConflictModal:!1}))},[o]),k=z(y=>{if(!r.selectorConfig)return;const{isLong:m,index:b}=r.selectorConfig,E=m?r.longTokens:r.shortTokens;if(E.some(C=>C.symbol===y))return;const p=We.extractTokenMetadata(y,n,a);o(C=>{if(b>=E.length){const M=C.longTokens.reduce((l,_)=>l+_.weight,0),j=C.shortTokens.reduce((l,_)=>l+_.weight,0),$=M+j,R=Math.max(1,100-$),H=Math.min(20,R),Q={symbol:y,weight:H,metadata:p||void 0};return m?{...C,longTokens:[...C.longTokens,Q]}:{...C,shortTokens:[...C.shortTokens,Q]}}else if(m){const M=[...C.longTokens];return M[b]={...M[b],symbol:y,metadata:p||void 0},{...C,longTokens:M}}else{const M=[...C.shortTokens];return M[b]={...M[b],symbol:y,metadata:p||void 0},{...C,shortTokens:M}}})},[r.selectorConfig,r.longTokens,r.shortTokens,n,a,o]);return{longTokens:r.longTokens,shortTokens:r.shortTokens,openTokenSelector:r.openTokenSelector,selectorConfig:r.selectorConfig,openConflictModal:r.openConflictModal,conflicts:r.conflicts,isLoading:f,isPriceDataReady:s,weightedRatio:c,weightedRatio24h:i,sumNetFunding:v,maxLeverage:h,minMargin:g,setLongTokens:u,setShortTokens:S,updateTokenWeight:O,addToken:w,removeToken:T,handleTokenSelect:k,setOpenTokenSelector:P,setSelectorConfig:F,setOpenConflictModal:W,setConflicts:X,resetToDefaults:Y}},"useTokenSelection");class ln{static{d(this,"ConflictDetector")}static detectConflicts(e,n,a){const r=[];return a&&(e.forEach(o=>{a.find(f=>{var c;const i=f.coin||f.symbol||f.asset,v=(c=f.side)===null||c===void 0?void 0:c.toLowerCase();return i===o.symbol&&(v==="short"||v==="sell")})&&r.push({symbol:o.symbol,conflictType:"short",conflictMessage:`${o.symbol} Long conflicts with existing ${o.symbol} Short position`})}),n.forEach(o=>{a.find(f=>{var c;const i=f.coin||f.symbol||f.asset,v=(c=f.side)===null||c===void 0?void 0:c.toLowerCase();return i===o.symbol&&(v==="long"||v==="buy")})&&r.push({symbol:o.symbol,conflictType:"long",conflictMessage:`${o.symbol} Short conflicts with existing ${o.symbol} Long position`})})),r}}export{Xe as AccountSummaryCalculator,ln as ConflictDetector,Me as PearHyperliquidClient,Zt as PearHyperliquidProvider,je as PearMigrationSDK,We as TokenMetadataExtractor,Me as default,cn as useAccountSummary,nn as useAddress,Qe as useCalculatedAccountSummary,Ke as useCalculatedOpenPositions,Be as useHyperliquidNativeWebSocket,Ye as useHyperliquidWebSocket,tn as useMigrationSDK,sn as useOpenOrders,an as useOpenPositions,en as usePearHyperliquidClient,un as useTokenSelection,on as useTradeHistories};
|
|
22
|
+
<%s key={someKey} {...props} />`,R,F,ae,F),$[F+R]=!0)}if(F=null,C!==void 0&&(n(C),F=""+C),s(p)&&(n(p.key),F=""+p.key),"key"in p){C={};for(var Ne in p)Ne!=="key"&&(C[Ne]=p[Ne])}else C=p;return F&&c(C,typeof v=="function"?v.displayName||v.name||"Unknown":v),i(v,F,G,ee,o(),C,Ce,Ae)}d(u,"jsxDEVImpl");function h(v){typeof v=="object"&&v!==null&&v.$$typeof===f&&v._store&&(v._store.validated=1)}d(h,"validateChildKeys");var g=ve,f=Symbol.for("react.transitional.element"),S=Symbol.for("react.portal"),A=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),k=Symbol.for("react.consumer"),w=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),I=Symbol.for("react.suspense"),j=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),U=Symbol.for("react.lazy"),J=Symbol.for("react.activity"),T=Symbol.for("react.client.reference"),y=g.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,b=Object.prototype.hasOwnProperty,_=Array.isArray,P=console.createTask?console.createTask:function(){return null};g={react_stack_bottom_frame:d(function(v){return v()},"react_stack_bottom_frame")};var M,D={},z=g.react_stack_bottom_frame.bind(g,r)(),Q=P(a(r)),$={};le.Fragment=A,le.jsx=function(v,p,C,R,ee){var G=1e4>y.recentlyCreatedOwnerStacks++;return u(v,p,C,!1,R,ee,G?Error("react-stack-top-frame"):z,G?P(a(v)):Q)},le.jsxs=function(v,p,C,R,ee){var G=1e4>y.recentlyCreatedOwnerStacks++;return u(v,p,C,!0,R,ee,G?Error("react-stack-top-frame"):z,G?P(a(v)):Q)}})()),le}d(it,"requireReactJsxRuntime_development"),process.env.NODE_ENV==="production"?Re.exports=st():Re.exports=it();var ct=Re.exports,he={},ie={},x={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.isEventSourceSupported=t.isReactNative=t.ReadyState=t.DEFAULT_HEARTBEAT=t.UNPARSABLE_JSON_OBJECT=t.DEFAULT_RECONNECT_INTERVAL_MS=t.DEFAULT_RECONNECT_LIMIT=t.SOCKET_IO_PING_CODE=t.SOCKET_IO_PATH=t.SOCKET_IO_PING_INTERVAL=t.DEFAULT_EVENT_SOURCE_OPTIONS=t.EMPTY_EVENT_HANDLERS=t.DEFAULT_OPTIONS=void 0;var e=1,n=1e3*e;t.DEFAULT_OPTIONS={},t.EMPTY_EVENT_HANDLERS={},t.DEFAULT_EVENT_SOURCE_OPTIONS={withCredentials:!1,events:t.EMPTY_EVENT_HANDLERS},t.SOCKET_IO_PING_INTERVAL=25*n,t.SOCKET_IO_PATH="/socket.io/?EIO=3&transport=websocket",t.SOCKET_IO_PING_CODE="2",t.DEFAULT_RECONNECT_LIMIT=20,t.DEFAULT_RECONNECT_INTERVAL_MS=5e3,t.UNPARSABLE_JSON_OBJECT={},t.DEFAULT_HEARTBEAT={message:"ping",timeout:6e4,interval:25e3};var a;(function(r){r[r.UNINSTANTIATED=-1]="UNINSTANTIATED",r[r.CONNECTING=0]="CONNECTING",r[r.OPEN=1]="OPEN",r[r.CLOSING=2]="CLOSING",r[r.CLOSED=3]="CLOSED"})(a||(t.ReadyState=a={}));var o=d(function(){try{return"EventSource"in globalThis}catch{return!1}},"eventSourceSupported");t.isReactNative=typeof navigator<"u"&&navigator.product==="ReactNative",t.isEventSourceSupported=!t.isReactNative&&o()})(x);var ge={},Se={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetWebSockets=t.sharedWebSockets=void 0,t.sharedWebSockets={};var e=d(function(n){if(n&&t.sharedWebSockets.hasOwnProperty(n))delete t.sharedWebSockets[n];else for(var a in t.sharedWebSockets)t.sharedWebSockets.hasOwnProperty(a)&&delete t.sharedWebSockets[a]},"resetWebSockets");t.resetWebSockets=e})(Se);var ye={},Y={};Object.defineProperty(Y,"__esModule",{value:!0}),Y.setUpSocketIOPing=Y.appendQueryParams=Y.parseSocketIOUrl=void 0;var be=x,ut=d(function(t){if(t){var e=/^https|wss/.test(t),n=t.replace(/^(https?|wss?)(:\/\/)?/,""),a=n.replace(/\/$/,""),o=e?"wss":"ws";return"".concat(o,"://").concat(a).concat(be.SOCKET_IO_PATH)}else if(t===""){var e=/^https/.test(window.location.protocol),o=e?"wss":"ws",r=window.location.port?":".concat(window.location.port):"";return"".concat(o,"://").concat(window.location.hostname).concat(r).concat(be.SOCKET_IO_PATH)}return t},"parseSocketIOUrl");Y.parseSocketIOUrl=ut;var lt=d(function(t,e){e===void 0&&(e={});var n=/\?([\w]+=[\w]+)/,a=n.test(t),o="".concat(Object.entries(e).reduce(function(r,s){var c=s[0],l=s[1];return r+"".concat(c,"=").concat(l,"&")},"").slice(0,-1));return"".concat(t).concat(a?"&":"?").concat(o)},"appendQueryParams");Y.appendQueryParams=lt;var dt=d(function(t,e){e===void 0&&(e=be.SOCKET_IO_PING_INTERVAL);var n=d(function(){return t(be.SOCKET_IO_PING_CODE)},"ping");return window.setInterval(n,e)},"setUpSocketIOPing");Y.setUpSocketIOPing=dt;var me={};Object.defineProperty(me,"__esModule",{value:!0}),me.heartbeat=vt;var Le=x;function ft(t){return Array.isArray(t)?t.reduce(function(e,n){return e.current>n.current?e:n}).current:t.current}d(ft,"getLastMessageTime");function vt(t,e,n){var a=n||{},o=a.interval,r=o===void 0?Le.DEFAULT_HEARTBEAT.interval:o,s=a.timeout,c=s===void 0?Le.DEFAULT_HEARTBEAT.timeout:s,l=a.message,i=l===void 0?Le.DEFAULT_HEARTBEAT.message:l,u=Math.max(100,r/10),h=Date.now(),g=setInterval(function(){var f=Date.now(),S=ft(e);if(S+c<=f)console.warn("Heartbeat timed out, closing connection, last message received ".concat(f-S,"ms ago, last ping sent ").concat(f-h,"ms ago")),t.close();else if(S+r<=f&&h+r<=f)try{typeof i=="function"?t.send(i()):t.send(i),h=f}catch(A){console.error("Heartbeat failed, closing connection",A instanceof Error?A.message:A),t.close()}},u);return t.addEventListener("close",function(){clearInterval(g)}),function(){}}d(vt,"heartbeat");var ce={},Te={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetSubscribers=t.removeSubscriber=t.addSubscriber=t.hasSubscribers=t.getSubscribers=void 0;var e={},n=[],a=d(function(l){return(0,t.hasSubscribers)(l)?Array.from(e[l]):n},"getSubscribers");t.getSubscribers=a;var o=d(function(l){var i;return((i=e[l])===null||i===void 0?void 0:i.size)>0},"hasSubscribers");t.hasSubscribers=o;var r=d(function(l,i){e[l]=e[l]||new Set,e[l].add(i)},"addSubscriber");t.addSubscriber=r;var s=d(function(l,i){e[l].delete(i)},"removeSubscriber");t.removeSubscriber=s;var c=d(function(l){if(l&&e.hasOwnProperty(l))delete e[l];else for(var i in e)e.hasOwnProperty(i)&&delete e[i]},"resetSubscribers");t.resetSubscribers=c})(Te),Object.defineProperty(ce,"__esModule",{value:!0}),ce.assertIsWebSocket=St,ce.resetGlobalState=yt;var ht=Se,gt=Te;function St(t,e){if(!e&&!(t instanceof WebSocket))throw new Error("")}d(St,"assertIsWebSocket");function yt(t){(0,gt.resetSubscribers)(t),(0,ht.resetWebSockets)(t)}d(yt,"resetGlobalState");var Ee=L&&L.__assign||function(){return Ee=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Ee.apply(this,arguments)};Object.defineProperty(ye,"__esModule",{value:!0}),ye.attachListeners=void 0;var bt=Y,mt=me,B=x,Tt=ce,Et=d(function(t,e,n,a){t.onmessage=function(o){var r;e.current.onMessage&&e.current.onMessage(o),typeof a?.current=="number"&&(a.current=Date.now()),!(typeof e.current.filter=="function"&&e.current.filter(o)!==!0)&&(e.current.heartbeat&&typeof e.current.heartbeat!="boolean"&&((r=e.current.heartbeat)===null||r===void 0?void 0:r.returnMessage)===o.data||n(o))}},"bindMessageHandler$1"),_t=d(function(t,e,n,a,o){t.onopen=function(r){if(e.current.onOpen&&e.current.onOpen(r),a.current=0,n(B.ReadyState.OPEN),e.current.heartbeat&&t instanceof WebSocket){var s=typeof e.current.heartbeat=="boolean"?void 0:e.current.heartbeat;o.current=Date.now(),(0,mt.heartbeat)(t,o,s)}}},"bindOpenHandler$1"),Ot=d(function(t,e,n,a,o){if(B.isEventSourceSupported&&t instanceof EventSource)return function(){};(0,Tt.assertIsWebSocket)(t,e.current.skipAssert);var r;return t.onclose=function(s){var c;if(e.current.onClose&&e.current.onClose(s),n(B.ReadyState.CLOSED),e.current.shouldReconnect&&e.current.shouldReconnect(s)){var l=(c=e.current.reconnectAttempts)!==null&&c!==void 0?c:B.DEFAULT_RECONNECT_LIMIT;if(o.current<l){var i=typeof e.current.reconnectInterval=="function"?e.current.reconnectInterval(o.current):e.current.reconnectInterval;r=window.setTimeout(function(){o.current++,a()},i??B.DEFAULT_RECONNECT_INTERVAL_MS)}else e.current.onReconnectStop&&e.current.onReconnectStop(l),console.warn("Max reconnect attempts of ".concat(l," exceeded"))}},function(){return r&&window.clearTimeout(r)}},"bindCloseHandler$1"),pt=d(function(t,e,n,a,o){var r;return t.onerror=function(s){var c;if(e.current.onError&&e.current.onError(s),B.isEventSourceSupported&&t instanceof EventSource&&(e.current.onClose&&e.current.onClose(Ee(Ee({},s),{code:1006,reason:"An error occurred with the EventSource: ".concat(s),wasClean:!1})),n(B.ReadyState.CLOSED),t.close()),e.current.retryOnError)if(o.current<((c=e.current.reconnectAttempts)!==null&&c!==void 0?c:B.DEFAULT_RECONNECT_LIMIT)){var l=typeof e.current.reconnectInterval=="function"?e.current.reconnectInterval(o.current):e.current.reconnectInterval;r=window.setTimeout(function(){o.current++,a()},l??B.DEFAULT_RECONNECT_INTERVAL_MS)}else e.current.onReconnectStop&&e.current.onReconnectStop(e.current.reconnectAttempts),console.warn("Max reconnect attempts of ".concat(e.current.reconnectAttempts," exceeded"))},function(){return r&&window.clearTimeout(r)}},"bindErrorHandler$1"),wt=d(function(t,e,n,a,o,r,s){var c=e.setLastMessage,l=e.setReadyState,i,u,h;return n.current.fromSocketIO&&(i=(0,bt.setUpSocketIOPing)(s)),Et(t,n,c,r),_t(t,n,l,o,r),u=Ot(t,n,l,a,o),h=pt(t,n,l,a,o),function(){l(B.ReadyState.CLOSING),u(),h(),t.close(),i&&clearInterval(i)}},"attachListeners");ye.attachListeners=wt;var _e={},Oe=L&&L.__assign||function(){return Oe=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},Oe.apply(this,arguments)};Object.defineProperty(_e,"__esModule",{value:!0}),_e.attachSharedListeners=void 0;var Pt=Se,oe=x,de=Te,kt=Y,Ct=me,At=d(function(t,e,n){t.onmessage=function(a){(0,de.getSubscribers)(e).forEach(function(o){var r;o.optionsRef.current.onMessage&&o.optionsRef.current.onMessage(a),typeof((r=o?.lastMessageTime)===null||r===void 0?void 0:r.current)=="number"&&(o.lastMessageTime.current=Date.now()),!(typeof o.optionsRef.current.filter=="function"&&o.optionsRef.current.filter(a)!==!0)&&(n&&typeof n!="boolean"&&n?.returnMessage===a.data||o.setLastMessage(a))})}},"bindMessageHandler"),Nt=d(function(t,e,n){t.onopen=function(a){var o=(0,de.getSubscribers)(e);o.forEach(function(r){r.reconnectCount.current=0,r.optionsRef.current.onOpen&&r.optionsRef.current.onOpen(a),r.setReadyState(oe.ReadyState.OPEN),n&&t instanceof WebSocket&&(r.lastMessageTime.current=Date.now())}),n&&t instanceof WebSocket&&(0,Ct.heartbeat)(t,o.map(function(r){return r.lastMessageTime}),typeof n=="boolean"?void 0:n)}},"bindOpenHandler"),Mt=d(function(t,e){t instanceof WebSocket&&(t.onclose=function(n){(0,de.getSubscribers)(e).forEach(function(a){a.optionsRef.current.onClose&&a.optionsRef.current.onClose(n),a.setReadyState(oe.ReadyState.CLOSED)}),delete Pt.sharedWebSockets[e],(0,de.getSubscribers)(e).forEach(function(a){var o;if(a.optionsRef.current.shouldReconnect&&a.optionsRef.current.shouldReconnect(n)){var r=(o=a.optionsRef.current.reconnectAttempts)!==null&&o!==void 0?o:oe.DEFAULT_RECONNECT_LIMIT;if(a.reconnectCount.current<r){var s=typeof a.optionsRef.current.reconnectInterval=="function"?a.optionsRef.current.reconnectInterval(a.reconnectCount.current):a.optionsRef.current.reconnectInterval;setTimeout(function(){a.reconnectCount.current++,a.reconnect.current()},s??oe.DEFAULT_RECONNECT_INTERVAL_MS)}else a.optionsRef.current.onReconnectStop&&a.optionsRef.current.onReconnectStop(a.optionsRef.current.reconnectAttempts),console.warn("Max reconnect attempts of ".concat(r," exceeded"))}})})},"bindCloseHandler"),Rt=d(function(t,e){t.onerror=function(n){(0,de.getSubscribers)(e).forEach(function(a){a.optionsRef.current.onError&&a.optionsRef.current.onError(n),oe.isEventSourceSupported&&t instanceof EventSource&&(a.optionsRef.current.onClose&&a.optionsRef.current.onClose(Oe(Oe({},n),{code:1006,reason:"An error occurred with the EventSource: ".concat(n),wasClean:!1})),a.setReadyState(oe.ReadyState.CLOSED))}),oe.isEventSourceSupported&&t instanceof EventSource&&t.close()}},"bindErrorHandler"),Lt=d(function(t,e,n,a){var o;return n.current.fromSocketIO&&(o=(0,kt.setUpSocketIOPing)(a)),At(t,e,n.current.heartbeat),Mt(t,e),Nt(t,e,n.current.heartbeat),Rt(t,e),function(){o&&clearInterval(o)}},"attachSharedListeners");_e.attachSharedListeners=Lt,Object.defineProperty(ge,"__esModule",{value:!0}),ge.createOrJoinSocket=void 0;var te=Se,fe=x,It=ye,Dt=_e,Ie=Te,Wt=d(function(t,e,n,a,o){return function(){if((0,Ie.removeSubscriber)(t,e),!(0,Ie.hasSubscribers)(t)){try{var r=te.sharedWebSockets[t];r instanceof WebSocket&&(r.onclose=function(s){n.current.onClose&&n.current.onClose(s),a(fe.ReadyState.CLOSED)}),r.close()}catch{}o&&o(),delete te.sharedWebSockets[t]}}},"cleanSubscribers"),Ut=d(function(t,e,n,a,o,r,s,c,l){if(!fe.isEventSourceSupported&&a.current.eventSourceOptions)throw fe.isReactNative?new Error("EventSource is not supported in ReactNative"):new Error("EventSource is not supported");if(a.current.share){var i=null;te.sharedWebSockets[e]===void 0?(te.sharedWebSockets[e]=a.current.eventSourceOptions?new EventSource(e,a.current.eventSourceOptions):new WebSocket(e,a.current.protocols),t.current=te.sharedWebSockets[e],n(fe.ReadyState.CONNECTING),i=(0,Dt.attachSharedListeners)(te.sharedWebSockets[e],e,a,l)):(t.current=te.sharedWebSockets[e],n(te.sharedWebSockets[e].readyState));var u={setLastMessage:o,setReadyState:n,optionsRef:a,reconnectCount:s,lastMessageTime:c,reconnect:r};return(0,Ie.addSubscriber)(e,u),Wt(e,u,a,n,i)}else{if(t.current=a.current.eventSourceOptions?new EventSource(e,a.current.eventSourceOptions):new WebSocket(e,a.current.protocols),n(fe.ReadyState.CONNECTING),!t.current)throw new Error("WebSocket failed to be created");return(0,It.attachListeners)(t.current,{setLastMessage:o,setReadyState:n},a,r.current,s,c,l)}},"createOrJoinSocket");ge.createOrJoinSocket=Ut;var $e={};(function(t){var e=L&&L.__awaiter||function(l,i,u,h){function g(f){return f instanceof u?f:new u(function(S){S(f)})}return d(g,"adopt"),new(u||(u=Promise))(function(f,S){function A(k){try{m(h.next(k))}catch(w){S(w)}}d(A,"fulfilled");function E(k){try{m(h.throw(k))}catch(w){S(w)}}d(E,"rejected");function m(k){k.done?f(k.value):g(k.value).then(A,E)}d(m,"step"),m((h=h.apply(l,i||[])).next())})},n=L&&L.__generator||function(l,i){var u={label:0,sent:d(function(){if(f[0]&1)throw f[1];return f[1]},"sent"),trys:[],ops:[]},h,g,f,S=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return S.next=A(0),S.throw=A(1),S.return=A(2),typeof Symbol=="function"&&(S[Symbol.iterator]=function(){return this}),S;function A(m){return function(k){return E([m,k])}}function E(m){if(h)throw new TypeError("Generator is already executing.");for(;S&&(S=0,m[0]&&(u=0)),u;)try{if(h=1,g&&(f=m[0]&2?g.return:m[0]?g.throw||((f=g.return)&&f.call(g),0):g.next)&&!(f=f.call(g,m[1])).done)return f;switch(g=0,f&&(m=[m[0]&2,f.value]),m[0]){case 0:case 1:f=m;break;case 4:return u.label++,{value:m[1],done:!1};case 5:u.label++,g=m[1],m=[0];continue;case 7:m=u.ops.pop(),u.trys.pop();continue;default:if(f=u.trys,!(f=f.length>0&&f[f.length-1])&&(m[0]===6||m[0]===2)){u=0;continue}if(m[0]===3&&(!f||m[1]>f[0]&&m[1]<f[3])){u.label=m[1];break}if(m[0]===6&&u.label<f[1]){u.label=f[1],f=m;break}if(f&&u.label<f[2]){u.label=f[2],u.ops.push(m);break}f[2]&&u.ops.pop(),u.trys.pop();continue}m=i.call(l,u)}catch(k){m=[6,k],g=0}finally{h=f=0}if(m[0]&5)throw m[1];return{value:m[0]?m[1]:void 0,done:!0}}},a=L&&L.__spreadArray||function(l,i,u){if(u||arguments.length===2)for(var h=0,g=i.length,f;h<g;h++)(f||!(h in i))&&(f||(f=Array.prototype.slice.call(i,0,h)),f[h]=i[h]);return l.concat(f||Array.prototype.slice.call(i))};Object.defineProperty(t,"__esModule",{value:!0}),t.getUrl=void 0;var o=Y,r=x,s=d(function(l){return new Promise(function(i){return window.setTimeout(i,l)})},"waitFor"),c=d(function(l,i){for(var u=[],h=2;h<arguments.length;h++)u[h-2]=arguments[h];return e(void 0,a([l,i],u,!0),void 0,function(g,f,S){var A,E,m,k,w,O,I,j;return S===void 0&&(S=0),n(this,function(N){switch(N.label){case 0:if(typeof g!="function")return[3,10];N.label=1;case 1:return N.trys.push([1,3,,9]),[4,g()];case 2:return A=N.sent(),[3,9];case 3:return N.sent(),f.current.retryOnError?(E=(O=f.current.reconnectAttempts)!==null&&O!==void 0?O:r.DEFAULT_RECONNECT_LIMIT,S<E?(m=typeof f.current.reconnectInterval=="function"?f.current.reconnectInterval(S):f.current.reconnectInterval,[4,s(m??r.DEFAULT_RECONNECT_INTERVAL_MS)]):[3,5]):[3,7];case 4:return N.sent(),[2,(0,t.getUrl)(g,f,S+1)];case 5:return(j=(I=f.current).onReconnectStop)===null||j===void 0||j.call(I,S),[2,null];case 6:return[3,8];case 7:return[2,null];case 8:return[3,9];case 9:return[3,11];case 10:A=g,N.label=11;case 11:return k=f.current.fromSocketIO?(0,o.parseSocketIOUrl)(A):A,w=f.current.queryParams?(0,o.appendQueryParams)(k,f.current.queryParams):k,[2,w]}})})},"getUrl");t.getUrl=c})($e);var ze={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.websocketWrapper=void 0;var e=d(function(n,a){return new Proxy(n,{get:d(function(o,r){var s=o[r];return r==="reconnect"?a:typeof s=="function"?(console.error("Calling methods directly on the websocket is not supported at this moment. You must use the methods returned by useWebSocket."),function(){}):s},"get"),set:d(function(o,r,s){return/^on/.test(r)?(console.warn("The websocket's event handlers should be defined through the options object passed into useWebSocket."),!1):(o[r]=s,!0)},"set")})},"websocketWrapper");t.websocketWrapper=e,t.default=t.websocketWrapper})(ze);var ne=L&&L.__assign||function(){return ne=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ne.apply(this,arguments)},jt=L&&L.__awaiter||function(t,e,n,a){function o(r){return r instanceof n?r:new n(function(s){s(r)})}return d(o,"adopt"),new(n||(n=Promise))(function(r,s){function c(u){try{i(a.next(u))}catch(h){s(h)}}d(c,"fulfilled");function l(u){try{i(a.throw(u))}catch(h){s(h)}}d(l,"rejected");function i(u){u.done?r(u.value):o(u.value).then(c,l)}d(i,"step"),i((a=a.apply(t,e||[])).next())})},Ft=L&&L.__generator||function(t,e){var n={label:0,sent:d(function(){if(r[0]&1)throw r[1];return r[1]},"sent"),trys:[],ops:[]},a,o,r,s=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return s.next=c(0),s.throw=c(1),s.return=c(2),typeof Symbol=="function"&&(s[Symbol.iterator]=function(){return this}),s;function c(i){return function(u){return l([i,u])}}function l(i){if(a)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(n=0)),n;)try{if(a=1,o&&(r=i[0]&2?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[i[0]&2,r.value]),i[0]){case 0:case 1:r=i;break;case 4:return n.label++,{value:i[1],done:!1};case 5:n.label++,o=i[1],i=[0];continue;case 7:i=n.ops.pop(),n.trys.pop();continue;default:if(r=n.trys,!(r=r.length>0&&r[r.length-1])&&(i[0]===6||i[0]===2)){n=0;continue}if(i[0]===3&&(!r||i[1]>r[0]&&i[1]<r[3])){n.label=i[1];break}if(i[0]===6&&n.label<r[1]){n.label=r[1],r=i;break}if(r&&n.label<r[2]){n.label=r[2],n.ops.push(i);break}r[2]&&n.ops.pop(),n.trys.pop();continue}i=e.call(t,n)}catch(u){i=[6,u],o=0}finally{a=r=0}if(i[0]&5)throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}},Ht=L&&L.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(ie,"__esModule",{value:!0}),ie.useWebSocket=void 0;var H=ve,De=ot,K=x,$t=ge,zt=$e,Vt=Ht(ze),Ve=ce,qt=d(function(t,e,n){e===void 0&&(e=K.DEFAULT_OPTIONS),n===void 0&&(n=!0);var a=(0,H.useState)(null),o=a[0],r=a[1],s=(0,H.useState)({}),c=s[0],l=s[1],i=(0,H.useMemo)(function(){if(!e.disableJson&&o)try{return JSON.parse(o.data)}catch{return K.UNPARSABLE_JSON_OBJECT}return null},[o,e.disableJson]),u=(0,H.useRef)(null),h=(0,H.useRef)(null),g=(0,H.useRef)(function(){}),f=(0,H.useRef)(0),S=(0,H.useRef)(Date.now()),A=(0,H.useRef)([]),E=(0,H.useRef)(null),m=(0,H.useRef)(e);m.current=e;var k=u.current&&c[u.current]!==void 0?c[u.current]:t!==null&&n===!0?K.ReadyState.CONNECTING:K.ReadyState.UNINSTANTIATED,w=e.queryParams?JSON.stringify(e.queryParams):null,O=(0,H.useCallback)(function(N,U){var J;if(U===void 0&&(U=!0),K.isEventSourceSupported&&h.current instanceof EventSource){console.warn("Unable to send a message from an eventSource");return}((J=h.current)===null||J===void 0?void 0:J.readyState)===K.ReadyState.OPEN?((0,Ve.assertIsWebSocket)(h.current,m.current.skipAssert),h.current.send(N)):U&&A.current.push(N)},[]),I=(0,H.useCallback)(function(N,U){U===void 0&&(U=!0),O(JSON.stringify(N),U)},[O]),j=(0,H.useCallback)(function(){return m.current.share!==!0||K.isEventSourceSupported&&h.current instanceof EventSource?h.current:(E.current===null&&h.current&&((0,Ve.assertIsWebSocket)(h.current,m.current.skipAssert),E.current=(0,Vt.default)(h.current,g)),E.current)},[]);return(0,H.useEffect)(function(){if(t!==null&&n===!0){var N,U=!1,J=!0,T=d(function(){return jt(void 0,void 0,void 0,function(){var y,b,_;return Ft(this,function(P){switch(P.label){case 0:return y=u,[4,(0,zt.getUrl)(t,m)];case 1:return y.current=P.sent(),u.current===null?(console.error("Failed to get a valid URL. WebSocket connection aborted."),u.current="ABORTED",(0,De.flushSync)(function(){return l(function(M){return ne(ne({},M),{ABORTED:K.ReadyState.CLOSED})})}),[2]):(b=d(function(M){U||(0,De.flushSync)(function(){return r(M)})},"protectedSetLastMessage"),_=d(function(M){U||(0,De.flushSync)(function(){return l(function(D){var z;return ne(ne({},D),u.current&&(z={},z[u.current]=M,z))})})},"protectedSetReadyState"),J&&(N=(0,$t.createOrJoinSocket)(h,u.current,_,m,b,g,f,S,O)),[2])}})})},"start_1");return g.current=function(){U||(E.current&&(E.current=null),N?.(),T())},T(),function(){U=!0,J=!1,E.current&&(E.current=null),N?.(),r(null)}}else(t===null||n===!1)&&(f.current=0,l(function(y){var b;return ne(ne({},y),u.current&&(b={},b[u.current]=K.ReadyState.CLOSED,b))}))},[t,n,w,O]),(0,H.useEffect)(function(){k===K.ReadyState.OPEN&&A.current.splice(0).forEach(function(N){O(N)})},[k]),{sendMessage:O,sendJsonMessage:I,lastMessage:o,lastJsonMessage:i,readyState:k,getWebSocket:j}},"useWebSocket$1");ie.useWebSocket=qt;var pe={},we=L&&L.__assign||function(){return we=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},we.apply(this,arguments)};Object.defineProperty(pe,"__esModule",{value:!0}),pe.useSocketIO=void 0;var qe=ve,xt=ie,Jt=x,We={type:"empty",payload:null},Gt=d(function(t){if(!t||!t.data)return We;var e=t.data.match(/\[.*]/);if(!e)return We;var n=JSON.parse(e);return!Array.isArray(n)||!n[1]?We:{type:n[0],payload:n[1]}},"getSocketData"),Yt=d(function(t,e,n){e===void 0&&(e=Jt.DEFAULT_OPTIONS),n===void 0&&(n=!0);var a=(0,qe.useMemo)(function(){return we(we({},e),{fromSocketIO:!0})},[]),o=(0,xt.useWebSocket)(t,a,n),r=o.sendMessage,s=o.sendJsonMessage,c=o.lastMessage,l=o.readyState,i=o.getWebSocket,u=(0,qe.useMemo)(function(){return Gt(c)},[c]);return{sendMessage:r,sendJsonMessage:s,lastMessage:u,lastJsonMessage:u,readyState:l,getWebSocket:i}},"useSocketIO");pe.useSocketIO=Yt;var Pe={},ke=L&&L.__assign||function(){return ke=Object.assign||function(t){for(var e,n=1,a=arguments.length;n<a;n++){e=arguments[n];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])}return t},ke.apply(this,arguments)},Bt=L&&L.__rest||function(t,e){var n={};for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&e.indexOf(a)<0&&(n[a]=t[a]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,a=Object.getOwnPropertySymbols(t);o<a.length;o++)e.indexOf(a[o])<0&&Object.prototype.propertyIsEnumerable.call(t,a[o])&&(n[a[o]]=t[a[o]]);return n};Object.defineProperty(Pe,"__esModule",{value:!0}),Pe.useEventSource=void 0;var xe=ve,Kt=ie,Je=x,Xt=d(function(t,e,n){e===void 0&&(e=Je.DEFAULT_EVENT_SOURCE_OPTIONS);var a=e.withCredentials,o=e.events,r=Bt(e,["withCredentials","events"]);n===void 0&&(n=!0);var s=ke(ke({},r),{eventSourceOptions:{withCredentials:a}}),c=(0,xe.useRef)(Je.EMPTY_EVENT_HANDLERS);o&&(c.current=o);var l=(0,Kt.useWebSocket)(t,s,n),i=l.lastMessage,u=l.readyState,h=l.getWebSocket;return(0,xe.useEffect)(function(){i?.type&&Object.entries(c.current).forEach(function(g){var f=g[0],S=g[1];f===i.type&&S(i)})},[i]),{lastEvent:i,readyState:u,getEventSource:h}},"useEventSource");Pe.useEventSource=Xt,(function(t){Object.defineProperty(t,"__esModule",{value:!0}),t.resetGlobalState=t.useEventSource=t.ReadyState=t.useSocketIO=t.default=void 0;var e=ie;Object.defineProperty(t,"default",{enumerable:!0,get:d(function(){return e.useWebSocket},"get")});var n=pe;Object.defineProperty(t,"useSocketIO",{enumerable:!0,get:d(function(){return n.useSocketIO},"get")});var a=x;Object.defineProperty(t,"ReadyState",{enumerable:!0,get:d(function(){return a.ReadyState},"get")});var o=Pe;Object.defineProperty(t,"useEventSource",{enumerable:!0,get:d(function(){return o.useEventSource},"get")});var r=ce;Object.defineProperty(t,"resetGlobalState",{enumerable:!0,get:d(function(){return r.resetGlobalState},"get")})})(he);var Ge=at(he);const Ye=d(({wsUrl:t,address:e})=>{const[n,a]=V({tradeHistories:null,openPositions:null,openOrders:null,accountSummary:null}),[o,r]=V(null),[s,c]=V(null),{readyState:l,sendMessage:i}=Ge(t,{shouldReconnect:d(()=>!0,"shouldReconnect"),reconnectAttempts:5,reconnectInterval:3e3,onMessage:d(h=>{try{const g=JSON.parse(h.data);if(("success"in g||"error"in g)&&!("channel"in g)){g.error?r(g.error):r(null);return}if("channel"in g&&"data"in g){const f=g;if(f.data===null||f.data===void 0)return;switch(f.channel){case"trade-histories":Array.isArray(f.data)&&a(S=>({...S,tradeHistories:f.data}));break;case"open-positions":Array.isArray(f.data)&&a(S=>({...S,openPositions:f.data}));break;case"open-orders":Array.isArray(f.data)&&a(S=>({...S,openOrders:f.data}));break;case"account-summary":typeof f.data=="object"&&f.data!==null&&a(S=>({...S,accountSummary:f.data}));break}}}catch(g){r(`Failed to parse message: ${g instanceof Error?g.message:String(g)}`)}},"onMessage")}),u=l===he.ReadyState.OPEN;return se(()=>{u&&e&&e!==s?(s&&i(JSON.stringify({action:"unsubscribe",address:s})),i(JSON.stringify({action:"subscribe",address:e})),c(e),r(null)):u&&!e&&s&&(i(JSON.stringify({action:"unsubscribe",address:s})),c(null))},[u,e,s,i]),se(()=>{e!==s&&(a({tradeHistories:null,openPositions:null,openOrders:null,accountSummary:null}),r(null))},[e,s]),{data:n,connectionStatus:l,isConnected:u,lastError:o}},"useHyperliquidWebSocket"),Be=d(({address:t,tokens:e=[]})=>{const[n,a]=V(null),[o,r]=V(null),[s,c]=V(null),[l,i]=V(null),[u,h]=V(null),[g,f]=V([]),S=nt(null),{readyState:A,sendJsonMessage:E}=Ge("wss://api.hyperliquid.xyz/ws",{shouldReconnect:d(()=>!0,"shouldReconnect"),reconnectAttempts:5,reconnectInterval:3e3,onOpen:d(()=>{},"onOpen"),onClose:d(()=>{},"onClose"),onError:d(k=>console.error("[HyperLiquid WS] Connection error:",k),"onError"),onReconnectStop:d(()=>console.error("[HyperLiquid WS] Reconnection stopped after 5 attempts"),"onReconnectStop"),onMessage:d(k=>{try{const w=JSON.parse(k.data);if("success"in w||"error"in w){w.error?(console.error("[HyperLiquid WS] Subscription error:",w.error),i(w.error)):i(null);return}if("channel"in w&&"data"in w){const O=w;switch(O.channel){case"webData2":a(O.data);break;case"allMids":r(O.data);break;case"activeAssetData":const I=O.data;c(j=>({...j,[I.coin]:I}));break;default:console.warn(`[HyperLiquid WS] Unknown channel: ${O.channel}`)}}}catch(w){const O=`Failed to parse message: ${w instanceof Error?w.message:String(w)}`;console.error("[HyperLiquid WS] Parse error:",O,"Raw message:",k.data),i(O)}},"onMessage")}),m=A===he.ReadyState.OPEN;return se(()=>(m?S.current=setInterval(()=>{E({method:"ping"})},3e4):S.current&&(clearInterval(S.current),S.current=null),()=>{S.current&&(clearInterval(S.current),S.current=null)}),[m,E]),se(()=>{if(!m)return;const w=t||"0x0000000000000000000000000000000000000000";if(u===w)return;u&&E({method:"unsubscribe",subscription:{type:"webData2",user:u}});const O={method:"subscribe",subscription:{type:"webData2",user:w}},I={method:"subscribe",subscription:{type:"allMids"}};E(O),E(I),h(w),u&&u!==w&&a(null)},[m,t,u,E]),se(()=>{if(!m||!t)return;const k=e.filter(O=>O&&!g.includes(O)),w=g.filter(O=>!e.includes(O));w.forEach(O=>{E({method:"unsubscribe",subscription:{type:"activeAssetData",user:t,coin:O}})}),k.forEach(O=>{E({method:"subscribe",subscription:{type:"activeAssetData",user:t,coin:O}})}),(k.length>0||w.length>0)&&(f(e.filter(O=>O)),w.length>0&&c(O=>{if(!O)return O;const I={...O};return w.forEach(j=>{delete I[j]}),Object.keys(I).length>0?I:null}))},[m,t,e,g,E]),{webData2:n,allMids:o,activeAssetData:s,connectionStatus:A,isConnected:m,lastError:l}},"useHyperliquidNativeWebSocket"),Qt={longTokens:[{symbol:"HYPE",weight:25},{symbol:"BTC",weight:25}],shortTokens:[{symbol:"AVAX",weight:10},{symbol:"SEI",weight:10},{symbol:"ADA",weight:10},{symbol:"TRUMP",weight:10},{symbol:"SUI",weight:10}],openTokenSelector:!1,selectorConfig:null,openConflictModal:!1,conflicts:[],leverageMatched:!1},X=rt(void 0),Zt=d(({config:t,wsUrl:e="wss://hl-v2.pearprotocol.io/ws",children:n})=>{const a=W(()=>new Me(t),[t]),o=W(()=>new je(a),[a]),[r,s]=V(null),[c,l]=V(Qt),i=W(()=>{const I=c.longTokens.map(N=>N.symbol),j=c.shortTokens.map(N=>N.symbol);return[...new Set([...I,...j])]},[c.longTokens,c.shortTokens]),{data:u,connectionStatus:h,isConnected:g,lastError:f}=Ye({wsUrl:e,address:r}),{webData2:S,allMids:A,activeAssetData:E,connectionStatus:m,isConnected:k,lastError:w}=Be({address:r,tokens:i}),O=W(()=>({client:a,migrationSDK:o,address:r,setAddress:s,connectionStatus:h,isConnected:g,data:u,lastError:f,nativeConnectionStatus:m,nativeIsConnected:k,nativeLastError:w,webData2:S,allMids:A,activeAssetData:E,tokenSelection:c,setTokenSelection:l}),[a,o,r,h,g,u,f,m,k,w,S,A,E,c,l]);return ct.jsx(X.Provider,{value:O,children:n})},"PearHyperliquidProvider"),en=d(()=>{const t=Z(X);if(!t)throw new Error("usePearHyperliquidClient must be used within a PearHyperliquidProvider");return t.client},"usePearHyperliquidClient"),tn=d(()=>{const t=Z(X);if(!t)throw new Error("useMigrationSDK must be used within a PearHyperliquidProvider");return t.migrationSDK},"useMigrationSDK"),nn=d(()=>{const t=Z(X);if(!t)throw new Error("useAddress must be used within a PearHyperliquidProvider");return{address:t.address,setAddress:t.setAddress,clearAddress:d(()=>t.setAddress(null),"clearAddress"),isLoggedIn:!!t.address}},"useAddress");var re;(function(t){t.LONG="LONG",t.SHORT="SHORT"})(re||(re={}));class rn{static{d(this,"PositionProcessor")}constructor(e,n){this.webData2=e,this.allMids=n}execute(e){if(!e||e.length===0)return[];const n=this.getUserPositions(),a=this.calculatePlatformTotalsByAsset(e),o=new Map;(n||[]).forEach(s=>{var c;!((c=s.position)===null||c===void 0)&&c.coin&&o.set(s.position.coin,s)});const r=[];for(const s of e){const c=this.syncPositionWithAggregateData(s,o,a);r.push(c)}return r}getUserPositions(){var e,n;return((n=(e=this.webData2)===null||e===void 0?void 0:e.clearinghouseState)===null||n===void 0?void 0:n.assetPositions)||[]}getMarketPrice(e){var n;if(!(!((n=this.allMids)===null||n===void 0)&&n.mids))return 0;const a=this.allMids.mids[e];if(a)return Number(a);const o=this.extractBaseCurrency(e),r=this.allMids.mids[o];return r?Number(r):0}calculatePlatformTotalsByAsset(e){const n=new Map;for(const a of e){for(const o of a.longAssets||[]){const r=this.extractBaseCurrency(o.coin);n.has(r)||n.set(r,{totalSize:0,positions:[]});const s=n.get(r),c=Number(o.size||0);s.totalSize+=c,s.positions.push({positionId:a.positionId,asset:o,size:c})}for(const o of a.shortAssets||[]){const r=this.extractBaseCurrency(o.coin);n.has(r)||n.set(r,{totalSize:0,positions:[]});const s=n.get(r),c=Number(o.size||0);s.totalSize+=c,s.positions.push({positionId:a.positionId,asset:o,size:c})}}return n}extractBaseCurrency(e){return e.split("/")[0]||e}syncPositionWithAggregateData(e,n,a){const o=[];let r=!1,s=!0,c={total:0,closed:0},l={total:0,closed:0};for(const u of e.longAssets||[]){const h=this.extractBaseCurrency(u.coin),g=n.get(h),f=a.get(h),S=this.syncAssetWithAggregateData({...u,side:re.LONG},g,f?.totalSize||0);o.push(S),c.total++,S.actualSize===0&&c.closed++,S.isExternallyModified&&(r=!0),S.actualSize!==0&&(s=!1)}for(const u of e.shortAssets||[]){const h=this.extractBaseCurrency(u.coin),g=n.get(h),f=a.get(h),S=this.syncAssetWithAggregateData({...u,side:re.SHORT},g,f?.totalSize||0);o.push(S),l.total++,S.actualSize===0&&l.closed++,S.isExternallyModified&&(r=!0),S.actualSize!==0&&(s=!1)}const i=this.determineSyncStatus(r,s,c,l);return this.mapPositionToDtoWithSyncData(e,o,i)}determineSyncStatus(e,n,a,o){if(n)return"EXTERNALLY_CLOSED";const r=a.total>0&&a.closed===a.total,s=o.total>0&&o.closed===o.total;return r&&!s||!r&&s?"PAIR_BROKEN":e?"EXTERNALLY_MODIFIED":"SYNCED"}syncAssetWithAggregateData(e,n,a){const o=Number(e.size||0);if(!n||!n.position||!n.position.szi)return{asset:e,actualSize:0,isExternallyModified:!0,cumFunding:{allTime:0,sinceChange:0,sinceOpen:0},unrealizedPnl:0,liquidationPrice:0};const r=Math.abs(Number(n.position.szi||0)),s=Math.abs(r-a),c=a*.001,l=s>c,i=a>0?o/a:0,u=r*i,h=n.position.cumFunding,g={allTime:Number(h?.allTime||0),sinceChange:Number(h?.sinceChange||0)*i,sinceOpen:Number(h?.sinceOpen||0)*i},f=Number(n.position.unrealizedPnl||0)*i,S=Number(n.position.liquidationPx||0);return{asset:e,actualSize:u,isExternallyModified:l,cumFunding:g,unrealizedPnl:f,liquidationPrice:S}}mapPositionToDtoWithSyncData(e,n,a){var o,r;const s=((o=e.longAssets)===null||o===void 0?void 0:o.filter(g=>g))||[],c=((r=e.shortAssets)===null||r===void 0?void 0:r.filter(g=>g))||[],l=new Map;n.forEach(g=>{l.set(`${g.asset.coin}-${g.asset.side}`,g)});const i=this.calculateCurrentTotalPositionValue(n),h=this.calculateEntryTotalPositionValue(n)/e.leverage;return{syncStatus:a,positionId:e.positionId,address:e.address,leverage:e.leverage,stopLoss:e.stopLoss,takeProfit:e.takeProfit,entryRatio:this.calculateEntryRatio(n),markRatio:this.calculateMarkRatio(n),netFunding:this.calculateNetFundingFromSyncResults(n),positionValue:i,marginUsed:h,unrealizedPnl:this.calculateTotalUnrealizedPnlFromSyncResults(n),lastSyncAt:new Date().toISOString(),longAssets:s.map(g=>this.mapAssetToDetailDto(g,l.get(`${g.coin}-LONG`))),shortAssets:c.map(g=>this.mapAssetToDetailDto(g,l.get(`${g.coin}-SHORT`))),createdAt:e.createdAt,updatedAt:e.updatedAt}}mapAssetToDetailDto(e,n){const a=this.getMarketPrice(e.coin),o=n?.actualSize||Number(e.size||0),r=o*a,s=Number(e.size||0)*Number(e.entryPrice||0);return{coin:e.coin,entryPrice:Number(e.entryPrice||0),platformSize:Number(e.size||0),actualSize:o,isExternallyModified:n?.isExternallyModified||!1,cumFunding:n?.cumFunding||{allTime:0,sinceChange:0,sinceOpen:0},marginUsed:s,positionValue:r,unrealizedPnl:n?.unrealizedPnl||0,liquidationPrice:n?.liquidationPrice||0}}calculateEntryRatio(e){var n,a;const o=e.filter(l=>l.asset.side===re.LONG),r=e.filter(l=>l.asset.side===re.SHORT);if(o.length===0||r.length===0)return 0;const s=!((n=o[0])===null||n===void 0)&&n.asset.entryPrice?Number(o[0].asset.entryPrice):0,c=!((a=r[0])===null||a===void 0)&&a.asset.entryPrice?Number(r[0].asset.entryPrice):0;return c>0?s/c:0}calculateMarkRatio(e){var n,a;const o=e.filter(l=>l.asset.side===re.LONG),r=e.filter(l=>l.asset.side===re.SHORT);if(o.length===0||r.length===0)return 0;const s=!((n=o[0])===null||n===void 0)&&n.asset.coin?this.getMarketPrice(o[0].asset.coin):0,c=!((a=r[0])===null||a===void 0)&&a.asset.coin?this.getMarketPrice(r[0].asset.coin):0;return c>0?s/c:0}calculateNetFundingFromSyncResults(e){return e.reduce((a,o)=>{const r=o.cumFunding.sinceOpen;return a+r},0)}calculateTotalUnrealizedPnlFromSyncResults(e){return e.reduce((n,a)=>n+a.unrealizedPnl,0)}calculateCurrentTotalPositionValue(e){return e.reduce((n,a)=>{const o=this.getMarketPrice(a.asset.coin);return n+a.actualSize*o},0)}calculateEntryTotalPositionValue(e){return e.reduce((n,a)=>n+Number(a.asset.size||0)*Number(a.asset.entryPrice||0),0)}}const Ke=d((t,e,n)=>W(()=>!t||!e||!n?null:new rn(e,n).execute(t),[t,e,n]),"useCalculatedOpenPositions");class Xe{static{d(this,"AccountSummaryCalculator")}constructor(e){this.webData2=e}calculateAccountSummary(e,n,a,o){var r,s,c,l,i,u,h,g,f,S,A;if(!(!((r=this.webData2)===null||r===void 0)&&r.clearinghouseState))return e;const E=this.webData2.clearinghouseState,m=this.calculateTotalLimitOrderValue(n||[]),k=parseFloat(E.withdrawable||"0"),w=Math.max(0,k-m);return{balanceSummary:{crossMaintenanceMarginUsed:E.crossMaintenanceMarginUsed||"0",crossMarginSummary:{accountValue:((s=E.crossMarginSummary)===null||s===void 0?void 0:s.accountValue)||"0",totalMarginUsed:((c=E.crossMarginSummary)===null||c===void 0?void 0:c.totalMarginUsed)||"0",totalNtlPos:((l=E.crossMarginSummary)===null||l===void 0?void 0:l.totalNtlPos)||"0",totalRawUsd:((i=E.crossMarginSummary)===null||i===void 0?void 0:i.totalRawUsd)||"0"},marginSummary:{accountValue:((u=E.marginSummary)===null||u===void 0?void 0:u.accountValue)||"0",totalMarginUsed:((h=E.marginSummary)===null||h===void 0?void 0:h.totalMarginUsed)||"0",totalNtlPos:((g=E.marginSummary)===null||g===void 0?void 0:g.totalNtlPos)||"0",totalRawUsd:((f=E.marginSummary)===null||f===void 0?void 0:f.totalRawUsd)||"0"},time:E.time||Date.now(),withdrawable:w.toString()},agentWallet:{address:a||((S=e?.agentWallet)===null||S===void 0?void 0:S.address)||"",status:o||((A=e?.agentWallet)===null||A===void 0?void 0:A.status)||"UNKNOWN"}}}calculateTotalLimitOrderValue(e){return e?.length?e.filter(a=>a.status==="OPEN"||a.status==="PROCESSING").reduce((a,o)=>a+o.usdValue,0):0}getClearinghouseState(){var e;return((e=this.webData2)===null||e===void 0?void 0:e.clearinghouseState)||null}hasRealTimeData(){var e;return!!(!((e=this.webData2)===null||e===void 0)&&e.clearinghouseState)}}const Qe=d((t,e,n,a,o)=>W(()=>t?n?.clearinghouseState?new Xe(n).calculateAccountSummary(t,e,a,o):t:null,[t,e,n,a,o]),"useCalculatedAccountSummary"),on=d(()=>{const t=Z(X);if(!t)throw new Error("useTradeHistories must be used within a PearHyperliquidProvider");const e=W(()=>t.data.tradeHistories===null&&t.isConnected,[t.data.tradeHistories,t.isConnected]);return{data:t.data.tradeHistories,isLoading:e}},"useTradeHistories"),an=d(()=>{const t=Z(X);if(!t)throw new Error("useOpenPositions must be used within a PearHyperliquidProvider");const e=Ke(t.data.openPositions,t.webData2,t.allMids),n=W(()=>t.isConnected&&(t.data.openPositions===null||!t.webData2||!t.allMids),[t.data.openPositions,t.webData2,t.allMids,t.isConnected]);return{data:e,isLoading:n}},"useOpenPositions"),sn=d(()=>{const t=Z(X);if(!t)throw new Error("useOpenOrders must be used within a PearHyperliquidProvider");const e=W(()=>t.data.openOrders===null&&t.isConnected,[t.data.openOrders,t.isConnected]);return{data:t.data.openOrders,isLoading:e}},"useOpenOrders"),cn=d(()=>{var t,e,n,a;const o=Z(X);if(!o)throw new Error("useAccountSummary must be used within a PearHyperliquidProvider");const r=Qe(o.data.accountSummary,o.data.openOrders,o.webData2,(e=(t=o.data.accountSummary)===null||t===void 0?void 0:t.agentWallet)===null||e===void 0?void 0:e.address,(a=(n=o.data.accountSummary)===null||n===void 0?void 0:n.agentWallet)===null||a===void 0?void 0:a.status),s=W(()=>o.data.accountSummary===null&&o.isConnected,[o.data.accountSummary,o.isConnected]);return{data:r,isLoading:s}},"useAccountSummary");class Ue{static{d(this,"TokenMetadataExtractor")}static extractTokenMetadata(e,n,a,o){if(!n||!a)return null;const r=n.meta.universe.findIndex(O=>O.name===e);if(r===-1)return null;const s=n.meta.universe[r],c=n.assetCtxs[r];if(!c)return null;const l=a.mids[e],i=l?parseFloat(l):0,u=parseFloat(c.prevDayPx),h=i-u,g=u!==0?h/u*100:0,f=parseFloat(c.funding)*100,S=parseFloat(c.markPx),A=parseFloat(c.oraclePx),E=o?.[e],m=E?.leverage,k=E?.maxTradeSzs,w=E?.availableToTrade;return{currentPrice:i,prevDayPrice:u,priceChange24h:h,priceChange24hPercent:g,netFunding:f,maxLeverage:s.maxLeverage,markPrice:S,oraclePrice:A,openInterest:c.openInterest,dayVolume:c.dayNtlVlm,leverage:m,maxTradeSzs:k,availableToTrade:w}}static extractMultipleTokensMetadata(e,n,a,o){const r={};for(const s of e)r[s]=this.extractTokenMetadata(s,n,a,o);return r}static isTokenAvailable(e,n){return n?n.meta.universe.some(a=>a.name===e):!1}}const un=d(()=>{var t;const e=Z(X);if(!e)throw new Error("useTokenSelection must be used within PearHyperliquidProvider");const{webData2:n,allMids:a,activeAssetData:o,tokenSelection:r,setTokenSelection:s}=e,c=W(()=>!!(n&&a),[n,a]),l=W(()=>{if(!c)return!0;const T=[...r.longTokens,...r.shortTokens];return T.length===0?!1:T.some(y=>!y.metadata)},[c,r.longTokens,r.shortTokens]);se(()=>{if(!n||!a)return;const T=[...r.longTokens,...r.shortTokens].map(b=>b.symbol);if(T.length===0)return;const y=Ue.extractMultipleTokensMetadata(T,n,a,o);s(b=>({...b,longTokens:b.longTokens.map(_=>({..._,metadata:y[_.symbol]||void 0})),shortTokens:b.shortTokens.map(_=>({..._,metadata:y[_.symbol]||void 0}))}))},[n,a,o,s]);const i=W(()=>{let T=1,y=1;return r.longTokens.forEach(b=>{var _;if(!((_=b.metadata)===null||_===void 0)&&_.currentPrice&&b.weight>0){const P=b.weight/100;T*=Math.pow(b.metadata.currentPrice,P)}}),r.shortTokens.forEach(b=>{var _;if(!((_=b.metadata)===null||_===void 0)&&_.currentPrice&&b.weight>0){const P=b.weight/100;y*=Math.pow(b.metadata.currentPrice,-P)}}),T*y},[r.longTokens,r.shortTokens]),u=W(()=>{let T=1,y=1;return r.longTokens.forEach(b=>{var _;if(!((_=b.metadata)===null||_===void 0)&&_.prevDayPrice&&b.weight>0){const P=b.weight/100;T*=Math.pow(b.metadata.prevDayPrice,P)}}),r.shortTokens.forEach(b=>{var _;if(!((_=b.metadata)===null||_===void 0)&&_.prevDayPrice&&b.weight>0){const P=b.weight/100;y*=Math.pow(b.metadata.prevDayPrice,-P)}}),T*y},[r.longTokens,r.shortTokens]),h=W(()=>{let T=0;return r.longTokens.forEach(y=>{var b;if(!((b=y.metadata)===null||b===void 0)&&b.netFunding&&y.weight>0){const _=y.weight/100;T+=y.metadata.netFunding*_}}),r.shortTokens.forEach(y=>{var b;if(!((b=y.metadata)===null||b===void 0)&&b.netFunding&&y.weight>0){const _=y.weight/100;T-=y.metadata.netFunding*_}}),T*100},[r.longTokens,r.shortTokens]),g=W(()=>{var T;if(!(!((T=n?.meta)===null||T===void 0)&&T.universe))return 0;const y=[...r.longTokens,...r.shortTokens].map(_=>_.symbol);if(y.length===0)return 0;let b=1/0;return y.forEach(_=>{const P=n.meta.universe.find(M=>M.name===_);P?.maxLeverage&&(b=Math.min(b,P.maxLeverage))}),b===1/0?0:b},[(t=n?.meta)===null||t===void 0?void 0:t.universe,r.longTokens,r.shortTokens]),f=W(()=>10*(r.longTokens.length+r.shortTokens.length),[r.longTokens.length,r.shortTokens.length]),S=W(()=>{const T=[...r.longTokens,...r.shortTokens];if(T.length===0)return!0;const y=T.filter(_=>{var P;return(P=_.metadata)===null||P===void 0?void 0:P.leverage});if(y.length===0||y.length<T.length)return!1;const b=y[0].metadata.leverage;return y.every(_=>_.metadata.leverage.type===b.type&&_.metadata.leverage.value===b.value)},[r.longTokens,r.shortTokens]),A=q(T=>{s(y=>({...y,longTokens:T}))},[s]),E=q(T=>{s(y=>({...y,shortTokens:T}))},[s]),m=q((T,y,b)=>{const _=Math.max(1,Math.min(100,b));s(P=>{var M,D;const z=P.longTokens.reduce(($,v)=>$+v.weight,0),Q=P.shortTokens.reduce(($,v)=>$+v.weight,0);if(T){const $=((M=P.longTokens[y])===null||M===void 0?void 0:M.weight)||0,v=_-$;if(z+v+Q>100){const C=Math.max(1,100-Q-(z-$)),R=[...P.longTokens];return R[y]={...R[y],weight:C},{...P,longTokens:R}}else{const C=[...P.longTokens];return C[y]={...C[y],weight:_},{...P,longTokens:C}}}else{const $=((D=P.shortTokens[y])===null||D===void 0?void 0:D.weight)||0,v=_-$,p=Q+v;if(z+p>100){const C=Math.max(1,100-z-(Q-$)),R=[...P.shortTokens];return R[y]={...R[y],weight:C},{...P,shortTokens:R}}else{const C=[...P.shortTokens];return C[y]={...C[y],weight:_},{...P,shortTokens:C}}}})},[s]),k=q(T=>{const b=(T?r.longTokens:r.shortTokens).length;s(_=>({..._,selectorConfig:{isLong:T,index:b},openTokenSelector:!0}))},[r.longTokens,r.shortTokens,s]),w=q((T,y)=>{s(b=>{if(T){const _=b.longTokens.filter((P,M)=>M!==y);return{...b,longTokens:_}}else{const _=b.shortTokens.filter((P,M)=>M!==y);return{...b,shortTokens:_}}})},[s]),O=q(T=>{s(y=>({...y,openTokenSelector:T}))},[s]),I=q(T=>{s(y=>({...y,selectorConfig:T}))},[s]),j=q(T=>{s(y=>({...y,openConflictModal:T}))},[s]),N=q(T=>{s(y=>({...y,conflicts:T}))},[s]),U=q(()=>{s(T=>({...T,longTokens:[{symbol:"HYPE",weight:25},{symbol:"BTC",weight:25}],shortTokens:[{symbol:"AVAX",weight:10},{symbol:"SEI",weight:10},{symbol:"ADA",weight:10},{symbol:"TRUMP",weight:10},{symbol:"SUI",weight:10}],openTokenSelector:!1,selectorConfig:null,openConflictModal:!1,leverageMatched:!1}))},[s]),J=q(T=>{if(!r.selectorConfig)return;const{isLong:y,index:b}=r.selectorConfig,_=y?r.longTokens:r.shortTokens;if(_.some(M=>M.symbol===T))return;const P=Ue.extractTokenMetadata(T,n,a,o);s(M=>{if(b>=_.length){const D=M.longTokens.reduce((C,R)=>C+R.weight,0),z=M.shortTokens.reduce((C,R)=>C+R.weight,0),Q=D+z,$=Math.max(1,100-Q),v=Math.min(20,$),p={symbol:T,weight:v,metadata:P||void 0};return y?{...M,longTokens:[...M.longTokens,p]}:{...M,shortTokens:[...M.shortTokens,p]}}else if(y){const D=[...M.longTokens];return D[b]={...D[b],symbol:T,metadata:P||void 0},{...M,longTokens:D}}else{const D=[...M.shortTokens];return D[b]={...D[b],symbol:T,metadata:P||void 0},{...M,shortTokens:D}}})},[r.selectorConfig,r.longTokens,r.shortTokens,n,a,o,s]);return{longTokens:r.longTokens,shortTokens:r.shortTokens,openTokenSelector:r.openTokenSelector,selectorConfig:r.selectorConfig,openConflictModal:r.openConflictModal,conflicts:r.conflicts,isLoading:l,isPriceDataReady:c,weightedRatio:i,weightedRatio24h:u,sumNetFunding:h,maxLeverage:g,minMargin:f,leverageMatched:S,setLongTokens:A,setShortTokens:E,updateTokenWeight:m,addToken:k,removeToken:w,handleTokenSelect:J,setOpenTokenSelector:O,setSelectorConfig:I,setOpenConflictModal:j,setConflicts:N,resetToDefaults:U}},"useTokenSelection"),ln=d(()=>{const t=Z(X);if(!t)throw new Error("useWebData2 must be used within a PearHyperliquidProvider");return{webData2:t.webData2,allMids:t.allMids,isConnected:t.nativeIsConnected,connectionStatus:t.nativeConnectionStatus,error:t.nativeLastError}},"useWebData2");class dn{static{d(this,"ConflictDetector")}static detectConflicts(e,n,a){const o=[];return a&&(e.forEach(r=>{a.find(c=>{var l;const i=c.coin||c.symbol||c.asset,u=(l=c.side)===null||l===void 0?void 0:l.toLowerCase();return i===r.symbol&&(u==="short"||u==="sell")})&&o.push({symbol:r.symbol,conflictType:"short",conflictMessage:`${r.symbol} Long conflicts with existing ${r.symbol} Short position`})}),n.forEach(r=>{a.find(c=>{var l;const i=c.coin||c.symbol||c.asset,u=(l=c.side)===null||l===void 0?void 0:l.toLowerCase();return i===r.symbol&&(u==="long"||u==="buy")})&&o.push({symbol:r.symbol,conflictType:"long",conflictMessage:`${r.symbol} Short conflicts with existing ${r.symbol} Long position`})})),o}}export{Xe as AccountSummaryCalculator,dn as ConflictDetector,Me as PearHyperliquidClient,Zt as PearHyperliquidProvider,je as PearMigrationSDK,Ue as TokenMetadataExtractor,Me as default,cn as useAccountSummary,nn as useAddress,Qe as useCalculatedAccountSummary,Ke as useCalculatedOpenPositions,Be as useHyperliquidNativeWebSocket,Ye as useHyperliquidWebSocket,tn as useMigrationSDK,sn as useOpenOrders,an as useOpenPositions,en as usePearHyperliquidClient,un as useTokenSelection,on as useTradeHistories,ln as useWebData2};
|
package/dist/provider.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { ReadyState } from 'react-use-websocket';
|
|
|
3
3
|
import { PearHyperliquidClient } from './client';
|
|
4
4
|
import { PearHyperliquidConfig } from './types';
|
|
5
5
|
import { PearMigrationSDK } from './migration-sdk';
|
|
6
|
-
import type { RawPositionDto, OpenLimitOrderDto, AccountSummaryResponseDto, WebData2Response, WsAllMidsData, TradeHistoryDataDto, TokenSelection, TokenConflict } from './types';
|
|
6
|
+
import type { RawPositionDto, OpenLimitOrderDto, AccountSummaryResponseDto, WebData2Response, WsAllMidsData, TradeHistoryDataDto, TokenSelection, TokenConflict, ActiveAssetData } from './types';
|
|
7
7
|
interface WebSocketData {
|
|
8
8
|
tradeHistories: TradeHistoryDataDto[] | null;
|
|
9
9
|
openPositions: RawPositionDto[] | null;
|
|
@@ -21,6 +21,7 @@ interface TokenSelectionState {
|
|
|
21
21
|
selectorConfig: TokenSelectorConfig | null;
|
|
22
22
|
openConflictModal: boolean;
|
|
23
23
|
conflicts: TokenConflict[];
|
|
24
|
+
leverageMatched: boolean;
|
|
24
25
|
}
|
|
25
26
|
export interface PearHyperliquidContextType {
|
|
26
27
|
client: PearHyperliquidClient;
|
|
@@ -36,6 +37,7 @@ export interface PearHyperliquidContextType {
|
|
|
36
37
|
nativeLastError: string | null;
|
|
37
38
|
webData2: WebData2Response | null;
|
|
38
39
|
allMids: WsAllMidsData | null;
|
|
40
|
+
activeAssetData: Record<string, ActiveAssetData> | null;
|
|
39
41
|
tokenSelection: TokenSelectionState;
|
|
40
42
|
setTokenSelection: React.Dispatch<React.SetStateAction<TokenSelectionState>>;
|
|
41
43
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -212,7 +212,7 @@ export type WebSocketConnectionState = 'connecting' | 'connected' | 'disconnecte
|
|
|
212
212
|
/**
|
|
213
213
|
* WebSocket channels
|
|
214
214
|
*/
|
|
215
|
-
export type WebSocketChannel = 'trade-histories' | 'open-positions' | 'open-orders' | 'account-summary' | 'webData2' | 'allMids';
|
|
215
|
+
export type WebSocketChannel = 'trade-histories' | 'open-positions' | 'open-orders' | 'account-summary' | 'webData2' | 'allMids' | 'activeAssetData';
|
|
216
216
|
/**
|
|
217
217
|
* WebSocket subscription message
|
|
218
218
|
*/
|
|
@@ -548,6 +548,24 @@ export interface RawPositionDto {
|
|
|
548
548
|
longAssets: RawAssetDto[];
|
|
549
549
|
shortAssets: RawAssetDto[];
|
|
550
550
|
}
|
|
551
|
+
/**
|
|
552
|
+
* Leverage information from activeAssetData
|
|
553
|
+
*/
|
|
554
|
+
export interface LeverageInfo {
|
|
555
|
+
type: string;
|
|
556
|
+
value: number;
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* Active asset data from WebSocket
|
|
560
|
+
*/
|
|
561
|
+
export interface ActiveAssetData {
|
|
562
|
+
user: string;
|
|
563
|
+
coin: string;
|
|
564
|
+
leverage: LeverageInfo;
|
|
565
|
+
maxTradeSzs: [string, string];
|
|
566
|
+
availableToTrade: [string, string];
|
|
567
|
+
markPx: string;
|
|
568
|
+
}
|
|
551
569
|
/**
|
|
552
570
|
* Token metadata from WebData2 and AllMids
|
|
553
571
|
*/
|
|
@@ -562,6 +580,9 @@ export interface TokenMetadata {
|
|
|
562
580
|
oraclePrice: number;
|
|
563
581
|
openInterest: string;
|
|
564
582
|
dayVolume: string;
|
|
583
|
+
leverage?: LeverageInfo;
|
|
584
|
+
maxTradeSzs?: [string, string];
|
|
585
|
+
availableToTrade?: [string, string];
|
|
565
586
|
}
|
|
566
587
|
/**
|
|
567
588
|
* Enhanced token selection with weight and metadata for basket trading
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WebData2Response, WsAllMidsData, TokenMetadata } from '../types';
|
|
1
|
+
import type { WebData2Response, WsAllMidsData, TokenMetadata, ActiveAssetData } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Extracts token metadata from WebData2 and AllMids data
|
|
4
4
|
*/
|
|
@@ -8,17 +8,19 @@ export declare class TokenMetadataExtractor {
|
|
|
8
8
|
* @param symbol - Token symbol
|
|
9
9
|
* @param webData2 - WebData2 response containing asset context and universe data
|
|
10
10
|
* @param allMids - AllMids data containing current prices
|
|
11
|
+
* @param activeAssetData - Optional active asset data containing leverage information
|
|
11
12
|
* @returns TokenMetadata or null if token not found
|
|
12
13
|
*/
|
|
13
|
-
static extractTokenMetadata(symbol: string, webData2: WebData2Response | null, allMids: WsAllMidsData | null): TokenMetadata | null;
|
|
14
|
+
static extractTokenMetadata(symbol: string, webData2: WebData2Response | null, allMids: WsAllMidsData | null, activeAssetData?: Record<string, ActiveAssetData> | null): TokenMetadata | null;
|
|
14
15
|
/**
|
|
15
16
|
* Extracts metadata for multiple tokens
|
|
16
17
|
* @param symbols - Array of token symbols
|
|
17
18
|
* @param webData2 - WebData2 response
|
|
18
19
|
* @param allMids - AllMids data
|
|
20
|
+
* @param activeAssetData - Optional active asset data containing leverage information
|
|
19
21
|
* @returns Record of symbol to TokenMetadata
|
|
20
22
|
*/
|
|
21
|
-
static extractMultipleTokensMetadata(symbols: string[], webData2: WebData2Response | null, allMids: WsAllMidsData | null): Record<string, TokenMetadata | null>;
|
|
23
|
+
static extractMultipleTokensMetadata(symbols: string[], webData2: WebData2Response | null, allMids: WsAllMidsData | null, activeAssetData?: Record<string, ActiveAssetData> | null): Record<string, TokenMetadata | null>;
|
|
22
24
|
/**
|
|
23
25
|
* Checks if token data is available in WebData2
|
|
24
26
|
* @param symbol - Token symbol
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pear-protocol/hyperliquid-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"description": "React SDK for Pear Protocol Hyperliquid API integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"clean": "rimraf dist"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"
|
|
18
|
+
"react-use-websocket": "^4.8.1"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0",
|
|
22
22
|
"react-dom": ">=16.8.0",
|
|
23
|
-
"
|
|
23
|
+
"axios": "^1.6.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@rollup/plugin-commonjs": "^25.0.0",
|