{"version":3,"sources":["../src/orderly/markets/marketCategories.ts","../src/version.ts","../src/utils/fetcher.ts","../src/orderlyContext.ts","../src/useConfig.ts","../src/useQuery.ts","../src/useConvertThreshold.ts","../src/middleware/timestampWaitingMiddleware.ts","../src/useLazyQuery.ts","../src/useAccountInstance.ts","../src/useMutation.ts","../src/middleware/signatureMiddleware.ts","../src/useEventEmitter.ts","../src/walletConnectorContext.tsx","../src/useTrack.ts","../src/useWS.ts","../src/useAccount.ts","../src/usePrivateQuery.ts","../src/usePrivateInfiniteQuery.ts","../src/useInfiniteQuery.ts","../src/useBoolean.ts","../src/shared/useUpdatedRef.ts","../src/shared/useMemoizedFn.ts","../src/shared/useAudio.tsx","../src/referral/swr.ts","../src/referral/useDistribution.ts","../src/referral/useRefereeHistory.ts","../src/referral/useCommission.ts","../src/referral/format.ts","../src/referral/useDaily.ts","../src/referral/useReferralRebateSummary.ts","../src/referral/useRefereeInfo.ts","../src/referral/useRefereeRebateSummary.ts","../src/referral/useCheckReferralCode.ts","../src/referral/useGetReferralCode.ts","../src/subAccount/useSubAccountQuery.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/utils/index.ts","../src/orderly/usePositionStream/utils.ts","../src/orderly/useTakeProfitAndStopLoss/tp_slUtils.ts","../src/utils/orderEntryHelper.ts","../src/utils/ws.ts","../src/services/orderMerge/baseMergeHandler.ts","../src/services/orderMerge/algoOrderMergeHandler.ts","../src/services/orderMerge/regularOrderMergeHandler.ts","../src/utils/swr.ts","../src/referral/useReferralInfo.tsx","../src/referral/referralCode.ts","../src/utils/mergeHoldingBalance.ts","../src/orderly/appStore.ts","../src/middleware/indexedDBManager.ts","../src/provider/store/chainInfoFallback.ts","../src/provider/store/chainInfoValidation.ts","../src/middleware/persistIndexedDB.ts","../src/provider/store/createDataStore.fallback.ts","../src/provider/store/createDataStore.ts","../src/provider/store/chainInfoMainStore.ts","../src/provider/store/chainInfoTestStore.ts","../src/provider/store/mainTokenStore.ts","../src/provider/store/swapSupportStore.ts","../src/provider/store/symbolStore.ts","../src/provider/store/testTokenStore.ts","../src/usePreloadData.ts","../src/useSessionStorage.ts","../src/useNetworkInfo.ts","../src/orderly/useAccountInfo.ts","../src/useFeeState.ts","../src/services/amplitudeTracker.ts","../src/useTrackInstance.ts","../src/useKeyStore.ts","../src/useSimpleDI.ts","../src/useWsStatus.ts","../src/provider/status/statusContext.tsx","../src/provider/status/statusProvider.tsx","../src/constants.ts","../src/dev/proxyConfigStore.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/trading-rewards/useAllBrokers.ts","../src/useBadgeBySymbol.ts","../src/orderly/useMarket/market.store.ts","../src/orderly/useMarketsStream.ts","../src/orderly/rwaSymbolsInfoRevalidator.ts","../src/orderly/useRwaSymbolsInfo.ts","../src/orderly/markets/marketTypes.ts","../src/orderly/markets/marketFilter.ts","../src/orderly/markets/useMarkets.ts","../src/extendedConfigStore.ts","../src/orderly/internal/useWSObserver.ts","../src/orderly/orderbook.service.ts","../src/orderly/useMarkPrice/useMarkPriceStore.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useIndexPrice.ts","../src/orderly/useMarkPricesStream.ts","../src/orderly/useOpenInterest.ts","../src/orderly/useTickerStream.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useSymbolInfo.ts","../src/orderly/useFundingRates.ts","../src/orderly/markets/useMarket.ts","../src/orderly/useIndexPrice/useIndexPriceStore.ts","../src/orderly/useIndexPricesStream.ts","../src/orderly/useLeverage.ts","../src/orderly/useSymbolLeverageMap.ts","../src/orderly/useMarginModes.ts","../src/orderly/swapQuote.ts","../src/orderly/useSwapQuote.ts","../src/orderly/useComputedLTV.ts","../src/orderly/useFundingRate.ts","../src/orderly/useFundingDetails.ts","../src/orderly/useFundingRateHistory.ts","../src/next/apiStatus/apiStatus.store.ts","../src/orderly/calculator/baseCalculator.ts","../src/orderly/calculator/markPrice.ts","../src/orderly/calculator/calculatorContext.ts","../src/orderly/calculator/calculatorService.ts","../src/orderly/calculator/shardedScheduler.ts","../src/orderly/usePositionStream/usePosition.store.ts","../src/orderly/calculator/positions.ts","../src/utils/parseHolding.ts","../src/orderly/calculator/indexPrice.ts","../src/orderly/calculator/portfolio.ts","../src/useCalculatorService.ts","../src/orderly/usePositionStream/usePositionStream.ts","../src/provider/dataCenter/dataCenterContext.ts","../src/services/orderCreator/tpslOrderUpdates.ts","../src/utils/order/orderPrice.ts","../src/services/orderCreator/orderValidation.ts","../src/services/orderCreator/validators/TPSLValidationStrategy.ts","../src/services/orderCreator/validateTPSLChild.ts","../src/orderly/useOrderStream/useOrderStream.ts","../src/subAccount/useSubAccountMutation.ts","../src/subAccount/calculator/portfolio.ts","../src/subAccount/calculator/positions.ts","../src/subAccount/useSubAccountWS.ts","../src/subAccount/useSubAccountDataObserver.ts","../src/subAccount/useSubAccountMaxWithdrawal.ts","../src/orderly/useOrderStream/useSubAccountAlgoOrderStream.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useCollateral.ts","../src/utils/order/isolatedPendingOrders.ts","../src/orderly/useLeverageBySymbol.ts","../src/orderly/useMaxQty.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/orderly/useStorageChain.tsx","../src/orderly/useChain.ts","../src/orderly/useChainInfo.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useMaxWithdrawal.ts","../src/orderly/useWithdraw.ts","../src/orderly/allowance.ts","../src/orderly/useDeposit.ts","../src/orderly/useConvert.ts","../src/orderly/useTransfer.ts","../src/orderly/useInternalTransfer.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useBalanceSubscription.ts","../src/orderly/wsTopic/useWalletTopic.ts","../src/orderly/wsTopic/useBalanceTopic.ts","../src/orderly/useSettleSubscription.ts","../src/orderly/usePrivateDataObserver.ts","../src/orderly/useSymbolPriceRange.ts","../src/utils/createOrder.ts","../src/services/orderCreator/baseCreator.ts","../src/services/orderCreator/bboOrderCreator.ts","../src/services/orderCreator/baseBracketOrderCreator.ts","../src/services/orderCreator/validators/BaseValidator.ts","../src/services/orderCreator/validators/PriceValidationStrategy.ts","../src/services/orderCreator/validators/PriceValidator.ts","../src/services/orderCreator/validators/QuantityValidationStrategy.ts","../src/services/orderCreator/validators/QuantityValidator.ts","../src/services/orderCreator/validators/ValidationChain.ts","../src/services/orderCreator/limitOrderCreator.ts","../src/services/orderCreator/bracketLimitOrderCreator.ts","../src/services/orderCreator/validators/SlippageValidationStrategy.ts","../src/services/orderCreator/validators/SlippageValidator.ts","../src/services/orderCreator/marketOrderCreator.ts","../src/services/orderCreator/bracketMarketOrderCreator.ts","../src/services/orderCreator/fokCreator.ts","../src/services/orderCreator/generalCreator.ts","../src/services/orderCreator/iocCreator.ts","../src/services/orderCreator/postOnlyCreator.ts","../src/utils/order/scaledOrder.ts","../src/services/orderCreator/scaledOrderCreator.ts","../src/services/orderCreator/validators/TriggerPriceValidator.ts","../src/services/orderCreator/stopLimitOrderCreator.ts","../src/services/orderCreator/stopMarketOrderCreator.ts","../src/services/orderCreator/baseAlgoCreator.ts","../src/services/orderCreator/tpslOrderCreator.ts","../src/services/orderCreator/tpslPositionOrderCreator.ts","../src/services/orderCreator/trailingStopOrderCreator.ts","../src/services/orderCreator/factory.ts","../src/next/useOrderEntry/helper.ts","../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts","../src/orderly/useTakeProfitAndStopLoss/index.ts","../src/orderly/useMaxLeverage.ts","../src/orderly/useSymbolLeverage.ts","../src/orderly/statistics/useAssetHistory.ts","../src/orderly/statistics/useStatisticsDaily.ts","../src/orderly/statistics/useUserStatistics.ts","../src/orderly/statistics/useFundingFeeHistory.ts","../src/orderly/statistics/useDistributionHistory.ts","../src/orderly/statistics/useTransferHistory.ts","../src/orderly/statistics/useVaultsHistory.ts","../src/orderly/useMaintenanceStatus.ts","../src/orderly/useStorageLedgerAddress.ts","../src/orderly/useTokensInfo/tokensInfo.store.ts","../src/orderly/useFutures.ts","../src/orderly/usePublicDataObserver.ts","../src/useDatabaseInitialization.ts","../src/provider/dataCenter/dataCenterProvider.tsx","../src/configProvider.tsx","../src/deprecated/useOrderEntry.ts","../src/useMediaQuery.ts","../src/services/painter/basePaint.ts","../src/services/painter/backgroundPaint.ts","../src/services/painter/qrPaint.ts","../src/services/painter/dataPaint.ts","../src/services/painter/painter.ts","../src/services/painter/layout.config.ts","../src/usePoster.ts","../src/trading-rewards/types.ts","../src/trading-rewards/useEpochInfo.ts","../src/trading-rewards/useCurEpochEstimate.ts","../src/trading-rewards/useAccountRewardHistory.ts","../src/trading-rewards/abis/orderTokenAbi.json","../src/trading-rewards/abis/proxyLedgerAbi.json","../src/trading-rewards/abis/OmnichainLedgerV1ABI.json","../src/trading-rewards/useGetEnv.ts","../src/trading-rewards/abis/contrast.ts","../src/trading-rewards/utils.ts","../src/trading-rewards/useGetClaimed.ts","../src/trading-rewards/useWalletRewardsHistory.ts","../src/trading-rewards/useTradingRwardsStatus.tsx","../src/apiKeys/useApiKeyManager.ts","../src/next/useOrderEntry/usdcBorrowLimit.ts","../src/next/useOrderEntry/useOrderEntry.internal.ts","../src/next/useOrderEntry/useRwaLeverageSync.ts","../src/next/useOrderEntry/useOrderEntry.ts","../src/next/useOrderEntry/orderEntry.store.ts","../src/next/useOrderEntry/useOrderEntity.ts","../src/useRestrictedInfo.ts","../src/next/positions/usePositionClose.ts","../src/next/tpsl/errorMsgCodes.ts","../src/next/tpsl/useTpslPriceChecker.ts","../src/next/tpsl/useEstLiqPriceBySymbol.ts","../src/next/tpsl/useGetEstLiqPrice.ts","../src/feature-flag/useFeatureFlag.ts","../src/feature-flag/flagKeys.ts"],"names":["init","createContext","useContext","SDKError","useSWR","fetcher","options","account","mutate","useSWRMutation","data","SimpleDI","getTimestamp","useConstant","useCallback","track","Account","getGlobalObject","TrackerEventName","AccountStatusEnum","get","useSWRInfinite","useState","useRef","useMemo","useEffect","path","isEqual","signatureMiddleware","order","AlgoOrderType","OrderType","orderPerp","Decimal","OrderSide","OrderStatus","i","AlgoOrderRootType","generateKeyFun","zero","config","pathOr","create","CHAIN_INFO_TIMEOUT_MS","persist","useAccountInfo","identify","WsNetworkStatus","windowGuard","useSWRSubscription","isValidTimestamp","MarketsType","markets","tabs","DEFAULT_TICK_SIZES","DEFAULT_SYMBOL_DEPTHS","symbol","favorites","get24hChange","get8hFunding","type","max","min","MarginMode","est_funding_rate","EMPTY_LIST","immer","positions","unsettlementPnL","collateralRatio","calculatorService","orderUtils","resolveTPSLOrderType","isTPSLTriggered","isPositionalTPSL","PositionType","includes","orders","withTPSLProvenance","changes","restOptions","propOr","WS","portfolio","holding","accountPerp","usdc","status","positionsPerp","state","maintenanceMargin","networkId","item","maxWithdrawalUSDC","maxWithdrawalOtherCollateral","ARBITRUM_TESTNET_CHAINID","token","isNativeTokenChecker","vaultAddress","address","decimals","balance","ChainNamespace","allowance","waitForAllowance","quantity","depositFee","ARBITRUM_MAINNET_CHAINID","quote_dp","base_dp","qty","pick","DistributionType","TriggerPriceType","errors","getOrderCreator","omit","useDebouncedCallback","startDate","endDate","MaintenanceStatus","brokerName","jsx","React","getPrecisionByNumber","calculate","compose","head","getPriceAndQty","symbolOrOrder","query","ref","TWType","ENVType","DistributionId","EpochStatus","symbolInfo","useOrderEntry","estSlippage","produce","markPrice","estLiqPrice","EMPTY_OBJECT","initialOrderState","allInvalidAreas","ip","canUnblock","restrictedOpen","currentPosition","orderQuantity","FlagKeys"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n  createContext,\n  useContext,\n  FC,\n  PropsWithChildren,\n  createElement,\n  ReactNode,\n} from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport type { RwaSymbolsInfo } from \"../useRwaSymbolsInfo\";\nimport type { SymbolsInfo } from \"../useSymbolsInfo\";\n\nexport type MarketCategoryComponentKey =\n  | \"marketsSheet\"\n  | \"expandMarkets\"\n  | \"dropDownMarkets\"\n  | \"subMenuMarkets\"\n  | \"marketsDataList\"\n  | \"horizontalMarkets\";\n\nexport type MarketBuiltInTabType =\n  | \"favorites\"\n  | \"community\"\n  | \"all\"\n  | \"crypto\"\n  | \"rwa\"\n  | \"preTge\"\n  | \"newListing\"\n  | \"recent\";\n\ntype MarketTabBase = {\n  name?: string;\n  icon?: ReactNode | string;\n  suffix?: ReactNode | string;\n  isVisible?: (\n    symbolList: API.MarketInfoExt[],\n    ctx: {\n      rwaSymbolsInfo?: RwaSymbolsInfo;\n      symbolsInfo?: SymbolsInfo;\n    },\n  ) => boolean;\n};\n\nexport type BuiltInMarketTab = MarketTabBase & {\n  type: MarketBuiltInTabType;\n};\n\nexport type CustomMarketTab = MarketTabBase & {\n  id: string;\n  name: string;\n  match: (market: API.MarketInfoExt) => boolean;\n};\n\nexport type MarketTabConfig = BuiltInMarketTab | CustomMarketTab;\n\nexport interface MarketCategoryContext {\n  componentKey: MarketCategoryComponentKey;\n  builtIn: Record<MarketBuiltInTabType, BuiltInMarketTab>;\n}\n\n/**\n * Function-only config for market tabs.\n *\n * @param original - Default built-in tabs for the current component (as MarketTabConfig[])\n * @param context  - { componentKey, builtIn } for referencing built-in tab definitions\n * @returns Final tab sequence to render\n */\nexport type MarketCategoryConfig = (\n  original: MarketTabConfig[],\n  context: MarketCategoryContext,\n) => MarketTabConfig[];\n\nconst MarketCategoriesConfigContext = createContext<\n  MarketCategoryConfig | undefined\n>(undefined);\n\nexport type MarketCategoriesConfigProviderProps = {\n  value?: MarketCategoryConfig;\n};\n\nexport const MarketCategoriesConfigProvider: FC<\n  PropsWithChildren<MarketCategoriesConfigProviderProps>\n> = ({ value, children }) => {\n  return createElement(\n    MarketCategoriesConfigContext.Provider,\n    { value },\n    children,\n  );\n};\n\nexport function useMarketCategoriesConfig(): MarketCategoryConfig | undefined {\n  return useContext(MarketCategoriesConfigContext);\n}\n","declare global {\n  interface Window {\n      __ORDERLY_VERSION__?: {\n          [key: string]: string;\n      };\n  }\n}\nif (typeof window !== \"undefined\") {\n  window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n  window.__ORDERLY_VERSION__[\"@orderly.network/hooks\"] = \"3.2.1\";\n}\n\nexport default \"3.2.1\";\n","import type { SWRConfiguration } from \"swr\";\nimport { get } from \"@orderly.network/net\";\n\nexport const fetcher = (\n  url: string,\n  init: RequestInit = {},\n  queryOptions: useQueryOptions<any>,\n) => get(url, init, queryOptions?.formatter);\n\nexport type useQueryOptions<T> = SWRConfiguration & {\n  formatter?: (data: any) => T;\n};\n\nexport const noCacheConfig: SWRConfiguration = {\n  dedupingInterval: 0,\n  revalidateOnMount: true,\n  revalidateIfStale: true,\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext, useContext } from \"react\";\nimport type {\n  ConfigStore,\n  OrderlyKeyStore,\n  WalletAdapter,\n} from \"@orderly.network/core\";\nimport type { API, NetworkId, OrderlyOrder } from \"@orderly.network/types\";\nimport type { Chains } from \"./orderly/useChains\";\n\nexport type FilteredChains = {\n  mainnet?: { id: number }[];\n  testnet?: { id: number }[];\n};\n\nexport interface OrderlyConfigContextState {\n  /** @deprecated will be removed in next minor version */\n  fetcher?: (url: string, init: RequestInit) => Promise<any>;\n  configStore: ConfigStore;\n  keyStore: OrderlyKeyStore;\n  walletAdapters: WalletAdapter[];\n\n  networkId: NetworkId;\n\n  filteredChains?: FilteredChains;\n  /** custom chains, please include all chain information, otherwise there will be problems */\n  customChains?: Chains<undefined, undefined>;\n  /** enable swap deposit, default is false */\n  enableSwapDeposit?: boolean;\n  /**\n   * Custom orderbook default tick sizes.\n   */\n  defaultOrderbookTickSizes?: Record<PropertyKey, string>;\n\n  /**\n   * Custom orderbook default symbol depths.\n   */\n  defaultOrderbookSymbolDepths?: Record<PropertyKey, number[]>;\n\n  /** when use this, please keep the reference stable, otherwise it will cause unnecessary renders */\n  dataAdapter?: {\n    /**\n     * custom useChains return list data\n     */\n    chainsList?: (chains: API.Chain[]) => API.Chain[];\n    /**\n     * Custom `/v1/public/futures` response data.\n     */\n    symbolList?: (\n      data: API.MarketInfoExt[],\n      context: {\n        rwaSymbolsInfo: Record<string, API.RwaSymbol> | undefined;\n      },\n    ) => any[];\n    /**\n     * custom `/v2/public/announcement` response data\n     */\n    announcementList?: (data: any[] | ReadonlyArray<any>) => any[];\n  };\n  notification?: {\n    orderFilled?: {\n      /**\n       * Sound to play when an order is successful.\n       * If `soundOptions` is provided, this field is treated as the legacy\n       * single-sound configuration and only used when `soundOptions` is\n       * absent.\n       * @default undefined\n       */\n      media?: string;\n      /**\n       * Whether to open the notification by default.\n       * For multi-sound mode this controls whether the initial selection\n       * should be sound-on or muted when there is no stored preference.\n       * @default false\n       */\n      defaultOpen?: boolean;\n      /**\n       * Whether to display the notification in the order entry.\n       * @default true\n       */\n      displayInOrderEntry?: boolean;\n      /**\n       * Multiple sound options for order filled notification.\n       * When provided, the UI should render a single-choice selector\n       * (e.g. radio group) instead of a simple on/off toggle. One of the\n       * options should represent the muted/off state.\n       */\n      soundOptions?: Array<{\n        label: string;\n        value: string;\n        media: string;\n      }>;\n      /**\n       * Default selected sound option value when there is no stored\n       * preference. If omitted, the first item in `soundOptions` is used.\n       */\n      defaultSoundValue?: string;\n    };\n  };\n\n  amplitudeConfig?: {\n    amplitudeId: string;\n    serverZone?: \"EU\" | \"US\";\n  };\n  orderMetadata?: OrderMetadataConfig;\n}\n\nexport type OrderMetadata = {\n  order_tag?: string;\n  client_order_id?: string;\n};\n\nexport type OrderMetadataConfig =\n  | OrderMetadata\n  | ((order: Partial<OrderlyOrder>) => OrderMetadata);\n\nexport const OrderlyContext = createContext<OrderlyConfigContextState>({\n  // configStore: new MemoryConfigStore(),\n} as OrderlyConfigContextState);\n\nexport const useOrderlyContext = () => {\n  return useContext(OrderlyContext);\n};\n\nexport const OrderlyProvider = OrderlyContext.Provider;\n","import { useContext } from \"react\";\nimport { ConfigStore, type ConfigKey } from \"@orderly.network/core\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport function useConfig(): ConfigStore;\nexport function useConfig<T = string>(key: ConfigKey, defaultValue?: T): T;\nexport function useConfig(key?: ConfigKey, defaultValue?: any) {\n  const { configStore } = useContext(OrderlyContext);\n\n  if (!configStore) {\n    throw new SDKError(\n      \"useConfig must be used within OrderlyConfigProvider or OrderlyAppProvider\",\n    );\n  }\n\n  if (typeof key !== \"undefined\") {\n    if (typeof defaultValue !== \"undefined\") {\n      return configStore.getOr(key, defaultValue) as any;\n    }\n    return configStore.get(key);\n  }\n\n  return configStore;\n}\n","import { useCallback } from \"react\";\nimport useSWR from \"swr\";\nimport type { SWRHook, SWRResponse } from \"swr\";\nimport { usePluginScope } from \"@orderly.network/plugin-core\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { useConfig } from \"./useConfig\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\n\n/** Header name for plugin ID attribution (API tracing, rate limiting) */\nexport const PLUGIN_ID_HEADER = \"X-Orderly-Plugin-Id\";\n\n/**\n * useQuery\n * @description for public api. Injects X-Orderly-Plugin-Id when inside PluginScopeProvider.\n * @param query\n * @param options\n */\nexport const useQuery = <T>(\n  query: Parameters<SWRHook>[0],\n  options?: useQueryOptions<T>,\n): SWRResponse<T> => {\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n  const pluginScope = usePluginScope();\n  const { formatter, ...swrOptions } = options || {};\n\n  if (typeof apiBaseUrl === \"undefined\") {\n    throw new SDKError(\"please add OrderlyConfigProvider to your app\");\n  }\n\n  const fetcherFn = useCallback(\n    (url: string, init?: RequestInit) => {\n      const fullUrl = url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`;\n      const headers = new Headers(init?.headers);\n      if (pluginScope?.pluginId) {\n        headers.set(PLUGIN_ID_HEADER, pluginScope.pluginId);\n      }\n      return fetcher(fullUrl, { ...init, headers }, { formatter });\n    },\n    [apiBaseUrl, pluginScope?.pluginId, formatter],\n  );\n\n  return useSWR<T>(query, fetcherFn, swrOptions);\n};\n","import type { API } from \"@orderly.network/types\";\nimport { useQuery } from \"./useQuery\";\n\n/**\n * Fetches the auto-convert thresholds from `/v1/public/auto_convert_threshold`.\n *\n * Fields are returned raw; `ltv_threshold` is a ratio (e.g. `0.9` means 90%),\n * multiply by 100 at the consumer when a percentage is needed. While loading\n * or on request failure the fields are `undefined`.\n */\nexport const useConvertThreshold = () => {\n  const { data, error, isLoading } = useQuery<API.ConvertThreshold>(\n    \"/v1/public/auto_convert_threshold\",\n    { errorRetryCount: 3, revalidateOnFocus: false },\n  );\n\n  return {\n    ltv_threshold: data?.ltv_threshold,\n    negative_usdc_threshold: data?.negative_usdc_threshold,\n    isLoading,\n    error,\n  } as const;\n};\n\nexport type ConvertThresholdReturns = ReturnType<typeof useConvertThreshold>;\n","import { Middleware, SWRHook } from \"swr\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\n\n// Global state management to avoid duplicate polling\nlet timestampOffsetPromise: Promise<void> | null = null;\nlet timestampOffsetReady = false;\n\n/**\n * SWR middleware that waits for __ORDERLY_timestamp_offset to be initialized\n * before allowing requests to proceed.\n */\nexport const timestampWaitingMiddleware: Middleware = (useSWRNext: SWRHook) => {\n  return (key, fetcher, config) => {\n    // Only wrap if fetcher exists\n    if (!fetcher) {\n      return useSWRNext(key, fetcher, config);\n    }\n\n    // Wrap the original fetcher to wait for timestamp offset before making requests\n    const wrappedFetcher = async (...args: unknown[]) => {\n      // Performance optimization: Use shared waiting Promise to avoid duplicate polling\n      await getTimestampOffsetPromise();\n\n      // Call the original fetcher\n      return fetcher(...args);\n    };\n\n    return useSWRNext(key, wrappedFetcher, config);\n  };\n};\n\n/**\n * Get timestamp offset waiting Promise (singleton pattern)\n * Ensures only one polling instance is running\n */\nfunction getTimestampOffsetPromise(): Promise<void> {\n  // If already ready, return immediately\n  if (timestampOffsetReady) {\n    return Promise.resolve();\n  }\n\n  // If there's already a waiting Promise, reuse it\n  if (timestampOffsetPromise) {\n    return timestampOffsetPromise;\n  }\n\n  // Create new waiting Promise\n  timestampOffsetPromise = waitForTimestampOffset();\n\n  // Clean up state after completion\n  timestampOffsetPromise\n    .then(() => {\n      timestampOffsetReady = true;\n    })\n    .catch(() => {\n      // Reset Promise on failure to allow retry\n      timestampOffsetPromise = null;\n    });\n\n  return timestampOffsetPromise;\n}\n\n/**\n * Helper function to wait for timestamp offset initialization\n * Optimized version: reduces unnecessary function calls and object creation\n */\nasync function waitForTimestampOffset(\n  maxWaitTime: number = 30000,\n): Promise<void> {\n  // Cache global object reference to avoid repeated access\n  let globalObj: Record<string, unknown>;\n\n  try {\n    globalObj = getGlobalObject() as Record<string, unknown>;\n  } catch {\n    throw new Error(\"Failed to access global object\");\n  }\n\n  const checkTimestampOffset = () => {\n    return typeof globalObj.__ORDERLY_timestamp_offset === \"number\";\n  };\n\n  // Check immediately\n  if (checkTimestampOffset()) {\n    return;\n  }\n\n  return new Promise((resolve, reject) => {\n    let attempts = 0;\n    const maxAttempts = maxWaitTime / 100; // Reduce check frequency to 100ms to reduce CPU usage\n\n    const pollInterval = setInterval(() => {\n      attempts++;\n\n      if (checkTimestampOffset()) {\n        clearInterval(pollInterval);\n        resolve();\n      } else if (attempts >= maxAttempts) {\n        clearInterval(pollInterval);\n        console.warn(\n          \"Timeout waiting for __ORDERLY_timestamp_offset initialization\",\n        );\n        reject(\n          new Error(\"Timeout waiting for timestamp offset initialization\"),\n        );\n      }\n    }, 100); // Increase interval to 100ms to balance responsiveness and performance\n  });\n}\n\n/**\n * Reset timestamp state (for testing or re-initialization)\n */\nexport function resetTimestampOffsetState(): void {\n  timestampOffsetPromise = null;\n  timestampOffsetReady = false;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { SWRHook } from \"swr\";\nimport type {\n  SWRMutationResponse,\n  SWRMutationConfiguration,\n} from \"swr/mutation\";\nimport useSWRMutation from \"swr/mutation\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { useConfig } from \"./useConfig\";\nimport { fetcher } from \"./utils/fetcher\";\n\n/**\n * useQuery\n * @description for public api\n * @param query\n * @param options\n */\nexport const useLazyQuery = <T, R = any>(\n  query: Parameters<SWRHook>[0],\n  options?: SWRMutationConfiguration<any, any> & {\n    formatter?: (data: any) => R;\n    init?: RequestInit;\n  },\n): SWRMutationResponse => {\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n  const { formatter, init, ...swrOptions } = options || {};\n  // check the query is public api\n  // if (typeof query === \"string\" && !query.startsWith(\"/v1/public\")) {\n  //   throw new SDKError(\"useQuery is only for public api\");\n  // }\n\n  if (typeof apiBaseUrl === \"undefined\") {\n    throw new SDKError(\"please add OrderlyConfigProvider to your app\");\n  }\n\n  // @ts-ignore\n  return useSWRMutation(\n    query,\n    (url: string, options: any) => {\n      url = url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`;\n      if (options?.arg) {\n        // const searchParams = new URLSearchParams(init.arg);\n        // url = `${url}?${encodeURIComponent(searchParams.toString())}`;\n        const queryString = Object.entries<string>(options.arg)\n          .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n          .join(\"&\");\n        url = `${url}?${queryString}`;\n      }\n      return fetcher(url, init, { formatter });\n    },\n    swrOptions,\n  );\n};\n","import useConstant from \"use-constant\";\nimport { Account, SimpleDI } from \"@orderly.network/core\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { SDKError } from \"@orderly.network/types\";\n\nexport const useAccountInstance = (): Account => {\n  const { configStore, keyStore, walletAdapters } = useContext(OrderlyContext);\n\n  if (!configStore)\n    throw new SDKError(\n      \"configStore is not defined, please use OrderlyProvider\"\n    );\n\n  if (!keyStore) {\n    throw new SDKError(\n      \"keyStore is not defined, please use OrderlyProvider and provide keyStore\"\n    );\n  }\n\n  const account = useConstant(() => {\n    let account = SimpleDI.get<Account>(\"account\");\n\n    if (!account) {\n      account = new Account(\n        configStore,\n        keyStore,\n        // getWalletAdapter,\n        walletAdapters\n      );\n\n      SimpleDI.registerByName(\"account\", account);\n    }\n    return account;\n  });\n\n  return account;\n};\n","import useSWRMutation, { type SWRMutationConfiguration } from \"swr/mutation\";\nimport {\n  type MessageFactor,\n  type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { mutate } from \"@orderly.network/net\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useMemoizedFn } from \".\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useConfig } from \"./useConfig\";\n\ntype HTTP_METHOD = \"POST\" | \"PUT\" | \"DELETE\" | \"GET\";\n\nconst fetcher = (\n  url: string,\n  options: {\n    arg: {\n      data?: any;\n      params?: any;\n      method: HTTP_METHOD;\n      signature: SignedMessagePayload;\n    };\n  },\n) => {\n  const init: RequestInit = {\n    method: options.arg.method,\n    headers: {\n      ...options.arg.signature,\n    },\n  };\n\n  if (options.arg.data) {\n    init.body = JSON.stringify(options.arg.data);\n  }\n\n  if (\n    typeof options.arg.params === \"object\" &&\n    Object.keys(options.arg.params).length\n  ) {\n    const search = new URLSearchParams(options.arg.params);\n    url = `${url}?${search.toString()}`;\n  }\n\n  return mutate(url, init);\n};\n\n/**\n * This hook is used to execute API requests for data mutation, such as POST, DELETE, PUT, etc.\n */\nexport const useMutation = <T, E>(\n  /**\n   * The URL to send the request to. If the URL does not start with \"http\",\n   * it will be prefixed with the API base URL.\n   */\n  url: string,\n  /**\n   * The HTTP method to use for the request. Defaults to \"POST\".\n   */\n  method: HTTP_METHOD = \"POST\",\n  /**\n   * The configuration object for the mutation.\n   * @see [useSWRMutation](https://swr.vercel.app/docs/mutation#api)\n   *\n   * @link https://swr.vercel.app/docs/mutation#api\n   */\n  options?: SWRMutationConfiguration<T, E>,\n) => {\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n  let fullUrl = url;\n  if (!url.startsWith(\"http\")) {\n    fullUrl = `${apiBaseUrl}${url}`;\n  }\n\n  const account = useAccountInstance();\n\n  const { trigger, data, error, reset, isMutating } = useSWRMutation(\n    fullUrl,\n    // method === \"POST\" ? fetcher : deleteFetcher,\n    fetcher,\n    options,\n  );\n\n  const mutation = async (\n    /**\n     * The data to send with the request.\n     */\n    data: Record<string, any> | null,\n    /**\n     * The query parameters to send with the request.\n     */\n    params?: Record<string, any>,\n    options?: SWRMutationConfiguration<T, E>,\n  ): Promise<any> => {\n    let newUrl = url;\n\n    if (typeof params === \"object\" && Object.keys(params).length) {\n      const search = new URLSearchParams(params);\n      newUrl = `${url}?${search.toString()}`;\n    }\n\n    const payload: MessageFactor = {\n      method,\n      url: newUrl,\n      data,\n    };\n\n    const signer = account.signer;\n    const signature = await signer.sign(payload, getTimestamp());\n\n    return trigger(\n      {\n        data,\n        params,\n        method,\n        signature: {\n          ...signature,\n          \"orderly-account-id\": account.accountId,\n        },\n      },\n      options,\n    );\n  };\n\n  return [useMemoizedFn(mutation), { data, error, reset, isMutating }] as const;\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { SimpleDI, Account, MessageFactor } from \"@orderly.network/core\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useConfig } from \"../useConfig\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n  // TODO(hooks): Move this hook call into the hook that installs the middleware.\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n  return (key, fetcher, config) => {\n    try {\n      const extendedFetcher = async (args: any) => {\n        const url = Array.isArray(args) ? args[0] : args;\n\n        const account = SimpleDI.get<Account>(\"account\");\n        const fullUrl = `${apiBaseUrl}${url}`;\n\n        const signer = account.signer;\n\n        const payload: MessageFactor = {\n          method: \"GET\",\n          url,\n        };\n\n        const signature = await signer.sign(payload, getTimestamp());\n\n        // @ts-ignore\n        return fetcher(fullUrl, {\n          headers: {\n            ...signature,\n            \"orderly-account-id\": account.accountId,\n          },\n        });\n      };\n      return useSWRNext(key, extendedFetcher, config);\n    } catch (e) {\n      console.error(\"signature error:\", e);\n      throw e;\n    }\n  };\n};\n","import useConstant from \"use-constant\";\nimport { EventEmitter, SimpleDI } from \"@orderly.network/core\";\n\nexport const useEventEmitter = () => {\n  return useConstant(() => {\n    let ee = SimpleDI.get<EventEmitter>(\"EE\");\n\n    if (!ee) {\n      ee = new EventEmitter();\n\n      SimpleDI.registerByName(\"EE\", ee);\n    }\n    return ee;\n  });\n};\n","import { createContext, useContext } from \"react\";\nimport type { EIP1193Provider } from \"@web3-onboard/common\";\nimport { SolanaWalletProvider } from \"@orderly.network/default-solana-adapter\";\nimport {\n  ChainNamespace,\n  type WalletChainChangeResult,\n} from \"@orderly.network/types\";\n\ntype WalletProvider = (EIP1193Provider | SolanaWalletProvider) & {\n  publicKey?: SolanaWalletProvider[\"publicKey\"]; // For Solana providers\n};\n\nexport type ConnectedChain = {\n  id: number | string;\n  namespace: ChainNamespace;\n};\nexport type WalletAccount = {\n  address: string;\n  // ens: Ens | null;\n  // uns: Uns | null;\n  // balance: Balances | null;\n  // secondaryTokens?: SecondaryTokenBalances[] | null;\n};\nexport interface WalletState {\n  label: string;\n  icon: string;\n  provider: WalletProvider;\n  accounts: WalletAccount[];\n  chains: ConnectedChain[];\n  instance?: unknown;\n  additionalInfo?: Record<string, any>;\n}\n\nexport interface WalletConnectorContextState {\n  connect: (options?: any) => Promise<WalletState[]>;\n  disconnect: (options: any) => Promise<any[]>;\n  connecting: boolean;\n  setChain: (options: {\n    chainId: string | number;\n  }) => Promise<WalletChainChangeResult>;\n  chains: any[];\n  // switchChain: (options: { chainId: string }) => Promise<any>;\n  wallet: WalletState | null;\n  connectedChain: ConnectedChain | null;\n\n  settingChain: boolean;\n  namespace: ChainNamespace | null;\n}\n\nexport const WalletConnectorContext =\n  createContext<WalletConnectorContextState>({} as WalletConnectorContextState);\n\nexport const useWalletConnector = () => {\n  return useContext(WalletConnectorContext);\n};\n","import { useCallback } from \"react\";\nimport { debounce } from \"lodash\";\nimport { TrackerEventName } from \"@orderly.network/types\";\nimport { windowGuard } from \"@orderly.network/utils\";\nimport { useEventEmitter } from \"./useEventEmitter\";\nimport { useWalletConnector } from \"./walletConnectorContext\";\n\nexport const useTrack = () => {\n  const ee = useEventEmitter();\n  const { wallet } = useWalletConnector();\n\n  /** immediately track event */\n  const tracking = useCallback(\n    (eventName: TrackerEventName, params: any = {}) => {\n      windowGuard(() => {\n        const location = window.location;\n        const origin = location.origin;\n        const url = location.pathname;\n        const title = document.title;\n        const userAgent = window.navigator.userAgent;\n\n        Object.assign(params, {\n          page_title: title,\n          page_url: url,\n          page_domain: origin,\n          user_agent: userAgent,\n          sdk_version:\n            window?.__ORDERLY_VERSION__?.[\"@orderly.network/net\"] ?? \"\",\n        });\n        if (eventName === TrackerEventName.placeOrderSuccess) {\n          Object.assign(params, {\n            wallet: wallet?.label || \"QR code\",\n          });\n        }\n        ee.emit(eventName, params);\n      });\n    },\n    [wallet],\n  );\n\n  /** debounce track event */\n  const track = useCallback(debounce(tracking, 500), [tracking]);\n\n  const setTrackUserId = useCallback((userId: string) => {\n    ee.emit(TrackerEventName.trackIdentifyUserId, userId);\n  }, []);\n\n  const setIdentify = useCallback((params: any) => {\n    ee.emit(TrackerEventName.trackIdentify, params);\n  }, []);\n\n  return {\n    track,\n    tracking,\n    setTrackUserId,\n    setIdentify,\n  };\n};\n","import { useContext } from \"react\";\nimport useConstant from \"use-constant\";\nimport { Account, AccountState, SimpleDI } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { getGlobalObject, getTimestamp } from \"@orderly.network/utils\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\n\nexport const useWS = () => {\n  const { configStore } = useContext(OrderlyContext);\n  // const prevAccountState = useRef<AccountState | null>(null);\n\n  const ws = useConstant(() => {\n    let websocketClient = SimpleDI.get<WS>(WS_NAME);\n    const account = SimpleDI.get<Account>(Account.instanceName);\n\n    if (!websocketClient) {\n      websocketClient = new WS({\n        networkId: configStore.get(\"networkId\"),\n        publicUrl: configStore.get(\"publicWsUrl\"),\n        privateUrl: configStore.get(\"privateWsUrl\"),\n        onSigntureRequest: async () => {\n          const signer = account.signer;\n          const timestamp = getTimestamp();\n          const result = await signer.signText(timestamp.toString());\n          return { ...result, timestamp };\n        },\n      });\n\n      // if user login, open the private websocket\n      if (\n        (account.stateValue.status === AccountStatusEnum.EnableTrading ||\n          account.stateValue.status ===\n            AccountStatusEnum.EnableTradingWithoutConnected) &&\n        account.accountId\n      ) {\n        websocketClient.openPrivate(account.accountId);\n      }\n\n      // open the pirvate websocket when user login\n      account.on(\"change:status\", (nextState: AccountState) => {\n        if (\n          (nextState.status === AccountStatusEnum.EnableTrading ||\n            nextState.status ===\n              AccountStatusEnum.EnableTradingWithoutConnected) &&\n          account.accountId\n        ) {\n          websocketClient.openPrivate(account.accountId);\n        } else {\n          websocketClient.closePrivate(3887, \"switch account\");\n        }\n\n        // prevAccountState.current = nextState;\n      });\n\n      if (typeof window !== \"undefined\") {\n        (getGlobalObject() as any)[\"__Orderly_WS\"] = websocketClient;\n      }\n\n      SimpleDI.registerByName(WS_NAME, websocketClient);\n    }\n\n    return websocketClient;\n  });\n\n  // auto open private when user login;\n\n  return ws;\n};\n","import { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport { AccountState } from \"@orderly.network/core\";\nimport {\n  AccountStatusEnum,\n  SDKError,\n  TrackerEventName,\n} from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useEventEmitter } from \"./useEventEmitter\";\nimport { useTrack } from \"./useTrack\";\nimport { useWS } from \"./useWS\";\n\nexport const useAccount = () => {\n  const { configStore, keyStore } = useContext(OrderlyContext);\n\n  if (!configStore)\n    throw new SDKError(\n      \"configStore is not defined, please use OrderlyProvider\",\n    );\n\n  if (!keyStore) {\n    throw new SDKError(\n      \"keyStore is not defined, please use OrderlyProvider and provide keyStore\",\n    );\n  }\n\n  const account = useAccountInstance();\n\n  // const [subAccounts, setSubAccounts] = useState<SubAccount[]>([]);\n\n  const [state, setState] = useState<AccountState>(account.stateValue);\n  const { track } = useTrack();\n\n  const statusChangeHandler = (nextState: AccountState) => {\n    setState(() => nextState);\n  };\n\n  useEffect(() => {\n    account.on(\"change:status\", statusChangeHandler);\n\n    return () => {\n      account.off(\"change:status\", statusChangeHandler);\n    };\n  }, [account]);\n\n  const createOrderlyKey = useCallback(\n    async (remember: boolean) => {\n      track(TrackerEventName.signinSuccess, {\n        network: account.chainId,\n        wallet: state.connectWallet?.name,\n      });\n      return account.createOrderlyKey(remember ? 365 : 30).then((res) => {\n        return account.restoreSubAccount().then((_) => {\n          return res;\n        });\n      });\n    },\n    [account, state],\n  );\n\n  const ws = useWS();\n\n  const switchAccount = useCallback(\n    async (accountId: string) => {\n      // close existing private connection when switch account\n      ws.closePrivate(3887, \"switch account\");\n      return account.switchAccount(accountId);\n    },\n    [account],\n  );\n\n  const createAccount = useCallback(async () => {\n    return account.createAccount();\n  }, [account]);\n\n  const createSubAccount = useCallback(\n    async (description?: string) => {\n      return account.createSubAccount(description);\n    },\n    [account],\n  );\n\n  const updateSubAccount = useCallback(\n    async (value: { subAccountId: string; description?: string }) => {\n      return account.updateSubAccount(value);\n    },\n    [account],\n  );\n\n  const refreshSubAccountBalances = useCallback(() => {\n    return account.refreshSubAccountBalances();\n  }, [account]);\n\n  const isSubAccount = useMemo(() => {\n    return state.accountId !== state.mainAccountId;\n  }, [state]);\n\n  return {\n    account,\n    state,\n    isSubAccount,\n    isMainAccount: !isSubAccount,\n    subAccount: {\n      refresh: refreshSubAccountBalances,\n      create: createSubAccount,\n      update: updateSubAccount,\n    },\n    switchAccount,\n    createOrderlyKey,\n    createAccount,\n  };\n};\n","import useSWR from \"swr\";\nimport type { SWRHook, SWRResponse } from \"swr\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { useAccount } from \"./useAccount\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\n\n/**\n * usePrivateQuery\n * @description for private api\n * @param query\n * @param options\n */\nexport const usePrivateQuery = <T>(\n  query: Parameters<SWRHook>[0],\n  options?: useQueryOptions<T>,\n): SWRResponse<T> => {\n  const { formatter, ...swrOptions } = options || {};\n  const { state } = useAccount();\n  const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n  return useSWR<T>(\n    () =>\n      query &&\n      (state.status >= AccountStatusEnum.EnableTrading ||\n        state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n        ? [query, state.accountId]\n        : null,\n    (url: string, init: RequestInit) => {\n      return fetcher(url, init, { formatter });\n    },\n    {\n      ...swrOptions,\n      use: [signatureMiddleware, ...middleware],\n      onError: () => {},\n    },\n  );\n};\n","import useSWRInfinite, {\n  type SWRInfiniteKeyLoader,\n  type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\nimport { get } from \"@orderly.network/net\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { useAccount } from \"./useAccount\";\n\nexport const usePrivateInfiniteQuery = <T>(\n  getKey: SWRInfiniteKeyLoader | null,\n  options?: SWRInfiniteConfiguration & {\n    formatter?: (data: any) => any;\n  },\n) => {\n  const { formatter, ...restOptions } = options || {};\n  const { state } = useAccount();\n\n  const middleware = Array.isArray(restOptions?.use)\n    ? (restOptions?.use ?? [])\n    : [];\n\n  const result = useSWRInfinite<T>(\n    (pageIndex: number, previousPageData) => {\n      if (!getKey) return null;\n\n      const queryKey = getKey(pageIndex, previousPageData);\n      if (\n        queryKey &&\n        (state.status >= AccountStatusEnum.EnableTrading ||\n          state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n      ) {\n        return [queryKey, state.accountId];\n      }\n\n      return null;\n    },\n    (url: string, init: RequestInit) => {\n      return restOptions.fetcher?.(url, init) || get(url, init, formatter);\n    },\n    {\n      ...restOptions,\n      use: [signatureMiddleware, ...middleware],\n    },\n  );\n\n  return result;\n};\n","import useSWRInfinite, {\n  type SWRInfiniteKeyLoader,\n  type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\nimport { useConfig } from \"./useConfig\";\nimport { fetcher } from \"./utils/fetcher\";\n\nexport const useInfiniteQuery = <T>(\n  getKey: SWRInfiniteKeyLoader,\n  options?: SWRInfiniteConfiguration & {\n    formatter?: (data: any) => any;\n  },\n) => {\n  const { formatter, ...swrOptions } = options || {};\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n  const result = useSWRInfinite<T>(\n    (pageIndex: number, previousPageData) => {\n      return getKey(pageIndex, previousPageData);\n    },\n    (url: string, init: RequestInit) => {\n      const _url = url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`;\n      return fetcher(_url, init, { formatter });\n    },\n    swrOptions,\n  );\n\n  return result;\n};\n","import { useCallback, useState } from \"react\";\n\nexport const useBoolean = (\n  initialValue = false\n): [\n  boolean,\n  {\n    setTrue: () => void;\n    setFalse: () => void;\n    toggle: () => void;\n  }\n] => {\n  const [value, setValue] = useState(initialValue);\n  const setTrue = useCallback(() => setValue(true), []);\n  const setFalse = useCallback(() => setValue(false), []);\n  const toggle = useCallback(() => setValue((v) => !v), []);\n  return [value, { setTrue, setFalse, toggle }];\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useRef } from \"react\";\n\ntype NotFunction<T> = T extends (...args: any[]) => any ? never : T;\n\nexport const useUpdatedRef = <T>(val: NotFunction<T>) => {\n  const latestRef = useRef<T>(val);\n  latestRef.current = val;\n  return latestRef;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useMemo, useRef } from \"react\";\n\ntype noop = (this: any, ...args: any[]) => any;\n\ntype PickFunction<T extends noop> = (\n  this: ThisParameterType<T>,\n  ...args: Parameters<T>\n) => ReturnType<T>;\n\nexport const useMemoizedFn = <T extends noop>(fn?: T) => {\n  if (typeof fn !== \"function\") {\n    console.error(\n      `useMemoizedFn expected parameter a function, got ${typeof fn}`,\n    );\n  }\n\n  const safeFn = typeof fn === \"function\" ? fn : ((() => {}) as T);\n\n  const fnRef = useRef<T>(safeFn);\n\n  fnRef.current = useMemo<T>(() => safeFn, [safeFn]);\n\n  const wrapperRef = useRef<PickFunction<T> | null>(null);\n\n  if (!wrapperRef.current) {\n    wrapperRef.current = function (this, ...args) {\n      return fnRef.current.apply(this, args);\n    };\n  }\n\n  return wrapperRef.current;\n};\n","import { useCallback, useEffect, useRef } from \"react\";\n\nlet orderFilledAudio: HTMLAudioElement | null = null;\n\nfunction getOrderFilledAudio(): HTMLAudioElement {\n  if (!orderFilledAudio) {\n    orderFilledAudio = new Audio();\n  }\n  return orderFilledAudio;\n}\n\nexport interface AudioPlayerOptions {\n  volume?: number;\n  /** When true, play() will run; when false, play() no-ops. Used for on/off toggle. */\n  enabled?: boolean;\n}\n\n/**\n * Single shared Audio instance. Play is explicit: pause() then set src then play().\n * Use for order-filled notification sound (and any other one-shot global sound).\n * Compatible with legacy single-sound + on/off: pass enabled = user's on/off and src = media or \"\".\n */\nexport const useAudioPlayer = (\n  src: string,\n  options: AudioPlayerOptions = {},\n) => {\n  const { volume = 1, enabled = true } = options;\n  const srcRef = useRef(src);\n  const enabledRef = useRef(enabled);\n  const volumeRef = useRef(volume);\n\n  useEffect(() => {\n    srcRef.current = src;\n    enabledRef.current = enabled;\n    volumeRef.current = volume;\n  }, [src, enabled, volume]);\n\n  useEffect(() => {\n    const el = getOrderFilledAudio();\n    el.volume = Math.max(0, Math.min(1, volume));\n  }, [volume]);\n\n  // Reset audio element when tab becomes visible to prevent\n  // accumulated sound replays from queued play() calls in non-Chrome browsers\n  useEffect(() => {\n    const handleVisibilityChange = () => {\n      if (document.visibilityState === \"visible\") {\n        const el = getOrderFilledAudio();\n        el.pause();\n        el.removeAttribute(\"src\");\n        el.load();\n      }\n    };\n\n    document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n    return () => {\n      document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n    };\n  }, []);\n\n  const play = useCallback(() => {\n    const currentSrc = srcRef.current;\n    const currentEnabled = enabledRef.current;\n    if (!currentEnabled || !currentSrc) return;\n    const el = getOrderFilledAudio();\n    el.pause();\n    el.src = currentSrc;\n    el.volume = Math.max(0, Math.min(1, volumeRef.current));\n    el.play()?.catch(() => {});\n  }, []);\n\n  return { play };\n};\n","export const generateKeyFun =\n  (args: {\n    path: string;\n    //** YYYY-MM-dd */\n    startDate?: string;\n    //** YYYY-MM-dd */\n    endDate?: string;\n    //** default is 100 */\n    size?: number;\n    page?: number;\n    sort?: string;\n  }) =>\n  (pageIndex: number, previousPageData: any): string | null => {\n    // reached the end\n    if (previousPageData && !previousPageData.rows?.length) {\n      return null;\n    }\n\n    const { path, startDate, endDate, size = 100, page, sort } = args;\n\n    const search = new URLSearchParams([\n      [\"size\", size.toString()],\n      [\"page\", `${page || pageIndex + 1}`],\n    ]);\n\n    if (sort) {\n      search.set(\"sort\", sort);\n    }\n\n    if (startDate) {\n      search.set(`start_date`, startDate);\n    }\n\n    if (endDate) {\n      search.set(`end_date`, endDate);\n    }\n\n    return `${path}?${search.toString()}`;\n  };\n","import { generateKeyFun } from \"./swr\";\nimport { useMemo } from \"react\";\nimport { RefferalAPI } from \"./api\";\nimport { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\n\ntype Params = {\n  //** default is 10 */\n  size?: number;\n  //** YYYY-MM-dd */\n  startDate?: string;\n  //** YYYY-MM-dd */\n  endDate?: string;\n  //** default is 1 */\n  initialSize?: number;\n};\n\nexport const useDistribution = (params: Params): any => {\n  const { size = 10, startDate, endDate, initialSize } = params;\n\n  const ordersResponse: any = usePrivateInfiniteQuery(\n    generateKeyFun({\n      path: \"/v1/client/distribution_history\",\n      size,\n      startDate,\n      endDate,\n    }),\n    {\n      initialSize: initialSize,\n      // revalidateFirstPage: false,\n      // onError: (err) => {\n      //   console.error(\"fetch failed::::\", err);\n      // },\n      formatter: (data: any) => data,\n      revalidateOnFocus: false,\n    }\n  );\n\n  const loadMore = () => {\n    ordersResponse.setSize(ordersResponse.size + 1);\n  };\n\n  const total = useMemo(() => {\n    return ordersResponse.data?.[0]?.meta?.total || 0;\n  }, [ordersResponse.data?.[0]?.meta?.total]);\n\n  const flattenOrders = useMemo((): RefferalAPI.Distribution[] | null => {\n    if (!ordersResponse.data) {\n      return null;\n    }\n\n    return (\n      ordersResponse.data\n        ?.map((item: any) => item.rows)\n        ?.flat()\n        /// TODO: next version will be remove this code\n        .map((item: any) => {\n          return {\n            ...item,\n            created_time: item.created_time - 86400000,\n            updated_time: item.updated_time - 86400000,\n          };\n        })\n    );\n  }, [ordersResponse.data]);\n\n  return [\n    flattenOrders,\n    {\n      total,\n      isLoading: ordersResponse.isLoading,\n      refresh: ordersResponse.mutate,\n      loadMore,\n    },\n  ] as const;\n};\n","import { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { generateKeyFun } from \"./swr\";\nimport { useMemo } from \"react\";\n\ntype Params = {\n  //** default is 10 */\n  size?: number;\n  //** YYYY-MM-dd */\n  startDate?: string;\n  //** YYYY-MM-dd */\n  endDate?: string;\n  //** default is 1 */\n  initialSize?: number;\n};\n\nexport const useRefereeHistory = (params: Params): any[] => {\n  const { size = 10, startDate, endDate, initialSize } = params;\n\n  const response: any = usePrivateInfiniteQuery(\n    generateKeyFun({\n      path: \"/v1/referral/referee_history\",\n      size,\n      startDate,\n      endDate,\n    }),\n    {\n      initialSize: initialSize,\n      // revalidateFirstPage: false,\n      // onError: (err) => {\n      //   console.error(\"fetch failed::::\", err);\n      // },\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    }\n  );\n\n  const loadMore = () => {\n    response.setSize(response.size + 1);\n  };\n\n  const total = useMemo(() => {\n    return response.data?.[0]?.meta?.total || 0;\n  }, [response.data?.[0]?.meta?.total]);\n\n  const flattenOrders = useMemo(() => {\n    if (!response.data) {\n      return null;\n    }\n\n    return response.data?.map((item: any) => item.rows)?.flat();\n  }, [response.data]);\n\n  return [\n    flattenOrders,\n    {\n      total,\n      isLoading: response.isLoading,\n      refresh: response.mutate,\n      loadMore,\n    },\n  ];\n};\n","import { useMemo } from \"react\";\nimport { useDistribution } from \"./useDistribution\";\nimport { useRefereeHistory } from \"./useRefereeHistory\";\n\nexport const useCommission = (options?: { size?: number }) => {\n\n    const [referee, { refresh: refreshReferee, loadMore: loadMoreReferee, }] = useRefereeHistory({ size: options?.size });\n\n    const [distribution, { refresh: refreshDistribution, loadMore: loadMoreDistribution, isLoading }] = useDistribution({ size: options?.size });\n\n    const commissionData = useMemo(() => {\n\n        return distribution?.map((item: any) => {\n\n            if (\"updated_time\" in item) {\n                const updateTime = new Date(item.updated_time);\n\n                const index = referee?.findIndex((e: any) => {\n                    if (\"date\" in e) {\n                        return compareDate(updateTime, new Date(e.date));\n                    }\n                    return false;\n                });\n                if (index !== -1) {\n                    return { ...item, volume: referee?.[index].volume };\n                }\n            }\n            return { ...item };\n\n        });\n\n    }, [referee, distribution]);\n\n    const loadMore = () => {\n        loadMoreReferee();\n        loadMoreDistribution();\n    }\n\n    const refresh = () => {\n        refreshReferee();\n        refreshDistribution();\n    }\n\n    return [commissionData, {\n        loadMore,\n        refresh,\n        isLoading\n    }];\n}\n\n//** compare two date, yyyy-mm-dd */\nfunction compareDate(d1?: Date, d2?: Date) {\n    const isEqual = d1 && d2 &&\n        d1.getDay() === d2.getDay()\n        && d1.getMonth() === d2.getMonth()\n        && d1.getFullYear() === d2.getFullYear();\n\n\n    return isEqual;\n}","export function formatDate(date: Date): string {\n    const year = date.getFullYear();\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const day = String(date.getDate()).padStart(2, '0');\n    \n    return `${year}-${month}-${day}`;\n  }\n  ","import { max, min } from \"ramda\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { formatDate } from \"./format\";\n\nexport const useDaily = (options?: {\n  //** default Date() - 30d */\n  startDate?: Date;\n  //** default Date() */\n  endDate?: Date;\n}): {\n  data?: RefferalAPI.DayliVolume[];\n  mutate: any;\n} => {\n  const path = \"/v1/volume/user/daily\";\n  const endDate = options?.startDate || new Date();\n  const startDate =\n    options?.endDate || new Date(getTimestamp() - 86400000 * 30);\n\n  const start_date = formatDate(startDate);\n  const end_date = formatDate(endDate);\n\n  const url = `${path}?start_date=${min(start_date, end_date)}&end_date=${max(\n    start_date,\n    end_date,\n  )}`;\n  const { data: dailyVolume, mutate } = usePrivateQuery<\n    RefferalAPI.DayliVolume[]\n  >(url, {\n    revalidateOnFocus: false,\n  });\n\n  return {\n    data: dailyVolume,\n    mutate,\n  };\n};\n","import { generateKeyFun } from \"./swr\";\nimport { useMemo } from \"react\";\nimport { RefferalAPI } from \"./api\";\nimport { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\n\ntype Params = {\n  //** default is 10 */\n  size?: number;\n  //** YYYY-MM-dd */\n  startDate?: string;\n  //** YYYY-MM-dd */\n  endDate?: string;\n  //** default is 1 */\n  initialSize?: number;\n  page?: number,\n};\n\nexport const useReferralRebateSummary = (params: Params) => {\n  const { size = 10, startDate, endDate, initialSize, page, } = params;\n\n  const response = usePrivateInfiniteQuery<any>(\n    generateKeyFun({\n      path: \"/v1/referral/rebate_summary\",\n      size,\n      startDate,\n      endDate,\n      page,\n    }),\n    {\n      initialSize: initialSize,\n      // revalidateFirstPage: false,\n      // onError: (err) => {\n      //   console.error(\"fetch failed::::\", err);\n      // },\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    }\n  );\n\n  const loadMore = () => {\n    response.setSize(response.size + 1);\n  };\n  \n  const meta = useMemo(():\n    | {\n        total: number;\n        records_per_page: number;\n        current_page: number;\n      }\n    | undefined => {\n    return response.data?.[0]?.meta;\n  }, [response.data]);\n\n  const total = useMemo(() => {\n    return meta?.total || 0;\n  }, [meta]);\n\n  const flattenOrders = useMemo(():\n    | RefferalAPI.ReferralRebateSummary[]\n    | null => {\n    if (!response.data) {\n      return null;\n    }\n\n    return response.data?.map((item) => item.rows)?.flat();\n  }, [response.data]);\n\n  return [\n    flattenOrders,\n    {\n      total,\n      isLoading: response.isLoading,\n      refresh: response.mutate,\n      loadMore,\n      meta\n    },\n  ] as const;\n};\n","import { generateKeyFun } from \"./swr\";\nimport { useMemo } from \"react\";\nimport { RefferalAPI } from \"./api\";\nimport { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { API } from \"@orderly.network/types\";\n\ntype Params = {\n  //** default is 10 */\n  size?: number;\n  /**\n   * @deprecated \n   * YYYY-MM-dd */\n  startDate?: string;\n  /**\n   * @deprecated \n   * YYYY-MM-dd */\n  endDate?: string;\n  /** default is 1 */\n  initialSize?: number;\n  sort?:\n    | \"ascending_code_binding_time\"\n    | \"descending_code_binding_time\"\n    | \"ascending_referral_rebate\"\n    | \"descending_referral_rebate\"\n    | \"ascending_volume\"\n    | \"descending_volume\";\n  page?: number;\n};\n\nexport const useRefereeInfo = (params: Params) => {\n  const { size = 10, startDate, endDate, initialSize, page, sort } = params;\n\n  const response = usePrivateInfiniteQuery<any>(\n    generateKeyFun({\n      path: \"/v1/referral/referee_info\",\n      size,\n      startDate,\n      endDate,\n      page,\n      sort,\n    }),\n    {\n      initialSize: initialSize,\n      // revalidateFirstPage: false,\n      // onError: (err) => {\n      //   console.error(\"fetch failed::::\", err);\n      // },\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    }\n  );\n\n  const loadMore = () => {\n    response.setSize(response.size + 1);\n  };\n\n  const meta = useMemo(():\n    | {\n        total: number;\n        records_per_page: number;\n        current_page: number;\n      }\n    | undefined => {\n    return response.data?.[0]?.meta;\n  }, [response.data]);\n\n  const total = useMemo(() => {\n    return meta?.total || 0;\n  }, [meta]);\n\n  const flattenOrders = useMemo((): RefferalAPI.RefereeInfoItem[] | null => {\n    if (!response.data) {\n      return null;\n    }\n\n    return response.data?.map((item) => item.rows)?.flat();\n  }, [response.data]);\n\n  return [\n    flattenOrders,\n    {\n      total,\n      isLoading: response.isLoading,\n      refresh: response.mutate,\n      loadMore,\n      meta,\n    },\n  ] as const;\n};\n","import { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { formatDate } from \"./format\";\n\ntype Params = {\n    startDate?: Date,\n    endDate?: Date\n}\n\nexport const useRefereeRebateSummary = (params: Params): {\n    data?: RefferalAPI.RefereeRebateSummary[],\n    mutate: any,\n    isLoading: boolean,\n} => {\n    const path = \"/v1/referral/referee_rebate_summary\";\n\n    let url = path;\n    if (typeof params.endDate !== 'undefined' && typeof params.startDate !== 'undefined') {\n\n        const sDate = minDate(params.startDate, params.endDate);\n        const eDate = maxDate(params.startDate, params.endDate);\n        const search = new URLSearchParams([]);\n        search.set(`start_date`, formatDate(sDate, ));\n        search.set(`end_date`, formatDate(eDate,));\n        const queryParams = search.toString() || \"\";\n        url = `${path}?${queryParams}`;\n    }\n    const {\n        data,\n        mutate,\n        isLoading,\n    } = usePrivateQuery<RefferalAPI.RefereeRebateSummary[]>(url, {\n        revalidateOnFocus: true\n    });\n\n    return {\n        data,\n        mutate,\n        isLoading,\n    }\n}\n\nfunction minDate(a: Date, b: Date) {\n    return a < b ? a : b;\n}\n\nfunction maxDate(a: Date, b: Date) {\n    return a > b ? a : b;\n}","import { useQuery } from \"../useQuery\";\n\nexport const useCheckReferralCode = (code?: string) => {\n  const { data, error, isLoading } = useQuery<{ exist?: boolean }>(\n    typeof code === \"undefined\" || code?.length === 0\n      ? null\n      : `/v1/public/referral/verify_ref_code?referral_code=${code}`,\n  );\n\n  if (typeof code === \"undefined\") {\n    return {\n      isExist: false,\n      error: \"The code is undefined\",\n      isLoading: false,\n    };\n  }\n\n  return {\n    isExist: data?.exist,\n    error,\n    isLoading,\n  };\n};\n","import { useQuery } from \"../useQuery\";\n\nexport const useGetReferralCode = (\n  accountId?: string\n): {\n  referral_code?: string;\n  error: any;\n  isLoading: boolean;\n} => {\n  const { data, error, isLoading } = useQuery<{ referral_code?: string }>(\n    typeof accountId === \"undefined\" ? null : `/v1/public/referral/check_ref_code?account_id=${accountId}`\n  );\n\n  if (typeof accountId === \"undefined\") {\n    return {\n      referral_code: undefined,\n      error: \"The account id is empty or undefined\",\n      isLoading: false,\n    };\n  }\n\n  return {\n    referral_code: data?.referral_code,\n    error,\n    isLoading,\n  };\n};\n","import useSWR, {\n  Middleware,\n  SWRConfiguration,\n  SWRHook,\n  SWRResponse,\n} from \"swr\";\nimport { Account, MessageFactor } from \"@orderly.network/core\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useAccount } from \"../useAccount\";\nimport { useConfig } from \"../useConfig\";\nimport { fetcher } from \"../utils/fetcher\";\n\ntype QueryOptions<T> = SWRConfiguration & {\n  formatter?: (data: any) => T;\n  accountId?: string;\n};\n\nexport function useSubAccountQuery<T>(\n  query: Parameters<SWRHook>[0],\n  options?: QueryOptions<T>,\n): SWRResponse<T> {\n  const { formatter, accountId, ...swrOptions } = options || {};\n  const { state, account } = useAccount();\n  const middleware = Array.isArray(options?.use) ? (options?.use ?? []) : [];\n\n  return useSWR<T>(\n    () =>\n      accountId &&\n      (state.status >= AccountStatusEnum.EnableTrading ||\n        state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n        ? [query, accountId]\n        : null,\n    (url: string, init: RequestInit) => {\n      return fetcher(url, init, { formatter });\n    },\n    {\n      ...swrOptions,\n      use: [...middleware, signatureMiddleware(account, accountId)],\n      onError: () => {},\n    },\n  );\n}\n\nfunction signatureMiddleware(account: Account, accountId?: string): Middleware {\n  // TODO(hooks): Move this hook call into useSubAccountQuery and pass apiBaseUrl in.\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n  return (useSWRNext: SWRHook) => {\n    return (key, fetcher, config) => {\n      try {\n        const extendedFetcher = async (args: any) => {\n          const url = Array.isArray(args) ? args[0] : args;\n\n          const fullUrl = `${apiBaseUrl}${url}`;\n\n          const signer = account.signer;\n\n          const payload: MessageFactor = {\n            method: \"GET\",\n            url,\n          };\n\n          const signature = await signer.sign(payload, getTimestamp());\n\n          // @ts-ignore\n          return fetcher(fullUrl, {\n            headers: {\n              ...signature,\n              \"orderly-account-id\": accountId,\n            },\n          });\n        };\n        return useSWRNext(key, extendedFetcher, config);\n      } catch (e) {\n        console.error(\"signature error:\", e);\n        throw e;\n      }\n    };\n  };\n}\n","export function parseJSON<T>(value: string | null): T | undefined {\n  try {\n    return value === \"undefined\" ? undefined : JSON.parse(value ?? \"\");\n  } catch {\n    return undefined;\n  }\n}\n","// https://usehooks-ts.com/react-hook/use-local-storage\nimport { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useLocalStorage<T>(\n  key: string,\n  initialValue: T,\n  options: {\n    parseJSON: typeof parseJSON;\n  } = {\n    parseJSON: parseJSON,\n  },\n): [any, (value: T) => void] {\n  // Get from local storage then\n  // parse stored json or return initialValue\n  const readValue = useCallback((): T => {\n    // Prevent build error \"window is undefined\" but keeps working\n    if (typeof window === \"undefined\") {\n      return initialValue;\n    }\n\n    try {\n      const item = window.localStorage.getItem(key);\n      return item ? (options.parseJSON(item) as T) : initialValue;\n    } catch (error) {\n      console.warn(`Error reading localStorage key “${key}”:`, error);\n      return initialValue;\n    }\n  }, [initialValue, key]);\n\n  // State to store our value\n  // Pass initial state function to useState so logic is only executed once\n  const [storedValue, setStoredValue] = useState<T>(readValue);\n\n  // Return a wrapped version of useState's setter function that ...\n  // ... persists the new value to localStorage.\n  const setValue: React.Dispatch<T> = useCallback(\n    (value: T) => {\n      // Prevent build error \"window is undefined\" but keeps working\n      if (typeof window === \"undefined\") {\n        console.warn(\n          `Tried setting localStorage key “${key}” even though environment is not a client`,\n        );\n      }\n\n      try {\n        // Allow value to be a function so we have the same API as useState\n        const newValue = value instanceof Function ? value(storedValue) : value;\n\n        // Save to local storage\n        window.localStorage.setItem(key, JSON.stringify(newValue));\n        // dispath event\n        window.dispatchEvent(new Event(\"storage\"));\n\n        // Save state\n        setStoredValue(() => newValue);\n\n        // We dispatch a custom event so every useLocalStorage hook are notified\n        // window.dispatchEvent(new Event('local-storage'))\n      } catch (error) {\n        console.warn(`Error setting localStorage key “${key}”:`, error);\n      }\n    },\n    [storedValue],\n  );\n\n  useEffect(() => {\n    setStoredValue(readValue());\n  }, []);\n\n  // const handleStorageChange = useCallback(\n  //   (event: StorageEvent | CustomEvent) => {\n  //     if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n  //       return\n  //     }\n  //     setStoredValue(readValue())\n  //   },\n  //   [key, readValue],\n  // )\n\n  useEffect(() => {\n    const handleStorageChange = (event: StorageEvent | CustomEvent) => {\n      if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    };\n\n    window?.addEventListener?.(\"storage\", handleStorageChange);\n\n    return () => {\n      window?.removeEventListener?.(\"storage\", handleStorageChange);\n    };\n  }, [key]);\n\n  return [storedValue, setValue];\n}\n","export {\n  findTPSLFromOrder,\n  findPositionTPSLFromOrders,\n  findTPSLOrderPriceFromOrder,\n} from \"../orderly/usePositionStream/utils\";\n\nexport { cleanStringStyle } from \"./orderEntryHelper\";\n\nexport { getPositionBySymbol } from \"./swr\";\n\nexport {\n  priceToPnl,\n  calcTPSL_ROI,\n} from \"../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nexport { formatNumber } from \"./orderEntryHelper\";\nexport { fetcher, noCacheConfig, type useQueryOptions } from \"./fetcher\";\n","import { MarginMode } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport {\n  API,\n  AlgoOrderEntity,\n  AlgoOrderType,\n  AlgoOrderRootType,\n  OrderStatus,\n} from \"@orderly.network/types\";\n\nexport const findTPSLFromOrder = (\n  order: API.AlgoOrder,\n): {\n  tp_trigger_price?: number;\n  sl_trigger_price?: number;\n} => {\n  let tp_trigger_price;\n\n  let sl_trigger_price;\n\n  const tpOrder = order?.child_orders?.find(\n    (order: any) => order.algo_type === AlgoOrderType.TAKE_PROFIT,\n  );\n  const slOrder = order?.child_orders?.find(\n    (order: any) => order.algo_type === AlgoOrderType.STOP_LOSS,\n  );\n\n  if (tpOrder) {\n    tp_trigger_price = tpOrder.trigger_price;\n    // take_profit_qty =  tpOrder.quantity ;\n  }\n  if (slOrder) {\n    sl_trigger_price = slOrder.trigger_price;\n    // stop_loss_qty = slOrder.quantity;\n  }\n\n  return {\n    tp_trigger_price,\n    sl_trigger_price,\n  };\n};\n\nexport const findTPSLOrderPriceFromOrder = (\n  order: API.AlgoOrder,\n): {\n  tp_order_price: OrderType | number | undefined;\n  sl_order_price: OrderType | number | undefined;\n} => {\n  let tp_order_price: OrderType | number | undefined;\n  let sl_order_price: OrderType | number | undefined;\n\n  const tpOrder = order?.child_orders?.find(\n    (order: any) => order.algo_type === AlgoOrderType.TAKE_PROFIT,\n  );\n  const slOrder = order?.child_orders?.find(\n    (order: any) => order.algo_type === AlgoOrderType.STOP_LOSS,\n  );\n  if (tpOrder) {\n    if (tpOrder.trigger_price) {\n      if (tpOrder.type === OrderType.LIMIT) {\n        tp_order_price = tpOrder.price;\n      } else {\n        tp_order_price = OrderType.MARKET;\n      }\n    }\n  }\n  if (slOrder) {\n    if (slOrder.trigger_price) {\n      if (slOrder.type === OrderType.LIMIT) {\n        sl_order_price = slOrder.price;\n      } else {\n        sl_order_price = OrderType.MARKET;\n      }\n    }\n  }\n  return {\n    tp_order_price,\n    sl_order_price,\n  };\n};\n\nexport const findPositionTPSLFromOrders = (\n  orders: API.AlgoOrder[],\n  symbol: string,\n  marginMode: MarginMode = MarginMode.CROSS,\n): {\n  fullPositionOrder?: API.AlgoOrder;\n  partialPositionOrders?: API.AlgoOrder[];\n} => {\n  const fullPositionOrder = orders?.find((order) => {\n    return (\n      order.symbol === symbol &&\n      order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL &&\n      (order.margin_mode ?? MarginMode.CROSS) === marginMode &&\n      (order.root_algo_status === OrderStatus.NEW ||\n        order.root_algo_status === OrderStatus.REPLACED ||\n        order.root_algo_status === OrderStatus.PARTIAL_FILLED)\n    );\n  });\n  const partialPositionOrders = orders\n    ?.filter((order) => {\n      return (\n        order.symbol === symbol &&\n        (order.margin_mode ?? MarginMode.CROSS) === marginMode &&\n        order.algo_type === AlgoOrderRootType.TP_SL &&\n        (order.root_algo_status === OrderStatus.NEW ||\n          order.root_algo_status === OrderStatus.REPLACED ||\n          order.root_algo_status === OrderStatus.PARTIAL_FILLED)\n      );\n    })\n    .sort((a, b) => {\n      return b.created_time - a.created_time;\n    });\n\n  return {\n    fullPositionOrder,\n    partialPositionOrders,\n  };\n};\n","import { order as orderPerp } from \"@orderly.network/perp\";\nimport { API, OrderlyOrder, OrderSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport {\n  Decimal,\n  getTPSLDirection,\n  resolveTPSLOrderType,\n  todpIfNeed,\n  zero,\n} from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n  | \"tp_trigger_price\"\n  | \"tp_offset_percentage\"\n  | \"tp_offset_percentage_from_mark\"\n  | \"tp_pnl\"\n  | \"tp_offset\"\n  | \"tp_offset_from_mark\"\n  | \"quantity\"\n  | \"sl_trigger_price\"\n  | \"sl_offset_percentage\"\n  | \"sl_offset_percentage_from_mark\"\n  | \"sl_pnl\"\n  | \"sl_offset\"\n  | \"sl_offset_from_mark\";\n\n/**\n * offset -> TP/SL price\n */\nexport function offsetToPrice(inputs: {\n  qty: number;\n  offset: number;\n  entryPrice: number;\n  orderSide: OrderSide;\n  orderType: AlgoOrderType;\n}) {\n  const { qty, offset, entryPrice, orderType, orderSide } = inputs;\n\n  if (!offset) return;\n\n  if (orderSide === OrderSide.BUY) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n    }\n\n    return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n  }\n\n  if (orderSide === OrderSide.SELL) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(entryPrice).minus(new Decimal(offset)).toNumber();\n    }\n\n    return new Decimal(entryPrice).add(new Decimal(offset)).toNumber();\n  }\n}\n\nexport function priceToOffset(\n  inputs: {\n    qty: number;\n    price: number;\n    entryPrice: number;\n    orderSide: OrderSide;\n    orderType: AlgoOrderType;\n  },\n  options: { symbol?: Pick<API.SymbolExt, \"quote_dp\"> } = {},\n) {\n  const { qty, price, entryPrice, orderType, orderSide } = inputs;\n  const { symbol } = options;\n  let decimal: Decimal;\n\n  if (orderSide === OrderSide.BUY) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      decimal = new Decimal(price).minus(new Decimal(entryPrice));\n    }\n\n    decimal = new Decimal(price).minus(new Decimal(entryPrice));\n  }\n\n  if (orderSide === OrderSide.SELL) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      decimal = new Decimal(price).minus(new Decimal(entryPrice));\n    }\n\n    decimal = new Decimal(entryPrice).minus(new Decimal(price));\n  }\n\n  if (symbol) {\n    return decimal!.abs().todp(symbol.quote_dp, Decimal.ROUND_UP).toNumber();\n  }\n\n  return decimal!.abs().toNumber();\n}\n\nexport function offsetPercentageToPrice(inputs: {\n  qty: number;\n  percentage: number;\n  entryPrice: number;\n  orderSide: OrderSide;\n  orderType: AlgoOrderType;\n}) {\n  const { qty, percentage, entryPrice, orderType, orderSide } = inputs;\n\n  if (!percentage) return;\n\n  if (orderSide === OrderSide.BUY) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(1)\n        .add(new Decimal(percentage))\n        .mul(new Decimal(entryPrice))\n        .toNumber();\n    }\n\n    return new Decimal(1)\n      .minus(new Decimal(percentage))\n      .mul(new Decimal(entryPrice))\n      .toNumber();\n  }\n\n  if (orderSide === OrderSide.SELL) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(1)\n        .minus(new Decimal(percentage))\n        .mul(new Decimal(entryPrice))\n        .toNumber();\n    }\n\n    return new Decimal(1)\n      .add(new Decimal(percentage))\n      .mul(new Decimal(entryPrice))\n      .toNumber();\n  }\n}\n\nexport function priceToOffsetPercentage(inputs: {\n  qty: number;\n  price: number;\n  entryPrice: number;\n  orderSide: OrderSide;\n  orderType: AlgoOrderType;\n}) {\n  const { qty, price, entryPrice, orderType, orderSide } = inputs;\n\n  const direction = getTPSLDirection({\n    side: orderSide,\n    type: orderType === AlgoOrderType.TAKE_PROFIT ? \"tp\" : \"sl\",\n    closePrice: price,\n    orderPrice: entryPrice,\n  });\n\n  if (orderSide === OrderSide.BUY) {\n    if (entryPrice === 0) return 0;\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(price)\n        .div(new Decimal(entryPrice))\n        .minus(1)\n        .abs()\n        .mul(direction)\n        .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n        .toNumber();\n    }\n\n    return new Decimal(1)\n      .minus(new Decimal(price).div(new Decimal(entryPrice)))\n      .abs()\n      .mul(direction)\n      .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n      .toNumber();\n  }\n\n  if (orderSide === OrderSide.SELL) {\n    if (entryPrice === 0) return 0;\n\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(1)\n        .minus(new Decimal(price).div(new Decimal(entryPrice)))\n        .abs()\n        .mul(direction)\n        .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n        .toNumber();\n    }\n\n    return new Decimal(price)\n      .div(new Decimal(entryPrice))\n      .minus(1)\n      .abs()\n      .mul(direction)\n      .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n      .toNumber();\n  }\n}\n\n/**\n * pnl -> TP/SL price\n */\nexport function pnlToPrice(inputs: {\n  qty: number;\n  pnl: number;\n  entryPrice: number;\n  orderSide: OrderSide;\n  orderType: AlgoOrderType;\n}) {\n  const { qty, pnl, entryPrice, orderType, orderSide } = inputs;\n\n  if (!pnl) {\n    return;\n  }\n\n  if (qty === 0) return;\n\n  if (orderSide === OrderSide.BUY) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(entryPrice)\n        .plus(new Decimal(pnl).div(new Decimal(qty)))\n        .toNumber();\n    }\n\n    return new Decimal(entryPrice)\n      .add(new Decimal(pnl).div(new Decimal(qty)))\n      .toNumber();\n  }\n  if (orderSide === OrderSide.SELL) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      return new Decimal(entryPrice)\n        .add(new Decimal(pnl).div(new Decimal(qty)))\n        .toNumber();\n    }\n\n    return new Decimal(entryPrice)\n      .add(new Decimal(pnl).div(new Decimal(qty)))\n      .toNumber();\n  }\n}\n\n/**\n * TP/SL price -> pnl\n * @price trigger_price\n * @entryPrice calculate price, maybe markPrice/limitPrice/order.price\n */\nexport function priceToPnl(\n  inputs: {\n    qty: number;\n    price: number;\n    entryPrice: number;\n    orderSide: OrderSide;\n    orderType: AlgoOrderType;\n  },\n  options: { symbol?: Pick<API.SymbolExt, \"quote_dp\"> } = {},\n): number {\n  const { qty, price, entryPrice, orderType, orderSide } = inputs;\n  const { symbol } = options;\n  let decimal = zero;\n  // const qty =\n  //   orderSide === OrderSide.BUY ? Math.abs(_qty) : Math.abs(_qty) * -1;\n\n  if (orderSide === OrderSide.BUY) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      decimal = new Decimal(qty).mul(\n        new Decimal(price).minus(new Decimal(entryPrice)),\n      );\n    }\n\n    decimal = new Decimal(qty).mul(\n      new Decimal(price).minus(new Decimal(entryPrice)),\n    );\n  }\n\n  if (orderSide === OrderSide.SELL) {\n    if (orderType === AlgoOrderType.TAKE_PROFIT) {\n      decimal = new Decimal(qty).mul(\n        new Decimal(price).minus(new Decimal(entryPrice)),\n      );\n    }\n\n    decimal = new Decimal(qty).mul(\n      new Decimal(price).minus(new Decimal(entryPrice)),\n    );\n  }\n\n  if (symbol) {\n    // return decimal.todp(symbol.quote_dp, Decimal.ROUND_DOWN).toNumber();\n    return decimal.todp(2, Decimal.ROUND_UP).toNumber();\n  }\n\n  return decimal.toNumber();\n}\n\nexport function priceToROI(inputs: {\n  values: Partial<OrderlyOrder>;\n  markPrice?: number;\n  symbolLeverage?: number;\n}) {\n  const { values, markPrice, symbolLeverage } = inputs;\n\n  const orderPrice =\n    values.order_type === OrderType.MARKET\n      ? markPrice\n      : Number(values.order_price);\n\n  if (symbolLeverage && orderPrice) {\n    let tp_ROI: number | undefined;\n    let sl_ROI: number | undefined;\n    const tpTriggerPrice = Number(values.tp_trigger_price);\n\n    if (values.tp_pnl && values.tp_trigger_price && tpTriggerPrice > 0) {\n      tp_ROI = orderPerp.tpslROI({\n        side: values.side!,\n        type: \"tp\",\n        closePrice: tpTriggerPrice,\n        orderPrice,\n        leverage: symbolLeverage,\n      });\n    }\n\n    const slTriggerPrice = Number(values.sl_trigger_price);\n\n    if (values.sl_pnl && values.sl_trigger_price && slTriggerPrice > 0) {\n      sl_ROI = orderPerp.tpslROI({\n        side: values.side!,\n        type: \"sl\",\n        closePrice: slTriggerPrice,\n        orderPrice,\n        leverage: symbolLeverage,\n      });\n    }\n\n    return {\n      tp_ROI: tp_ROI?.toString(),\n      sl_ROI: sl_ROI?.toString(),\n    };\n  }\n\n  return {\n    tp_ROI: undefined,\n    sl_ROI: undefined,\n  };\n}\n\n/** @deprecated use priceToROI instead */\nexport function calcTPSL_ROI(inputs: {\n  pnl: number | string;\n  qty: number | string;\n  price: number | string;\n}) {\n  const qtyNum = Number(inputs.qty);\n  const priceNum = Number(inputs.price);\n  if (qtyNum === 0 || priceNum === 0) return \"0\";\n  // ROI = pnl / (abs(quantity) * price)\n  return new Decimal(inputs.pnl)\n    .div(new Decimal(qtyNum).abs().mul(new Decimal(priceNum)))\n    .toString();\n}\n\n// function formatPrice(price: number | string, symbol?: API.SymbolExt) {\n//   if (typeof price !== \"string\") {\n//     price = `${price}`;\n//   }\n\n//   if (price.endsWith(\".\") || !symbol) {\n//     return price;\n//   }\n//   return new Decimal(Number(price))\n//     .todp(symbol.quote_dp, Decimal.ROUND_UP)\n//     .toNumber();\n// }\n\nfunction checkTPSLOrderTypeIsMarket(\n  key: string,\n  values: Partial<OrderlyOrder>,\n) {\n  const keyPrefix = key.slice(0, 3);\n  const orderTypeKey = `${keyPrefix}order_type` as keyof OrderlyOrder;\n  return (\n    resolveTPSLOrderType(\n      values[orderTypeKey] as OrderType | undefined,\n      values[`${keyPrefix}order_price` as keyof OrderlyOrder] as\n        | string\n        | undefined,\n    ) !== OrderType.LIMIT\n  );\n}\n\nexport function tpslCalculateHelper(\n  key: string,\n  inputs: {\n    key: string;\n    value: string | number | boolean;\n    entryPrice: number | string;\n    qty: number | string;\n    orderSide: OrderSide;\n    markPrice: number | string;\n    values: Partial<OrderlyOrder>;\n  },\n  options: { symbol?: Pick<API.SymbolExt, \"quote_dp\"> } = {},\n) {\n  const { symbol } = options;\n  // if not need to be computed, return the value directly\n  if (\n    key !== \"quantity\" &&\n    key !== \"tp_trigger_price\" &&\n    key !== \"sl_trigger_price\" &&\n    key !== \"tp_pnl\" &&\n    key !== \"sl_pnl\" &&\n    key !== \"tp_offset\" &&\n    key !== \"sl_offset\" &&\n    key !== \"tp_offset_percentage\" &&\n    key !== \"sl_offset_percentage\" &&\n    key !== \"tp_offset_from_mark\" &&\n    key !== \"sl_offset_from_mark\" &&\n    key !== \"tp_offset_percentage_from_mark\" &&\n    key !== \"sl_offset_percentage_from_mark\" &&\n    key !== \"tp_order_price\" &&\n    key !== \"sl_order_price\" &&\n    key !== \"tp_order_type\" &&\n    key !== \"sl_order_type\"\n    // key !== \"tp_enable\" &&\n    // key !== \"sl_enable\"\n  ) {\n    return {\n      [key]: inputs.value,\n    };\n  }\n\n  const orderType = key.startsWith(\"tp_\")\n    ? AlgoOrderType.TAKE_PROFIT\n    : AlgoOrderType.STOP_LOSS;\n  const keyPrefix = key.slice(0, 3);\n\n  const qty = Number(key === \"quantity\" ? inputs.value : inputs.qty);\n  const markPrice = inputs.markPrice ?? inputs.entryPrice;\n\n  // console.log(\"key\", key, inputs.value, inputs.values, inputs.qty);\n\n  if (\n    qty === 0 &&\n    (key === \"tp_pnl\" ||\n      key === \"sl_pnl\" ||\n      key === \"tp_trigger_price\" ||\n      key === \"sl_trigger_price\")\n  ) {\n    return {\n      // [`${keyPrefix}trigger_price`]: \"\",\n      // [`${keyPrefix}order_price`]: \"\",\n      // [`${keyPrefix}offset`]: \"\",\n      // [`${keyPrefix}offset_percentage`]: \"\",\n      [`${keyPrefix}pnl`]: \"\",\n      [key]: inputs.value,\n    };\n  }\n  let trigger_price,\n    offset,\n    offset_percentage,\n    offset_from_mark,\n    offset_percentage_from_mark,\n    pnl,\n    order_price,\n    tpsl_order_type = resolveTPSLOrderType(\n      inputs.values[`${keyPrefix}order_type` as keyof OrderlyOrder] as\n        | OrderType\n        | undefined,\n      inputs.values[`${keyPrefix}order_price` as keyof OrderlyOrder] as\n        | string\n        | undefined,\n    );\n\n  const entryPrice = new Decimal(inputs.entryPrice)\n    .todp(options.symbol?.quote_dp ?? 2, Decimal.ROUND_UP)\n    .toNumber();\n\n  switch (key) {\n    case \"tp_trigger_price\":\n    case \"sl_trigger_price\": {\n      trigger_price = inputs.value;\n      // if trigger price is empty and the key is `*_trigger_price`, reset the offset and pnl\n      // if order_type is market, set trigger_price to order_price\n      if (checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        if (inputs.value === \"\") {\n          return {\n            [`${keyPrefix}trigger_price`]: trigger_price,\n            [`${keyPrefix}offset`]: \"\",\n            [`${keyPrefix}offset_percentage`]: \"\",\n            [`${keyPrefix}offset_from_mark`]: \"\",\n            [`${keyPrefix}offset_percentage_from_mark`]: \"\",\n            [`${keyPrefix}pnl`]: \"\",\n            [`${keyPrefix}ROI`]: \"\",\n          };\n        }\n      } else {\n        order_price =\n          inputs.values[`${keyPrefix}order_price` as keyof OrderlyOrder] ?? \"\";\n      }\n\n      break;\n    }\n\n    case \"tp_pnl\":\n    case \"sl_pnl\": {\n      pnl = inputs.value;\n      if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        order_price = pnlToPrice({\n          qty,\n          pnl: Number(inputs.value),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n        trigger_price =\n          inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n          order_price;\n      } else {\n        trigger_price = pnlToPrice({\n          qty,\n          pnl: Number(inputs.value),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n      }\n\n      break;\n    }\n\n    case \"tp_offset\":\n    case \"sl_offset\": {\n      offset = inputs.value;\n      if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        order_price = offsetToPrice({\n          qty,\n          offset: Number(inputs.value),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType:\n            key === \"tp_offset\"\n              ? AlgoOrderType.TAKE_PROFIT\n              : AlgoOrderType.STOP_LOSS,\n        });\n\n        trigger_price =\n          inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n          order_price;\n      } else {\n        trigger_price = offsetToPrice({\n          qty,\n          offset: Number(inputs.value),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType:\n            key === \"tp_offset\"\n              ? AlgoOrderType.TAKE_PROFIT\n              : AlgoOrderType.STOP_LOSS,\n        });\n      }\n      break;\n    }\n\n    case \"tp_offset_from_mark\":\n    case \"sl_offset_from_mark\": {\n      offset_from_mark = inputs.value;\n      if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        order_price = offsetToPrice({\n          qty,\n          offset: Number(inputs.value),\n          entryPrice: markPrice as number,\n\n          orderSide: inputs.orderSide,\n          orderType:\n            key === \"tp_offset_from_mark\"\n              ? AlgoOrderType.TAKE_PROFIT\n              : AlgoOrderType.STOP_LOSS,\n        });\n        // order_price = new Decimal(markPrice).add(Number(inputs.value)).toNumber();\n        trigger_price =\n          inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n          order_price;\n      } else {\n        trigger_price = offsetToPrice({\n          qty,\n          offset: Number(inputs.value),\n          // entryPrice,\n          entryPrice: markPrice as number,\n          orderSide: inputs.orderSide,\n          orderType:\n            key === \"tp_offset_from_mark\"\n              ? AlgoOrderType.TAKE_PROFIT\n              : AlgoOrderType.STOP_LOSS,\n        });\n      }\n      break;\n    }\n\n    case \"tp_order_price\":\n    case \"sl_order_price\": {\n      order_price = inputs.value;\n      trigger_price =\n        inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n        order_price;\n      break;\n    }\n\n    case \"tp_order_type\":\n    case \"sl_order_type\": {\n      tpsl_order_type = inputs.value as OrderType;\n      trigger_price =\n        (inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] as\n          | string\n          | number\n          | undefined) ?? \"\";\n      if (tpsl_order_type === OrderType.MARKET) {\n        order_price = \"\";\n      } else {\n        order_price = trigger_price;\n      }\n\n      break;\n    }\n\n    case \"tp_offset_percentage\":\n    case \"sl_offset_percentage\": {\n      offset_percentage = inputs.value;\n      // console.log(\"offset_percentage\", offset_percentage);\n      if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        order_price = offsetPercentageToPrice({\n          qty,\n          percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n        trigger_price =\n          inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n          order_price;\n      } else {\n        trigger_price = offsetPercentageToPrice({\n          qty,\n          percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n      }\n      break;\n    }\n\n    case \"tp_offset_percentage_from_mark\":\n    case \"sl_offset_percentage_from_mark\": {\n      offset_percentage_from_mark = inputs.value;\n      /** Base price for % is mark, not the main order's limit entry price. */\n      const markBase = Number(markPrice);\n      if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n        order_price = offsetPercentageToPrice({\n          qty,\n          percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n          entryPrice: markBase,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n        trigger_price =\n          inputs.values[`${keyPrefix}trigger_price` as keyof OrderlyOrder] ??\n          order_price;\n      } else {\n        trigger_price = offsetPercentageToPrice({\n          qty,\n          percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n          entryPrice: markBase,\n          orderSide: inputs.orderSide,\n          orderType,\n        });\n      }\n      break;\n    }\n  }\n  if (!trigger_price && checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n    return {\n      [`${keyPrefix}trigger_price`]: \"\",\n      [`${keyPrefix}offset`]: \"\",\n      [`${keyPrefix}offset_percentage`]: \"\",\n      [`${keyPrefix}offset_from_mark`]: \"\",\n      [`${keyPrefix}offset_percentage_from_mark`]: \"\",\n      [`${keyPrefix}pnl`]: \"\",\n      [`${keyPrefix}ROI`]: \"\",\n      [key]: inputs.value,\n    };\n  }\n  // console.log('key', {\n  //   key,\n  //   trigger_price,\n  //   order_price,\n  //   pnl,\n  // })\n  let calcPrice = trigger_price;\n  if (tpsl_order_type && tpsl_order_type === OrderType.LIMIT) {\n    calcPrice = order_price;\n  } else if (!checkTPSLOrderTypeIsMarket(key, inputs.values)) {\n    calcPrice = order_price;\n  }\n\n  if (calcPrice) {\n    pnl =\n      pnl ??\n      priceToPnl(\n        {\n          qty,\n          price: Number(calcPrice),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        },\n        options,\n      );\n    offset =\n      offset ??\n      priceToOffset(\n        {\n          qty,\n          price: Number(calcPrice),\n          entryPrice,\n          orderSide: inputs.orderSide,\n          orderType,\n        },\n        options,\n      );\n    offset_percentage =\n      offset_percentage ??\n      priceToOffsetPercentage({\n        qty,\n        price: Number(calcPrice),\n        entryPrice,\n        orderSide: inputs.orderSide,\n        orderType,\n      });\n  }\n  // const\n\n  return {\n    [`${keyPrefix}trigger_price`]: trigger_price\n      ? todpIfNeed(trigger_price as number, symbol?.quote_dp ?? 2)\n      : \"\",\n    [`${keyPrefix}order_type`]: tpsl_order_type ?? OrderType.MARKET,\n    [`${keyPrefix}order_price`]: order_price\n      ? todpIfNeed(order_price as number, symbol?.quote_dp ?? 2)\n      : \"\",\n\n    [`${keyPrefix}offset`]: offset ?? \"\",\n    [`${keyPrefix}offset_percentage`]: offset_percentage ?? \"\",\n    [`${keyPrefix}offset_from_mark`]:\n      offset_from_mark ??\n      inputs.values[`${keyPrefix}offset_from_mark` as keyof OrderlyOrder] ??\n      \"\",\n    [`${keyPrefix}offset_percentage_from_mark`]:\n      offset_percentage_from_mark ??\n      inputs.values[\n        `${keyPrefix}offset_percentage_from_mark` as keyof OrderlyOrder\n      ] ??\n      \"\",\n    [`${keyPrefix}pnl`]: pnl ?? \"\",\n    // [`${keyPrefix}ROI`]: calcROI({\n    //   pnl: Number(pnl ?? 0),\n    //   qty,\n    //   price: Number(trigger_price!),\n    // }),\n  };\n}\n","import { compose, head } from \"ramda\";\nimport {\n  API,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { FullOrderState } from \"../next/useOrderEntry/orderEntry.store\";\nimport { tpslCalculateHelper } from \"../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\n\n// index 3: markPrice\ntype orderEntryInputs = [\n  Partial<OrderlyOrder>,\n  // to update field\n  keyof OrderlyOrder,\n  any,\n  number,\n  API.SymbolExt,\n];\n\ntype orderEntryInputHandle = (inputs: orderEntryInputs) => orderEntryInputs;\n\nconst needNumberOnlyFields: (keyof OrderlyOrder)[] = [\n  \"order_quantity\",\n  \"order_price\",\n  \"trigger_price\",\n  \"total\",\n];\n\n/// only save number\nexport const cleanStringStyle = (str: string | number): string => {\n  if (typeof str !== \"string\") {\n    str = `${str}`;\n  }\n  str = str.replace(/,/g, \"\");\n  // clear extra character expect number and .\n  str = str\n    .replace(/[^\\d.]/g, \"\")\n    .replace(\".\", \"$#$\")\n    .replace(/\\./g, \"\")\n    .replace(\"$#$\", \".\");\n\n  return str;\n};\n\nexport function baseInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  let [values, input, value, markPrice, config] = inputs;\n\n  needNumberOnlyFields.forEach((field) => {\n    if (typeof values[field] !== \"undefined\") {\n      // @ts-ignore\n      values[field] = cleanStringStyle(values[field] as string);\n    }\n  });\n\n  if (needNumberOnlyFields.includes(input)) {\n    value = cleanStringStyle(value);\n  }\n\n  return [\n    {\n      ...values,\n      [input]: value,\n    },\n    input,\n    value,\n    markPrice,\n    config,\n  ];\n}\n\nexport function orderTypeHandle(inputs: orderEntryInputs): orderEntryInputs {\n  const [values, input, value, markPrice, config] = inputs;\n\n  if (value === OrderType.LIMIT || value === OrderType.STOP_LIMIT) {\n    if (values.order_price === \"\") {\n      values.total = \"\";\n    }\n  }\n\n  if (value === OrderType.MARKET || value === OrderType.LIMIT) {\n    values.trigger_price = undefined;\n  }\n\n  // if (value === OrderType.MARKET || value === OrderType.STOP_MARKET) {\n  //   // if the type is market, price use markPrice\n  // }\n\n  // if (value === OrderType.STOP_MARKET || value === OrderType.STOP_LIMIT) {\n  //   values.algo_type = AlgoOrderRootType.STOP;\n  //   // values.type = OrderType.S\n  // }\n\n  return [values, input, value, markPrice, config];\n}\n\n/**\n * digital precision processing\n * @param inputs\n * @returns\n */\nexport function orderEntityFormatHandle(baseTick: number, quoteTick: number) {\n  return function (inputs: orderEntryInputs): orderEntryInputs {\n    const [values, input, value, markPrice, config] = inputs;\n\n    // TODO: formatting only deals with the thousandths and so on\n    // if (!!values.quantity) {\n    //\n    //   const d = new Decimal(values.quantity);\n    //   const dp = d.dp();\n    //   if (dp > quoteTick) {\n    //     values.quantity = d.toDecimalPlaces(baseTick).toNumber();\n    //   }\n    // }\n\n    // if (!!values.price && values.type === OrderType.LIMIT) {\n    //   const sd = new Decimal(values.price).sd(false);\n    //   if (sd > quoteTick) {\n    //     values.price = new Decimal(values.price).toFixed(quoteTick);\n    //   }\n    // }\n\n    // if (!!values.total) {\n    //   const sd = new Decimal(values.total).sd(false);\n    //   if (sd > quoteTick) {\n    //     values.total = new Decimal(values.total).toFixed(quoteTick);\n    //   }\n    // }\n\n    return [values, input, value, markPrice, config];\n  };\n}\n\n/**\n * price input handle\n * @param inputs\n * @returns\n */\nfunction priceInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  const [values, input, value, markPrice, config] = inputs;\n\n  if (value === \"\") {\n    return [{ ...values, total: \"\" }, input, value, markPrice, config];\n  }\n\n  // when entering the price, total also needs to be linked\n  const price = new Decimal(value);\n  const priceDP = price.dp();\n\n  if (priceDP > config.quote_dp) {\n    values.order_price = price.toDecimalPlaces(config.quote_dp).toString();\n  }\n\n  price.toDecimalPlaces(Math.min(priceDP, config.quote_dp));\n\n  if (!values.order_quantity && !values.total) {\n    return [values, input, value, markPrice, config];\n  }\n\n  const newValue = {\n    ...values,\n  };\n\n  if (values.order_quantity) {\n    // total = price.mul(values.quantity);\n    newValue.total = price.mul(values.order_quantity).todp(2).toString();\n  } else if (values.total) {\n    // total = new Decimal(values.total);\n    newValue.order_quantity = new Decimal(values.total)\n      .div(price)\n      .todp(config.base_dp)\n      .toString();\n  }\n\n  // const quantityDP = total.dp();\n  return [\n    // {\n    //   ...values,\n    //   total: total.todp(2).toString(),\n    // },\n    newValue,\n    input,\n    value,\n    markPrice,\n    config,\n  ];\n}\n\n/**\n * quantity input handle\n * @param inputs\n * @returns\n */\nfunction quantityInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  const [values, input, value, markPrice, symbolInfo] = inputs;\n\n  if (value === \"\") {\n    return [{ ...values, total: \"\" }, input, value, markPrice, symbolInfo];\n  }\n\n  const { base_dp, quote_dp } = symbolInfo;\n\n  let quantity = new Decimal(value);\n  const quantityDP = quantity.dp();\n\n  // check the length for precision and recalculate\n  if (quantityDP > base_dp) {\n    quantity = quantity.toDecimalPlaces(base_dp);\n    values.order_quantity = quantity.toString();\n  }\n\n  if (\n    values.order_type === OrderType.MARKET ||\n    values.order_type === OrderType.STOP_MARKET\n  ) {\n    if (!markPrice) {\n      console.warn(\"[ORDERLY]markPrice is required for market order\");\n      return [values, input, value, markPrice, symbolInfo];\n    }\n    const price = markPrice;\n    values.order_price = \"\";\n    values.total = quantity.mul(price).todp(2).toString();\n  } else if (\n    values.order_type === OrderType.LIMIT ||\n    values.order_type === OrderType.STOP_LIMIT\n  ) {\n    if (values.order_price) {\n      const price = Number(values.order_price);\n      const total = quantity.mul(price);\n      values.total = total.todp(quote_dp).toString();\n    } else {\n      values.total = \"\";\n    }\n  } else if (values.order_type === OrderType.SCALED && markPrice) {\n    values.total = quantity.mul(markPrice).todp(quote_dp).toString();\n  } else if (values.order_type === OrderType.TRAILING_STOP && markPrice) {\n    // const price = values.activated_price || markPrice;\n    values.total = quantity.mul(markPrice).todp(quote_dp).toString();\n  }\n\n  return [\n    {\n      ...values,\n    },\n    input,\n    value,\n    markPrice,\n    symbolInfo,\n  ];\n}\n\n/**\n * total input handle\n * @param inputs\n * @returns\n */\nfunction totalInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  const [values, input, value, markPrice, config] = inputs;\n  if (value === \"\") {\n    return [{ ...values, order_quantity: \"\" }, input, value, markPrice, config];\n  }\n\n  let price = markPrice;\n\n  if (\n    (values.order_type === OrderType.LIMIT ||\n      values.order_type === OrderType.STOP_LIMIT) &&\n    !!values.order_price\n  ) {\n    price = Number(values.order_price);\n  }\n  let total = new Decimal(value);\n  const totalDP = total.dp();\n\n  if (totalDP > config.quote_dp) {\n    total = total.toDecimalPlaces(config.quote_dp);\n    values.total = total.toString();\n  }\n\n  const quantity = total.div(price);\n  let order_quantity = quantity\n    .toDecimalPlaces(Math.min(config.base_dp, quantity.dp()))\n    .toString();\n\n  if (config.base_tick >= 1) {\n    order_quantity = formatNumber(\n      order_quantity,\n      new Decimal(config?.base_tick || \"0\").toNumber(),\n    )!;\n  }\n\n  return [\n    {\n      ...values,\n      order_quantity,\n    },\n    input,\n    value,\n    markPrice,\n    config,\n  ];\n}\n\nfunction tpslInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  const [values, input, value, markPrice, config] = inputs;\n  /** Mark-based offset modes must derive from mark price even when main order is LIMIT. */\n  // const useMarkPriceBase =\n  //   input === \"tp_offset_from_mark\" ||\n  //   input === \"sl_offset_from_mark\" ||\n  //   input === \"tp_offset_percentage_from_mark\" ||\n  //   input === \"sl_offset_percentage_from_mark\";\n\n  const price =\n    values.order_type === OrderType.MARKET ||\n    values.order_type === OrderType.STOP_MARKET\n      ? markPrice\n      : values.order_price;\n\n  // if price or quantity is empty, return\n  if (!price || !values.order_quantity) {\n    return [values, input, value, markPrice, config];\n  }\n\n  const _tpslValue = tpslCalculateHelper(\n    input,\n    {\n      key: input,\n      value,\n      entryPrice: price, // order price or mark price\n      qty:\n        values.side === OrderSide.BUY\n          ? Number(values.order_quantity)\n          : Number(values.order_quantity) * -1,\n      orderSide: values.side!,\n      markPrice,\n      // values: newValues,\n      values,\n    },\n    {\n      symbol: config,\n    },\n  );\n\n  return [{ ...values, ..._tpslValue }, input, value, markPrice, config];\n}\n\n/**\n * other input handle\n * @param inputs\n * @returns\n */\nfunction otherInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n  return inputs;\n}\n\nexport const getCalculateHandler = (\n  fieldName: keyof OrderlyOrder,\n): orderEntryInputHandle => {\n  switch (fieldName) {\n    case \"order_type\":\n      return orderTypeHandle;\n    case \"order_quantity\": {\n      return quantityInputHandle;\n    }\n    case \"order_price\": {\n      return priceInputHandle;\n    }\n    case \"total\": {\n      return totalInputHandle;\n    }\n    // case \"tp_enable\":\n    // case \"sl_enable\":\n    case \"tp_pnl\":\n    case \"sl_pnl\":\n    case \"tp_trigger_price\":\n    case \"sl_trigger_price\":\n    case \"tp_offset\":\n    case \"sl_offset\":\n    case \"tp_offset_percentage\":\n    case \"sl_offset_percentage\":\n    case \"tp_offset_from_mark\":\n    case \"sl_offset_from_mark\":\n    case \"tp_offset_percentage_from_mark\":\n    case \"sl_offset_percentage_from_mark\":\n    case \"tp_order_price\":\n    case \"tp_order_type\":\n    case \"sl_order_type\":\n    case \"sl_order_price\":\n      return tpslInputHandle;\n\n    default:\n      return otherInputHandle;\n  }\n};\n\n/**\n * format number\n * TODO: refactor this\n */\nexport function formatNumber(\n  qty?: string | number,\n  dp?: number | string,\n): string | undefined {\n  if (typeof qty === \"undefined\") return qty;\n  if (typeof dp === \"undefined\") return `${qty}`;\n\n  // console.log(\"qty\", qty, \"dp\", dp);\n\n  const _qty = `${qty}`.replace(/,/g, \"\");\n\n  try {\n    const _dp = new Decimal(dp);\n    const _qtyDecimal = new Decimal(_qty);\n\n    if (_dp.lessThan(1)) {\n      if (`${_qty}`.endsWith(\".\")) return `${_qty}`;\n\n      const numStr = dp.toString();\n      const decimalIndex = numStr.indexOf(\".\");\n      const digitsAfterDecimal =\n        decimalIndex === -1 ? 0 : numStr.length - decimalIndex - 1;\n\n      const result = _qtyDecimal\n        .toDecimalPlaces(digitsAfterDecimal, Decimal.ROUND_DOWN)\n        .toString();\n\n      return result;\n    }\n\n    if (_qtyDecimal.lessThan(_dp)) {\n      return _qty;\n    }\n\n    return _qtyDecimal\n      .dividedBy(_dp)\n      .toDecimalPlaces(0, Decimal.ROUND_DOWN)\n      .mul(dp)\n      .toString();\n  } catch (e) {\n    return undefined;\n  }\n}\n\nexport function calculate(\n  values: Partial<FullOrderState>,\n  fieldName: keyof FullOrderState,\n  value: any,\n  markPrice: number,\n  config: API.SymbolExt,\n): Partial<FullOrderState> {\n  // console.log(\"calculate\", values, fieldName, value, options);\n  const fieldHandler = getCalculateHandler(fieldName);\n\n  const newValues = compose<any, any, any, Partial<FullOrderState>>(\n    head,\n    // orderEntityFormatHandle(baseDP, quoteDP),\n    fieldHandler,\n    baseInputHandle,\n  )([values, fieldName, value, markPrice, config]);\n\n  // if fieldName is quantity/price,recalculate the tp/sl\n\n  return newValues as Partial<FullOrderState>;\n}\n","import { camelCaseToUnderscoreCase } from \"@orderly.network/utils\";\n\nexport function object2underscore(obj: any) {\n  return Object.keys(obj).reduce<any>((acc, key) => {\n    acc[camelCaseToUnderscoreCase(key)] = obj[key];\n    return acc;\n  }, {});\n}\n","import { lensIndex, over } from \"ramda\";\nimport { WSMessage, API, OrderStatus } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\n\nexport abstract class BaseMergeHandler<\n  T extends WSMessage.AlgoOrder[] | WSMessage.Order,\n  D extends API.AlgoOrder | API.Order,\n> implements IOrderMergeHandler<T, D>\n{\n  data: D;\n  constructor(private message: T) {\n    this.data = this.formatOrder(message);\n  }\n  abstract get status(): string;\n  abstract get orderId(): number;\n  abstract pre(message: T, prevData?: API.OrderResponse[]): D;\n  abstract isFullFilled(): boolean;\n\n  /**\n   * format the order data;\n   */\n  formatOrder(message: T): D {\n    const data = this.pre(message);\n    // if order status is REPLACED, maybe not update status\n\n    if (!data.created_time) {\n      data.created_time = (data as any).timestamp;\n    }\n    if (data.status === OrderStatus.FILLED && !data.updated_time) {\n      data.updated_time = data.timestamp;\n    }\n    if (data.child_orders && data.child_orders.length) {\n      data.child_orders.map((child) => {\n        if (\n          child.algo_status === OrderStatus.FILLED &&\n          child.is_activated &&\n          !child.updated_time\n        ) {\n          child.updated_time = data.timestamp;\n        }\n      });\n    }\n    if (data.type && data.type.endsWith(\"_ORDER\")) {\n      data.type = data.type.replace(\"_ORDER\", \"\");\n    }\n\n    return data;\n  }\n\n  merge(\n    key: string,\n    message: T,\n    prevData: API.OrderResponse[],\n  ): API.OrderResponse[] {\n    switch (this.status) {\n      case \"NEW\": {\n        if (\n          key.startsWith(\"orders:CANCELLED\") ||\n          key.startsWith(\"orders:FILLED\") ||\n          key.startsWith(\"orders:REJECTED\")\n        ) {\n          return prevData;\n        }\n        return this.insetOrUpdate(prevData);\n      }\n      case \"CANCELLED\": {\n        if (\n          key.startsWith(\"orders:FILLED\") ||\n          key.startsWith(\"orders:REJECTED\")\n        ) {\n          return prevData;\n        }\n        if (\n          key.startsWith(\"orders:NEW\") ||\n          key.startsWith(\"orders:INCOMPLETE\") ||\n          key.startsWith(\"algoOrders:INCOMPLETE\")\n        ) {\n          return this.remove(prevData);\n        }\n\n        if (key.startsWith(\"orders:CANCELLED\")) {\n          return this.insert(prevData);\n        }\n\n        return this.update(prevData);\n      }\n\n      case \"REPLACED\":\n        return this.update(prevData);\n\n      case \"FILLED\": {\n        if (this.orderIsExisting(prevData)) {\n          // for new list, remove the order if it exists\n          if (\n            key.startsWith(\"orders:INCOMPLETE\") ||\n            key.startsWith(\"orders:NEW\") ||\n            key.startsWith(\"algoOrders:INCOMPLETE\") ||\n            // all orders key\n            key.startsWith(\"orders:\")\n          ) {\n            // if fullfilled, remove from the list\n            if (this.isFullFilled()) {\n              return this.remove(prevData);\n            }\n\n            // update\n            return this.update(prevData);\n          }\n        } else {\n          // for filled list, insert the order if it doesn't exist\n\n          if (\n            key.startsWith(\"orders:CANCELLED\") ||\n            key.startsWith(\"orders:INCOMPLETE\") ||\n            key.startsWith(\"orders:NEW\") ||\n            key.startsWith(\"algoOrders:INCOMPLETE\")\n          ) {\n            return prevData;\n          }\n          // if filled/history list:\n          return this.insert(prevData);\n        }\n      }\n\n      default:\n        return prevData || [];\n    }\n  }\n\n  insert(orders?: API.OrderResponse[] | undefined): API.OrderResponse[] {\n    const index = lensIndex<API.OrderResponse>(0);\n    return over(\n      //@ts-ignore\n      index,\n      (item: any) => ({\n        meta: {\n          ...item.meta,\n          total: item.meta.total + 1,\n        },\n        rows: [this.data, ...item.rows],\n      }),\n      orders,\n    ) as API.OrderResponse[];\n  }\n\n  insetOrUpdate(orders: API.OrderResponse[]): API.OrderResponse[] {\n    if (this.orderIsExisting(orders)) {\n      return this.update(orders);\n    }\n    return this.insert(orders);\n  }\n\n  update(prevData: API.OrderResponse[]): API.OrderResponse[] {\n    const idx = this.findOrderIndex(prevData);\n    if (!Array.isArray(idx)) {\n      return prevData || [];\n    }\n\n    const [index, index2] = idx;\n\n    return prevData.map((item, i) => {\n      return {\n        meta: { ...item.meta },\n        rows: item.rows.map((order, j) => {\n          if (index === i && index2 === j) {\n            return { ...order, ...this.data };\n          }\n          return order;\n        }),\n      };\n    });\n  }\n\n  remove(prevData: API.OrderResponse[]): API.OrderResponse[] {\n    const idx = this.findOrderIndex(prevData);\n    if (!Array.isArray(idx)) {\n      return prevData;\n    }\n\n    const [index, index2] = idx;\n\n    return prevData.map((item, i) => {\n      return {\n        meta: { ...item.meta, total: item.meta.total - 1 },\n        rows:\n          index === i ? item.rows.filter((_, i) => i !== index2) : item.rows,\n      };\n    });\n  }\n\n  findOrderIndex(orders: API.OrderResponse[]): number[] | undefined {\n    let index: number = 0;\n    let index2: number | undefined;\n\n    for (; index < orders.length; index++) {\n      // index = idx;\n      const item = orders[index];\n\n      for (let idx2 = 0; idx2 < item.rows.length; idx2++) {\n        const element = item.rows[idx2];\n        if (\n          (element as API.AlgoOrder).algo_order_id === this.orderId ||\n          (element as API.Order).order_id === this.orderId\n        ) {\n          index2 = idx2;\n\n          break;\n        }\n      }\n      if (typeof index2 !== \"undefined\") {\n        break;\n      }\n    }\n\n    if (typeof index2 === \"undefined\") {\n      return;\n    }\n\n    return [index, index2];\n  }\n\n  orderIsExisting(orders: API.OrderResponse[]): boolean {\n    const index = this.findOrderIndex(orders);\n    return Array.isArray(index);\n  }\n}\n","import {\n  AlgoOrderRootType,\n  AlgoOrderType,\n  API,\n  OrderStatus,\n  SDKError,\n  WSMessage,\n} from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { withTPSLProvenance } from \"@orderly.network/utils\";\nimport { object2underscore } from \"../../utils/ws\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\n\nexport type AlgoOrderFieldChanges = Partial<\n  Record<OrderType, Partial<Record<keyof API.AlgoOrder, boolean>>>\n>;\n\n/**\n * Algo execution reports use executable type names such as LIMIT_ORDER and\n * MARKET_ORDER, while REST responses and the SDK use LIMIT and MARKET.\n * Normalize every node because TP/SL legs can be nested under positional or\n * Bracket parents. Types without the suffix, such as CLOSE_POSITION, are kept.\n * Pure like withTPSLProvenance: never mutate REST/WS inputs in place.\n */\nconst normalizeAlgoOrderTypes = (order: API.AlgoOrder): API.AlgoOrder => {\n  const type =\n    typeof order.type === \"string\" && order.type.endsWith(\"_ORDER\")\n      ? (order.type.replace(\"_ORDER\", \"\") as OrderType)\n      : order.type;\n  return {\n    ...order,\n    type,\n    child_orders: order.child_orders?.map(normalizeAlgoOrderTypes),\n  };\n};\n\nexport class AlgoOrderMergeHandler extends BaseMergeHandler<\n  WSMessage.AlgoOrder[],\n  API.AlgoOrder\n> {\n  get orderId(): number {\n    return this.data.algo_order_id;\n  }\n\n  get status(): string {\n    return this.data.root_algo_status;\n  }\n\n  //   merge(\n  //     key: string,\n  //     message: WSMessage.AlgoOrder[],\n  //     prevData: API.OrderResponse[]\n  //   ): API.OrderResponse[] | undefined {\n  //     switch (this.status) {\n  //       case \"TRIGGER\": {\n  //       }\n  //       default:\n  //         return super.merge(key, message, prevData);\n  //     }\n  //   }\n\n  pre(\n    message: WSMessage.AlgoOrder[],\n    prevData?: API.OrderResponse[],\n  ): API.AlgoOrder {\n    return AlgoOrderMergeHandler.groupOrders(message);\n  }\n\n  isFullFilled(): boolean {\n    if (\n      \"total_executed_quantity\" in this.data &&\n      this.data.total_executed_quantity !== 0\n    ) {\n      return this.data.total_executed_quantity === this.data.quantity;\n    } else if (\n      \"total_executed_quantity\" in (this.data as API.AlgoOrder).child_orders[0]\n    ) {\n      return (\n        (this.data as API.AlgoOrder).child_orders[0].total_executed_quantity ===\n        (this.data as API.AlgoOrder).child_orders[0].quantity\n      );\n    }\n\n    return false;\n  }\n\n  static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n    const rootOrderIndex = orders.findIndex(\n      (order) =>\n        order.parentAlgoOrderId === 0 &&\n        order.algoOrderId === order.rootAlgoOrderId,\n    );\n    if (rootOrderIndex === -1) {\n      throw new SDKError(\"Root order not found\");\n    }\n\n    const rootOrder_ = object2underscore(\n      orders[rootOrderIndex],\n    ) as unknown as API.AlgoOrder;\n\n    rootOrder_.child_orders = orders\n      .filter((_, index) => index !== rootOrderIndex)\n      .map((order) => {\n        return object2underscore(order) as unknown as API.AlgoOrder;\n      });\n\n    if (\n      rootOrder_.algo_type === \"BRACKET\" &&\n      rootOrder_.child_orders.length > 0\n    ) {\n      // @ts-ignore\n      const childOrders = this.groupBracketChildOrders([\n        ...rootOrder_.child_orders,\n      ]);\n      rootOrder_.child_orders = [childOrders];\n    }\n\n    return withTPSLProvenance(normalizeAlgoOrderTypes(rootOrder_));\n  }\n\n  static groupBracketChildOrders(orders: API.AlgoOrder[]): API.AlgoOrder {\n    const innerOrders = [...orders];\n    const rootOrderIndex = innerOrders.findIndex(\n      (order) =>\n        order.algo_type !== AlgoOrderType.STOP_LOSS &&\n        order.algo_type !== AlgoOrderType.TAKE_PROFIT,\n    );\n    if (rootOrderIndex === -1) {\n      throw new SDKError(\"Root order not found\");\n    }\n\n    const rootOrder = innerOrders.splice(\n      rootOrderIndex,\n      1,\n    )[0] as unknown as API.AlgoOrder;\n    rootOrder.child_orders = innerOrders as unknown as API.AlgoOrder[];\n    return rootOrder;\n  }\n\n  /**\n   * get the field changes compared to the previous data\n   * now only record the field changes for trailing stop REPLACED status order\n   */\n  getFieldChanges(prevData?: API.OrderResponse[]) {\n    const {\n      algo_order_id,\n      algo_type,\n      algo_status,\n      is_activated,\n      extreme_price,\n    } = this.data || {};\n\n    const fieldChanges: AlgoOrderFieldChanges = {};\n    if (\n      algo_type === AlgoOrderRootType.TRAILING_STOP &&\n      algo_status === OrderStatus.REPLACED &&\n      prevData?.length\n    ) {\n      for (const item of prevData) {\n        const algoOrders = item.rows as API.AlgoOrder[];\n        for (const order of algoOrders) {\n          if (order.algo_order_id === algo_order_id) {\n            fieldChanges[AlgoOrderRootType.TRAILING_STOP] = {\n              extreme_price: order.extreme_price !== extreme_price,\n              is_activated: order.is_activated !== is_activated,\n            };\n\n            return fieldChanges;\n          }\n        }\n      }\n    }\n\n    return fieldChanges;\n  }\n}\n","import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class RegularOrderMergeHandler extends BaseMergeHandler<\n  WSMessage.Order,\n  API.Order\n> {\n  get orderId(): number {\n    return this.data.order_id;\n  }\n  get status(): string {\n    return this.data.status;\n  }\n  pre(\n    message: WSMessage.Order,\n    prevData?: API.OrderResponse[] | undefined\n  ): API.Order {\n    return object2underscore(message) as unknown as API.Order;\n  }\n  isFullFilled(): boolean {\n    return (\n      \"total_executed_quantity\" in this.data &&\n      this.data.total_executed_quantity === this.data.quantity\n    );\n  }\n}\n","import { lensIndex, over } from \"ramda\";\nimport { API } from \"@orderly.network/types\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { AlgoOrderMergeHandler } from \"../services/orderMerge/algoOrderMergeHandler\";\nimport { RegularOrderMergeHandler } from \"../services/orderMerge/regularOrderMergeHandler\";\n\n// import { useSWRConfig, unstable_serialize } from \"swr\";\n\nexport const generateKeyFun =\n  (\n    url: string,\n    args: {\n      status?: string;\n      symbol?: string;\n      side?: string;\n      size?: number;\n      page?: number;\n      sourceTypeAll?: boolean;\n      dateRange?: {\n        from?: Date;\n        to?: Date;\n      };\n    },\n  ) =>\n  (pageIndex: number, previousPageData: any): string | null => {\n    // reached the end\n    if (previousPageData && !previousPageData.rows?.length) {\n      return null;\n    }\n\n    const { status, symbol, side, size = 100, page, dateRange } = args;\n\n    const search = new URLSearchParams([\n      [\"size\", size.toString()],\n      [\"page\", `${pageIndex + 1}`],\n      // [\"source_type\", \"ALL\"],\n    ]);\n\n    if (args.sourceTypeAll) {\n      search.set(\"source_type\", \"ALL\");\n    }\n\n    if (dateRange) {\n      if (dateRange.from) {\n        search.set(\"start_t\", `${dateRange.from.getTime()}`);\n      }\n\n      if (dateRange.to) {\n        search.set(\"end_t\", `${dateRange.to.getTime()}`);\n      }\n    }\n\n    if (page) {\n      search.set(\"page\", `${page}`);\n    }\n\n    if (status) {\n      search.set(`status`, status);\n    }\n\n    if (symbol) {\n      search.set(`symbol`, symbol);\n    }\n\n    if (side) {\n      search.set(`side`, side);\n    }\n\n    return `${url}?${search.toString()}`;\n  };\n\nexport const updateOrdersHandler = (\n  key: string,\n  updatedOrder: WSMessage.Order,\n  // isAlgoOrder:boolean,\n  orders?: API.OrderResponse[],\n) => {\n  if (!orders) {\n    return;\n  }\n  const handler = new RegularOrderMergeHandler(updatedOrder);\n\n  return handler.merge(key, updatedOrder, orders);\n\n  // console.log(key);\n  // const isAlgoOrder = \"algoOrderId\" in updatedOrder;\n\n  // // if (isAlgoOrder) {\n  // //   mergeHandler = new AlgoOrderMergeHandler();\n  // // } else {\n  // //   mergeHandler = new RegularOrderMergeHandler();\n  // // }\n\n  // const underscoreOrder = object2underscore(updatedOrder);\n\n  // let formattedOrder: API.Order & API.AlgoOrder = {\n  //   ...underscoreOrder,\n  //   updated_time: updatedOrder.timestamp,\n  //   type: updatedOrder.type?.replace(\"_ORDER\", \"\"),\n  //   //@ts-ignore\n  //   // visible_quantity: updatedOrder.visibleQuantity || updatedOrder.visible,\n  // };\n\n  // if (typeof formattedOrder.visible_quantity === \"undefined\") {\n  //   // check visible field;\n  //   // @ts-ignore\n  //   formattedOrder.visible_quantity = updatedOrder.visible;\n  // }\n\n  // // console.log(formattedOrder, updatedOrder);\n\n  // const hasCreateTime = \"created_time\" in formattedOrder;\n  // if (!hasCreateTime) {\n  //   formattedOrder[\"created_time\"] = updatedOrder.timestamp;\n  // }\n\n  // if (isAlgoOrder) {\n  //   if (typeof updatedOrder.triggerTradePrice !== \"undefined\") {\n  //     formattedOrder.trigger_price = updatedOrder.triggerTradePrice;\n  //   }\n\n  //   if (formattedOrder.type === \"MARKET\") {\n  //     const { price, ...newObj } = formattedOrder;\n  //     // @ts-ignore\n  //     formattedOrder = newObj;\n  //   }\n  // } else {\n  //   // formattedOrder.created_time = updatedOrder.timestamp;\n  // }\n\n  // // const index = lensIndex(0);\n  // const orderId =\n  //   (updatedOrder as WSMessage.Order).orderId ||\n  //   (updatedOrder as WSMessage.AlgoOrder).algoOrderId;\n\n  // const isExisting = orderIsExisting(orders, orderId);\n\n  // const status =\n  //   (updatedOrder as WSMessage.Order).status ||\n  //   (updatedOrder as WSMessage.AlgoOrder).rootAlgoStatus;\n\n  // switch (status) {\n  //   case \"NEW\": {\n  //     // chceck if the order is already in the list\n  //     if (\n  //       isExisting ||\n  //       key.startsWith(\"orders:CANCELLED\") ||\n  //       key.startsWith(\"orders:FILLED\") ||\n  //       key.startsWith(\"orders:REJECTED\")\n  //     ) {\n  //       return orders;\n  //     }\n  //     return insertOrders(orders, formattedOrder);\n  //   }\n\n  //   case \"CANCELLED\": {\n  //     if (\n  //       key.startsWith(\"orders:FILLED\") ||\n  //       key.startsWith(\"orders:REJECTED\")\n  //     ) {\n  //       return orders;\n  //     }\n  //     if (key.startsWith(\"orders:NEW\") || key.startsWith(\"orders:INCOMPLETE\")) {\n  //       return removeOrderIfExisting(orders, orderId);\n  //     }\n\n  //     if (key.startsWith(\"orders:CANCELLED\")) {\n  //       return insertOrders(orders, formattedOrder);\n  //     }\n\n  //     return updateOrders(orders, formattedOrder);\n  //   }\n\n  //   case \"REPLACED\":\n  //     return updateOrders(orders, formattedOrder);\n\n  //   case \"FILLED\": {\n  //     if (isExisting) {\n  //       // for new list, remove the order if it exists\n  //       if (\n  //         key.startsWith(\"orders:INCOMPLETE\") ||\n  //         key.startsWith(\"orders:NEW\")\n  //       ) {\n  //         // if fullfilled, remove from the list\n  //         if (updatedOrder.totalExecutedQuantity === updatedOrder.quantity) {\n  //           return removeOrderIfExisting(orders, orderId);\n  //         }\n\n  //         // update\n  //         return updateOrders(orders, formattedOrder);\n  //       }\n  //     } else {\n  //       // for filled list, insert the order if it doesn't exist\n\n  //       if (\n  //         key.startsWith(\"orders:CANCELLED\") ||\n  //         key.startsWith(\"orders:INCOMPLETE\") ||\n  //         key.startsWith(\"orders:NEW\")\n  //       ) {\n  //         return orders;\n  //       }\n  //       // if filled/history list:\n  //       return insertOrders(orders, formattedOrder);\n  //     }\n  //   }\n\n  //   default:\n  //     return orders;\n  // }\n};\n\nexport function updateAlgoOrdersHandler(\n  key: string,\n  message: WSMessage.AlgoOrder[],\n  orders: API.OrderResponse[],\n) {\n  if (!orders) {\n    return;\n  }\n\n  const mergeHandler = new AlgoOrderMergeHandler(message);\n\n  const mergedOrders = mergeHandler.merge(key, message, orders);\n\n  const fieldChanges = mergeHandler.getFieldChanges(orders);\n\n  return { mergedOrders, fieldChanges };\n}\n\nfunction updateOrders(\n  orders: API.OrderResponse[],\n  formattedOrder: API.Order & API.AlgoOrder,\n) {\n  return orders.map((item) => {\n    return {\n      // ...item,\n      meta: item.meta,\n      rows: item.rows.map((order: API.Order | API.AlgoOrder) => {\n        const isAlgoOrder = \"algo_order_id\" in order;\n\n        if (\n          isAlgoOrder &&\n          formattedOrder?.algo_order_id === order?.algo_order_id\n        ) {\n          return { ...order, ...formattedOrder };\n        }\n\n        if (!isAlgoOrder && formattedOrder?.order_id === order?.order_id) {\n          return { ...order, ...formattedOrder };\n        }\n\n        return order;\n      }),\n    };\n  });\n}\n\nfunction insertOrders(\n  orders: API.OrderResponse[],\n  formattedOrder: API.Order & API.AlgoOrder,\n) {\n  const index = lensIndex(0);\n  return over(\n    index,\n    (item: any) => ({\n      meta: {\n        ...item.meta,\n        total: item.meta.total + 1,\n      },\n      rows: [formattedOrder, ...item.rows],\n    }),\n    orders,\n  );\n}\n\nfunction removeOrderIfExisting(\n  orders: API.OrderResponse[],\n  orderId: number,\n): API.OrderResponse[] {\n  const isExisting = orderIsExisting(orders, orderId);\n  if (!isExisting) {\n    return orders;\n  }\n  return orders.map((item) => {\n    return {\n      meta: { ...item.meta, total: item.meta.total - 1 },\n      rows: item.rows.filter((order: API.Order | API.AlgoOrder) => {\n        const isAlgoOrder = \"algo_order_id\" in order;\n        return isAlgoOrder\n          ? (order as API.AlgoOrder).algo_order_id !== orderId\n          : (order as API.Order).order_id !== orderId;\n      }),\n    };\n  });\n}\n\nfunction findOrderIndex(\n  orders: API.OrderResponse[],\n  orderId: number,\n): number[] | undefined {\n  let index: number = 0;\n  let index2: number | undefined;\n\n  for (let idx = 0; idx < orders.length; idx++) {\n    index = idx;\n    const item = orders[idx];\n\n    for (let idx2 = 0; idx2 < item.rows.length; idx2++) {\n      const element = item.rows[idx2];\n      if (\n        (element as API.AlgoOrder).algo_order_id === orderId ||\n        (element as API.Order).order_id === orderId\n      ) {\n        index2 = idx2;\n\n        break;\n      }\n    }\n  }\n\n  if (typeof index2 === \"undefined\") {\n    return;\n  }\n\n  return [index, index2];\n}\n\nfunction orderIsExisting(orders: API.OrderResponse[], orderId: number) {\n  const index = findOrderIndex(orders, orderId);\n  return Array.isArray(index);\n}\n\nexport function getPositionBySymbol(symbol: string) {\n  // const config = useSWRConfig();\n  // console.log(config);\n}\n","import { useCallback, useMemo } from \"react\";\nimport { useSubAccountQuery } from \"../subAccount/useSubAccountQuery\";\nimport { useAccount } from \"../useAccount\";\nimport { useLocalStorage } from \"../useLocalStorage\";\nimport { noCacheConfig } from \"../utils\";\nimport type { RefferalAPI } from \"./api\";\n\nexport const useReferralInfo = (): {\n  data?: RefferalAPI.ReferralInfo;\n  isTrader?: boolean;\n  isAffiliate?: boolean;\n  error: any;\n  isLoading: boolean;\n  getFirstRefCode: () => RefferalAPI.ReferralCode | undefined;\n} => {\n  const { state } = useAccount();\n\n  const { data, isLoading, error } =\n    useSubAccountQuery<RefferalAPI.ReferralInfo>(\"/v1/referral/info\", {\n      accountId: state?.mainAccountId,\n      revalidateOnFocus: true,\n      errorRetryCount: 3,\n      ...noCacheConfig,\n    });\n\n  const isTrader = useMemo(() => {\n    if (typeof data?.referee_info?.referer_code === \"undefined\") {\n      return undefined;\n    }\n    return (data?.referee_info?.referer_code?.length || 0) > 0;\n  }, [data?.referee_info]);\n\n  const isAffiliate = useMemo(() => {\n    if (typeof data?.referrer_info?.referral_codes === \"undefined\") {\n      return undefined;\n    }\n    return (data?.referrer_info?.referral_codes?.length || 0) > 0;\n  }, [data?.referrer_info]);\n\n  const [pinCodes] = useLocalStorage<string[]>(\"orderly_referral_codes\", []);\n\n  const getFirstRefCode = useCallback(() => {\n    if (!data?.referrer_info?.referral_codes) {\n      return undefined;\n    }\n    const referralCodes = [...data?.referrer_info?.referral_codes];\n\n    const pinedItems: RefferalAPI.ReferralCode[] = [];\n\n    for (let i = 0; i < pinCodes.length; i++) {\n      const code = pinCodes[i];\n\n      const index = referralCodes.findIndex((item) => item.code === code);\n      if (index !== -1) {\n        pinedItems.push({ ...referralCodes[index] });\n        referralCodes.splice(index, 1);\n      }\n    }\n\n    const newCodes = [...pinedItems, ...referralCodes];\n\n    return newCodes?.[0];\n  }, [pinCodes, data]);\n\n  return {\n    data,\n    isTrader,\n    isAffiliate,\n    error,\n    isLoading,\n    getFirstRefCode,\n  };\n};\n","export const REFERRAL_CODE_MIN_LENGTH = 4;\nexport const REFERRAL_CODE_MAX_LENGTH = 15;\n\nexport function formatReferralCodeInput(raw: string): string {\n  return String(raw)\n    .replace(/[a-z]/g, (c) => c.toUpperCase())\n    .replace(/[^A-Z0-9]/g, \"\");\n}\n\nexport function isReferralCodeLengthValid(code: string): boolean {\n  return (\n    code.length >= REFERRAL_CODE_MIN_LENGTH &&\n    code.length <= REFERRAL_CODE_MAX_LENGTH\n  );\n}\n","import type { API } from \"@orderly.network/types\";\n\ntype BalanceUpdate = Partial<API.Holding> & {\n  pendingShort?: number;\n  pendingShortQty?: number;\n  isolatedMargin?: number;\n  isolatedOrderFrozen?: number;\n};\n\n/** Normalize REST snake_case and WebSocket camelCase balance fields. */\nexport const mergeHoldingBalance = (\n  holding: API.Holding,\n  update: BalanceUpdate,\n): API.Holding => {\n  return {\n    ...holding,\n    holding: update.holding ?? holding.holding,\n    frozen: update.frozen ?? holding.frozen,\n    pending_short:\n      update.pending_short ??\n      update.pendingShort ??\n      update.pendingShortQty ??\n      holding.pending_short,\n    isolated_margin:\n      update.isolated_margin ??\n      update.isolatedMargin ??\n      holding.isolated_margin,\n    isolated_order_frozen:\n      update.isolated_order_frozen ??\n      update.isolatedOrderFrozen ??\n      holding.isolated_order_frozen,\n  };\n};\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { API } from \"@orderly.network/types\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { mergeHoldingBalance } from \"../utils/mergeHoldingBalance\";\n\n// import { devtools } from \"zustand/middleware\";\n\nexport type AppStatus = {\n  positionsLoading: boolean;\n  ordersLoading: boolean;\n  fundingRatesLoading: boolean;\n  ready: boolean;\n};\n\nexport type Portfolio = {\n  holding?: API.Holding[];\n  totalCollateral: Decimal;\n  freeCollateral: Decimal;\n  freeCollateralUSDCOnly: Decimal;\n  totalValue: Decimal | null;\n  availableBalance: number;\n  unsettledPnL: number;\n  totalUnrealizedROI: number;\n  usdcHolding: number;\n};\n\nexport type AppState = {\n  accountInfo?: API.AccountInfo;\n  // positions: API.PositionExt[];\n  symbolsInfo?: Record<string, API.SymbolExt>;\n  tokensInfo?: API.Token[];\n  rwaSymbolsInfo?: Record<string, API.RwaSymbol>;\n  fundingRates?: Record<string, API.FundingRate>;\n  portfolio: Portfolio;\n  appState: AppStatus;\n};\n\nexport type AppActions = {\n  cleanAll: () => void;\n  setAccountInfo: (accountInfo: API.AccountInfo) => void;\n  setTokensInfo: (tokensInfo: API.Token[]) => void;\n  // setPositions: (positions: API.PositionExt[]) => void;\n  setSymbolsInfo: (symbolsInfo: Record<string, API.SymbolExt>) => void;\n  setRwaSymbolsInfo: (rwaSymbolsInfo: Record<string, API.RwaSymbol>) => void;\n  setFundingRates: (fundingRates: Record<string, API.FundingRate>) => void;\n  updateAppStatus: (key: keyof AppStatus, value: boolean) => void;\n  updatePortfolio: (\n    key: keyof Omit<Portfolio, \"usdc\" | \"holding\">,\n    value: number | Decimal,\n  ) => void;\n\n  batchUpdateForPortfolio: (data: Partial<Portfolio>) => void;\n  restoreHolding: (holding: API.Holding[]) => void;\n  updateHolding: (msg: Record<string, WSMessage.Holding>) => void;\n};\n\n/**\n * @warning This store should be used with caution. It contains sensitive account and portfolio data.\n * Please ensure you have proper authorization and follow security best practices when using this store.\n *\n * @example\n * // Correct usage:\n * const accountInfo = useAppStore(state => state.accountInfo);\n *\n * // Avoid direct store manipulation:\n * const store = useAppStore.getState(); // Not recommended\n */\nexport const useAppStore = create<\n  AppState & {\n    actions: AppActions;\n  }\n  //   [[\"zustand/devtools\", never], [\"zustand/immer\", never]]\n>()(\n  immer((set) => ({\n    // accountInfo: null,\n    portfolio: {\n      totalCollateral: zero,\n      totalValue: null,\n      freeCollateral: zero,\n      freeCollateralUSDCOnly: zero,\n      availableBalance: 0,\n      unsettledPnL: 0,\n      totalUnrealizedROI: 0,\n      usdcHolding: 0,\n    },\n    appState: {\n      positionsLoading: false,\n      ordersLoading: false,\n      fundingRatesLoading: false,\n      ready: false,\n    } as AppStatus,\n    actions: {\n      setTokensInfo: (tokensInfo: API.Token[]) => {\n        set((state) => {\n          state.tokensInfo = tokensInfo;\n        }, false);\n      },\n      cleanAll: () => {\n        set((state) => {\n          state.accountInfo = undefined;\n          state.portfolio = {\n            totalCollateral: zero,\n            totalValue: null,\n            freeCollateral: zero,\n            freeCollateralUSDCOnly: zero,\n            availableBalance: 0,\n            unsettledPnL: 0,\n            totalUnrealizedROI: 0,\n            usdcHolding: 0,\n          };\n        }, false);\n      },\n      setAccountInfo: (accountInfo: API.AccountInfo) => {\n        set(\n          (state) => {\n            state.accountInfo = accountInfo;\n          },\n          false,\n          // \"setAccountInfo\"\n        );\n      },\n      setSymbolsInfo: (symbolsInfo: Record<string, API.SymbolExt>) => {\n        set(\n          (state) => {\n            state.symbolsInfo = symbolsInfo;\n          },\n          false,\n          // \"setSymbolsInfo\"\n        );\n      },\n      setRwaSymbolsInfo: (rwaSymbolsInfo: Record<string, API.RwaSymbol>) => {\n        set(\n          (state) => {\n            state.rwaSymbolsInfo = rwaSymbolsInfo;\n          },\n          false,\n          // \"setRwaSymbolsInfo\"\n        );\n      },\n      setFundingRates: (fundingRates: Record<string, API.FundingRate>) => {\n        set(\n          (state) => {\n            state.fundingRates = fundingRates;\n          },\n          false,\n          // \"setFundingRates\"\n        );\n      },\n      updateAppStatus: (key: keyof AppStatus, value: boolean) => {\n        set(\n          (state) => {\n            state.appState[key] = value;\n          },\n          false,\n          // \"updateAppStatus\"\n        );\n      },\n      updatePortfolio: (\n        key: keyof Omit<Portfolio, \"usdc\" | \"holding\">,\n        value: any,\n      ) => {\n        set(\n          (state) => {\n            state.portfolio[key] = value;\n          },\n          false,\n          // \"updatePortfolio\"\n        );\n      },\n      batchUpdateForPortfolio: (data: Partial<Portfolio>) => {\n        set(\n          (state) => {\n            state.portfolio = { ...state.portfolio, ...data };\n          },\n          false,\n          // \"batchUpdateForPortfolio\"\n        );\n      },\n      restoreHolding: (holding: API.Holding[]) => {\n        set(\n          (state) => {\n            state.portfolio.holding = holding;\n          },\n          false,\n          // \"updateHolding\"\n        );\n      },\n      updateHolding(msg) {\n        set(\n          (state) => {\n            if (state.portfolio.holding && state.portfolio.holding.length) {\n              for (const key in msg) {\n                const holding = state.portfolio.holding.find(\n                  (item) => item.token === key,\n                );\n                if (holding) {\n                  Object.assign(\n                    holding,\n                    mergeHoldingBalance(holding, msg[key]),\n                  );\n                }\n                // else {\n                //   state.portfolio.holding.push({\n                //     token: key,\n                //     holding: msg[key].holding,\n                //     frozen: msg[key].frozen,\n                //   });\n                // }\n              }\n            }\n          },\n          false,\n          // \"updateHolding\"\n        );\n      },\n    },\n  })),\n);\n\nexport const useAccountInfo = () => useAppStore((state) => state.accountInfo);\n\nexport const usePortfolio = () => useAppStore((state) => state.portfolio);\n\nexport const useFundingRateBySymbol = (symbol: string) =>\n  useAppStore((state) => state.fundingRates?.[symbol]);\n","interface StoreConfig {\n  name: string;\n  keyPath?: string;\n  autoIncrement?: boolean;\n}\n\ninterface DatabaseConfig {\n  name: string;\n  version: number;\n  stores: StoreConfig[];\n}\n\nexport const ORDERLY_SYMBOLS = {\n  name: \"ORDERLY_SYMBOLS\",\n  keyPath: \"symbol\",\n  autoIncrement: false,\n};\n\nexport const ORDERLY_MAIN_CHAIN_INFO = {\n  name: \"ORDERLY_MAIN_CHAIN_INFO\",\n  keyPath: \"chain_id\",\n  autoIncrement: false,\n};\n\nexport const ORDERLY_TEST_CHAIN_INFO = {\n  name: \"ORDERLY_TEST_CHAIN_INFO\",\n  keyPath: \"chain_id\",\n  autoIncrement: false,\n};\n\nexport const ORDERLY_MAIN_TOKEN = {\n  name: \"ORDERLY_MAIN_TOKEN\",\n  keyPath: \"token\",\n  autoIncrement: false,\n};\n\nexport const ORDERLY_TEST_TOKEN = {\n  name: \"ORDERLY_TEST_TOKEN\",\n  keyPath: \"token\",\n  autoIncrement: false,\n};\n\nexport const DEFAULT_DATABASE_CONFIG: DatabaseConfig = {\n  name: \"ORDERLY_STORE\",\n  version: 4,\n  stores: [\n    ORDERLY_MAIN_CHAIN_INFO,\n    ORDERLY_TEST_CHAIN_INFO,\n    ORDERLY_MAIN_TOKEN,\n    ORDERLY_SYMBOLS,\n    ORDERLY_TEST_TOKEN,\n  ],\n};\n\nclass IndexedDBManager {\n  private static instance: IndexedDBManager;\n  private connections: Map<string, IDBDatabase> = new Map();\n  private databaseConfig: DatabaseConfig | null = null;\n  /** Promise that resolves when database initialization is complete */\n  private initializationPromise: Promise<void> | null = null;\n\n  public static getInstance(): IndexedDBManager {\n    if (!IndexedDBManager.instance) {\n      IndexedDBManager.instance = new IndexedDBManager();\n    }\n    return IndexedDBManager.instance;\n  }\n\n  public async initializeDatabase(config: DatabaseConfig): Promise<void> {\n    // If initialization is already in progress, return the existing promise\n    if (this.initializationPromise) {\n      return this.initializationPromise;\n    }\n\n    // Create a new initialization promise\n    this.initializationPromise = this._performInitialization(config);\n    return this.initializationPromise;\n  }\n\n  /**\n   * Performs the actual database initialization\n   * Now keeps the connection open for better performance\n   */\n  private async _performInitialization(config: DatabaseConfig): Promise<void> {\n    this.databaseConfig = config;\n    return new Promise<void>((resolve, reject) => {\n      const request = indexedDB.open(config.name, config.version);\n\n      request.onupgradeneeded = (event) => {\n        const db = (event.target as IDBOpenDBRequest).result;\n        config.stores.forEach((storeConfig) => {\n          if (!db.objectStoreNames.contains(storeConfig.name)) {\n            db.createObjectStore(storeConfig.name, {\n              keyPath: storeConfig.keyPath,\n              autoIncrement: storeConfig.autoIncrement ?? true,\n            });\n            console.warn(\n              `Created store '${storeConfig.name}' in database '${config.name}'`,\n            );\n          }\n        });\n      };\n\n      request.onsuccess = () => {\n        const db = request.result;\n\n        // Store the connection for immediate use instead of closing it\n        this.connections.set(config.name, db);\n\n        // Add event listener to handle connection cleanup when closed\n        db.addEventListener(\"close\", () => {\n          this.connections.delete(config.name);\n          console.warn(`Database connection closed: ${config.name}`);\n        });\n\n        console.warn(\n          `Database '${config.name}' initialized and connection kept open for better performance`,\n        );\n        resolve();\n      };\n\n      request.onerror = () => {\n        this._handleInitializationError(config.name, request.error);\n        reject(request.error);\n      };\n\n      request.onblocked = () => {\n        const error = new Error(\n          `Database '${config.name}' is blocked by another connection`,\n        );\n        this._handleInitializationError(config.name, error);\n        reject(error);\n      };\n    });\n  }\n\n  /**\n   * Handles initialization errors consistently\n   */\n  private _handleInitializationError(dbName: string, error: unknown): void {\n    console.error(`Failed to initialize database '${dbName}':`, error);\n    // Reset initialization promise on error so it can be retried\n    this.initializationPromise = null;\n  }\n\n  public async getConnection(\n    dbName: string,\n    storeName: string,\n  ): Promise<IDBDatabase> {\n    // Ensure database is initialized before getting connection\n    await this.ensureInitialized();\n\n    // Check if connection already exists and is still valid\n    if (this.connections.has(dbName)) {\n      const existingConnection = this.connections.get(dbName)!;\n\n      // Test if connection is still valid by trying to access object stores\n      try {\n        if (existingConnection.objectStoreNames.contains(storeName)) {\n          return existingConnection;\n        }\n      } catch {\n        // Connection is invalid, remove it from cache\n        this.connections.delete(dbName);\n        console.warn(\n          `Database connection '${dbName}' is no longer valid, creating new one`,\n        );\n      }\n    }\n\n    // Create new connection if none exists or existing one is invalid\n    const db = await this.createConnection(dbName);\n    this.connections.set(dbName, db);\n\n    // Add event listener to handle connection cleanup when closed\n    db.addEventListener(\"close\", () => {\n      this.connections.delete(dbName);\n      console.warn(`Database connection closed: ${dbName}`);\n    });\n\n    return db;\n  }\n\n  /**\n   * Ensures database is initialized, initializes if not already done\n   */\n  private async ensureInitialized(): Promise<void> {\n    // If already initializing, wait for it to complete\n    if (this.initializationPromise) {\n      return this.initializationPromise;\n    }\n\n    // If no config exists, initialize with default config\n    if (!this.databaseConfig) {\n      return this.initializeDatabase(DEFAULT_DATABASE_CONFIG);\n    }\n\n    // If config exists but database might not be initialized, check and initialize if needed\n    const isActuallyInitialized = await this._checkDatabaseExists();\n    if (!isActuallyInitialized) {\n      // Reset promise to allow re-initialization\n      this.initializationPromise = null;\n      return this.initializeDatabase(this.databaseConfig);\n    }\n\n    // Database is initialized, create resolved promise for consistency\n    this.initializationPromise = Promise.resolve();\n    return this.initializationPromise;\n  }\n\n  /**\n   * Creates a new database connection\n   */\n  private async createConnection(dbName: string): Promise<IDBDatabase> {\n    // This method is only called after ensureInitialized(), so databaseConfig should exist\n    const config = this.databaseConfig;\n    if (!config) {\n      throw new Error(\n        \"Database not initialized. Call initializeDatabase() first.\",\n      );\n    }\n\n    return new Promise<IDBDatabase>((resolve, reject) => {\n      const request = indexedDB.open(dbName, config.version);\n\n      request.onsuccess = () => {\n        resolve(request.result);\n      };\n\n      request.onerror = () => {\n        console.error(\n          `Failed to connect to database '${dbName}':`,\n          request.error,\n        );\n        reject(request.error);\n      };\n    });\n  }\n\n  /**\n   * Checks if database and all required stores exist\n   */\n  private async _checkDatabaseExists(): Promise<boolean> {\n    if (!this.databaseConfig) {\n      return false;\n    }\n\n    try {\n      return new Promise<boolean>((resolve) => {\n        const config = this.databaseConfig!; // Safe because we checked above\n        const request = indexedDB.open(config.name, config.version);\n\n        request.onsuccess = () => {\n          const db = request.result;\n          const config = this.databaseConfig!; // Safe because we checked above\n          const allStoresExist = config.stores.every((store) =>\n            db.objectStoreNames.contains(store.name),\n          );\n          db.close();\n          resolve(allStoresExist);\n        };\n\n        request.onerror = () => resolve(false);\n      });\n    } catch {\n      return false;\n    }\n  }\n}\n\nexport const indexedDBManager = IndexedDBManager.getInstance();\n\nexport const initializeAppDatabase = async (\n  config: DatabaseConfig,\n): Promise<void> => {\n  try {\n    await indexedDBManager.initializeDatabase(config);\n    console.warn(\"Application database initialized successfully\");\n  } catch (error) {\n    console.error(\"Failed to initialize application database:\", error);\n    throw error;\n  }\n};\n\nexport type { IndexedDBManager, DatabaseConfig, StoreConfig };\n","import {\n  API,\n  ArbitrumMainnetChainInfo,\n  ArbitrumSepoliaChainInfo,\n  SolanaDevnetChainInfo,\n  SolanaMainnetChainInfo,\n} from \"@orderly.network/types\";\n\n/** Static mainnet chain_info used when broker API data is unavailable. */\nexport const mainnetChainFallback = [\n  ArbitrumMainnetChainInfo,\n  SolanaMainnetChainInfo,\n] as unknown as API.Chain[];\n\n/** Static testnet chain_info used when broker API data is unavailable. */\nexport const testnetChainFallback = [\n  ArbitrumSepoliaChainInfo,\n  SolanaDevnetChainInfo,\n] as unknown as API.Chain[];\n","import { API } from \"@orderly.network/types\";\n\n// Chain-info rows are loosely typed at the store boundary; validation works\n// on the raw wire shape before the historical `API.Chain` cast.\ntype ChainInfoRow = Record<string, unknown>;\n\n// Hard requirements: these fields are consumed by wallet switching, deposit\n// (vault_address is the on-chain call target) and number formatting — a row\n// missing any of them cannot be used safely. `explorer_base_url` is display\n// only (ecosystem chains legitimately ship without an explorer) and is not\n// required.\nconst requiredStringFields = [\n  \"name\",\n  \"public_rpc_url\",\n  \"currency_symbol\",\n  \"vault_address\",\n] as const;\n\n/**\n * `currency_decimal` may arrive as a number or a numeric string; other shapes\n * (empty string, null, boolean, NaN, negative) cannot be used downstream.\n */\nconst toCurrencyDecimal = (raw: unknown): number | null => {\n  if (typeof raw === \"number\") {\n    return Number.isFinite(raw) && raw >= 0 ? raw : null;\n  }\n  if (typeof raw === \"string\") {\n    const trimmed = raw.trim();\n    if (trimmed.length === 0) {\n      return null;\n    }\n    const parsed = Number(trimmed);\n    return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;\n  }\n  return null;\n};\n\nconst sanitizeChain = (item: unknown): ChainInfoRow | null => {\n  if (item === null || typeof item !== \"object\") {\n    return null;\n  }\n\n  const chain = item as ChainInfoRow;\n  const chainId = Number(chain.chain_id);\n  if (!Number.isFinite(chainId) || chainId <= 0) {\n    return null;\n  }\n\n  if (\n    requiredStringFields.some(\n      (field) =>\n        typeof chain[field] !== \"string\" ||\n        (chain[field] as string).trim().length === 0,\n    )\n  ) {\n    return null;\n  }\n\n  const currencyDecimal = toCurrencyDecimal(chain.currency_decimal);\n  if (currencyDecimal === null) {\n    return null;\n  }\n\n  if (currencyDecimal === chain.currency_decimal) {\n    return chain;\n  }\n\n  return { ...chain, currency_decimal: currencyDecimal };\n};\n\n/**\n * Drops chain rows that miss the runtime shape required by chain consumers\n * and wallet providers, keeping the valid ones. Returns null only when no row\n * survives. The chain mix is not constrained: a broker may legitimately expose\n * Solana-only (or EVM-only) chains, and wallet connectors derive their\n * supported wallet types from whatever survives.\n */\nexport const sanitizeChainInfoData = (data: unknown): API.Chain[] | null => {\n  if (!Array.isArray(data) || data.length === 0) {\n    return null;\n  }\n\n  const chains: ChainInfoRow[] = [];\n  for (const item of data) {\n    const chain = sanitizeChain(item);\n    if (chain !== null) {\n      chains.push(chain);\n    }\n  }\n\n  return chains.length > 0 ? (chains as unknown as API.Chain[]) : null;\n};\n","import { StateCreator, StoreMutatorIdentifier } from \"zustand\";\nimport {\n  PersistOptions,\n  StateStorage,\n  persist,\n  createJSONStorage,\n} from \"zustand/middleware\";\nimport { indexedDBManager } from \"./indexedDBManager\";\n\n/**\n * Configuration for IndexedDB storage\n */\nexport interface IndexedDBMetadataConfig {\n  /**\n   * Object-store keyPath used by the reserved metadata record. The metadata\n   * record lives in the SAME object store as the data rows under the\n   * reserved `recordKey`: any code reading this store directly must filter\n   * it out (see readAttributedIndexedDBState). Data-store sanitizers also\n   * drop it as an invalid row as a safety net.\n   */\n  keyPath: string;\n  /** Reserved key that cannot collide with a real data row. */\n  recordKey: string;\n  /** Field containing the metadata payload. */\n  metadataField: string;\n}\n\ninterface IndexedDBStorageConfig {\n  /** Database name */\n  dbName: string;\n  /** Object store name */\n  storeName: string;\n  /** Optional metadata record stored atomically with the data rows. */\n  metadata?: IndexedDBMetadataConfig;\n}\n\n/**\n * IndexedDB storage interface for array-based data operations\n */\nexport interface IndexedDBStorage<T = unknown> {\n  /** Get all stored data */\n  getItem: () => Promise<Array<T> | null>;\n  /** Replace all data (clear and insert) */\n  setItem: (value: Array<T>) => Promise<void>;\n  /** Clear all data */\n  removeItem: () => Promise<void>;\n}\n\nexport interface AttributedIndexedDBState<T, M = unknown> {\n  data: T[];\n  metadata: M;\n}\n\n/**\n * Splits the reserved metadata record from data rows. A missing metadata record\n * is treated as a cache miss so legacy, unattributed data is never published.\n */\nexport const readAttributedIndexedDBState = async <T, M = unknown>(\n  indexedDBStorage: IndexedDBStorage<T>,\n  config: IndexedDBMetadataConfig,\n): Promise<AttributedIndexedDBState<T, M> | null> => {\n  const rows = await indexedDBStorage.getItem();\n  if (!rows) {\n    return null;\n  }\n\n  const metadataRecord = rows.find(\n    (row) =>\n      row !== null &&\n      typeof row === \"object\" &&\n      (row as Record<string, unknown>)[config.keyPath] === config.recordKey,\n  ) as Record<string, unknown> | undefined;\n  const metadata = metadataRecord?.[config.metadataField];\n  if (typeof metadata === \"undefined\") {\n    return null;\n  }\n\n  return {\n    data: rows.filter((row) => row !== metadataRecord),\n    metadata: metadata as M,\n  };\n};\n\n/**\n * Creates an IndexedDB storage instance using simple connection manager\n */\nexport const createIndexedDBStorage = <T = unknown>(\n  config: IndexedDBStorageConfig,\n): IndexedDBStorage<T> => {\n  const { dbName, storeName } = config;\n\n  /**\n   * Gets database connection from manager with automatic initialization\n   * Uses Promise-based initialization to prevent race conditions\n   */\n  const getDB = async (): Promise<IDBDatabase> => {\n    // The manager now handles initialization automatically with Promise caching\n    return indexedDBManager.getConnection(dbName, storeName);\n  };\n\n  /**\n   * Executes a transaction with proper error handling\n   */\n  const executeTransaction = async <R>(\n    operation: (store: IDBObjectStore) => R,\n    mode: IDBTransactionMode = \"readwrite\",\n  ): Promise<R> => {\n    const dbInstance = await getDB();\n    const transaction = dbInstance.transaction(storeName, mode);\n    const store = transaction.objectStore(storeName);\n\n    return new Promise((resolve, reject) => {\n      const result = operation(store);\n\n      transaction.oncomplete = () => resolve(result);\n      transaction.onerror = () => {\n        console.error(\n          `Transaction failed for ${storeName}:`,\n          transaction.error,\n        );\n        reject(transaction.error);\n      };\n      transaction.onabort = () => {\n        console.error(`Transaction aborted for ${storeName}`);\n        reject(new Error(\"Transaction was aborted\"));\n      };\n    });\n  };\n\n  /**\n   * Retrieves all data from the store\n   */\n  const getItem = async (): Promise<Array<T> | null> => {\n    try {\n      const allValues = await executeTransaction((store) => {\n        return new Promise<Array<T>>((resolve, reject) => {\n          const request = store.getAll();\n          request.onsuccess = () => {\n            const result = request.result as Array<T>;\n            resolve(result.length > 0 ? result : []);\n          };\n          request.onerror = () => reject(request.error);\n        });\n      }, \"readonly\");\n\n      return allValues.length > 0 ? allValues : null;\n    } catch (error) {\n      console.error(`Failed to get items from ${storeName}:`, error);\n      return null;\n    }\n  };\n\n  /**\n   * Replaces all data in the store (clear + insert)\n   */\n  const setItem = async (value: Array<T>): Promise<void> => {\n    try {\n      await executeTransaction((store) => {\n        store.clear();\n        value.forEach((item) => store.put(item));\n        return undefined;\n      }, \"readwrite\");\n    } catch (error) {\n      console.error(`Failed to set items in ${storeName}:`, error);\n      throw error;\n    }\n  };\n\n  /**\n   * Clears all data from the store\n   */\n  const removeItem = async (): Promise<void> => {\n    try {\n      await executeTransaction((store) => {\n        store.clear();\n        return undefined;\n      }, \"readwrite\");\n    } catch (error) {\n      console.error(`Failed to remove items from ${storeName}:`, error);\n      throw error;\n    }\n  };\n\n  return {\n    getItem,\n    setItem,\n    removeItem,\n  };\n};\n\n/**\n * Configuration options for IndexedDB persistence middleware\n */\ntype IndexedDBPersistOptions<T, U = T> = Omit<\n  PersistOptions<T, U>,\n  \"storage\"\n> & {\n  /** IndexedDB configuration */\n  indexedDBConfig: IndexedDBStorageConfig;\n};\n\n/**\n * Adapts IndexedDBStorage to Zustand's StateStorage interface\n */\nexport const adaptToStateStorage = <T>(\n  indexedDBStorage: IndexedDBStorage<T>,\n  metadataConfig?: IndexedDBMetadataConfig,\n): StateStorage => ({\n  getItem: async (): Promise<string | null> => {\n    try {\n      const result = metadataConfig\n        ? await readAttributedIndexedDBState(indexedDBStorage, metadataConfig)\n        : await indexedDBStorage.getItem();\n\n      return result &&\n        (Array.isArray(result)\n          ? result.length > 0\n          : Array.isArray(result.data) && result.data.length > 0)\n        ? JSON.stringify({\n            state: result,\n            version: 0,\n          })\n        : null;\n    } catch (error) {\n      console.error(\"Failed to get item from IndexedDB storage:\", error);\n      return null;\n    }\n  },\n\n  setItem: async (_name: string, value: string): Promise<void> => {\n    try {\n      const parsed = JSON.parse(value);\n      const stateData = (\n        parsed as {\n          state?: Array<T> | AttributedIndexedDBState<T> | null;\n        }\n      )?.state;\n\n      if (\n        metadataConfig &&\n        stateData !== null &&\n        typeof stateData === \"object\" &&\n        !Array.isArray(stateData) &&\n        Array.isArray(stateData.data) &&\n        typeof stateData.metadata !== \"undefined\"\n      ) {\n        const metadataRecord = {\n          [metadataConfig.keyPath]: metadataConfig.recordKey,\n          [metadataConfig.metadataField]: stateData.metadata,\n        } as T;\n        await indexedDBStorage.setItem([...stateData.data, metadataRecord]);\n      } else if (Array.isArray(stateData) && !metadataConfig) {\n        // Replace all data with the persisted array\n        await indexedDBStorage.setItem(stateData);\n      } else if (stateData === null) {\n        // Explicitly clear IndexedDB when state is null\n        await indexedDBStorage.removeItem();\n      }\n      // If the `state` key is absent (undefined), do nothing and preserve the\n      // existing data. Stores use this to skip persisting error-path fallback\n      // data so IndexedDB only ever holds successful responses.\n    } catch (error) {\n      console.error(\"Failed to set item in IndexedDB storage:\", error);\n      console.warn(\"Raw value that failed to parse:\", _name, value);\n    }\n  },\n\n  removeItem: async (): Promise<void> => {\n    try {\n      await indexedDBStorage.removeItem();\n    } catch (error) {\n      console.error(\"Failed to remove item from IndexedDB storage:\", error);\n    }\n  },\n});\n\n/**\n * Creates a Zustand store with IndexedDB persistence\n *\n * @param initializer - The state creator function\n * @param options - Persistence options including IndexedDB configuration\n * @returns A state creator with IndexedDB persistence middleware applied\n *\n * @example\n * ```typescript\n * const useStore = create(\n *   persistIndexedDB(\n *     (set) => ({\n *       items: [],\n *       addItem: (item) => set((state) => ({ items: [...state.items, item] })),\n *     }),\n *     {\n *       name: 'my-store',\n *       indexedDBConfig: {\n *         dbName: 'ORDERLY_STORE',\n *         storeName: 'ITEMS_STORE',\n *       },\n *     }\n *   )\n * );\n * ```\n */\nexport const persistIndexedDB = <\n  T,\n  Mps extends [StoreMutatorIdentifier, unknown][] = [],\n  Mcs extends [StoreMutatorIdentifier, unknown][] = [],\n  U = T,\n>(\n  initializer: StateCreator<T, [...Mps, [\"zustand/persist\", unknown]], Mcs>,\n  options: IndexedDBPersistOptions<T, U>,\n): StateCreator<T, Mps, [[\"zustand/persist\", U], ...Mcs]> => {\n  const { indexedDBConfig, ...rest } = options;\n  // Create IndexedDB storage instance\n  const indexedDBStorage = createIndexedDBStorage<U>(indexedDBConfig);\n\n  // Create JSON storage wrapper for IndexedDB\n  const jsonStorage = createJSONStorage(() =>\n    adaptToStateStorage(indexedDBStorage, indexedDBConfig.metadata),\n  );\n\n  // Apply persist middleware with IndexedDB storage\n  return persist(initializer, {\n    ...rest,\n    storage: jsonStorage,\n  }) as StateCreator<T, Mps, [[\"zustand/persist\", U], ...Mcs]>;\n};\n","type IndexedDBStorageLike<T> = {\n  getItem: () => Promise<Array<T> | null>;\n};\n\nexport type DataSanitizer<T> = (data: unknown) => T[] | null;\n\nexport const hasUsableData = <T>(data: unknown): data is T[] =>\n  Array.isArray(data) && data.length > 0;\n\nexport const defaultSanitizeData = <T>(data: unknown): T[] | null =>\n  hasUsableData<T>(data) ? data : null;\n\n/**\n * Resolves data on fetch failure: in-memory cache → IndexedDB → fallback.\n *\n * Always returns the original array reference (never a copy) so callers can\n * attribute the result by identity. `sanitizeData` is used as a gate only:\n * data reaching this point was already sanitized when it was committed or\n * hydrated, and re-filtering here would break identity attribution.\n */\nexport const resolveFallbackData = async <T>(\n  currentData: T[] | null,\n  fallbackData: T[] | null | undefined,\n  indexedDBStorage: IndexedDBStorageLike<T>,\n  sanitizeData: DataSanitizer<T> = defaultSanitizeData,\n): Promise<T[] | null> => {\n  if (sanitizeData(currentData) !== null) {\n    return currentData;\n  }\n\n  try {\n    const cached = await indexedDBStorage.getItem();\n    if (sanitizeData(cached) !== null) {\n      return cached;\n    }\n  } catch {\n    // IndexedDB read failed; fall through to fallback data\n  }\n\n  if (fallbackData === null) {\n    return null;\n  }\n\n  if (fallbackData !== undefined && sanitizeData(fallbackData) !== null) {\n    return fallbackData;\n  }\n\n  return currentData;\n};\n","import pathOr from \"ramda/es/pathOr\";\nimport { create } from \"zustand\";\nimport {\n  createIndexedDBStorage,\n  persistIndexedDB,\n  readAttributedIndexedDBState,\n} from \"../../middleware/persistIndexedDB\";\nimport type {\n  AttributedIndexedDBState,\n  IndexedDBMetadataConfig,\n} from \"../../middleware/persistIndexedDB\";\nimport { fetcher } from \"../../utils/fetcher\";\nimport {\n  defaultSanitizeData,\n  resolveFallbackData,\n} from \"./createDataStore.fallback\";\nimport type { DataSanitizer } from \"./createDataStore.fallback\";\n\nconst DEFAULT_REQUEST_PRIORITY = 0;\nconst BROKER_REQUEST_PRIORITY = 1;\nconst DATA_ORIGIN_METADATA_KEY = \"__orderly_data_origin_metadata__\";\nconst DATA_ORIGIN_METADATA_FIELD = \"__orderly_data_origin__\";\n\nexport type DataOrigin = \"broker\" | \"generic\" | \"fallback\" | null;\n\ntype PersistedDataOrigin = Exclude<DataOrigin, \"fallback\" | null>;\n\n// Deliberately omits the broker id: a domain serves a single broker at a\n// time, so cache reuse across a broker change is accepted. After a broker\n// switch the mount-time broker fetch rewrites the cache (a broker request is\n// never blocked by previously committed broker data); only if that refresh\n// fails do the previous broker's rows keep serving with broker authority\n// until a later refresh succeeds.\ntype PersistedDataOriginMetadata = {\n  dataOrigin: PersistedDataOrigin;\n};\n\ntype ActiveRequest<T> = {\n  generation: number;\n  key: string;\n  priority: number;\n  promise: Promise<T[] | null>;\n  cancel: (error: Error) => void;\n};\n\nconst createAbortableRequest = <T>(\n  url: string,\n  formatter: (data: any) => T[],\n  timeoutMs?: number,\n) => {\n  const controller = new AbortController();\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\n  let rejectCancellation: (error: Error) => void = () => {};\n\n  const cancellationPromise = new Promise<never>((_, reject) => {\n    rejectCancellation = reject;\n  });\n\n  const cancel = (error: Error) => {\n    if (controller.signal.aborted) {\n      return;\n    }\n    controller.abort();\n    rejectCancellation(error);\n  };\n\n  if (typeof timeoutMs === \"number\" && timeoutMs > 0) {\n    timeoutId = setTimeout(() => {\n      cancel(new Error(`Request timed out after ${timeoutMs}ms: ${url}`));\n    }, timeoutMs);\n  }\n\n  // fetcher is async in practice, but a synchronous throw must not escape\n  // fetchData (it would skip the loading reset) — funnel it into the race\n  let fetchPromise: Promise<T[]>;\n  try {\n    fetchPromise = fetcher(url, { signal: controller.signal }, { formatter });\n  } catch (error) {\n    fetchPromise = Promise.reject(error);\n  }\n\n  const promise = Promise.race([fetchPromise, cancellationPromise]).finally(\n    () => {\n      if (timeoutId !== undefined) {\n        clearTimeout(timeoutId);\n      }\n    },\n  ) as Promise<T[]>;\n\n  return { cancel, promise };\n};\n\n/**\n * Generic store state for data fetching\n */\nexport interface DataStoreState<T> {\n  data: T[] | null;\n  /**\n   * Provenance and authority level of `data`:\n   * - `\"broker\"`: fetched with broker context (broker_id, incl. default \"orderly\") — highest authority\n   * - `\"generic\"`: fetched without broker context — cannot downgrade broker data\n   * - `\"fallback\"`: static bundled fallback, never persisted\n   * - `null`: no usable data yet\n   *\n   * Authority is sticky for the lifetime of the page: once broker data has\n   * been committed, calls without a broker id reuse it instead of refetching.\n   * Data stores have no automatic refetch — data refreshes only when a caller\n   * invokes fetchData again.\n   */\n  dataOrigin: DataOrigin;\n  loading: boolean;\n  error: Error | null;\n  name: string;\n  /** Whether the store has been hydrated from IndexedDB */\n  hydrated: boolean;\n}\n\n/**\n * Generic store actions for data fetching\n */\nexport interface DataStoreActions<T> {\n  fetchData: (\n    baseUrl?: string,\n    options?: { brokerId?: string },\n  ) => Promise<T[] | null>;\n  setHydrated: (hydrated: boolean) => void;\n}\n\n/**\n * Configuration for creating a data store\n */\nexport interface DataStoreConfig<T> {\n  /** Store name for persistence */\n  name: string;\n  /** Database name */\n  dbName: string;\n  /** Store name in IndexedDB */\n  storeName: string;\n  /** Key path for IndexedDB */\n  keyPath: string;\n  /** API endpoint path */\n  endpoint: string;\n  /** Optional base URL */\n  baseUrl?: string;\n  /** Optional data transformer */\n  formatter?: (data: any) => T[];\n  /** Initial data used when the store is created. */\n  initData?: T[] | null;\n  /**\n   * Fetch-failure fallback when neither memory nor IndexedDB has usable data.\n   * Defaults to `initData` for backward compatibility. Fallback data is never\n   * persisted to IndexedDB; only successful responses are written to cache.\n   */\n  fallbackData?: T[] | null;\n  /** Optional request timeout. Requests without a value keep existing behavior. */\n  timeoutMs?: number;\n  /**\n   * Optional per-row sanitize before data is published or restored. Invalid\n   * rows are dropped; returning null rejects the whole payload.\n   */\n  sanitizeData?: DataSanitizer<T>;\n  /** Persist API data together with its broker/generic authority. */\n  persistDataOrigin?: boolean;\n\n  // brokerId: string;\n}\n\n/**\n * Creates a Zustand store with IndexedDB persistence for data fetching\n *\n * @param config Store configuration\n * @returns A Zustand store hook\n *\n * @example\n * ```typescript\n * const useChainInfoStore = createDataStore<API.Chain>({\n *   name: \"orderly-chain-info\",\n *   dbName: \"ORDERLY_STORE\",\n *   storeName: \"ORDERLY_CHAIN_INFO\",\n *   keyPath: \"chain_id\",\n *   endpoint: \"/v1/public/chain_info\",\n *   baseUrl: \"https://api.orderly.org\"\n * });\n * ```\n */\nexport const createDataStore = <T>(config: DataStoreConfig<T>) => {\n  const {\n    name,\n    dbName,\n    storeName,\n    keyPath,\n    endpoint,\n    baseUrl,\n    formatter = (data: any) => pathOr([], [\"rows\"], data),\n    initData,\n    fallbackData,\n    timeoutMs,\n    sanitizeData,\n    persistDataOrigin = false,\n    // brokerId,\n  } = config;\n\n  const indexedDBStorage = createIndexedDBStorage<T>({\n    dbName,\n    storeName,\n  });\n  const indexedDBMetadata: IndexedDBMetadataConfig | undefined =\n    persistDataOrigin\n      ? {\n          keyPath,\n          recordKey: DATA_ORIGIN_METADATA_KEY,\n          metadataField: DATA_ORIGIN_METADATA_FIELD,\n        }\n      : undefined;\n\n  // Captured by reference so `partialize` can recognize data that was never\n  // fetched (initial state) and skip persisting it\n  const initialData = typeof initData === \"undefined\" ? [] : initData;\n  const fetchFailureFallback =\n    typeof fallbackData === \"undefined\" ? initData : fallbackData;\n  const sanitizeFn = sanitizeData ?? defaultSanitizeData<T>;\n  const initialDataOrigin: DataOrigin =\n    sanitizeFn(initialData) !== null ? \"fallback\" : null;\n  let requestGeneration = 0;\n  let hasCommittedRequest = false;\n  let activeRequest: ActiveRequest<T> | null = null;\n  let committedRequestPriority = DEFAULT_REQUEST_PRIORITY;\n\n  return create(\n    persistIndexedDB<DataStoreState<T> & DataStoreActions<T>>(\n      (set, get) => {\n        const store = {\n          name: storeName,\n          data: initialData,\n          dataOrigin: initialDataOrigin,\n          loading: false,\n          error: null,\n          hydrated: false,\n          setHydrated: (hydrated: boolean) => set({ hydrated }),\n          fetchData: (\n            dynamicBaseUrl?: string,\n            options?: { brokerId?: string },\n          ) => {\n            const brokerId = options?.brokerId?.trim();\n            const hasBrokerContext = !!brokerId;\n            const priority = hasBrokerContext\n              ? BROKER_REQUEST_PRIORITY\n              : DEFAULT_REQUEST_PRIORITY;\n            const brokerIdQuery =\n              hasBrokerContext && brokerId !== \"orderly\"\n                ? `?broker_id=${encodeURIComponent(brokerId)}`\n                : \"\";\n            const url = `${dynamicBaseUrl || baseUrl || \"\"}${endpoint}${brokerIdQuery}`;\n\n            if (\n              activeRequest?.key === url &&\n              activeRequest.priority === priority\n            ) {\n              return activeRequest.promise;\n            }\n\n            // A generic provider request must not replace an authoritative\n            // broker request, regardless of React effect ordering.\n            if (activeRequest && activeRequest.priority > priority) {\n              return activeRequest.promise;\n            }\n\n            // Once valid broker data has been committed in this store session,\n            // generic refreshes may use it but cannot downgrade it.\n            if (committedRequestPriority > priority) {\n              return Promise.resolve(get().data);\n            }\n\n            const generation = ++requestGeneration;\n            activeRequest?.cancel(new Error(`Request superseded: ${url}`));\n            set({ loading: true, error: null });\n\n            const request = createAbortableRequest(url, formatter, timeoutMs);\n            const promise = (async (): Promise<T[] | null> => {\n              try {\n                const data = await request.promise;\n\n                if (generation !== requestGeneration) {\n                  return get().data;\n                }\n\n                if (committedRequestPriority > priority) {\n                  set({ loading: false });\n                  return get().data;\n                }\n\n                const sanitized = sanitizeFn(data);\n                if (sanitized === null) {\n                  throw new Error(`Invalid data received for store: ${name}`);\n                }\n\n                if (sanitized.length < data.length) {\n                  console.warn(\n                    `[createDataStore] ${name}: dropped ${\n                      data.length - sanitized.length\n                    } invalid rows from the response`,\n                  );\n                }\n\n                // Mark the sanitized network response before publishing it so\n                // a hydration that completes later cannot restore stale data.\n                hasCommittedRequest = true;\n                set({\n                  data: sanitized,\n                  dataOrigin: hasBrokerContext ? \"broker\" : \"generic\",\n                  loading: false,\n                  error: null,\n                });\n                committedRequestPriority = Math.max(\n                  committedRequestPriority,\n                  priority,\n                );\n                return sanitized;\n              } catch (error) {\n                if (generation !== requestGeneration) {\n                  return get().data;\n                }\n\n                const currentState = get();\n                const currentData = currentState.data;\n                const cacheResult: {\n                  state: AttributedIndexedDBState<\n                    T,\n                    PersistedDataOriginMetadata\n                  > | null;\n                } = { state: null };\n                const fallbackStorage = {\n                  getItem: async (): Promise<T[] | null> => {\n                    if (!persistDataOrigin) {\n                      const cached = await indexedDBStorage.getItem();\n                      return cached === null ? null : sanitizeFn(cached);\n                    }\n\n                    if (!indexedDBMetadata) {\n                      return null;\n                    }\n                    const attributed = await readAttributedIndexedDBState<\n                      T,\n                      PersistedDataOriginMetadata\n                    >(indexedDBStorage, indexedDBMetadata);\n                    const cachedSource = attributed?.metadata?.dataOrigin;\n                    if (\n                      !attributed ||\n                      (cachedSource !== \"broker\" && cachedSource !== \"generic\")\n                    ) {\n                      return null;\n                    }\n                    // Sanitize before publishing so a cache holding corrupted\n                    // rows (e.g. written by an older release) never leaks them\n                    // into state on the fetch-failure path.\n                    const sanitizedCache = sanitizeFn(attributed.data);\n                    if (sanitizedCache === null) {\n                      return null;\n                    }\n                    cacheResult.state = {\n                      ...attributed,\n                      data: sanitizedCache,\n                    };\n                    return sanitizedCache;\n                  },\n                };\n                const data = await resolveFallbackData(\n                  currentData,\n                  fetchFailureFallback,\n                  fallbackStorage,\n                  sanitizeFn,\n                );\n\n                if (generation !== requestGeneration) {\n                  return get().data;\n                }\n\n                const fallbackUpdate = {\n                  error: error as Error,\n                  loading: false,\n                };\n                // Attribution relies on reference identity: resolveFallbackData\n                // returns the original current/cached/fallback array, so each\n                // comparison maps the result back to its source.\n                const resolvedDataOrigin: DataOrigin =\n                  data === currentData\n                    ? currentState.dataOrigin\n                    : cacheResult.state?.data === data\n                      ? cacheResult.state.metadata.dataOrigin\n                      : data === fetchFailureFallback\n                        ? \"fallback\"\n                        : data === null\n                          ? null\n                          : currentState.dataOrigin;\n\n                if (resolvedDataOrigin === \"broker\") {\n                  committedRequestPriority = BROKER_REQUEST_PRIORITY;\n                }\n\n                if (data !== currentData) {\n                  set({\n                    ...fallbackUpdate,\n                    data,\n                    dataOrigin: resolvedDataOrigin,\n                  });\n                } else {\n                  set(fallbackUpdate);\n                }\n                return data;\n              } finally {\n                if (activeRequest?.generation === generation) {\n                  activeRequest = null;\n                }\n              }\n            })();\n\n            activeRequest = {\n              generation,\n              key: url,\n              priority,\n              promise,\n              cancel: request.cancel,\n            };\n\n            return promise;\n          },\n        };\n        return store;\n      },\n      {\n        name,\n        indexedDBConfig: {\n          dbName,\n          storeName,\n          metadata: indexedDBMetadata,\n        },\n        //@ts-ignore\n        // Only persist data obtained from a successful fetch. zustand's\n        // persist middleware writes on every set(), so both guards are\n        // needed: `error` skips error-path writes, and the `initialData`\n        // reference check skips the pristine state (e.g. the initial\n        // `loading: true` set) whose data is still the static initData —\n        // a persisted copy would shadow newer initData in future releases.\n        partialize: (state) => {\n          if (\n            state.error ||\n            state.data === initialData ||\n            state.dataOrigin === \"fallback\" ||\n            state.dataOrigin === null\n          ) {\n            return undefined;\n          }\n\n          return persistDataOrigin\n            ? {\n                data: state.data as T[],\n                metadata: { dataOrigin: state.dataOrigin },\n              }\n            : (state.data as T[]);\n        },\n        merge: (persisted, current) => {\n          const attributed = persistDataOrigin\n            ? (persisted as\n                | AttributedIndexedDBState<T, PersistedDataOriginMetadata>\n                | undefined)\n            : undefined;\n          const persistedData = persistDataOrigin\n            ? attributed?.data\n            : (persisted as T[] | undefined);\n          const persistedDataOrigin: DataOrigin = persistDataOrigin\n            ? (attributed?.metadata?.dataOrigin ?? null)\n            : persistedData\n              ? \"generic\"\n              : null;\n          const persistedPriority =\n            persistedDataOrigin === \"broker\"\n              ? BROKER_REQUEST_PRIORITY\n              : DEFAULT_REQUEST_PRIORITY;\n          const sanitizedPersisted =\n            persistedData !== undefined ? sanitizeFn(persistedData) : null;\n          const canUsePersistedData =\n            sanitizedPersisted !== null &&\n            (persistedDataOrigin === \"broker\" ||\n              persistedDataOrigin === \"generic\") &&\n            (!hasCommittedRequest ||\n              persistedPriority > committedRequestPriority);\n\n          let loading = current.loading;\n          if (canUsePersistedData) {\n            committedRequestPriority = Math.max(\n              committedRequestPriority,\n              persistedPriority,\n            );\n\n            if (\n              persistedPriority === BROKER_REQUEST_PRIORITY &&\n              activeRequest &&\n              activeRequest.priority < persistedPriority\n            ) {\n              requestGeneration += 1;\n              activeRequest.cancel(\n                new Error(\"Generic request superseded by broker cache\"),\n              );\n              activeRequest = null;\n              loading = false;\n            }\n          }\n\n          return {\n            ...current,\n            // When nothing was stored, zustand calls merge with\n            // `undefined` — keep the initial data instead of wiping it. A\n            // configured sanitizer prevents corrupted cache hydration, while\n            // a committed request prevents late hydration from restoring an\n            // older cache snapshot.\n            data: (canUsePersistedData ? sanitizedPersisted : current.data) as\n              | T[]\n              | null,\n            dataOrigin: canUsePersistedData\n              ? persistedDataOrigin\n              : current.dataOrigin,\n            loading,\n          };\n        },\n        /**\n         * Callback executed after rehydration from IndexedDB completes\n         * Sets hydrated flag to true to indicate store is ready\n         */\n        onRehydrateStorage: () => (state, error) => {\n          if (state && !error) {\n            // state.hydrated = true;\n            state.setHydrated(true);\n          }\n        },\n      },\n    ),\n  );\n};\n","import { API } from \"@orderly.network/types\";\nimport { ORDERLY_MAIN_CHAIN_INFO } from \"../../middleware/indexedDBManager\";\nimport { mainnetChainFallback } from \"./chainInfoFallback\";\nimport { sanitizeChainInfoData } from \"./chainInfoValidation\";\nimport { createDataStore } from \"./createDataStore\";\n\nconst CHAIN_INFO_TIMEOUT_MS = 10_000;\n\nexport const useMainnetChainsStore = createDataStore<API.Chain>({\n  name: \"orderly-main-chain-info\",\n  dbName: \"ORDERLY_STORE\",\n  storeName: ORDERLY_MAIN_CHAIN_INFO.name,\n  keyPath: ORDERLY_MAIN_CHAIN_INFO.keyPath,\n  endpoint: \"/v1/public/chain_info\",\n  baseUrl: \"https://api.orderly.org\",\n  initData: null,\n  fallbackData: mainnetChainFallback,\n  timeoutMs: CHAIN_INFO_TIMEOUT_MS,\n  sanitizeData: sanitizeChainInfoData,\n  persistDataOrigin: true,\n});\n","import { API } from \"@orderly.network/types\";\nimport { ORDERLY_TEST_CHAIN_INFO } from \"../../middleware/indexedDBManager\";\nimport { testnetChainFallback } from \"./chainInfoFallback\";\nimport { sanitizeChainInfoData } from \"./chainInfoValidation\";\nimport { createDataStore } from \"./createDataStore\";\n\nconst CHAIN_INFO_TIMEOUT_MS = 10_000;\n\n// Unlike the mainnet store, testnet chains intentionally use the static\n// fallback as `initData`: in prod the testnet API is not guaranteed to be\n// reachable, so the store must serve the fallback immediately and upgrade\n// to fetched data only when the request succeeds. Consumers may therefore\n// initialize with the fallback first — this divergence from mainnet\n// (initData: null + fallbackData) is by design.\nexport const useTestnetChainsStore = createDataStore<API.Chain>({\n  name: \"orderly-test-chain-info\",\n  dbName: \"ORDERLY_STORE\",\n  storeName: ORDERLY_TEST_CHAIN_INFO.name,\n  keyPath: ORDERLY_TEST_CHAIN_INFO.keyPath,\n  endpoint: \"/v1/public/chain_info\",\n  baseUrl: \"https://testnet-api.orderly.org\",\n  initData: testnetChainFallback,\n  timeoutMs: CHAIN_INFO_TIMEOUT_MS,\n  sanitizeData: sanitizeChainInfoData,\n  persistDataOrigin: true,\n});\n","import { API } from \"@orderly.network/types\";\nimport { ORDERLY_MAIN_TOKEN } from \"../../middleware/indexedDBManager\";\nimport { createDataStore } from \"./createDataStore\";\n\nexport const useMainTokenStore = createDataStore<API.Token>({\n  name: \"orderly-main-token\",\n  dbName: \"ORDERLY_STORE\",\n  storeName: ORDERLY_MAIN_TOKEN.name,\n  keyPath: ORDERLY_MAIN_TOKEN.keyPath,\n  endpoint: \"/v1/public/token\",\n  baseUrl: \"https://api.orderly.org\",\n});\n","import { create } from \"zustand\";\nimport { persist } from \"zustand/middleware\";\n\nexport type SwapSupport = {\n  data: Record<string, any> | null;\n  loading: boolean;\n  error: Error | null;\n};\n\nexport type SwapSupportActions = {\n  fetchData: () => Promise<Record<string, any> | null>;\n};\n\nexport const useSwapSupportStore = create<SwapSupport & SwapSupportActions>()(\n  persist(\n    (set) => ({\n      data: null,\n      loading: false,\n      error: null,\n\n      fetchData: async () => {\n        try {\n          set({ loading: true, error: null });\n          const res = await fetch(\"https://fi-api.woo.org/swap_support\");\n          const data = await res.json();\n          if (data.status === \"ok\") {\n            set({ data: data.data, loading: false, error: null });\n            return data.data;\n          }\n          // When API returns error status, preserve existing data by not updating it\n          set((state) => ({\n            data: state.data ?? {},\n            error: new Error(data.message),\n            loading: false,\n          }));\n          return null;\n        } catch (error) {\n          console.log(\"!!!swap support error\", error);\n          // When fetch fails, preserve existing data by not updating it\n          set((state) => ({\n            data: state.data ?? {},\n            error: error as Error,\n            loading: false,\n          }));\n          return null;\n        }\n      },\n    }),\n    {\n      name: \"orderly-swap-support\", // Key for localStorage persistence\n      partialize: (state) => ({ data: state.data }), // Only persist data field\n    },\n  ),\n);\n","import { API } from \"@orderly.network/types\";\nimport { ORDERLY_SYMBOLS } from \"../../middleware/indexedDBManager\";\nimport { createDataStore } from \"./createDataStore\";\n\nexport const useSymbolStore = createDataStore<API.Symbol>({\n  name: \"orderly-main-symbols\",\n  dbName: \"ORDERLY_STORE\",\n  storeName: ORDERLY_SYMBOLS.name,\n  keyPath: ORDERLY_SYMBOLS.keyPath,\n  endpoint: \"/v1/public/info\",\n});\n","import {\n  API,\n  ArbitrumSepoliaTokenInfo,\n  SolanaDevnetTokenInfo,\n  TesnetTokenFallback,\n} from \"@orderly.network/types\";\nimport { ORDERLY_TEST_TOKEN } from \"../../middleware/indexedDBManager\";\nimport { createDataStore } from \"./createDataStore\";\n\nconst testnetTokenFallback = TesnetTokenFallback([\n  ArbitrumSepoliaTokenInfo,\n  SolanaDevnetTokenInfo,\n]);\n\nexport const useTestTokenStore = createDataStore<API.Token>({\n  name: \"orderly-main-token\",\n  dbName: \"ORDERLY_STORE\",\n  storeName: ORDERLY_TEST_TOKEN.name,\n  keyPath: ORDERLY_TEST_TOKEN.keyPath,\n  endpoint: \"/v1/public/token\",\n  initData: testnetTokenFallback as API.Token[],\n});\n","import { useContext, useEffect, useMemo, useState } from \"react\";\nimport useSWR from \"swr\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./orderly/appStore\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useMainnetChainsStore } from \"./provider/store/chainInfoMainStore\";\nimport { useTestnetChainsStore } from \"./provider/store/chainInfoTestStore\";\nimport { useMainTokenStore } from \"./provider/store/mainTokenStore\";\nimport { useSwapSupportStore } from \"./provider/store/swapSupportStore\";\nimport { useSymbolStore } from \"./provider/store/symbolStore\";\nimport { useTestTokenStore } from \"./provider/store/testTokenStore\";\n\nexport const usePreLoadData = () => {\n  const [timestampOffsetInitialized, setTimestampOffsetInitialized] =\n    useState(false);\n\n  const { configStore, enableSwapDeposit } = useContext(OrderlyContext);\n\n  const env = configStore.get(\"env\");\n  const apiBaseUrl = configStore.get(\"apiBaseUrl\");\n\n  const urlPrefix =\n    env === \"prod\"\n      ? \"https://testnet-api.orderly.org\"\n      : configStore.get(\"apiBaseUrl\");\n\n  // Optimize store selectors using Zustand's select to only get fetchData methods\n  // This prevents unnecessary re-renders when other store state changes\n  const fetchMainTokens = useMainTokenStore((state) => state.fetchData);\n  const fetchTestTokens = useTestTokenStore((state) => state.fetchData);\n  const fetchMainChains = useMainnetChainsStore((state) => state.fetchData);\n  const fetchTestChains = useTestnetChainsStore((state) => state.fetchData);\n  const fetchSymbols = useSymbolStore((state) => state.fetchData);\n  const fetchSwapSupport = useSwapSupportStore((state) => state.fetchData);\n  const setTokensInfo = useAppStore((state) => state.actions.setTokensInfo);\n\n  const mainTokenInfo = useMainTokenStore((state) => state.data);\n  const testTokenInfo = useTestTokenStore((state) => state.data);\n  const swapSupportInfo = useSwapSupportStore((state) => state.data);\n\n  useEffect(() => {\n    fetchMainTokens();\n    fetchSymbols(apiBaseUrl).then((symbols) => {\n      // console.info(\"Symbols loaded:\", symbols);\n    });\n    fetchMainChains(undefined, {\n      brokerId: configStore.get(\"brokerId\"),\n    });\n  }, []);\n\n  useEffect(() => {\n    if (!urlPrefix) return;\n    fetchTestTokens(urlPrefix);\n    fetchTestChains(urlPrefix, {\n      brokerId: configStore.get(\"brokerId\"),\n    });\n  }, [urlPrefix]);\n\n  useEffect(() => {\n    if (!mainTokenInfo || !testTokenInfo) return;\n\n    setTokensInfo(env === \"prod\" ? mainTokenInfo : testTokenInfo);\n  }, [mainTokenInfo, testTokenInfo]);\n\n  useEffect(() => {\n    if (swapSupportInfo || !enableSwapDeposit) return;\n    fetchSwapSupport();\n  }, [swapSupportInfo, enableSwapDeposit]);\n\n  const { data: systemInfo } = useSWR(\n    \"/v1/public/system_info\",\n    async (url: string, init?: RequestInit) => {\n      const data = await fetch(\n        url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`,\n        init,\n      );\n      return await data.json();\n    },\n    {\n      errorRetryCount: 3,\n      errorRetryInterval: 500,\n    },\n  );\n\n  useEffect(() => {\n    if (timestampOffsetInitialized) return;\n    if (typeof systemInfo !== \"undefined\") {\n      const serverTimestamp = systemInfo.timestamp;\n      const localTimestamp = Date.now();\n      // Calculate the difference between server and local time\n      const timestampOffset = serverTimestamp - localTimestamp;\n\n      if (isNaN(timestampOffset)) {\n        return;\n      }\n\n      // Store the offset globally for use in API calls\n      (\n        getGlobalObject() as Record<string, unknown>\n      ).__ORDERLY_timestamp_offset = timestampOffset;\n      setTimestampOffsetInitialized(true);\n    }\n  }, [systemInfo, timestampOffsetInitialized]);\n\n  const isDone = useMemo(() => {\n    return timestampOffsetInitialized;\n  }, [timestampOffsetInitialized]);\n\n  return {\n    error: null,\n    done: isDone,\n  };\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\nexport function useSessionStorage<T>(\n  key: string,\n  initialValue: T\n): [T, (data: any) => void] {\n  // Get from session storage then\n  // parse stored json or return initialValue\n  const readValue = useCallback((): T => {\n    // Prevent build error \"window is undefined\" but keep keep working\n    if (typeof window === \"undefined\") {\n      return initialValue;\n    }\n\n    try {\n      const item = window.sessionStorage.getItem(key);\n      return item ? (parseJSON(item) as T) : initialValue;\n    } catch (error) {\n      console.warn(`Error reading sessionStorage key “${key}”:`, error);\n      return initialValue;\n    }\n  }, [initialValue, key]);\n  const [storedValue, setStoredValue] = useState<T>(readValue);\n\n  const setValue: React.Dispatch<T> = (value: any) => {\n    // Prevent build error \"window is undefined\" but keeps working\n    if (typeof window == \"undefined\") {\n      console.warn(\n        `Tried setting sessionStorage key “${key}” even though environment is not a client`\n      );\n    }\n\n    try {\n      // Allow value to be a function so we have the same API as useState\n      const newValue = value instanceof Function ? value(storedValue) : value;\n\n      // Save to session storage\n      window.sessionStorage.setItem(key, JSON.stringify(newValue));\n\n      // Save state\n      setStoredValue(newValue);\n\n      // We dispatch a custom event so every useSessionStorage hook are notified\n      // window.dispatchEvent(new Event(\"session-storage\"));\n    } catch (error) {\n      console.warn(`Error setting sessionStorage key “${key}”:`, error);\n    }\n  };\n\n  useEffect(() => {\n    setStoredValue(readValue());\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (typeof window == \"undefined\") {\n      return;\n    }\n    window.addEventListener?.(\"storage\", handleStorageChange);\n\n    return () => {\n      window.removeEventListener?.(\"storage\", handleStorageChange);\n    };\n  });\n\n  const handleStorageChange = useCallback(\n    (event: StorageEvent | CustomEvent) => {\n      if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n        return;\n      }\n      setStoredValue(readValue());\n    },\n    [key, readValue]\n  );\n\n  return [storedValue, setValue];\n}\n","import { NetworkId } from \"@orderly.network/types\";\nimport { Chain, useChains } from \"./\";\n\nexport type CurrentChain = {\n  id: number;\n  info?: Chain;\n};\n\nexport const useNetworkInfo = (networkId: NetworkId) => {\n  const [, { findByChainId }] = useChains(networkId, {\n    pick: \"network_infos\",\n    filter: (chain: any) =>\n      chain.network_infos?.bridge_enable || chain.network_infos?.bridgeless,\n  });\n\n  return (chainId: number) => {\n    const chain = findByChainId(chainId);\n    return {\n      id: chainId,\n      info: chain,\n    } as CurrentChain;\n  };\n};\n","import type { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nexport const useAccountInfo = () => {\n  return usePrivateQuery<API.AccountInfo>(\"/v1/client/info\", {\n    revalidateOnFocus: false,\n  });\n};\n","import { useMemo } from \"react\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useAccountInfo } from \"./orderly/useAccountInfo\";\nimport type { RefferalAPI } from \"./referral\";\nimport { usePrivateQuery } from \"./usePrivateQuery\";\nimport { useWS } from \"./useWS\";\nimport { noCacheConfig } from \"./utils\";\n\nconst bpsToFraction = (bps?: number) => new Decimal(bps ?? 0).mul(0.0001); // 1 bps -> 0.0001\n\nconst formatFractionAsPercent = (val: Decimal) => `${val.mul(100).toNumber()}%`;\n\nexport const useFeeState = () => {\n  const { data: accountInfo, isLoading: isAccountLoading } = useAccountInfo();\n\n  const { data: referralData } = usePrivateQuery<RefferalAPI.ReferralInfo>(\n    \"/v1/referral/info\",\n    {\n      revalidateOnFocus: true,\n      errorRetryCount: 3,\n      ...noCacheConfig,\n    },\n  );\n\n  const ws = useWS();\n  const topic = \"account\";\n  const { data: wsAccountData } = useSWRSubscription(\n    \"account\",\n    (_, { next }) => {\n      const unsubscribe = ws.subscribe(topic, {\n        onMessage: (message: unknown) => {\n          next(null, message);\n        },\n      });\n\n      return () => {\n        unsubscribe?.();\n      };\n    },\n  );\n\n  const takerFeeBps = useMemo(() => {\n    if (wsAccountData?.accountDetail?.futuresTakerFeeRate) {\n      return wsAccountData?.accountDetail?.futuresTakerFeeRate;\n    }\n    return accountInfo?.futures_taker_fee_rate;\n  }, [\n    accountInfo?.futures_taker_fee_rate,\n    wsAccountData?.accountDetail?.futuresTakerFeeRate,\n  ]);\n  const makerFeeBps = useMemo(() => {\n    if (wsAccountData?.accountDetail?.futuresMakerFeeRate) {\n      return wsAccountData?.accountDetail?.futuresMakerFeeRate;\n    }\n    return accountInfo?.futures_maker_fee_rate;\n  }, [\n    accountInfo?.futures_maker_fee_rate,\n    wsAccountData?.accountDetail?.futuresMakerFeeRate,\n  ]);\n  const rwaTakerFeeBps = useMemo(() => {\n    if (wsAccountData?.accountDetail?.rwaFuturesTakerFeeRate) {\n      return wsAccountData?.accountDetail?.rwaFuturesTakerFeeRate;\n    }\n    return accountInfo?.rwa_taker_fee_rate;\n  }, [\n    accountInfo?.rwa_taker_fee_rate,\n    wsAccountData?.accountDetail?.rwaFuturesTakerFeeRate,\n  ]);\n  const rwaMakerFeeBps = useMemo(() => {\n    if (wsAccountData?.accountDetail?.rwaFuturesMakerFeeRate) {\n      return wsAccountData?.accountDetail?.rwaFuturesMakerFeeRate;\n    }\n    return accountInfo?.rwa_maker_fee_rate;\n  }, [\n    accountInfo?.rwa_maker_fee_rate,\n    wsAccountData?.accountDetail?.rwaFuturesMakerFeeRate,\n  ]);\n\n  const refereeRebate = referralData?.referee_info?.referee_rebate_rate;\n\n  const takerFee = useMemo(() => {\n    if (isAccountLoading || takerFeeBps === null || takerFeeBps === undefined) {\n      return \"-\";\n    }\n    return formatFractionAsPercent(bpsToFraction(takerFeeBps));\n  }, [isAccountLoading, takerFeeBps]);\n\n  const makerFee = useMemo(() => {\n    if (isAccountLoading || makerFeeBps === null || makerFeeBps === undefined) {\n      return \"-\";\n    }\n    return formatFractionAsPercent(bpsToFraction(makerFeeBps));\n  }, [isAccountLoading, makerFeeBps]);\n\n  const rwaTakerFee = useMemo(() => {\n    if (\n      isAccountLoading ||\n      rwaTakerFeeBps === null ||\n      rwaTakerFeeBps === undefined\n    ) {\n      return \"-\";\n    }\n    return formatFractionAsPercent(bpsToFraction(rwaTakerFeeBps));\n  }, [isAccountLoading, rwaTakerFeeBps]);\n\n  const rwaMakerFee = useMemo(() => {\n    if (\n      isAccountLoading ||\n      rwaMakerFeeBps === null ||\n      rwaMakerFeeBps === undefined\n    ) {\n      return \"-\";\n    }\n    return formatFractionAsPercent(bpsToFraction(rwaMakerFeeBps));\n  }, [isAccountLoading, rwaMakerFeeBps]);\n\n  return {\n    takerFee,\n    makerFee,\n    refereeRebate,\n    rwaTakerFee,\n    rwaMakerFee,\n  } as const;\n};\n","import * as amplitude from \"@amplitude/analytics-browser\";\nimport { SimpleDI } from \"@orderly.network/core\";\nimport { EventEmitter } from \"@orderly.network/core\";\nimport { TrackerEventName } from \"@orderly.network/types\";\n\nexport enum ENVType {\n  prod = \"prod\",\n  staging = \"staging\",\n  qa = \"qa\",\n  dev = \"dev\",\n}\nconst apiKeyMap = {\n  dev: \"4d6b7db0fdd6e9de2b6a270414fd51e0\",\n  qa: \"96476b00bc2701360f9b480629ae5263\",\n  staging: \"dffc00e003479b86d410c448e00f2304\",\n  prod: \"3ab9ae56ed16cc57bc2ac97ffc1098c2\",\n};\n\nfunction getAmplitudeConfig(\n  env: ENVType,\n  amplitudeConfig?: {\n    amplitudeId?: string;\n    serverZone?: amplitude.Types.ServerZoneType;\n  },\n): { amplitudeId: string; options: amplitude.Types.BrowserOptions } {\n  if (!amplitudeConfig) {\n    return {\n      amplitudeId: apiKeyMap[env],\n      options: {\n        serverZone: \"EU\",\n      },\n    };\n  }\n  const { amplitudeId, serverZone } = amplitudeConfig;\n  return {\n    amplitudeId: amplitudeId!,\n    options: serverZone\n      ? {\n          serverZone: serverZone as amplitude.Types.ServerZoneType,\n        }\n      : {},\n  };\n}\n\nexport class AmplitudeTracker {\n  static instanceName = \"amplitudeTracker\";\n  private _userId: string | undefined;\n  private _sdkInfoTag: string | undefined;\n  private _ee = SimpleDI.get<EventEmitter>(\"EE\");\n\n  constructor(\n    env: ENVType,\n    amplitudeConfig:\n      | { amplitudeId: string; serverZone?: amplitude.Types.ServerZoneType }\n      | undefined,\n    sdkInfo: any,\n  ) {\n    const { amplitudeId, options } = getAmplitudeConfig(env, amplitudeConfig);\n    amplitude.init(amplitudeId!, options);\n    this.setSdkInfo(sdkInfo);\n    this._bindEvents();\n  }\n\n  setUserId(userId: string) {\n    if (userId === this._userId) {\n      return;\n    }\n    amplitude.setUserId(userId);\n    this._userId = userId;\n  }\n\n  setSdkInfo(sdkInfo: any) {\n    if (this._sdkInfoTag && sdkInfo.address === this._sdkInfoTag) return;\n    this.identify(sdkInfo);\n    this._sdkInfoTag = sdkInfo.address;\n  }\n\n  identify(properties: any) {\n    const identify = new amplitude.Identify();\n    Object.entries(properties).forEach(([key, value]) => {\n      identify.set(key, value as string);\n    });\n    amplitude.identify(identify);\n  }\n\n  track(eventName: TrackerEventName, properties?: any) {\n    amplitude.track(eventName, properties);\n  }\n\n  private _bindEvents() {\n    const listenKeys = Object.values(TrackerEventName);\n    listenKeys.forEach((key) => {\n      this._ee.addListener(key, (params = {}) => {\n        if (key === TrackerEventName.trackIdentifyUserId) {\n          this.setUserId(params);\n        } else if (key === TrackerEventName.trackIdentify) {\n          this.identify(params);\n        } else if (key === TrackerEventName.trackCustomEvent) {\n          const { eventName, ...rest } = params;\n          if (!eventName) {\n            return;\n          }\n\n          this.track(eventName, rest);\n        } else {\n          this.track(key, params);\n        }\n      });\n    });\n  }\n}\n","import { useContext } from \"react\";\nimport useConstant from \"use-constant\";\nimport { SimpleDI } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { ENVType, AmplitudeTracker } from \"./services/amplitudeTracker\";\n\nexport const useTrackingInstance = () => {\n  const { configStore, amplitudeConfig } = useContext(OrderlyContext);\n\n  if (!configStore) {\n    throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n  }\n\n  const env = configStore.get(\"env\") as ENVType;\n  const brokerId = configStore.get(\"brokerId\") as string;\n\n  const trackInstace = useConstant(() => {\n    let instance = SimpleDI.get<AmplitudeTracker>(\"amplitudeTracker\");\n    if (!instance) {\n      instance = new AmplitudeTracker(env, amplitudeConfig ?? undefined, {\n        brokerId,\n        sdk_version:\n          window?.__ORDERLY_VERSION__?.[\"@orderly.network/net\"] ?? \"\",\n      });\n\n      SimpleDI.registerByName(\"instance\", instance);\n    }\n    return instance;\n  });\n\n  return trackInstace;\n};\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport const useKeyStore = () => {\n  const ctx = useContext(OrderlyContext);\n\n  return ctx.keyStore;\n};\n","import { SimpleDI } from \"@orderly.network/core\";\n\nexport const useSimpleDI = <T>() => {\n  return {\n    get: SimpleDI.get<T>,\n    // getOr: SimpleDI.getOr<T>(name, SimpleDI.get<T>(name)),\n    register: SimpleDI.register,\n  };\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { useWS } from \"./useWS\";\n\nexport enum WsNetworkStatus {\n  Connected = \"connected\",\n  Unstable = \"unstable\",\n  Disconnected = \"disconnected\",\n}\n\nexport function useWsStatus() {\n  const ws = useWS();\n  const [wsStatus, setWsStatus] = useState<WsNetworkStatus>(\n    ws.client.public.readyState\n      ? WsNetworkStatus.Connected\n      : WsNetworkStatus.Disconnected,\n  );\n\n  const connectCount = useRef(0);\n\n  useEffect(() => {\n    ws.on(\"status:change\", (status: any) => {\n      const { type, isPrivate } = status;\n      if (!isPrivate) {\n        switch (type) {\n          case \"open\":\n            connectCount.current = 0;\n            setWsStatus(WsNetworkStatus.Connected);\n            break;\n          case \"close\":\n            connectCount.current = 0;\n            setWsStatus(WsNetworkStatus.Disconnected);\n            break;\n          case \"reconnecting\":\n            connectCount.current++;\n            if (connectCount.current >= 3) {\n              setWsStatus(WsNetworkStatus.Unstable);\n            }\n            break;\n        }\n      }\n    });\n    return () => {\n      ws.off(\"status:change\", () => {});\n    };\n  }, []);\n\n  return wsStatus;\n}\n","import { createContext, useContext } from \"react\";\nimport { type WsNetworkStatus } from \"../../useWsStatus\";\n\nexport interface StatusContextState {\n  ws?: WsNetworkStatus;\n}\n\nexport const StatusContext = createContext<StatusContextState>({});\n\nexport const useStatusContext = () => {\n  return useContext(StatusContext);\n};\n","import { PropsWithChildren, useMemo } from \"react\";\nimport { useWsStatus } from \"../../useWsStatus\";\nimport { StatusContext, StatusContextState } from \"./statusContext\";\n\nexport const StatusProvider: React.FC<PropsWithChildren> = (props) => {\n  const wsStatus = useWsStatus();\n\n  const memoizedValue = useMemo<StatusContextState>(() => {\n    return { ws: wsStatus };\n  }, [wsStatus]);\n\n  return (\n    <StatusContext.Provider value={memoizedValue}>\n      {props.children}\n    </StatusContext.Provider>\n  );\n};\n","export const DEFAULT_TICK_SIZES: Record<PropertyKey, string> = {\n  PERP_BTC_USDC: \"1\",\n  PERP_ETH_USDC: \"0.1\",\n  PERP_SOL_USDC: \"0.01\",\n};\n\nexport const DEFAULT_SYMBOL_DEPTHS: Record<PropertyKey, number[]> = {\n  PERP_ETH_USDC: [0.01, 0.1, 0.5, 1, 10],\n};\n","import { ConfigKey, ConfigStore } from \"@orderly.network/core\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { windowGuard } from \"@orderly.network/utils\";\n\nexport class ProxyConfigStore implements ConfigStore {\n  private _proxyConfigStore?: ConfigStore;\n\n  constructor(private readonly _originConfigStore: ConfigStore) {\n    windowGuard(() => {\n      this._proxyConfigStore =\n        (window as any).__ORDERLY_CONFIG_STORE__ || _originConfigStore;\n    });\n  }\n\n  get<T>(key: ConfigKey): T {\n    const value = this._proxyConfigStore?.get(key);\n    if (typeof value === \"undefined\") {\n      return this._originConfigStore.get(key);\n    }\n    return value as T;\n  }\n\n  getOr<T>(key: ConfigKey, defaultValue: T): T {\n    return (this._proxyConfigStore ?? this._originConfigStore).getOr(\n      key,\n      defaultValue\n    );\n  }\n\n  set<T>(key: ConfigKey, value: T): void {\n    (this._proxyConfigStore ?? this._originConfigStore).set(key, value);\n  }\n\n  clear(): void {\n    throw new SDKError(\"Method not implemented.\");\n  }\n\n  getFromOrigin<T>(key: ConfigKey): T {\n    return this._originConfigStore.get(key);\n  }\n\n  getOrFromOrigin<T>(key: ConfigKey, defaultValue: T): T {\n    return this._originConfigStore.getOr(key, defaultValue);\n  }\n\n  setToOrigin<T>(key: ConfigKey, value: T): void {\n    this._originConfigStore.set(key, value);\n  }\n\n  clearOrigin(): void {\n    this._originConfigStore.clear();\n  }\n}\n","import { isNil } from \"ramda\";\nimport { API } from \"@orderly.network/types\";\n\n/** Defines the depth of object access (1 or 2 levels) */\ntype ObjectDepth = 1 | 2;\n\n/** Type for the input data object */\ntype Data<T> = Record<string, T> | null | undefined;\n\n/** Interface for checking if a value is nil */\ntype Nil = { isNil: boolean };\n\n/**\n * Creates a getter proxy for accessing nested object properties with optional default values.\n * This overload handles two-level deep object access.\n *\n * @typeParam T - The type of the nested object\n * @typeParam D - The depth of object access (default is 2)\n * @typeParam K - The keys of type T\n *\n * @param data - The source data object\n * @param depth - The depth of object access (1 or 2)\n *\n * @returns A proxy object that provides safe access to nested properties\n *\n * @example\n * ```typescript\n * const data = { user: { name: 'John', age: 30 } };\n * const getter = createGetter(data);\n * const name = getter.user('name'); // Returns 'John'\n * const age = getter.user('age', 0); // Returns 30, with 0 as default\n * ```\n */\nexport function createGetter<\n  T extends Record<string, any>,\n  D extends ObjectDepth | undefined = 2,\n  K extends keyof T = keyof T,\n>(\n  data: Data<T>,\n  depth?: D,\n): Record<string, <Key extends K>(key: Key, defaultValue?: T[Key]) => T[Key]> &\n  Record<string, () => T> &\n  Nil;\n\n/**\n * Creates a getter proxy for accessing object properties with optional default values.\n * This overload handles single-level object access.\n *\n * @typeParam T - The type of the object\n * @typeParam D - The depth of object access (must be 1)\n * @typeParam K - The keys of type T\n *\n * @param data - The source data object\n * @param depth - Must be 1 for this overload\n *\n * @returns A proxy object that provides safe access to properties\n *\n * @example\n * ```typescript\n * const data = { name: 'John', age: 30 };\n * const getter = createGetter(data, 1);\n * const name = getter.name(); // Returns 'John'\n * const age = getter.age(0); // Returns 30, with 0 as default\n * ```\n */\nexport function createGetter<\n  T extends Record<string, any>,\n  D extends ObjectDepth = 1,\n  K extends keyof T = keyof T,\n>(\n  data: T,\n  depth?: D,\n): Record<K, <Key extends K>(defaultValue?: T[Key]) => T[Key]> & Nil;\n\n/**\n * Implementation of the createGetter function.\n * Creates a proxy that provides safe access to object properties with support for default values.\n *\n * @param data - The source data object\n * @param depth - The depth of object access (1 or 2)\n *\n * @returns A proxy object that provides safe access to properties\n */\nexport function createGetter(data: any, depth: ObjectDepth = 2) {\n  const getValue = (value: any, defaultValue?: any) => {\n    if (defaultValue === undefined) {\n      return value;\n    }\n\n    return value ?? defaultValue;\n  };\n\n  return new Proxy(data || {}, {\n    get(target: any, property: string, receiver): any {\n      if (property === \"isNil\") {\n        return isNil(data);\n      }\n      if (depth === 1) {\n        return (defaultValue: any) => {\n          if (!target) return defaultValue;\n          return getValue(target[property], defaultValue);\n        };\n      }\n      return (key?: string, defaultValue?: any) => {\n        if (key) {\n          return getValue(target[property]?.[key], defaultValue);\n        } else {\n          return getValue(target[property], defaultValue);\n        }\n      };\n    },\n  });\n}\n","import { useMemo } from \"react\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useAppStore } from \"./appStore\";\n\n/**\n * Type alias for the return type of useSymbolsInfo hook\n */\nexport type SymbolsInfo = ReturnType<typeof useSymbolsInfo>;\n\n/**\n * A hook that provides access to symbol information.\n *\n * @returns A getter object that provides access to symbol information.\n * The getter allows accessing symbol data either by symbol name directly,\n * or through a two-level access pattern (symbol and property).\n *\n * @example\n * ```typescript\n * const symbolsInfo = useSymbolsInfo();\n *\n * // Get all info for a symbol\n * const ethInfo = symbolsInfo[\"PERP_ETH_USDC\"]();\n *\n * // Get specific property for a symbol\n * const baseDP = symbolsInfo[\"PERP_ETH_USDC\"]('base_dp');\n *\n * // Get specific property for a symbol with default value\n * const quoteDP = symbolsInfo[\"PERP_ETH_USDC\"]('quote_dp', 2);\n * ```\n */\nexport const useSymbolsInfo = () => {\n  const symbolsInfo = useAppStore((state) => state.symbolsInfo);\n\n  return useMemo(\n    () => createGetter(symbolsInfo ? { ...symbolsInfo } : symbolsInfo),\n    [symbolsInfo],\n  );\n};\n\nexport const useSymbolsInfoStore = () => {\n  return useAppStore((state) => state.symbolsInfo);\n};\n","import { useQuery } from \"../useQuery\";\n\nexport type Brokers = {\n  [key: string]: string;\n};\n\n/** get all brokers, will be callback a list */\nexport const useAllBrokers = () => {\n  const { data } = useQuery<Brokers | undefined>(\"/v1/public/broker/name\", {\n    formatter: (res) => {\n      const { rows } = res;\n\n      return rows\n        ?.map((item: any) => ({ [item.broker_id]: item.broker_name }))\n        .reduce((acc: any, curr: any) => ({ ...acc, ...curr }), {});\n    },\n    revalidateOnFocus: false,\n  });\n\n  return [data] as const;\n};\n","import { useMemo } from \"react\";\nimport { useSymbolsInfo } from \"./orderly/useSymbolsInfo\";\nimport { useAllBrokers } from \"./trading-rewards/useAllBrokers\";\n\nexport function getSymbolBase(symbol: string | undefined): string {\n  if (!symbol) return \"\";\n  const parts = symbol.split(\"_\");\n  return parts.length >= 3\n    ? (parts[1] ?? \"\")\n    : (symbol.match(/^([A-Za-z]+)/)?.[1] ?? symbol);\n}\n\nexport function getSymbolDisplayName(\n  symbol: string | undefined,\n  displaySymbolName?: string | null,\n): string {\n  const trimmedDisplayName = displaySymbolName?.trim();\n  if (trimmedDisplayName) return trimmedDisplayName;\n  return getSymbolBase(symbol);\n}\n\n/**\n * First segment of raw broker name when split by space, hyphen, or underscore\n * (e.g. ` Orderly Agent`, `Orderly-Agent`, `Orderly_Agent` → `Orderly`). No length truncation.\n */\nfunction brokerNameBaseFromRaw(\n  rawBrokerName: string | undefined,\n): string | undefined {\n  if (!rawBrokerName) return undefined;\n  const first = rawBrokerName.trim().split(/[ _-]/, 1)[0]?.trim() ?? \"\";\n  return first.length > 0 ? first : undefined;\n}\n\nexport interface UseBadgeBySymbolReturn {\n  /** Display name of the symbol. API.display_symbol_name */\n  displaySymbolName: string;\n  /** Broker ID of the symbol. */\n  brokerId: string | undefined;\n  /** Badge label: first segment of raw name, truncated to 7 chars with \"...\". */\n  brokerName: string | undefined;\n  /** Raw broker name as provided by the API. */\n  brokerNameRaw: string | undefined;\n}\n\n/**\n * Match the given `symbol` in `symbolsInfo` and return `displaySymbolName`,\n * `brokerId`, and the mapped `brokerName`.\n *\n * `brokerName` comes from the `/v1/public/broker/name` broker list\n * (SWR shared cache).\n */\nexport const useBadgeBySymbol = (symbol: string): UseBadgeBySymbolReturn => {\n  const symbolsInfo = useSymbolsInfo();\n  const [brokers] = useAllBrokers();\n\n  return useMemo(() => {\n    if (!symbol || symbolsInfo.isNil) {\n      return {\n        displaySymbolName: symbol ?? \"\",\n        brokerId: undefined,\n        brokerName: undefined,\n        brokerNameRaw: undefined,\n      };\n    }\n\n    const getter = symbolsInfo[symbol];\n    const info = typeof getter === \"function\" ? getter() : undefined;\n\n    const displaySymbolName = getSymbolDisplayName(\n      symbol,\n      (info as { display_symbol_name?: string } | undefined)\n        ?.display_symbol_name,\n    );\n\n    const brokerId: string | undefined = info?.broker_id ?? undefined;\n    const rawBrokerName = brokerId ? brokers?.[brokerId] : undefined;\n    const base = brokerNameBaseFromRaw(rawBrokerName);\n    const brokerName = base\n      ? base.length > 7\n        ? `${base.slice(0, 7)}...`\n        : base\n      : undefined;\n\n    return {\n      displaySymbolName,\n      brokerId,\n      brokerName,\n      brokerNameRaw: rawBrokerName,\n    };\n  }, [brokers, symbolsInfo, symbol]);\n};\n\n/**\n * Same rules as {@link useSymbolWithBroker}, for use in callbacks / non-React code paths.\n */\nexport function formatSymbolWithBroker(\n  symbol: string,\n  symbolsInfo: { isNil?: boolean; [key: string]: unknown },\n  brokers: Record<string, string> | undefined,\n): string {\n  if (!symbol) return \"\";\n\n  let brokerNameBase: string | undefined;\n  if (!symbolsInfo.isNil) {\n    const getter = symbolsInfo[symbol] as\n      | (() => { broker_id?: string })\n      | undefined;\n    const info = typeof getter === \"function\" ? getter() : undefined;\n    const brokerId: string | undefined = info?.broker_id ?? undefined;\n    const rawBrokerName = brokerId ? brokers?.[brokerId] : undefined;\n    brokerNameBase = brokerNameBaseFromRaw(rawBrokerName);\n  }\n\n  const base = getSymbolBase(symbol);\n\n  const hasBrokerSuffix = symbol.includes(\"-\") || symbol.split(\"_\").length > 3;\n\n  if (brokerNameBase && hasBrokerSuffix) {\n    return `${base}-${brokerNameBase}`;\n  }\n  return base;\n}\n\n/**\n * Short market label: `base`, or `base-{brokerNameBase}` when the symbol is broker-scoped and a broker\n * name is available from symbols info + broker list.\n *\n * Symbol shape: `type_base_quote` with optional trailing `_broker_id` segments (broker_id may\n * contain underscores, e.g. `orderly`). Otherwise falls back to a leading letter run for legacy\n * compact symbols.\n */\nexport const useSymbolWithBroker = (symbol: string): string => {\n  const symbolsInfo = useSymbolsInfo();\n  const [brokers] = useAllBrokers();\n\n  return useMemo(\n    () => formatSymbolWithBroker(symbol, symbolsInfo, brokers),\n    [brokers, symbolsInfo, symbol],\n  );\n};\n","import { create } from \"zustand\";\nimport { API } from \"@orderly.network/types\";\n\ntype MarketStore = {\n  market: API.MarketInfoExt[];\n  marketMap: Record<string, API.MarketInfoExt> | null;\n};\n\ntype MarketActions = {\n  updateMarket: (data: API.MarketInfoExt[]) => void;\n};\n\nexport const useMarketStore = create<MarketStore & { actions: MarketActions }>(\n  (set, get) => ({\n    market: [],\n    marketMap: null,\n    actions: {\n      updateMarket: (data) => {\n        const marketMap: Record<string, API.MarketInfoExt> = {};\n\n        data.forEach((item) => {\n          marketMap[item.symbol] = item;\n        });\n\n        set({\n          market: data,\n          marketMap: marketMap,\n        });\n      },\n    },\n  }),\n);\n\nexport const useMarketList = () => {\n  return useMarketStore((state) => state.market);\n};\n\nexport const useMarketMap = () => {\n  return useMarketStore((state) => state.marketMap);\n};\n","import { useMemo } from \"react\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarketList } from \"./useMarket/market.store\";\n\nexport const useMarketsStream = () => {\n  const ws = useWS();\n  const futures = useMarketList();\n\n  const topic = \"tickers\";\n\n  const { data: tickers } = useSWRSubscription(\"tickers\", (_, { next }) => {\n    const unsubscribe = ws.subscribe(topic, {\n      onMessage: (message: any) => {\n        next(null, message);\n      },\n    });\n\n    return () => {\n      unsubscribe?.();\n    };\n  });\n\n  const value = useMemo(() => {\n    if (!futures) return null;\n    if (!tickers) return futures;\n\n    return futures.map((item) => {\n      const ticker = tickers.find(\n        (t: WSMessage.Ticker) => t.symbol === item.symbol,\n      );\n      if (ticker) {\n        const data = {\n          ...item,\n          [\"24h_close\"]: ticker.close,\n          [\"24h_open\"]: ticker.open,\n          /**\n           * @deprecated\n           * spelling mistake, use 24h_volume to instead, will be remove next version\n           */\n          [\"24h_volumn\"]: ticker.volume,\n          [\"24h_volume\"]: ticker.volume,\n          [\"24h_amount\"]: ticker.amount,\n          change: 0,\n        };\n\n        if (ticker.close !== undefined && ticker.open !== undefined) {\n          data[\"change\"] = new Decimal(ticker.close)\n            .minus(ticker.open)\n            .div(ticker.open)\n            .toNumber();\n        }\n\n        return data;\n      }\n      return item;\n    });\n  }, [futures, tickers]);\n\n  return { data: value as unknown as WSMessage.Ticker[] };\n};\n","import { API } from \"@orderly.network/types\";\n\nexport const RWA_SYMBOLS_INFO_QUERY_KEY = \"/v1/public/rwa/info\";\n\nexport const getExpiredRwaSymbolsInfoRefreshKeys = (\n  rwaSymbolsInfo: Record<string, API.RwaSymbol>,\n  currentTime: number,\n  triggeredRefreshKeys: Record<string, true>,\n) => {\n  return Object.entries(rwaSymbolsInfo).reduce<string[]>(\n    (keys, [symbol, rwaSymbol]) => {\n      if (!isValidTimestamp(rwaSymbol.next_close)) {\n        return keys;\n      }\n\n      if (currentTime < rwaSymbol.next_close) {\n        return keys;\n      }\n\n      const key = createRwaSymbolsInfoRefreshKey(symbol, rwaSymbol);\n      if (!triggeredRefreshKeys[key]) {\n        keys.push(key);\n      }\n\n      return keys;\n    },\n    [],\n  );\n};\n\nexport const getRwaSymbolsInfoRefreshState = (\n  rwaSymbolsInfo: Record<string, API.RwaSymbol>,\n  currentTime: number,\n  triggeredRefreshKeys: Record<string, true>,\n) => {\n  const expiredRefreshKeys = getExpiredRwaSymbolsInfoRefreshKeys(\n    rwaSymbolsInfo,\n    currentTime,\n    triggeredRefreshKeys,\n  );\n\n  if (expiredRefreshKeys.length === 0) {\n    return {\n      shouldRefresh: false,\n      triggeredRefreshKeys,\n    };\n  }\n\n  const nextTriggeredRefreshKeys = { ...triggeredRefreshKeys };\n  expiredRefreshKeys.forEach((key) => {\n    nextTriggeredRefreshKeys[key] = true;\n  });\n\n  return {\n    shouldRefresh: true,\n    triggeredRefreshKeys: nextTriggeredRefreshKeys,\n  };\n};\n\nconst createRwaSymbolsInfoRefreshKey = (\n  symbol: string,\n  rwaSymbol: API.RwaSymbol,\n) => {\n  return `${symbol}:${rwaSymbol.status}:${rwaSymbol.next_open}:${rwaSymbol.next_close}`;\n};\n\nconst isValidTimestamp = (timestamp?: number): timestamp is number => {\n  return typeof timestamp === \"number\" && timestamp > 0;\n};\n","import { useMemo, useEffect } from \"react\";\nimport { mutate } from \"swr\";\nimport { create } from \"zustand\";\nimport { API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useAppStore } from \"./appStore\";\nimport {\n  RWA_SYMBOLS_INFO_QUERY_KEY,\n  getRwaSymbolsInfoRefreshState,\n} from \"./rwaSymbolsInfoRevalidator\";\n\n/**\n * Check if currently trading based on next_open/next_close timestamps\n * @param nextClose - Next close time timestamp\n * @param status - RWA status from API\n * @param currentTime - Current time timestamp\n * @param nextOpen - Next open time timestamp\n * @returns boolean - true if currently trading\n */\nexport const isCurrentlyTrading = (\n  nextClose: number | undefined,\n  status: \"open\" | \"close\",\n  currentTime: number = Date.now(),\n  nextOpen?: number,\n): boolean => {\n  const hasNextClose = isValidTimestamp(nextClose);\n\n  if (status === \"open\") {\n    return !hasNextClose || currentTime < nextClose;\n  }\n\n  const hasNextOpen = isValidTimestamp(nextOpen);\n\n  return (\n    hasNextOpen &&\n    currentTime >= nextOpen &&\n    (!hasNextClose || currentTime < nextClose)\n  );\n};\n\nexport const isCurrentlyClosed = (\n  nextOpen: number,\n  status: \"open\" | \"close\",\n  currentTime: number = Date.now(),\n  nextClose?: number,\n): boolean => {\n  return !isCurrentlyTrading(nextClose, status, currentTime, nextOpen);\n};\n\nconst isValidTimestamp = (timestamp?: number): timestamp is number => {\n  return typeof timestamp === \"number\" && timestamp > 0;\n};\n\n/**\n * Type alias for the return type of useSymbolsInfo hook\n */\nexport type RwaSymbolsInfo = ReturnType<typeof useRwaSymbolsInfo>;\n\n/**\n * A hook that provides access to symbol information.\n *\n * @returns A getter object that provides access to symbol information.\n * The getter allows accessing symbol data either by symbol name directly,\n * or through a two-level access pattern (symbol and property).\n *\n * @example\n * ```typescript\n * const rwaSymbolsInfo = useRwaSymbolsInfo();\n *\n * // Get all info for a symbol\n * const ethInfo = rwaSymbolsInfo[\"PERP_ETH_USDC\"]();\n * ```\n */\nexport const useRwaSymbolsInfo = () => {\n  const symbolsInfo = useAppStore((state) => state.rwaSymbolsInfo);\n  return useMemo(() => createGetter({ ...symbolsInfo }), [symbolsInfo]);\n};\n\nexport const useRwaSymbolsInfoStore = () => {\n  return useAppStore((state) => state.rwaSymbolsInfo);\n};\n\n/**\n * Return type definition for the hook\n *\n * - isRwa: true if the symbol is an RWA symbol\n * - open: true if the symbol is open for trading\n * - nextOpen: the next open time in milliseconds\n * - nextClose: the next close time in milliseconds\n * - closeTimeInterval: the time interval in seconds until the symbol closes (countdown format)\n * - openTimeInterval: the time interval in seconds until the symbol opens (countdown format)\n */\nexport interface RwaSymbolResult {\n  isRwa: boolean;\n  open?: boolean;\n  nextOpen?: number;\n  nextClose?: number;\n  closeTimeInterval?: number;\n  openTimeInterval?: number;\n}\n\n/**\n * Computed RWA symbol state\n */\ninterface ComputedRwaSymbolState {\n  isRwa: boolean;\n  open?: boolean;\n  nextOpen?: number;\n  nextClose?: number;\n  closeTimeInterval?: number;\n  openTimeInterval?: number;\n}\n\n/**\n * RWA symbols runtime store state\n */\ninterface RwaSymbolsRuntimeState {\n  // Computed states for all symbols\n  computedStates: Record<string, ComputedRwaSymbolState>;\n  // Current timestamp\n  currentTime: number;\n  // Timer reference\n  timerId?: NodeJS.Timeout;\n  // Refresh keys that have already triggered a revalidation\n  triggeredRefreshKeys: Record<string, true>;\n  // Start the timer\n  startTimer: () => void;\n  // Stop the timer\n  stopTimer: () => void;\n  // Update computed states\n  updateComputedStates: (rwaSymbolsInfo: Record<string, API.RwaSymbol>) => void;\n}\n\n/**\n * Compute the state for a single symbol\n */\nconst computeSymbolState = (\n  rwaSymbol: API.RwaSymbol,\n  currentTime: number,\n): ComputedRwaSymbolState => {\n  const { status, next_close, next_open } = rwaSymbol;\n\n  // Use isCurrentlyTrading function to determine if currently tradeable\n  const isOpen = isCurrentlyTrading(next_close, status, currentTime, next_open);\n\n  let closeTimeInterval: number | undefined;\n  let openTimeInterval: number | undefined;\n\n  // Calculate countdown to closing time\n  if (isOpen && isValidTimestamp(next_close) && next_close > currentTime) {\n    closeTimeInterval = Math.max(\n      0,\n      Math.floor((next_close - currentTime) / 1000),\n    );\n  }\n\n  // Calculate countdown to opening time\n  if (!isOpen && isValidTimestamp(next_open) && next_open > currentTime) {\n    openTimeInterval = Math.max(\n      0,\n      Math.floor((next_open - currentTime) / 1000),\n    );\n  }\n\n  return {\n    isRwa: true,\n    open: isOpen,\n    nextOpen: next_open || undefined,\n    nextClose: next_close || undefined,\n    closeTimeInterval,\n    openTimeInterval,\n  };\n};\n\n/**\n * Centralized RWA symbols runtime state management\n * Uses a single timer to compute all symbol states, avoiding performance waste from multiple timers\n */\nconst useRwaSymbolsRuntimeStore = create<RwaSymbolsRuntimeState>(\n  (set, get) => ({\n    computedStates: {},\n    currentTime: Date.now(),\n    timerId: undefined,\n    triggeredRefreshKeys: {},\n\n    startTimer: () => {\n      const state = get();\n\n      // Clear existing timer if present\n      if (state.timerId) {\n        clearInterval(state.timerId);\n      }\n\n      // Start new timer, update every second\n      const timerId = setInterval(() => {\n        const currentTime = Date.now();\n        const rwaSymbolsInfo = useAppStore.getState().rwaSymbolsInfo;\n\n        if (!rwaSymbolsInfo) {\n          set({ currentTime });\n          return;\n        }\n\n        updateRwaSymbolsRuntimeState(rwaSymbolsInfo, currentTime, get, set);\n      }, 1000);\n\n      set({ timerId });\n    },\n\n    stopTimer: () => {\n      const state = get();\n      if (state.timerId) {\n        clearInterval(state.timerId);\n        set({ timerId: undefined });\n      }\n    },\n\n    updateComputedStates: (rwaSymbolsInfo: Record<string, API.RwaSymbol>) => {\n      const currentTime = get().currentTime;\n      updateRwaSymbolsRuntimeState(rwaSymbolsInfo, currentTime, get, set);\n    },\n  }),\n);\n\nconst updateRwaSymbolsRuntimeState = (\n  rwaSymbolsInfo: Record<string, API.RwaSymbol>,\n  currentTime: number,\n  get: () => RwaSymbolsRuntimeState,\n  set: (\n    partial:\n      | Partial<RwaSymbolsRuntimeState>\n      | ((state: RwaSymbolsRuntimeState) => Partial<RwaSymbolsRuntimeState>),\n  ) => void,\n) => {\n  const state = get();\n  const computedStates: Record<string, ComputedRwaSymbolState> = {};\n\n  Object.entries(rwaSymbolsInfo).forEach(([symbol, rwaSymbol]) => {\n    computedStates[symbol] = computeSymbolState(rwaSymbol, currentTime);\n  });\n\n  const refreshState = getRwaSymbolsInfoRefreshState(\n    rwaSymbolsInfo,\n    currentTime,\n    state.triggeredRefreshKeys,\n  );\n\n  if (!refreshState.shouldRefresh) {\n    set({ computedStates, currentTime });\n    return;\n  }\n\n  set({\n    computedStates,\n    currentTime,\n    triggeredRefreshKeys: refreshState.triggeredRefreshKeys,\n  });\n\n  try {\n    Promise.resolve(mutate(RWA_SYMBOLS_INFO_QUERY_KEY)).catch(() => undefined);\n  } catch {\n    // Ignore refresh failures. The stale snapshot is marked as triggered by design.\n  }\n};\n\n/**\n * Hook to initialize and manage the global timer\n * This hook should be called once at the top level of the application to start and manage the global timer\n */\nexport const useInitRwaSymbolsRuntime = () => {\n  const rwaSymbolsInfo = useRwaSymbolsInfoStore();\n  const { startTimer, stopTimer, updateComputedStates } =\n    useRwaSymbolsRuntimeStore();\n\n  useEffect(() => {\n    // Start timer when rwaSymbolsInfo exists\n    if (rwaSymbolsInfo && Object.keys(rwaSymbolsInfo).length > 0) {\n      // Update state immediately on first run\n      updateComputedStates(rwaSymbolsInfo);\n      // Start the timer\n      startTimer();\n    }\n\n    // Cleanup: stop the timer\n    return () => {\n      stopTimer();\n    };\n  }, [rwaSymbolsInfo, startTimer, stopTimer, updateComputedStates]);\n};\n\n/**\n * Hook to get current RWA symbol information with real-time updates\n * Retrieves the state of a specific symbol from the centralized store\n * @param symbol - The symbol to query\n * @returns RwaSymbolResult containing RWA status and countdown information\n */\nexport const useGetRwaSymbolInfo = (symbol: string): RwaSymbolResult => {\n  // Subscribe to the computed state of a specific symbol\n  const computedState = useRwaSymbolsRuntimeStore(\n    (state) => state.computedStates[symbol],\n  );\n\n  return useMemo(() => {\n    if (!computedState) {\n      return { isRwa: false };\n    }\n    return computedState;\n  }, [computedState]);\n};\n\n/**\n * Simplified hook to get RWA symbol open status with real-time updates\n * @param symbol - The symbol to query\n * @returns Object containing isRwa and open status\n */\nexport const useGetRwaSymbolOpenStatus = (\n  symbol: string,\n): { isRwa: boolean; open?: boolean } => {\n  const { isRwa, open } = useGetRwaSymbolInfo(symbol);\n\n  return useMemo(() => {\n    return { isRwa, open };\n  }, [isRwa, open]);\n};\n\n/**\n * Generic time interval filtering function\n */\nconst filterTimeInterval = (\n  timeInterval: number | undefined,\n  isRwa: boolean,\n  thresholdMinutes: number,\n): number | undefined => {\n  if (!isRwa || !timeInterval) {\n    return undefined;\n  }\n\n  // Return undefined if time interval exceeds threshold\n  return timeInterval > thresholdMinutes * 60 ? undefined : timeInterval;\n};\n\n/**\n * Hook to get RWA symbol close time interval with filtering\n * @param symbol - The symbol to query\n * @param thresholdMinutes - Time threshold in minutes, defaults to 30\n * @returns Close time interval in seconds, or undefined if not within threshold\n */\nexport const useGetRwaSymbolCloseTimeInterval = (\n  symbol: string,\n  thresholdMinutes: number = 30,\n): {\n  isRwa: boolean;\n  open?: boolean;\n  closeTimeInterval?: number;\n  nextClose?: number;\n} => {\n  const { isRwa, open, closeTimeInterval, nextClose } =\n    useGetRwaSymbolInfo(symbol);\n\n  return useMemo(() => {\n    const filteredInterval = filterTimeInterval(\n      closeTimeInterval,\n      isRwa,\n      thresholdMinutes,\n    );\n    return { isRwa, open, closeTimeInterval: filteredInterval, nextClose };\n  }, [isRwa, open, closeTimeInterval, nextClose, thresholdMinutes]);\n};\n\n/**\n * Hook to get RWA symbol open time interval with filtering\n * @param symbol - The symbol to query\n * @param thresholdMinutes - Time threshold in minutes, defaults to 30\n * @returns Open time interval in seconds, or undefined if not within threshold\n */\nexport const useGetRwaSymbolOpenTimeInterval = (\n  symbol: string,\n  thresholdMinutes: number = 30,\n): {\n  isRwa: boolean;\n  open?: boolean;\n  openTimeInterval?: number;\n  nextOpen?: number;\n} => {\n  const { isRwa, open, openTimeInterval, nextOpen } =\n    useGetRwaSymbolInfo(symbol);\n\n  return useMemo(() => {\n    const filteredInterval = filterTimeInterval(\n      openTimeInterval,\n      isRwa,\n      thresholdMinutes,\n    );\n    return { isRwa, open, openTimeInterval: filteredInterval, nextOpen };\n  }, [isRwa, open, openTimeInterval, nextOpen, thresholdMinutes]);\n};\n","export enum MarketsType {\n  FAVORITES,\n  RECENT,\n  ALL,\n  CRYPTO,\n  RWA,\n  NEW_LISTING,\n  COMMUNITY,\n  PRE_TGE,\n}\n","import { MarketsType } from \"./marketTypes\";\nimport type { Favorite, MarketsItem, NewListing, Recent } from \"./useMarkets\";\n\nexport const filterMarkets = (params: {\n  markets: MarketsItem[];\n  favorites: Favorite[];\n  recent: Recent[];\n  newListing: NewListing[];\n  type: MarketsType;\n}) => {\n  const { markets, favorites, recent, newListing, type } = params;\n  let curData: MarketsItem[] = [];\n\n  if (type === MarketsType.ALL || type === MarketsType.COMMUNITY) {\n    curData = markets;\n  } else if (type === MarketsType.CRYPTO) {\n    curData = markets.filter((item) => !item.isRwa);\n  } else if (type === MarketsType.RWA) {\n    curData = markets.filter((item) => item.isRwa);\n  } else if (type === MarketsType.PRE_TGE) {\n    curData = markets.filter((item) => item.isPreTge);\n  } else if (type === MarketsType.NEW_LISTING) {\n    curData = markets\n      .filter((item) => isNewListing(item.created_time))\n      .sort((a, b) => b.created_time - a.created_time);\n  } else {\n    const storageData =\n      type === MarketsType.FAVORITES\n        ? favorites\n        : type === MarketsType.RECENT\n          ? recent\n          : newListing;\n\n    const keys = storageData.map((item) => item.name);\n    curData = markets?.filter((item) => keys.includes(item.symbol));\n  }\n\n  const favoriteKeys = favorites.map((item) => item.name);\n\n  return curData?.map((item) => ({\n    ...item,\n    isFavorite:\n      type === MarketsType.FAVORITES\n        ? true\n        : favoriteKeys.includes(item.symbol),\n  }));\n};\n\nconst isNewListing = (createdTime: number): boolean => {\n  const thirtyDaysInMs = 30 * 24 * 60 * 60 * 1000;\n  const now = Date.now();\n  return now - createdTime < thirtyDaysInMs;\n};\n","import { useContext, useEffect, useId, useState } from \"react\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderlyContext } from \"../../orderlyContext\";\nimport { getSymbolDisplayName } from \"../../useBadgeBySymbol\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { useMarketsStream } from \"../useMarketsStream\";\nimport { RwaSymbolsInfo, useRwaSymbolsInfo } from \"../useRwaSymbolsInfo\";\nimport { SymbolsInfo, useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { filterMarkets } from \"./marketFilter\";\nimport { MarketsType } from \"./marketTypes\";\nimport { MarketStoreKey } from \"./useMarket\";\n\nexport { MarketsType } from \"./marketTypes\";\n\nexport interface FavoriteTab {\n  name: string;\n  id: number;\n}\n\nexport interface Favorite {\n  name: string;\n  tabs: FavoriteTab[];\n}\n\nexport interface Recent {\n  name: string;\n}\n\nexport interface NewListing {\n  name: string;\n}\n\nexport type TabSort = Record<\n  string,\n  {\n    sortKey: string;\n    sortOrder: string;\n  }\n>;\n\n/*\nexample data:\n{\n  markets: {\n    recent: [\n      { \"name\": `${symbol.name}` },\n      { \"name\": `${symbol.name}` },\n    ],\n    favorites: [\n      { \"name\": `${symbol.name}`, \"tabs\": [{ \"name\": \"Popular\", \"id\": 1 }] },\n    ],\n    favoriteTabs: [\n      { \"name\": \"Popular\", \"id\": 1 },\n    ],\n    \"selectedFavoriteTab\": { \"name\": \"Popular\", \"id\": 1 },\n    \"tabSort\": { \"all\": { \"sortKey\": \"24h_amount\", \"sortOrder\": \"desc\" }}        \n  }\n}\n*/\nexport type MarketsData = {\n  favoriteTabs?: FavoriteTab[];\n  favorites?: Favorite[];\n  recent?: Recent[];\n  selectedFavoriteTab?: FavoriteTab;\n  newListing?: NewListing[];\n  tabSort?: TabSort;\n};\n\nexport type MarketsKey = keyof MarketsData;\n\nexport type MarketsItem = {\n  symbol: string;\n  /** Permissionless listing: display name without broker_id suffix */\n  display_symbol_name?: string;\n  /** Permissionless listing: broker id; null for non-community-listed symbols */\n  broker_id?: string | null;\n  index_price: number;\n  mark_price: number;\n  sum_unitary_funding: number;\n  est_funding_rate: number;\n  last_funding_rate: number;\n  next_funding_time: number;\n  open_interest: number;\n  \"24h_open\": number;\n  \"24h_close\": number;\n  \"24h_high\": number;\n  \"24h_low\": number;\n  \"24h_volume\": number;\n  \"24h_amount\": number;\n  \"24h_volumn\": number;\n  change: number;\n  \"8h_funding\": number;\n  quote_dp: number;\n  created_time: number;\n  openInterest: number;\n  isFavorite: boolean;\n  leverage?: number;\n  isRwa: boolean;\n  isPreTge: boolean;\n  market_session?: API.RwaSymbol[\"market_session\"];\n  rwaNextOpen?: number;\n  rwaNextClose?: number;\n  rwaStatus?: \"open\" | \"close\";\n};\n\nexport type MarketsStore = ReturnType<typeof useMarketsStore>;\n\nexport const MarketsStorageKey = \"orderly_markets\";\nexport const DefaultFavoriteTab = { name: \"Popular\", id: 1 };\n\nexport const useMarketsStore = () => {\n  const { configStore } = useContext(OrderlyContext);\n  const ee = useEventEmitter();\n  const id = useId();\n\n  const getStore = () => {\n    const store = configStore.get(MarketsStorageKey) as MarketsData;\n    return store || getDefaultStoreData();\n  };\n\n  const getStoreByKey = <Key extends MarketsKey>(\n    key: Key,\n    defaultValue: MarketsData[Key],\n  ) => {\n    const store = getStore();\n    return (store[key] || defaultValue)!;\n  };\n\n  const updateStore = (data: MarketsData) => {\n    configStore.set(MarketsStorageKey, {\n      ...getStore(),\n      ...data,\n    });\n  };\n\n  const getFavoriteTabs = () => {\n    return getStoreByKey(\"favoriteTabs\", [{ ...DefaultFavoriteTab }]);\n  };\n\n  const getSelectedFavoriteTab = () => {\n    return getStoreByKey(\"selectedFavoriteTab\", { ...DefaultFavoriteTab });\n  };\n\n  const getFavorites = () => {\n    const favs = getStoreByKey(\"favorites\", []);\n    const tabs = getFavoriteTabs();\n    return filterInvalidTabs(favs, tabs);\n  };\n\n  const getRecent = () => {\n    return getStoreByKey(\"recent\", []);\n  };\n\n  const getNewListing = () => {\n    return getStoreByKey(\"newListing\", []);\n  };\n\n  const getTabSort = () => {\n    return getStoreByKey(\"tabSort\", {});\n  };\n\n  const [favoriteTabs, setFavoriteTabs] = useState(getFavoriteTabs);\n  const [selectedFavoriteTab, setSelectedFavoriteTab] = useState(\n    getSelectedFavoriteTab,\n  );\n  const [favorites, setFavorites] = useState(getFavorites);\n  const [recent, setRecent] = useState(getRecent);\n  const [newListing, setNewListing] = useState(getNewListing);\n\n  const [tabSort, setTabSort] = useState(getTabSort);\n\n  const updateFavoriteTabs = (\n    tab: FavoriteTab | FavoriteTab[],\n    operator?: {\n      add?: boolean;\n      update?: boolean;\n      delete?: boolean;\n    },\n  ) => {\n    const tabs = updateTabs(favoriteTabs, tab, operator);\n    setFavoriteTabs(tabs);\n    ee.emit(\"markets:changed\", createEventData(id, \"favoriteTabs\", tabs));\n  };\n\n  const updateSelectedFavoriteTab = (tab: FavoriteTab) => {\n    setSelectedFavoriteTab(tab);\n    ee.emit(\n      \"markets:changed\",\n      createEventData(id, \"lastSelectedFavoriteTab\", tab),\n    );\n  };\n\n  const updateSymbolFavoriteState = (\n    symbol: API.MarketInfoExt,\n    tab: FavoriteTab | FavoriteTab[],\n    remove: boolean = false,\n  ) => {\n    const list = updateSymbolFavorite({ favorites, symbol, tab, remove });\n    setFavorites(list);\n    ee.emit(\"markets:changed\", createEventData(id, \"favorites\", list));\n  };\n\n  const addToHistory = (symbol: API.MarketInfoExt) => {\n    const list = addToTop(recent, symbol);\n    setRecent(list);\n    ee.emit(\"markets:changed\", id);\n    ee.emit(\"markets:changed\", createEventData(id, \"recent\", list));\n  };\n\n  const pinToTop = (symbol: API.MarketInfoExt) => {\n    const newList = moveToTop(favorites, symbol);\n    if (newList) {\n      setFavorites(newList);\n      ee.emit(\"markets:changed\", createEventData(id, \"favorites\", newList));\n    }\n  };\n\n  const updateTabsSortState = (\n    tabId: string,\n    sortKey: string,\n    sortOrder: \"desc\" | \"asc\",\n  ) => {\n    const map = getStoreByKey(\"tabSort\", {});\n\n    map[tabId] = {\n      sortKey,\n      sortOrder,\n    };\n\n    setTabSort(map);\n  };\n\n  useEffect(() => {\n    updateStore({\n      favoriteTabs,\n      favorites,\n      recent,\n      newListing,\n      tabSort,\n      selectedFavoriteTab,\n    });\n  }, [\n    favoriteTabs,\n    favorites,\n    recent,\n    newListing,\n    tabSort,\n    selectedFavoriteTab,\n  ]);\n\n  useEffect(() => {\n    const event = ({ id: srcId, key, data }: MarketsEvent) => {\n      if (srcId === id) {\n        return;\n      }\n\n      if (key === \"favoriteTabs\") {\n        setFavoriteTabs(data);\n      } else if (key === \"lastSelectedFavoriteTab\") {\n        setSelectedFavoriteTab(data);\n      } else if (key === \"favorites\") {\n        setFavorites(data);\n      } else if (key === \"recent\") {\n        setRecent(data);\n      } else if (key === \"newListing\") {\n        setNewListing(data);\n      }\n    };\n\n    ee.on(\"markets:changed\", event);\n\n    return () => {\n      ee.off(\"markets:changed\", event);\n    };\n  }, [id]);\n\n  return {\n    favoriteTabs,\n    favorites,\n    recent,\n    newListing,\n    tabSort,\n    selectedFavoriteTab,\n    updateFavorites: setFavorites,\n    updateFavoriteTabs,\n    updateSymbolFavoriteState,\n    pinToTop,\n    addToHistory,\n    updateSelectedFavoriteTab,\n    updateTabsSortState,\n  };\n};\n\n/**\n * Hook for accessing filtered market data based on type\n * @param type - Type of markets to filter (defaults to ALL)\n * @returns Tuple containing filtered markets array and markets store\n */\nexport const useMarkets = (\n  type: MarketsType = MarketsType.ALL,\n): [MarketsItem[], MarketsStore] => {\n  const { data: futures } = useMarketsStream();\n  const symbolsInfo = useSymbolsInfo();\n  const rwaSymbolsInfo = useRwaSymbolsInfo();\n\n  const [markets, setMarkets] = useState<MarketsItem[]>([]);\n\n  const store = useMarketsStore();\n\n  const { favorites, recent, newListing } = store;\n\n  useEffect(() => {\n    const markets = addFieldToMarkets(futures, symbolsInfo, rwaSymbolsInfo);\n    const filterList = filterMarkets({\n      markets,\n      favorites,\n      recent,\n      newListing,\n      type,\n    });\n    setMarkets(filterList);\n  }, [\n    futures,\n    symbolsInfo,\n    rwaSymbolsInfo,\n    favorites,\n    recent,\n    newListing,\n    type,\n  ]);\n\n  return [markets, store];\n};\n\n/**\n * Adds additional fields to market data\n * @param futures - Raw futures market data\n * @param symbolsInfo - Symbol information lookup\n * @returns Enhanced market data with additional fields\n */\nconst addFieldToMarkets = (\n  futures: WSMessage.Ticker[] | null,\n  symbolsInfo: SymbolsInfo,\n  rwaSymbolsInfo: RwaSymbolsInfo,\n) => {\n  return (futures || [])?.map((item: any) => {\n    const info = symbolsInfo[item.symbol];\n    const rwaInfo = !rwaSymbolsInfo.isNil\n      ? rwaSymbolsInfo[item.symbol]()\n      : null;\n\n    return {\n      ...item,\n      broker_id: item.broker_id,\n      display_symbol_name: getSymbolDisplayName(\n        item.symbol,\n        info(\"display_symbol_name\"),\n      ),\n      quote_dp: info(\"quote_dp\"),\n      created_time: info(\"created_time\"),\n      leverage: getLeverage(info(\"base_imr\")),\n      openInterest: getOpenInterest(item.open_interest, item.index_price),\n      \"8h_funding\": get8hFunding(item.est_funding_rate, info(\"funding_period\")),\n      change: get24hChange({\n        change: item.change,\n        close: item[\"24h_close\"],\n        open: item[\"24h_open\"],\n      }),\n      isRwa: !!rwaInfo,\n      isPreTge: Boolean(item.is_pretge ?? info(\"is_pretge\")),\n      market_session: rwaInfo?.market_session,\n      rwaNextOpen: rwaInfo?.next_open,\n      rwaNextClose: rwaInfo?.next_close,\n      rwaStatus: rwaInfo?.status,\n    } as MarketsItem;\n  });\n};\n\nfunction isEmpty(value: any) {\n  return value === undefined || value === null;\n}\n\nfunction get8hFunding(est_funding_rate: number, funding_period: number) {\n  let funding8h = 0;\n\n  if (isEmpty(est_funding_rate)) {\n    return null;\n  }\n\n  if (funding_period) {\n    funding8h = new Decimal(est_funding_rate || 0)\n      .mul(funding_period)\n      .div(8)\n      .toNumber();\n  }\n\n  return funding8h;\n}\n\nfunction get24hChange(params: { change: number; close: number; open: number }) {\n  const { change, close, open } = params;\n\n  if (change !== undefined) {\n    return change;\n  }\n\n  if (!isEmpty(close) && !isEmpty(open)) {\n    if (open === 0) {\n      return 0;\n    }\n    return new Decimal(close).minus(open).div(open).toNumber();\n  }\n}\n\nfunction getLeverage(base_imr: number) {\n  return base_imr ? 1 / base_imr : undefined;\n}\n\nfunction getOpenInterest(open_interest?: number, index_price?: number) {\n  return new Decimal(open_interest || 0).mul(index_price || 0).toNumber();\n}\n\nfunction getDefaultStoreData(): MarketsData {\n  return {\n    recent: [],\n    favorites: [\n      { name: \"PERP_ETH_USDC\", tabs: [{ ...DefaultFavoriteTab }] },\n      { name: \"PERP_BTC_USDC\", tabs: [{ ...DefaultFavoriteTab }] },\n    ],\n    favoriteTabs: [{ ...DefaultFavoriteTab }],\n    selectedFavoriteTab: { ...DefaultFavoriteTab },\n    tabSort: {},\n  };\n}\n\nfunction filterInvalidTabs(favorites: Favorite[], tabs: FavoriteTab[]) {\n  return favorites\n    .map((favorite) => {\n      return {\n        ...favorite,\n        tabs: favorite.tabs.filter(\n          (tab) => !!tabs.find((item) => item.id === tab.id),\n        ),\n      };\n    })\n    .filter((item) => !!item.tabs.length);\n}\n\nexport function updateTabs(\n  favoriteTabs: FavoriteTab[],\n  tab: FavoriteTab | FavoriteTab[],\n  operator?: {\n    add?: boolean;\n    update?: boolean;\n    delete?: boolean;\n  },\n) {\n  if (Array.isArray(tab)) {\n    return tab;\n  }\n\n  const tabs = [...favoriteTabs];\n  const index = tabs.findIndex((item) => item.id === tab.id);\n\n  if (operator?.add) {\n    tabs.push(tab);\n  } else if (operator?.update && index !== -1) {\n    tabs[index] = tab;\n  } else if (operator?.delete && index !== -1) {\n    tabs.splice(index, 1);\n  }\n\n  return tabs;\n}\n\nfunction addToTop(recent: Recent[], symbol: API.MarketInfoExt) {\n  const list = [...recent];\n  const index = list.findIndex((item) => item.name == symbol.symbol);\n  if (index !== -1) {\n    list.splice(index, 1);\n  }\n  list.unshift({ name: symbol.symbol });\n  return list;\n}\n\nfunction moveToTop(favorites: Favorite[], symbol: API.MarketInfoExt) {\n  const index = favorites.findIndex((item) => item.name === symbol.symbol);\n  if (index !== -1) {\n    const item = favorites[index];\n    const list = [...favorites];\n    list.splice(index, 1);\n    list.unshift(item);\n    return list;\n  }\n}\n\n/**\n * if tab is arrary, the remove params is not work\n * if tab is empty array, will be delete, otherwise will be override\n */\nfunction updateSymbolFavorite(params: {\n  favorites: Favorite[];\n  tab: FavoriteTab | FavoriteTab[];\n  symbol: API.MarketInfoExt;\n  remove: boolean;\n}) {\n  const { favorites, symbol, tab, remove = false } = params;\n\n  const list = [...favorites];\n  const index = list.findIndex((item) => item.name == symbol.symbol);\n\n  const tabs = Array.isArray(tab) ? tab : [tab];\n\n  // can not find\n  if (index === -1) {\n    if (tabs.length && !remove) {\n      // insert\n      list.unshift({ name: symbol.symbol, tabs });\n    }\n  } else {\n    const favorite = list[index];\n    if (Array.isArray(tab)) {\n      if (!tab.length) {\n        // remove\n        list.splice(index, 1);\n      } else {\n        // update\n        list[index] = { ...favorite, tabs: tab };\n      }\n    } else {\n      if (remove) {\n        const tabs = favorite.tabs.filter((item) => item.id != tab.id);\n        if (!tabs.length) {\n          // remove\n          list.splice(index, 1);\n        } else {\n          // update\n          list[index] = { ...favorite, tabs };\n        }\n      } else {\n        // insert\n        list[index] = { ...favorite, tabs: [...favorite.tabs, tab] };\n      }\n    }\n  }\n\n  return list;\n}\n\ntype MarketsEvent = ReturnType<typeof createEventData>;\n\nfunction createEventData(id: string, key: MarketStoreKey, data: any) {\n  return {\n    id,\n    key,\n    data,\n  };\n}\n","import { ConfigKey, DefaultConfigStore } from \"@orderly.network/core\";\nimport { MarketsStorageKey } from \"./orderly/markets/useMarkets\";\n\nexport class ExtendedConfigStore extends DefaultConfigStore {\n  constructor(init: Partial<Record<ConfigKey, any>>) {\n    super(init);\n  }\n\n  get<T>(key: ConfigKey): T {\n    if (key === MarketsStorageKey) {\n      const jsonStr = localStorage.getItem(MarketsStorageKey);\n      if (!jsonStr) {\n        // get old storage key data\n        const oldJsonStr = localStorage.getItem(\n          MarketsStorageKey.replace(\"orderly_\", \"\"),\n        );\n        return oldJsonStr ? JSON.parse(oldJsonStr) : (\"\" as T);\n      }\n\n      return JSON.parse(jsonStr);\n    }\n    return super.get(key);\n  }\n\n  set<T>(key: ConfigKey, value: T): void {\n    if (key === MarketsStorageKey) {\n      const jsonStr = JSON.stringify(value);\n      localStorage.setItem(MarketsStorageKey, jsonStr);\n      return;\n    }\n\n    super.set(key, value);\n  }\n}\n","import { useEffect } from \"react\";\n// import { useMarkPriceActions } from \"../useMarkPrice/useMarkPriceStore\";\nimport { CalculatorScope } from \"../../types\";\nimport { useWS } from \"../../useWS\";\nimport { CalculatorService } from \"../calculator/calculatorService\";\n\nexport const useWSObserver = (calculatorService: CalculatorService) => {\n  const ws = useWS();\n  // const { updateMarkPrice } = useMarkPriceActions();\n\n  useEffect(() => {\n    console.log(\"[ORDERLY SDK]: subscribing to ws...\");\n    /// subscribe to the ws;\n    const markPriceSubscription = ws.subscribe(\"markprices\", {\n      onMessage: (message: any) => {\n        const data: Record<string, number> = Object.create(null);\n\n        for (let index = 0; index < message.length; index++) {\n          const element = message[index];\n          data[element.symbol] = element.price;\n        }\n\n        // updateMarkPrice(data);\n        // call the calculator service\n        calculatorService.calc(CalculatorScope.MARK_PRICE, data, {\n          skipWhenOnPause: true,\n        });\n      },\n\n      onError: (error: any) => {},\n    });\n\n    // const marketSubscription = ws.subscribe(\"tickers\", {\n    //   onMessage: (message: any) => {\n    //     // console.log(\"tickers\", message);\n    //     if (Array.isArray(message)) {\n    //       calculatorService.calc(CalculatorScope.MARKET, message, {\n    //         skipPending: true,\n    //         skipWhenOnPause: true,\n    //       });\n    //       // calculatorService.calc(CalculatorScope.MARKET, message.splice(0), {\n    //       //   skipPending: true,\n    //       //   skipWhenOnPause: true,\n    //       // });\n    //     }\n    //   },\n    // });\n\n    const indexPriceSubscription = ws.subscribe(\"indexprices\", {\n      onMessage: (message: any) => {\n        if (!Array.isArray(message)) return;\n\n        const prices: Record<string, number> = Object.create(null);\n\n        for (let index = 0; index < message.length; index++) {\n          const element = message[index];\n          // NOTICE: force change spot to perp, because there is no perp now\n          prices[(element.symbol as string).replace(\"SPOT\", \"PERP\")] =\n            element.price;\n        }\n\n        calculatorService.calc(CalculatorScope.INDEX_PRICE, prices, {\n          skipWhenOnPause: true,\n        });\n      },\n    });\n\n    return () => {\n      markPriceSubscription?.();\n      indexPriceSubscription?.();\n      // marketSubscription?.();\n    };\n  }, []);\n};\n","export interface RawOrderBook {\n  asks: [number, number][];\n  bids: [number, number][];\n  ts: number;\n}\n\nexport interface RawOrderBookUpdate {\n  asks: [number, number][];\n  bids: [number, number][];\n  prevTs: number;\n  ts: number;\n}\n\nexport const defaultRawOrderBook: RawOrderBook = {\n  asks: [],\n  bids: [],\n  ts: 0,\n};\n\nclass OrderbookService {\n  private static instance: OrderbookService;\n\n  private bufferedOrderBookUpdates: {\n    [symbol: string]: RawOrderBookUpdate[];\n  } = {};\n\n  private rawOrderBook: {\n    [symbol: string]: RawOrderBook;\n  } = {};\n\n  constructor() {}\n\n  static getInstance() {\n    if (!this.instance) {\n      this.instance = new OrderbookService();\n    }\n    return this.instance;\n  }\n\n  private sortBufferedOrderBookUpdates(symbol: string) {\n    this.bufferedOrderBookUpdates[symbol]?.sort((a, b) => a.ts - b.ts);\n  }\n\n  private applyUpdateToRawOrderBook(\n    symbol: string,\n    update: RawOrderBookUpdate,\n  ) {\n    const rawOrderBook = this.rawOrderBook[symbol];\n\n    if (!rawOrderBook || rawOrderBook.ts > update.prevTs) {\n      return;\n    }\n\n    const askMap = new Map<number, number>();\n    const bidMap = new Map<number, number>();\n\n    rawOrderBook.asks.forEach((ask) => {\n      askMap.set(ask[0], ask[1]);\n    });\n\n    rawOrderBook.bids.forEach((bid) => {\n      bidMap.set(bid[0], bid[1]);\n    });\n\n    update.asks.forEach((ask) =>\n      ask[1] === 0 ? askMap.delete(ask[0]) : askMap.set(ask[0], ask[1]),\n    );\n    update.bids.forEach((bid) =>\n      bid[1] === 0 ? bidMap.delete(bid[0]) : bidMap.set(bid[0], bid[1]),\n    );\n\n    rawOrderBook.asks = Array.from<[number, number]>(askMap.entries()).sort(\n      (a, b) => a[0] - b[0],\n    );\n    rawOrderBook.bids = Array.from<[number, number]>(bidMap.entries()).sort(\n      (a, b) => b[0] - a[0],\n    );\n\n    rawOrderBook.ts = update.ts;\n  }\n  private applyBufferedUpdatesToRawOrderBooks(symbol: string) {\n    this.bufferedOrderBookUpdates[symbol]?.forEach((update) => {\n      this.applyUpdateToRawOrderBook(symbol, update);\n    });\n  }\n\n  private deleteBufferedOrderBookUpdates(symbol: string) {\n    delete this.bufferedOrderBookUpdates[symbol];\n  }\n\n  private commitOrderBook(symbol: string) {\n    const rawOrderBook = this.rawOrderBook[symbol];\n    if (!rawOrderBook) {\n      return;\n    }\n\n    // const orderbook = this.prepareOrderBookStore(rawOrderBook);\n    // if (orderbook.firstAskPrice <= orderbook.firstBidPrice) {\n    //   console.error(SERVICE_PREFIX, \"Orderbook crossing error\", {\n    //     crossedAsks: orderbook.asks,\n    //     crossedBids: orderbook.bids,\n    //   });\n    //   this.rawOrderBook[symbol] = {\n    //     ...defaultRawOrderBook,\n    //     ts: -1, // must be -1 because it needs to cause Orderbook version error in public websocket\n    //   };\n    // } else {\n    //   orderBookStore.update(symbol, orderbook);\n    //   depthChartService.commitDepthChart(symbol);\n    // }\n  }\n\n  private pushUpdateToBuffer(symbol: string, update: RawOrderBookUpdate) {\n    if (this.bufferedOrderBookUpdates[symbol] === undefined) {\n      this.bufferedOrderBookUpdates[symbol] = [];\n    }\n\n    const buffer = this.bufferedOrderBookUpdates[symbol];\n    if (buffer.length > 0) {\n      const lastUpdate = buffer[buffer.length - 1];\n      if (lastUpdate.ts !== update.prevTs) {\n        this.bufferedOrderBookUpdates[symbol] = [];\n      }\n    }\n\n    this.bufferedOrderBookUpdates[symbol].push(update);\n  }\n  private isValidFullOrderBook(symbol: string, currentTs: number) {\n    if ((this.bufferedOrderBookUpdates[symbol]?.length ?? 0) !== 0) {\n      const earliestUpdates = this.bufferedOrderBookUpdates[symbol][0];\n      // Incoming full orderbook is invalid if the timestamp is less than all of our buffered diff orderbook updates.\n      return earliestUpdates.prevTs <= currentTs;\n    }\n    return true;\n  }\n\n  setFullOrderbook(symbol: string, rawOrderbook: RawOrderBook) {\n    const { ts } = rawOrderbook;\n    this.rawOrderBook[symbol] = rawOrderbook;\n    this.sortBufferedOrderBookUpdates(symbol);\n    if (this.isValidFullOrderBook(symbol, ts)) {\n      this.applyBufferedUpdatesToRawOrderBooks(symbol);\n    }\n  }\n\n  updateOrderbook(\n    symbol: string,\n    update: RawOrderBookUpdate,\n    callback: () => void,\n  ) {\n    const { asks, bids, prevTs, ts } = update;\n    const rawOrderBook = this.rawOrderBook[symbol];\n    if (!rawOrderBook) {\n      return;\n    }\n    const currentTs = rawOrderBook.ts;\n    if (currentTs === 0) {\n      this.pushUpdateToBuffer(symbol, { asks, bids, prevTs, ts });\n      return;\n    }\n    if (prevTs !== currentTs) {\n      this.pushUpdateToBuffer(symbol, { asks, bids, prevTs, ts });\n      if (callback) {\n        callback();\n      }\n      return;\n    }\n    this.applyUpdateToRawOrderBook(symbol, update);\n    this.deleteBufferedOrderBookUpdates(symbol);\n  }\n\n  getRawOrderbook(symbol: string) {\n    return this.rawOrderBook[symbol];\n  }\n\n  public resetOrderBook(symbol: string) {\n    this.rawOrderBook[symbol] = defaultRawOrderBook;\n  }\n}\n\nconst orderBookService = OrderbookService.getInstance();\n\nexport default orderBookService;\n","import { create } from \"zustand\";\n\ntype MarkPriceStore = {\n  markPrices: Record<string, number>;\n  // ask_bid: number[];\n  // orderBook: Record<string, number>;\n};\n\ntype MarkPriceActions = {\n  updateMarkPrice: (markPrice: Record<string, number>) => void;\n  getMarkPriceBySymbol: (symbol: string) => number;\n};\n\nconst useMarkPriceStore = create<\n  MarkPriceStore & { actions: MarkPriceActions }\n>((set, get) => ({\n  markPrices: {},\n  // orderBook: {},\n  // ask_bid: [],\n\n  actions: {\n    updateMarkPrice: (markPrice) => {\n      set({\n        markPrices: markPrice,\n      });\n    },\n    getMarkPriceBySymbol: (symbol: string) => {\n      return get().markPrices[symbol];\n    },\n  },\n}));\n\nconst useMarkPrices = () => useMarkPriceStore((state) => state.markPrices);\nconst useMarkPriceBySymbol = (symbol: string) =>\n  useMarkPriceStore((state) => state.actions.getMarkPriceBySymbol(symbol));\nconst useMarkPriceActions = () => useMarkPriceStore((state) => state.actions);\n\nexport {\n  useMarkPriceStore,\n  useMarkPrices,\n  useMarkPriceBySymbol,\n  useMarkPriceActions,\n};\n","import { useMarkPriceBySymbol } from \"./useMarkPrice/useMarkPriceStore\";\n\n/**\n * Mark price from the in-memory store for `symbol`.\n *\n * @remarks\n * `data` reflects the store lookup and may be transiently unset before streams write in.\n * In TS strict JSX, avoid rendering `{data}` as a direct text child without narrowing\n * (`typeof data === \"number\"`) or formatting through a helper that supplies a fallback.\n */\nexport const useMarkPrice = (symbol: string) => {\n  // const ws = useWS();\n  // const [price, setPrice] = useState(0);\n\n  // const symbolRef = useRef<string>(symbol);\n  // symbolRef.current = symbol;\n\n  // useEffect(() => {\n  //   const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n  //     onMessage: (message: any) => {\n  //       // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n  //       if (message.symbol !== symbolRef.current) {\n  //         unsubscribe?.();\n  //         return;\n  //       }\n  //       setPrice(message.price);\n  //     },\n  //   });\n\n  //   return () => {\n  //     unsubscribe?.();\n  //   };\n  // }, [symbol]);\n  const price = useMarkPriceBySymbol(symbol);\n\n  return { data: price };\n};\n","import { useRef } from \"react\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useIndexPrice = (symbol: string) => {\n  // WARNING: force change perp to spot, because there is no perp now\n  symbol = symbol.replace(\"PERP\", \"SPOT\");\n\n  const symbolRef = useRef<string>(symbol);\n  symbolRef.current = symbol;\n\n  const ws = useWS();\n  return useSWRSubscription(`${symbol}@indexprice`, (key, { next }) => {\n    const unsubscribe = ws.subscribe(`${symbol}@indexprice`, {\n      onMessage: (message: any) => {\n        // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n        if (message.symbol !== symbolRef.current) {\n          unsubscribe?.();\n          return;\n        }\n        next(null, message.price);\n      },\n    });\n\n    return () => {\n      unsubscribe?.();\n    };\n  });\n};\n","import { useMarkPriceStore } from \"./useMarkPrice/useMarkPriceStore\";\n\nexport const useMarkPricesStream = () => {\n  const data = useMarkPriceStore((state) => state.markPrices);\n\n  return { data };\n};\n","import { useRef } from \"react\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useOpenInterest = (symbol: string) => {\n  const ws = useWS();\n\n  const symbolRef = useRef<string>(symbol);\n  symbolRef.current = symbol;\n\n  return useSWRSubscription(`${symbol}@openinterest`, (key, { next }) => {\n    const unsubscribe = ws.subscribe(`${symbol}@openinterest`, {\n      onMessage: (message: any) => {\n        // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n        if (message.symbol !== symbolRef.current) {\n          unsubscribe?.();\n          return;\n        }\n        next(null, message.openInterest);\n      },\n    });\n\n    return () => {\n      unsubscribe?.();\n    };\n  });\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { API, SDKError } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useQuery } from \"../useQuery\";\nimport { useWS } from \"../useWS\";\nimport { useIndexPrice } from \"./useIndexPrice\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMarketMap } from \"./useMarket/market.store\";\nimport { useOpenInterest } from \"./useOpenInterest\";\n\nexport const useTickerStream = (symbol: string) => {\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n  const { data: info } = useQuery<API.MarketInfo>(\n    `/v1/public/futures/${symbol}`,\n    {\n      revalidateOnFocus: false,\n    },\n  );\n\n  const [ticker, setTicker] = useState<any>();\n\n  const symbolRef = useRef<string>(symbol);\n  symbolRef.current = symbol;\n\n  const ws = useWS();\n\n  useEffect(() => {\n    const unsubscribe = ws.subscribe(\n      // { event: \"subscribe\", topic: \"markprices\" },\n      `${symbol}@ticker`,\n      {\n        onMessage: (message: any) => {\n          // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n          if (message.symbol !== symbolRef.current) {\n            unsubscribe?.();\n            return;\n          }\n\n          setTicker(message);\n        },\n      },\n    );\n\n    return () => {\n      setTicker(undefined);\n      unsubscribe?.();\n    };\n  }, [symbol]);\n\n  const { data: markPrices } = useMarkPricesStream();\n  const { data: indexPrice } = useIndexPrice(symbol);\n  const { data: openInterest } = useOpenInterest(symbol);\n  const marketMap = useMarketMap();\n\n  const markPrice = useMemo(() => {\n    return markPrices?.[symbol];\n  }, [markPrices, symbol]);\n\n  const value = useMemo(() => {\n    if (!info) return null;\n    if (!ticker || ticker.symbol !== symbol) return info;\n\n    const config: any = {\n      ...info,\n      mark_price: markPrice,\n      index_price: indexPrice,\n      open_interest: openInterest || marketMap?.[symbol]?.open_interest,\n    };\n\n    if (ticker.open !== undefined) {\n      config[\"24h_open\"] = ticker.open;\n    }\n\n    if (ticker.close !== undefined) {\n      config[\"24h_close\"] = ticker.close;\n    }\n\n    if (ticker.high !== undefined) {\n      config[\"24h_high\"] = ticker.high;\n    }\n\n    if (ticker.low !== undefined) {\n      config[\"24h_low\"] = ticker.low;\n    }\n\n    if (ticker.volume !== undefined) {\n      config[\"24h_volumn\"] = ticker.volume;\n      config[\"24h_volume\"] = ticker.volume;\n    }\n\n    if (ticker.close !== undefined && ticker.open !== undefined) {\n      config[\"change\"] = new Decimal(ticker.close)\n        .minus(ticker.open)\n        .div(ticker.open)\n        .toNumber();\n\n      config[\"24h_change\"] = new Decimal(ticker.close)\n        .minus(ticker.open)\n        .toNumber();\n    }\n    return config;\n  }, [info, symbol, ticker, openInterest, marketMap]);\n\n  return value as API.MarketInfo & { change?: number; \"24h_change\"?: number };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n  useCallback,\n  useContext,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useLocalStorage } from \"../useLocalStorage\";\nimport { useWS } from \"../useWS\";\nimport orderbooksService from \"./orderbook.service\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useTickerStream } from \"./useTickerStream\";\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n  asks: OrderBookItem[];\n  bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n  Array(len).fill([Number.NaN, Number.NaN, Number.NaN, Number.NaN]);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst isNumber = (val: unknown): val is number => {\n  return typeof val === \"number\" && !Number.isNaN(val);\n};\n\nexport const getPriceKey = (\n  rawPrice: number,\n  depth: number,\n  isAsks: boolean,\n) => {\n  return new Decimal(rawPrice)\n    .div(depth)\n    .toDecimalPlaces(0, isAsks ? Decimal.ROUND_CEIL : Decimal.ROUND_FLOOR)\n    .mul(depth)\n    .toNumber();\n};\n\nconst reduceItems = (\n  depth: number | undefined,\n  data: OrderBookItem[],\n  isAsks: boolean,\n) => {\n  if (!Array.isArray(data) || data.length === 0) {\n    return [];\n  }\n  let newData = [...data];\n  const result: OrderBookItem[] = [];\n\n  if (typeof depth !== \"undefined\") {\n    const pricesMap = new Map<number, [number, number, number]>();\n    const len = data.length;\n    for (let i = 0; i < len; i++) {\n      const [rawPrice, quantity] = data[i];\n      if (!isNumber(rawPrice) || !isNumber(quantity)) {\n        continue;\n      }\n\n      const priceKey = getPriceKey(rawPrice, depth, isAsks);\n      const amtByRaw = new Decimal(rawPrice).mul(quantity).toNumber();\n\n      if (pricesMap.has(priceKey)) {\n        const item = pricesMap.get(priceKey)!;\n        const sumQty = new Decimal(item[1]).add(quantity).toNumber();\n        const sumAmtByRaw = new Decimal(item[2] ?? 0).add(amtByRaw).toNumber();\n        pricesMap.set(priceKey, [priceKey, sumQty, sumAmtByRaw]);\n      } else {\n        pricesMap.set(priceKey, [priceKey, quantity, amtByRaw]);\n      }\n    }\n\n    newData = Array.from<[number, number, number]>(pricesMap.values());\n  }\n\n  for (let i = 0; i < newData.length; i++) {\n    const [price, quantity, sumAmtByRaw] = newData[i];\n\n    if (!isNumber(price) || !isNumber(quantity)) {\n      continue;\n    }\n\n    const resLen = result.length;\n\n    const newQuantity = new Decimal(quantity)\n      .add(resLen ? result[resLen - 1][2] : 0)\n      .toNumber();\n\n    const pieceAmount = isNumber(sumAmtByRaw)\n      ? sumAmtByRaw\n      : new Decimal(quantity).mul(price).toNumber();\n\n    const newAmount = new Decimal(pieceAmount)\n      .add(resLen ? result[resLen - 1][3] : 0)\n      .toNumber();\n\n    result.push([price, quantity, newQuantity, newAmount]);\n  }\n\n  return result;\n};\n\nexport const reduceOrderbook = (\n  depth: number | undefined,\n  level: number,\n  padding: boolean,\n  data: OrderbookData,\n): OrderbookData => {\n  let asks = reduceItems(depth, data.asks, true);\n  let bids = reduceItems(depth, data.bids, false);\n\n  /// not empty and asks.price <= bids.price\n  if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {\n    if (asks.length === 1) {\n      const [price, qty, newQuantity, newAmount] = asks[0];\n      asks.shift();\n      asks.push([\n        price + (depth === undefined ? 0 : Number(depth)),\n        qty,\n        newQuantity,\n        newAmount,\n      ]);\n    } else {\n      const [bidPrice] = bids[0];\n      while (asks.length > 0) {\n        const [askPrice, askQty, newQuantity, newAmount] = asks[0];\n        if (askPrice <= bidPrice) {\n          asks.shift();\n          for (let i = 0; i < asks.length; i++) {\n            if (i === 0) {\n              const quantity = new Decimal(asks[i][1]).add(askQty);\n              asks[i][1] = quantity.toNumber();\n              asks[i][2] = quantity.toNumber();\n              asks[i][3] = quantity\n                .toDecimalPlaces(0, Decimal.ROUND_CEIL)\n                .mul(asks[i][0])\n                .toNumber();\n            } else {\n              asks[i][3] = new Decimal(asks[i][0])\n                .mul(asks[i][1])\n                .add(asks[i - 1][3])\n                .toNumber();\n            }\n          }\n        } else {\n          break;\n        }\n      }\n    }\n  }\n\n  asks = asks.reverse();\n\n  if (padding) {\n    asks =\n      asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks;\n    bids =\n      bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids;\n  }\n\n  return {\n    asks: asks,\n    bids: bids,\n  };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n  // let index = -1;\n  if (data.length === 0) {\n    return update;\n  }\n\n  data = data.filter(([price]) => isNumber(price));\n\n  while (update.length > 0) {\n    const item = update.shift();\n\n    if (item) {\n      const [price, quantity] = item;\n\n      const index = data.findIndex(([p]) => p === price);\n\n      if (index === -1) {\n        if (quantity === 0) {\n          continue;\n        }\n        data.push(item);\n      } else {\n        if (quantity === 0) {\n          data.splice(index, 1);\n        } else {\n          data[index] = item;\n        }\n      }\n    }\n  }\n\n  return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n  let asks = [...data.asks];\n  let bids = [...data.bids];\n\n  asks = mergeItems(asks, update.asks).sort(asksSortFn);\n  bids = mergeItems(bids, update.bids).sort(bidsSortFn);\n\n  return {\n    asks: asks,\n    bids: bids,\n  };\n};\n\n/**\n * Configuration for the Order Book\n */\nexport type OrderbookOptions = {\n  /** Indicates the number of data entries to return for ask/bid, default is 10 */\n  level?: number;\n  /** Whether to fill in when the actual data entries are less than the level. If filled, it will add [nan, nan, nan, nan]. Default is true */\n  padding?: boolean;\n};\n\nexport const ORDERLY_ORDERBOOK_DEPTH_KEY = \"orderly_orderbook_depth_key\";\n\nconst INIT_DATA: OrderbookData = {\n  asks: [],\n  bids: [],\n};\n\n/**\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbookStream = (\n  symbol: string,\n  initial: OrderbookData = INIT_DATA,\n  options?: OrderbookOptions,\n) => {\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n\n  const level = options?.level ?? 10;\n  const padding = options?.padding ?? true;\n\n  const symbolRef = useRef<string>(symbol);\n\n  symbolRef.current = symbol;\n\n  const {\n    defaultOrderbookTickSizes: DEFAULT_TICK_SIZES = {},\n    defaultOrderbookSymbolDepths: DEFAULT_SYMBOL_DEPTHS = {},\n  } = useContext(OrderlyContext);\n\n  const [data, setData] = useState<OrderbookData>(initial);\n  const [isLoading, setIsLoading] = useState(true);\n  // const [level, setLevel] = useState(() => options?.level ?? 10);\n\n  const config = useSymbolsInfo()[symbol];\n\n  const [depthObject, setDepthObject] = useLocalStorage(\n    ORDERLY_ORDERBOOK_DEPTH_KEY,\n    {},\n  );\n\n  // markPrice, lastPrice\n  const prevMiddlePrice = useRef<number>(0);\n\n  const tick = config(\"quote_tick\");\n\n  const depths = useMemo(() => {\n    if (DEFAULT_SYMBOL_DEPTHS[symbol]) {\n      return DEFAULT_SYMBOL_DEPTHS[symbol];\n    }\n    if (typeof tick === \"undefined\") {\n      return [];\n    }\n    try {\n      const base = new Decimal(tick);\n      return [\n        base.toNumber(),\n        base.mul(10).toNumber(),\n        base.mul(100).toNumber(),\n        base.mul(1000).toNumber(),\n      ];\n    } catch {\n      //\n    }\n    return [tick];\n  }, [symbol, tick]);\n\n  useEffect(() => {\n    if (depthObject[symbol]) {\n      return;\n    }\n    if (DEFAULT_TICK_SIZES[symbol]) {\n      // @ts-ignore\n      setDepthObject((prev) => ({\n        ...prev,\n        [symbol]: Number(DEFAULT_TICK_SIZES[symbol]),\n      }));\n    } else {\n      // @ts-ignore\n      setDepthObject((prev) => ({\n        ...prev,\n        [symbol]: tick,\n      }));\n    }\n  }, [depthObject, tick, symbol, DEFAULT_TICK_SIZES]);\n\n  const onDepthChange = useCallback(\n    (val: number) => {\n      // @ts-ignore\n      setDepthObject((prev) => ({ ...prev, [symbol]: val }));\n    },\n    [symbol],\n  );\n\n  const ws = useWS();\n\n  const ticker = useTickerStream(symbol);\n\n  const eventEmitter = useEventEmitter();\n\n  // const orderbookRequest =\n\n  useEffect(() => {\n    let needRequestFullOrderbook = true;\n    setIsLoading(true);\n\n    let fullOrderBookUpdateSub: any;\n\n    const orderBookUpdateSub = ws.subscribe(\n      {\n        event: \"subscribe\",\n        topic: `${symbol}@orderbookupdate`,\n      },\n      {\n        formatter: (message) => message,\n        onMessage: (message: any) => {\n          const { data: wsData, ts } = message;\n          const { symbol, asks, bids, prevTs } = wsData;\n          // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n          if (symbolRef.current !== symbol) {\n            orderBookUpdateSub?.();\n            return;\n          }\n          orderbooksService.updateOrderbook(\n            symbol,\n            { asks, bids, ts, prevTs },\n            () => {\n              needRequestFullOrderbook = true;\n            },\n          );\n\n          const data = orderbooksService.getRawOrderbook(symbol);\n          setData({ bids: data.bids, asks: data.asks });\n        },\n      },\n    );\n\n    if (needRequestFullOrderbook) {\n      setIsLoading(true);\n\n      fullOrderBookUpdateSub = ws.onceSubscribe(\n        {\n          event: \"request\",\n          id: `${symbol}@orderbook`,\n          params: {\n            type: \"orderbook\",\n            symbol: symbol,\n          },\n        },\n        {\n          formatter: (message) => message,\n          onMessage: (message: any) => {\n            // when current symbol is not the same as the ws symbol, skip update data\n            const { symbol, asks, bids, ts } = message.data;\n            if (symbolRef.current !== symbol) {\n              return;\n            }\n            orderbooksService.setFullOrderbook(symbol, { asks, bids, ts });\n            const data = orderbooksService.getRawOrderbook(symbol);\n            setData({ bids: data.bids, asks: data.asks });\n\n            setIsLoading(false);\n          },\n        },\n      );\n      needRequestFullOrderbook = false;\n    }\n\n    return () => {\n      // unsubscribe\n      orderBookUpdateSub?.();\n      fullOrderBookUpdateSub?.();\n      orderbooksService.resetOrderBook(symbol);\n      setData(INIT_DATA);\n    };\n  }, [symbol]);\n\n  // const {data:markPrices} = useMarkPricesStream();\n\n  const { data: markPrice } = useMarkPrice(symbol);\n\n  const onItemClick = useCallback((item: OrderBookItem) => {\n    eventEmitter.emit(\"orderbook:item:click\", item);\n  }, []);\n\n  const reducedData = reduceOrderbook(depthObject[symbol], level, padding, {\n    asks: data.asks,\n    bids: data.bids,\n  });\n\n  useEffect(() => {\n    eventEmitter.emit(\"orderbook:update\", reducedData);\n  }, [reducedData]);\n\n  const middlePrice = useMemo(() => {\n    let asksFrist = 0;\n    let bidsFirst = 0;\n\n    if (data.asks.length > 0) {\n      asksFrist = reducedData.asks?.[reducedData.asks.length - 1]?.[0];\n    }\n\n    if (data.bids.length > 0) {\n      bidsFirst = data.bids[0][0];\n    }\n\n    if (!isNumber(asksFrist) || !isNumber(bidsFirst) || !ticker) {\n      return 0;\n    }\n\n    return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n  }, [ticker?.[\"24h_close\"], data]);\n\n  useEffect(() => {\n    prevMiddlePrice.current = middlePrice;\n  }, [middlePrice]);\n\n  return [\n    {\n      asks: reducedData.asks.slice(-level),\n      bids: reducedData.bids.slice(0, level),\n      markPrice: markPrice,\n      middlePrice: [prevMiddlePrice.current, middlePrice],\n    },\n    {\n      onDepthChange: onDepthChange,\n      depth: depthObject[symbol] as number,\n      allDepths: depths,\n      isLoading,\n      onItemClick,\n    },\n  ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n","import { useMemo } from \"react\";\nimport { useSymbolsInfo } from \"./orderlyHooks\";\n\nexport const useSymbolInfo = (symbol?: string) => {\n  const infos = useSymbolsInfo();\n\n  return useMemo(() => {\n    return !symbol || infos.isNil ? null : infos[symbol];\n  }, [infos, symbol]);\n};\n","import { type API } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useAppStore } from \"./appStore\";\n\nexport type FundingRates = ReturnType<typeof useFundingRates>;\n\nexport const useFundingRates = () => {\n  const data = useAppStore((state) => state.fundingRates);\n\n  return createGetter<API.FundingRate>({ ...data });\n};\n\nexport const useFundingRatesStore = () => {\n  const data = useAppStore((state) => state.fundingRates) as Record<\n    string,\n    API.FundingRate\n  >;\n  return data;\n};\n\nfunction getEstFundingRate(data: API.FundingRate) {\n  if (!data) return;\n\n  const { next_funding_time, est_funding_rate } = data;\n\n  if (getTimestamp() > next_funding_time) {\n    return null;\n  }\n\n  return est_funding_rate;\n}\n","import { useContext, useMemo, useState } from \"react\";\nimport { API, EMPTY_LIST } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderlyContext } from \"../../orderlyContext\";\nimport { useFundingRates } from \"../useFundingRates\";\nimport { useMarketsStream } from \"../useMarketsStream\";\nimport { useRwaSymbolsInfo } from \"../useRwaSymbolsInfo\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { MarketsType } from \"./marketTypes\";\n\nexport { MarketsType } from \"./marketTypes\";\n\nexport interface FavoriteTab {\n  name: string;\n  id: number;\n}\n\nexport interface Favorite {\n  name: string;\n  tabs: FavoriteTab[];\n}\n\nexport interface Recent {\n  name: string;\n}\n\nexport interface TabSort {\n  sortKey: string;\n  sortOrder: string;\n}\n\nexport type MarketStoreKey =\n  | \"recent\"\n  | \"favorites\"\n  | \"favoriteTabs\"\n  | \"newListing\"\n  | \"lastSelectedFavoriteTab\"\n  | \"tabSort\";\n\n/*\n{\n  markets: {\n      recent: [\n          { \"name\": `${symbol.name}` },\n          { \"name\": `${symbol.name}` },\n      ],\n      favorites: [\n          { \"name\": `${symbol.name}`, \"tabs\": [{ \"name\": \"Popular\", \"id\": 1 }] },\n      ],\n      favoriteTabs: [\n          { \"name\": \"Popular\", \"id\": 1 },\n      ],\n      \"lastSelectFavoriteTab\": { \"name\": \"Popular\", \"id\": 1 },\n      \"tabSort\": { \"all\": { \"sortKey\": \"24h_amount\", \"sortOrder\": \"desc\" }}        \n  }\n}\n*/\n\nconst DefaultTab = { name: \"Popular\", id: 1 };\nconst marketsKey = \"markets\";\n\n/** @deprecated use useMarkets instead */\nexport const useMarket = (type: MarketsType) => {\n  const { configStore } = useContext(OrderlyContext);\n\n  const symbolsInfo = useSymbolsInfo();\n  const rwaSymbolsInfo = useRwaSymbolsInfo();\n  const fundingRates = useFundingRates();\n  const { data: futures } = useMarketsStream();\n\n  const updateStore = (key: MarketStoreKey, data: any) => {\n    configStore.set(marketsKey, {\n      ...configStore.getOr(marketsKey, {}),\n      [key]: data,\n    });\n  };\n\n  const getStore = <T>(key: MarketStoreKey, defaultValue: T) => {\n    return (configStore.get(marketsKey)[key as any] as T) || defaultValue;\n  };\n\n  if (!configStore.get(marketsKey)) {\n    const jsonStr = localStorage.getItem(marketsKey);\n    if (jsonStr) {\n      configStore.set(marketsKey, JSON.parse(jsonStr));\n    } else {\n      configStore.set(marketsKey, {\n        recent: [],\n        favorites: [\n          { name: \"PERP_ETH_USDC\", tabs: [{ ...DefaultTab }] },\n          { name: \"PERP_BTC_USDC\", tabs: [{ ...DefaultTab }] },\n        ],\n        favoriteTabs: [{ ...DefaultTab }],\n        lastSelectedFavoriteTab: { ...DefaultTab },\n      });\n    }\n  }\n\n  const getFavoriteTabs = useMemo(() => {\n    return getStore(\"favoriteTabs\", [{ ...DefaultTab }]);\n  }, []);\n\n  const getFavorites = useMemo(() => {\n    const curData = getStore<Favorite[]>(\"favorites\", []);\n    const tabs = getFavoriteTabs;\n    const result: Favorite[] = [];\n    const len = curData.length;\n    for (let index = 0; index < len; index++) {\n      const favData = curData[index];\n      const favTabs = favData.tabs.filter(\n        (tab) => tabs.findIndex((item) => tab.id === item.id) !== -1,\n      );\n      if (favTabs.length) {\n        result.push({ ...favData, tabs: favTabs });\n      }\n    }\n    updateStore(\"favorites\", result);\n\n    return result;\n  }, [configStore]);\n\n  const [favoriteTabs, setFavoriteTabs] = useState(getFavoriteTabs);\n  const [favorites, setFavorites] = useState(getFavorites);\n\n  const [recent, setRecent] = useState(\n    getStore<Recent[]>(\"recent\", []).filter((e) => e),\n  );\n  const [tabSort, setTabSort] = useState(\n    getStore<Record<string, TabSort>>(\"tabSort\", {}),\n  );\n\n  const updateFavoriteTabs = (\n    tab: FavoriteTab | FavoriteTab[],\n    operator?: {\n      add?: boolean;\n      update?: boolean;\n      delete?: boolean;\n    },\n  ) => {\n    const saveTabs = (tabs: FavoriteTab[]) => {\n      setFavoriteTabs(tabs);\n      updateStore(\"favoriteTabs\", tabs);\n    };\n\n    if (Array.isArray(tab)) {\n      saveTabs(tab);\n      return;\n    }\n\n    const tabs = [...favoriteTabs];\n    const index = tabs.findIndex((item) => item.id === tab.id);\n    if (operator?.add) {\n      tabs.push(tab);\n    } else if (operator?.update) {\n      if (index !== -1) {\n        tabs[index] = tab;\n      }\n    } else if (operator?.delete) {\n      if (index !== -1) {\n        tabs.splice(index, 1);\n      }\n    }\n    saveTabs(tabs);\n  };\n\n  const updateFavorites = (favorites: Favorite[]) => {\n    updateStore(\"favorites\", favorites);\n    setFavorites(favorites);\n  };\n\n  const addToHistory = (symbol: API.MarketInfoExt) => {\n    const curData = [...recent];\n    const index = curData.findIndex((item) => item.name == symbol.symbol);\n    if (index !== -1) {\n      curData.splice(index, 1);\n    }\n    curData.unshift({ name: symbol.symbol });\n    updateStore(\"recent\", curData);\n    setRecent(curData);\n  };\n\n  const updateSymbolFavoriteState = (\n    symbol: API.MarketInfoExt,\n    tab: FavoriteTab | FavoriteTab[],\n    remove: boolean = false,\n  ) => {\n    const curData = [...favorites];\n    const index = curData.findIndex((item) => item.name == symbol.symbol);\n\n    if (index === -1) {\n      // can not find\n      if (Array.isArray(tab)) {\n        if (tab.length > 0) {\n          curData.unshift({ name: symbol.symbol, tabs: tab });\n        }\n      } else {\n        if (!remove) {\n          // insert\n          curData.unshift({ name: symbol.symbol, tabs: [tab] });\n        }\n      }\n    } else {\n      const favorite = curData[index];\n      if (Array.isArray(tab)) {\n        if (tab.length === 0) {\n          // remove\n          curData.splice(index, 1);\n        } else {\n          // overrides\n          curData[index] = { ...favorite, tabs: tab };\n        }\n      } else {\n        if (remove) {\n          const tabs = favorite.tabs.filter((item) => item.id != tab.id);\n          if (tabs.length === 0) {\n            // del favorite\n            curData.splice(index, 1);\n          } else {\n            curData[index] = { ...favorite, tabs };\n          }\n        } else {\n          // insert\n          const tabs = favorite.tabs;\n          tabs.push(tab);\n          curData[index] = { ...favorite, tabs };\n        }\n      }\n    }\n\n    updateStore(\"favorites\", curData);\n    setFavorites(() => curData);\n  };\n\n  const marketsList = useMemo(() => {\n    const list = futures?.map((item: any) => {\n      const { open_interest = 0, index_price = 0 } = item;\n\n      const info = symbolsInfo[item.symbol];\n      const rwaInfo = !rwaSymbolsInfo.isNil\n        ? rwaSymbolsInfo[item.symbol]()\n        : null;\n      const rate = fundingRates[item.symbol];\n      const est_funding_rate = rate(\"est_funding_rate\");\n      const funding_period = info(\"funding_period\");\n      const change =\n        item.change === undefined\n          ? get24hChange(item[\"24h_close\"], item[\"24h_open\"])\n          : item.change;\n\n      return {\n        ...item,\n        change,\n        \"8h_funding\": get8hFunding(est_funding_rate, funding_period),\n        quote_dp: info(\"quote_dp\"),\n        created_time: info(\"created_time\"),\n        isRwa: !!rwaInfo,\n        isPreTge: Boolean(item.is_pretge ?? info(\"is_pretge\")),\n        openInterest: new Decimal(open_interest || 0)\n          .mul(index_price || 0)\n          .toNumber(),\n      };\n    });\n    return list || [];\n  }, [symbolsInfo, futures, fundingRates, rwaSymbolsInfo]);\n\n  const getData = (type: MarketsType) => {\n    // get data\n    const localData =\n      type === MarketsType.FAVORITES ? [...favorites] : [...recent];\n    // filter\n    const keys = localData.map((item) => item.name);\n    let filter = marketsList;\n    if (type == MarketsType.CRYPTO) {\n      filter = marketsList?.filter((item) => !item.isRwa);\n    } else if (type == MarketsType.RWA) {\n      filter = marketsList?.filter((item) => item.isRwa);\n    } else if (type == MarketsType.PRE_TGE) {\n      filter = marketsList?.filter((item) => item.isPreTge);\n    } else if (type != MarketsType.ALL && type != MarketsType.COMMUNITY) {\n      filter = marketsList?.filter((item) => keys.includes(item.symbol));\n    }\n\n    const favoritesData = [...favorites];\n    const favoriteKeys = favoritesData.map((item) => item.name);\n    if (filter) {\n      for (let index = 0; index < filter.length; index++) {\n        const element = filter[index];\n        const isFavorite =\n          type == MarketsType.FAVORITES\n            ? true\n            : favoriteKeys.includes(element.symbol);\n\n        const fIndex = favoritesData.findIndex(\n          (item) => item.name === element.symbol,\n        );\n        const tabs = fIndex === -1 ? [] : favoritesData[fIndex].tabs;\n\n        let imr = undefined;\n        if (symbolsInfo) {\n          imr = symbolsInfo?.[element.symbol](\"base_imr\");\n        }\n\n        filter[index] = {\n          ...filter[index],\n          isFavorite,\n          tabs,\n          leverage: imr ? 1 / imr : undefined,\n        };\n      }\n    }\n\n    return filter;\n  };\n\n  const pinToTop = (symbol: API.MarketInfoExt) => {\n    const index = favorites.findIndex((item) => item.name === symbol.symbol);\n    if (index !== -1) {\n      const element = favorites[index];\n      const list = [...favorites];\n      list.splice(index, 1);\n      list.unshift(element);\n      updateStore(\"favorites\", list);\n      setFavorites(list);\n    }\n  };\n\n  const getLastSelFavTab = () => {\n    return getStore<FavoriteTab>(\"lastSelectedFavoriteTab\", { ...DefaultTab });\n  };\n\n  const updateSelectedFavoriteTab = (tab: FavoriteTab) => {\n    updateStore(\"lastSelectedFavoriteTab\", tab);\n  };\n\n  const updateTabsSortState = (\n    tabId: string,\n    sortKey: string,\n    sortOrder: \"desc\" | \"asc\",\n  ) => {\n    const map = getStore<Record<string, TabSort>>(\"tabSort\", {});\n\n    map[tabId] = {\n      sortKey,\n      sortOrder,\n    };\n\n    updateStore(\"tabSort\", map);\n    setTabSort(map);\n  };\n\n  const markets = getData(type);\n\n  return [\n    markets || EMPTY_LIST,\n    {\n      favoriteTabs,\n      favorites,\n      recent,\n      tabSort,\n      addToHistory,\n      updateFavorites,\n      updateFavoriteTabs,\n      updateSymbolFavoriteState,\n      pinToTop,\n      getLastSelFavTab,\n      updateSelectedFavoriteTab,\n      updateTabsSortState,\n    },\n  ] as const;\n};\n\nfunction get8hFunding(est_funding_rate: number, funding_period: number) {\n  let funding8h = 0;\n\n  if (est_funding_rate === undefined || est_funding_rate === null) {\n    return null;\n  }\n\n  if (funding_period) {\n    funding8h = new Decimal(est_funding_rate || 0)\n      .mul(funding_period)\n      .div(8)\n      .toNumber();\n  }\n\n  return funding8h;\n}\n\nfunction get24hChange(close: number, open: number) {\n  if (close !== undefined && open !== undefined) {\n    if (open === 0) {\n      return 0;\n    }\n    return new Decimal(close).minus(open).div(open).toNumber();\n  }\n}\n","import { create } from \"zustand\";\n\ntype IndexPriceStore = {\n  indexPrices: Record<string, number>;\n};\n\ntype IndexPriceActions = {\n  updateIndexPrice: (indexPrice: Record<string, number>) => void;\n  // getIndexPriceBySymbol: (symbol: string) => number;\n};\n\nconst useIndexPriceStore = create<\n  IndexPriceStore & {\n    actions: IndexPriceActions;\n  }\n>((set) => ({\n  indexPrices: {},\n  actions: {\n    updateIndexPrice: (indexPrice) => {\n      set({\n        indexPrices: indexPrice,\n      });\n    },\n  },\n}));\n\nexport { useIndexPriceStore };\n","import { useMemoizedFn } from \"..\";\nimport { useIndexPriceStore } from \"./useIndexPrice/useIndexPriceStore\";\n\nexport const useIndexPricesStream = () => {\n  const indexPrices = useIndexPriceStore((state) => state.indexPrices);\n  const getIndexPrice = (token: string) => {\n    if (token === \"USDC\") {\n      return 1;\n    }\n    return indexPrices[`PERP_${token}_USDC`] ?? 0;\n  };\n  return {\n    data: indexPrices,\n    getIndexPrice: useMemoizedFn(getIndexPrice),\n  };\n};\n","import { useCallback, useMemo } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useQuery } from \"../useQuery\";\n\nconst generateLeverageLevers = (max: number) => {\n  const min = 1;\n  const parts = 5;\n  const step = (max - min) / (parts - 1);\n  const result: number[] = [];\n  for (let i = 0; i < parts; i++) {\n    result.push(Math.floor(min + step * i));\n  }\n  return result;\n};\n\n/**\n * A hook for managing leverage in trading.\n *\n * @remarks\n * This hook provides functionality to get and update the user's leverage settings.\n *\n * It fetches the current leverage from client info and available leverage options from config.\n *\n * @returns A tuple containing:\n * - The current maximum leverage value\n * - An object with:\n *   - `update`: Function to update leverage\n *   - `isMutating`: Boolean indicating if an update is in progress\n *   - `config`: Array of available leverage options (e.g. [1, 2, 3, 4, 5, 10, 15, 20])\n *\n * @example\n * ```typescript\n * const [maxLeverage, { update, isMutating, config }] = useLeverage();\n *\n * // Get current max leverage\n * console.log(maxLeverage);\n *\n * // Update leverage\n * update({ leverage: 5 });\n *\n * // Available leverage options\n * console.log(config); // e.g., [1, 2, 3, 4, 5, 10, 15, 20]\n * ```\n */\nexport const useLeverage = () => {\n  const { data, mutate } = usePrivateQuery<{ max_leverage: string | number }>(\n    \"/v1/client/info\",\n    {\n      revalidateOnFocus: false,\n    },\n  );\n\n  const [update, { isMutating }] = useMutation(\"/v1/client/leverage\");\n\n  const { data: leverageConfig, isLoading } = useQuery<{\n    max_futures_leverage: string;\n  }>(\"/v1/public/leverage\", {\n    revalidateOnFocus: false,\n    errorRetryCount: 3,\n    // formatter: (data) => data,\n  });\n\n  const updateLeverage = useCallback(\n    async (data: { leverage: number }) => {\n      const res = await update(data);\n      if (res.success) {\n        return mutate();\n      } else {\n        throw new Error(res.message);\n      }\n    },\n    [update, mutate],\n  );\n\n  const memoizedCurLeverage = useMemo<number>(() => {\n    if (data?.max_leverage !== undefined) {\n      return Number(data.max_leverage);\n    }\n    return 1;\n  }, [data?.max_leverage]);\n\n  const memoizedMaxLeverage = useMemo<number>(() => {\n    if (leverageConfig?.max_futures_leverage !== undefined) {\n      return Number(leverageConfig.max_futures_leverage);\n    }\n    return 1;\n  }, [leverageConfig?.max_futures_leverage]);\n\n  const memoizedLeverageLevers = useMemo<number[]>(() => {\n    return generateLeverageLevers(memoizedMaxLeverage);\n  }, [memoizedMaxLeverage]);\n\n  return {\n    update: updateLeverage,\n    isLoading: isLoading || isMutating,\n    leverageLevers: memoizedLeverageLevers,\n    curLeverage: memoizedCurLeverage,\n    maxLeverage: memoizedMaxLeverage,\n  } as const;\n};\n","import { useMemo } from \"react\";\nimport { MarginMode, type API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nconst buildKey = (symbol: string, marginMode?: MarginMode) =>\n  `${symbol}_${marginMode ?? MarginMode.CROSS}`;\n\ntype SymbolLeverageMap = Record<string, number>;\n\nexport const useSymbolLeverageMap = () => {\n  const { data, error, isLoading, mutate } = usePrivateQuery<\n    API.LeverageInfo[]\n  >(\"/v1/client/leverages\", {\n    revalidateOnFocus: false,\n    revalidateOnReconnect: false,\n    errorRetryCount: 1,\n  });\n\n  const leverages: SymbolLeverageMap = useMemo(() => {\n    if (!data || !Array.isArray(data)) return {};\n\n    const map: SymbolLeverageMap = {};\n    for (const item of data) {\n      const key = buildKey(item.symbol, item.margin_mode);\n      map[key] = item.leverage;\n    }\n\n    return map;\n  }, [data]);\n\n  const getSymbolLeverage = (symbol?: string, marginMode?: MarginMode) => {\n    if (!symbol) return undefined;\n    const key = buildKey(symbol, marginMode);\n    return leverages[key];\n  };\n\n  return {\n    leverages,\n    getSymbolLeverage,\n    isLoading,\n    error,\n    refresh: mutate,\n  } as const;\n};\n","import { useCallback, useMemo } from \"react\";\nimport { MarginMode } from \"@orderly.network/types\";\nimport { useBadgeBySymbol } from \"../useBadgeBySymbol\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nexport type SetMarginModePayload = {\n  symbol_list: string[];\n  default_margin_mode: MarginMode;\n};\n\ntype SetMarginModeResult = {\n  success: boolean;\n  message?: string;\n};\n\ntype MarginModesResponseItem = {\n  symbol: string;\n  default_margin_mode: MarginMode;\n};\n\n/**\n * A high-level hook to manage margin modes for all symbols.\n *\n * It encapsulates both:\n * - fetching current default margin modes for all symbols\n * - updating margin mode for one or multiple symbols\n */\nexport const useMarginModes = () => {\n  const { data, error, isLoading, mutate } = usePrivateQuery<\n    Array<MarginModesResponseItem>\n  >(\"/v1/client/margin_modes\", {\n    revalidateOnFocus: false,\n    revalidateOnMount: true,\n  });\n\n  const [setMarginModeInternal, { isMutating }] = useMutation(\n    \"/v1/client/margin_mode\",\n    \"POST\",\n  );\n\n  const marginModes = useMemo(() => {\n    if (!data || !Array.isArray(data)) return {};\n\n    const map: Record<string, MarginMode> = {};\n    for (const item of data) {\n      map[item.symbol] = item.default_margin_mode;\n    }\n\n    return map;\n  }, [data]);\n\n  const setMarginMode = (payload: SetMarginModePayload) =>\n    setMarginModeInternal(payload) as Promise<SetMarginModeResult>;\n\n  const updateMarginMode = useCallback(\n    async (payload: SetMarginModePayload) => {\n      const result = await setMarginMode(payload);\n\n      if (result.success) {\n        await mutate();\n        return result;\n      }\n\n      throw new Error(result.message ?? \"Failed to update margin mode\");\n    },\n    [setMarginMode, mutate],\n  );\n\n  return {\n    marginModes,\n    isLoading,\n    error,\n    refresh: mutate,\n    setMarginMode,\n    updateMarginMode,\n    isMutating,\n  };\n};\n\nexport const useMarginModeBySymbol = (\n  symbol: string,\n  fallback: MarginMode | null = MarginMode.CROSS,\n) => {\n  const { marginModes, isLoading, error, refresh, updateMarginMode } =\n    useMarginModes();\n\n  // Permissionless-listing is determined by the API-returned `broker_id`.\n  // `brokerName` is for display only (from a separate broker mapping cache)\n  // and must not be used for permission/trading constraint enforcement.\n  const { brokerId } = useBadgeBySymbol(symbol);\n\n  const marginMode = useMemo(() => {\n    // If brokerId exists, it means permissionless-listing.\n    // Permissionless-listing symbols can ONLY be ISOLATED.\n    if (brokerId) return MarginMode.ISOLATED;\n\n    return fallback === null\n      ? marginModes[symbol]\n      : (marginModes[symbol] ?? fallback);\n  }, [brokerId, fallback, marginModes, symbol]);\n\n  const update = useCallback(\n    async (mode: MarginMode) => {\n      // Enforce permissionless-listing symbols to be ISOLATED.\n      if (brokerId) mode = MarginMode.ISOLATED;\n      return updateMarginMode({\n        symbol_list: [symbol],\n        default_margin_mode: mode,\n      });\n    },\n    [brokerId, symbol, updateMarginMode],\n  );\n\n  return {\n    marginMode,\n    isLoading,\n    error,\n    refresh,\n    update,\n    isPermissionlessListing: !!brokerId,\n  };\n};\n","export const SWAP_QUOTE_URL = \"/v1/swap/quote\";\n\nexport interface SwapQuoteRequest extends Record<string, string | number> {\n  fromToken: string;\n  toToken: string;\n  amount: number;\n  slippage: number;\n}\n\nexport interface SwapQuoteToken {\n  tokenAddress: string;\n  amount?: string;\n  value?: string;\n  estimatedAmount?: string;\n  estimatedValue?: string;\n}\n\nexport interface GasEstimate {\n  gasUnits: string;\n  gasPriceWei: string | null;\n  nativeTokenSymbol: string;\n  estimatedFeeAmount: string | null;\n  estimatedFeeValue: string | null;\n}\n\nexport interface SwapQuoteData {\n  pathId: string;\n  traceId: string;\n  chainId: string;\n  fromToken: SwapQuoteToken & { amount: string; value: string };\n  toToken: SwapQuoteToken;\n  valueCurrency: string;\n  netOutValue: string;\n  priceImpactPercent: string | null;\n  slippageLimitPercent: string;\n  gasEstimate: GasEstimate;\n  expiresAt: number;\n}\n\nexport interface SwapQuoteResponse {\n  success: boolean;\n  data?: SwapQuoteData;\n  code?: number | string;\n  message?: string;\n  timestamp?: number;\n}\n\nexport interface SwapQuoteError extends Error {\n  code?: number | string;\n  timestamp?: number;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst isString = (value: unknown): value is string => typeof value === \"string\";\n\nconst isNullableString = (value: unknown): value is string | null =>\n  value === null || isString(value);\n\nconst isOptionalString = (value: unknown): value is string | undefined =>\n  value === undefined || isString(value);\n\nconst invalidQuoteResponseError = () => {\n  const error = new Error(\"Invalid quote response\") as SwapQuoteError;\n  error.code = \"INVALID_QUOTE_RESPONSE\";\n  error.timestamp = Date.now();\n  return error;\n};\n\nexport const isSwapQuoteData = (value: unknown): value is SwapQuoteData => {\n  if (!isRecord(value)) {\n    return false;\n  }\n\n  const fromToken = value.fromToken;\n  const toToken = value.toToken;\n  const gasEstimate = value.gasEstimate;\n\n  return (\n    isString(value.pathId) &&\n    isString(value.traceId) &&\n    isString(value.chainId) &&\n    isRecord(fromToken) &&\n    isString(fromToken.tokenAddress) &&\n    isString(fromToken.amount) &&\n    isString(fromToken.value) &&\n    isRecord(toToken) &&\n    isString(toToken.tokenAddress) &&\n    isOptionalString(toToken.estimatedAmount) &&\n    isOptionalString(toToken.estimatedValue) &&\n    value.valueCurrency === \"USD\" &&\n    isString(value.netOutValue) &&\n    isString(value.slippageLimitPercent) &&\n    (value.priceImpactPercent === null || isString(value.priceImpactPercent)) &&\n    isRecord(gasEstimate) &&\n    isString(gasEstimate.gasUnits) &&\n    isString(gasEstimate.nativeTokenSymbol) &&\n    isNullableString(gasEstimate.gasPriceWei) &&\n    isNullableString(gasEstimate.estimatedFeeAmount) &&\n    isNullableString(gasEstimate.estimatedFeeValue) &&\n    typeof value.expiresAt === \"number\" &&\n    Number.isFinite(value.expiresAt) &&\n    Number.isInteger(value.expiresAt)\n  );\n};\n\nexport const unwrapSwapQuoteResponse = (\n  response: SwapQuoteResponse | SwapQuoteData | undefined,\n) => {\n  if (response && typeof response === \"object\" && \"success\" in response) {\n    return response.success === false ? undefined : response.data;\n  }\n\n  return response as SwapQuoteData | undefined;\n};\n\nexport const normalizeSwapQuoteResponse = (\n  response: SwapQuoteResponse | SwapQuoteData,\n) => {\n  if (response && typeof response === \"object\" && \"success\" in response) {\n    if (response.success === false) {\n      const error = new Error(\n        response.message || String(response.code || \"Quote failed\"),\n      ) as SwapQuoteError;\n      error.code = response.code;\n      error.timestamp = response.timestamp;\n      throw error;\n    }\n\n    if (!response.data) {\n      throw invalidQuoteResponseError();\n    }\n  }\n\n  const data = unwrapSwapQuoteResponse(response);\n  if (data && !isSwapQuoteData(data)) {\n    throw invalidQuoteResponseError();\n  }\n\n  return data;\n};\n","import { useRef, useState } from \"react\";\nimport { useMemoizedFn } from \"../shared/useMemoizedFn\";\nimport { useMutation } from \"../useMutation\";\nimport {\n  normalizeSwapQuoteResponse,\n  isSwapQuoteData,\n  SWAP_QUOTE_URL,\n  unwrapSwapQuoteResponse,\n  type SwapQuoteError,\n  type SwapQuoteData,\n  type SwapQuoteRequest,\n  type SwapQuoteResponse,\n} from \"./swapQuote\";\n\nexport {\n  normalizeSwapQuoteResponse,\n  isSwapQuoteData,\n  SWAP_QUOTE_URL,\n  unwrapSwapQuoteResponse,\n} from \"./swapQuote\";\nexport type {\n  GasEstimate,\n  SwapQuoteData,\n  SwapQuoteError,\n  SwapQuoteRequest,\n  SwapQuoteResponse,\n  SwapQuoteToken,\n} from \"./swapQuote\";\n\nexport const useSwapQuote = () => {\n  const [trigger, { reset, isMutating }] = useMutation<\n    SwapQuoteResponse,\n    SwapQuoteError\n  >(SWAP_QUOTE_URL);\n  const generation = useRef(0);\n  const [accepted, setAccepted] = useState<{\n    data: SwapQuoteData;\n    request: SwapQuoteRequest;\n  }>();\n  const [quoteError, setQuoteError] = useState<SwapQuoteError>();\n\n  const postQuote = useMemoizedFn(async (request: SwapQuoteRequest | null) => {\n    const id = ++generation.current;\n    setQuoteError(undefined);\n    setAccepted(undefined);\n\n    try {\n      const response = await trigger(request).then(normalizeSwapQuoteResponse);\n      const quote = unwrapSwapQuoteResponse(response);\n      if (\n        id === generation.current &&\n        request &&\n        quote &&\n        isSwapQuoteData(quote)\n      ) {\n        setAccepted({ data: quote, request });\n      }\n      return response;\n    } catch (requestError) {\n      if (id === generation.current)\n        setQuoteError(requestError as SwapQuoteError);\n      throw requestError;\n    }\n  });\n\n  const resetQuote = useMemoizedFn(() => {\n    generation.current++;\n    setAccepted(undefined);\n    reset();\n    setQuoteError(undefined);\n  });\n\n  return [\n    postQuote,\n    {\n      data: accepted?.data,\n      request: accepted?.request,\n      error: quoteError,\n      reset: resetQuote,\n      isMutating,\n    },\n  ] as const;\n};\n","import { useCallback, useMemo } from \"react\";\nimport { account } from \"@orderly.network/perp\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useCollateral, useHoldingStream, useIndexPricesStream } from \"..\";\nimport { useAppStore } from \"./appStore\";\n\nconst { LTV, collateralRatio } = account;\n\ninterface LTVOptions {\n  input?: number;\n  token?: string;\n}\n\nexport const useComputedLTV = (options: LTVOptions = {}) => {\n  const { input, token } = options;\n\n  const isUSDC = token?.toUpperCase() === \"USDC\";\n\n  const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n  const { usdc, data: holdingList = [] } = useHoldingStream();\n\n  const { getIndexPrice } = useIndexPricesStream();\n\n  const { unsettledPnL } = useCollateral();\n\n  const usdcBalance = useMemo<number>(() => {\n    if (isUSDC && input) {\n      return new Decimal(usdc?.holding ?? 0).add(input).toNumber();\n    }\n    return usdc?.holding ?? 0;\n  }, [usdc?.holding, input, isUSDC]);\n\n  const getAdjustedQty = useCallback(\n    (item: API.Holding) => {\n      if (input && item.token === token) {\n        return new Decimal(item?.holding ?? 0).add(input).toNumber();\n      }\n      return item?.holding ?? 0;\n    },\n    [input, token],\n  );\n\n  const memoizedLTV = useMemo<number>(() => {\n    return LTV({\n      usdcBalance: usdcBalance,\n      upnl: unsettledPnL,\n      assets: holdingList\n        .filter((h) => h.token.toUpperCase() !== \"USDC\")\n        .map((item) => {\n          const indexPrice = getIndexPrice(item.token);\n          const findToken = tokensInfo?.find((i) => i.token === item.token);\n          const qty = getAdjustedQty(item);\n          const weight = collateralRatio({\n            baseWeight: findToken?.base_weight ?? 0,\n            discountFactor: findToken?.discount_factor ?? 0,\n            collateralCap: findToken?.user_max_qty ?? qty,\n            collateralQty: qty,\n            indexPrice: indexPrice,\n          });\n          return {\n            qty: qty,\n            indexPrice: indexPrice,\n            weight: weight.toNumber(),\n          };\n        }),\n    });\n  }, [\n    usdcBalance,\n    unsettledPnL,\n    holdingList,\n    tokensInfo,\n    getIndexPrice,\n    getAdjustedQty,\n  ]);\n\n  if (new Decimal(usdcBalance).add(new Decimal(unsettledPnL)).gte(zero)) {\n    return 0;\n  }\n\n  return new Decimal(memoizedLTV)\n    .mul(100)\n    .toDecimalPlaces(2, Decimal.ROUND_DOWN)\n    .toNumber();\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { API, SDKError } from \"@orderly.network/types\";\nimport {\n  Decimal,\n  getTimestamp,\n  timeConvertString,\n} from \"@orderly.network/utils\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useFundingRate = (symbol: string) => {\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n\n  const [countDown, setCountDown] = useState(\"00:00:00\");\n\n  const timerRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n  const { data, isLoading } = useQuery<API.FundingRate>(\n    `/v1/public/funding_rate/${symbol}`,\n    {\n      fallbackData: {\n        est_funding_rate: 0,\n        next_funing_time: 0,\n      },\n    },\n  );\n\n  useEffect(() => {\n    if (!data || isLoading) {\n      return;\n    }\n    const { next_funding_time } = data;\n    if (!next_funding_time || next_funding_time <= 0) {\n      return;\n    }\n    timerRef.current = setInterval(() => {\n      const diff = new Date(next_funding_time).getTime() - getTimestamp();\n\n      // if diff is less than 0, set count down to 00:00:00\n      if (diff <= 0) {\n        setCountDown(\"00:00:00\");\n        if (timerRef.current) {\n          clearInterval(timerRef.current);\n        }\n        return;\n      }\n\n      const result = timeConvertString(diff);\n      if (result.length === 3) {\n        setCountDown(\n          `${result[0].toString().padStart(2, \"0\")}:${result[1]\n            .toString()\n            .padStart(2, \"0\")}:${result[2].toString().padStart(2, \"0\")}`,\n        );\n      }\n    }, 1000);\n    return () => {\n      if (timerRef.current) {\n        clearInterval(timerRef.current);\n      }\n    };\n  }, [data, isLoading]);\n\n  const est_funding_rate = useMemo(() => {\n    if (!data) {\n      return;\n    }\n\n    const { next_funding_time, est_funding_rate = 0 } = data;\n\n    if (getTimestamp() > next_funding_time) {\n      return null;\n    }\n\n    return new Decimal(Number(est_funding_rate) * 100).toFixed(\n      4,\n      Decimal.ROUND_DOWN,\n    );\n  }, [data]);\n\n  return {\n    ...data,\n    est_funding_rate,\n    countDown,\n  };\n};\n","import type { API } from \"@orderly.network/types\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useFundingDetails = (symbol: string) => {\n  if (!symbol) {\n    throw new SDKError(\"symbol is required\");\n  }\n  return useQuery<API.FundingDetails>(`/v1/public/info/${symbol}`, {\n    errorRetryCount: 3,\n    revalidateOnFocus: false,\n  });\n};\n","import { useCallback, useMemo } from \"react\";\nimport { API, EMPTY_LIST } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\n\nexport type PeriodKey = \"1d\" | \"3d\" | \"7d\" | \"14d\" | \"30d\" | \"90d\";\n\nexport const calculatePositiveRate = (\n  periodData?: API.FundingPeriodData,\n  period?: PeriodKey,\n): number => {\n  if (!periodData || !period) {\n    return 0;\n  }\n\n  const daysMap: Record<PeriodKey, number> = {\n    \"1d\": 1,\n    \"3d\": 3,\n    \"7d\": 7,\n    \"14d\": 14,\n    \"30d\": 30,\n    \"90d\": 90,\n  };\n\n  const totalTimes = daysMap[period] * 3;\n  return periodData.positive / totalTimes;\n};\n\nexport const useFundingRateHistory = () => {\n  const { data: historyData, isLoading } = useQuery<API.FundingHistory[]>(\n    \"/v1/public/market_info/funding_history\",\n  );\n\n  const getPositiveRates = useCallback(\n    (\n      data: ReadonlyArray<API.FundingHistory> | API.FundingHistory[],\n      period: PeriodKey,\n    ): Record<string, number> => {\n      if (!data?.length) {\n        return {};\n      }\n      return (data as API.FundingHistory[]).reduce(\n        (acc, item) => {\n          acc[item.symbol] = calculatePositiveRate(\n            item.funding[period],\n            period,\n          );\n          return acc;\n        },\n        {} as Record<string, number>,\n      );\n    },\n    [],\n  );\n\n  return useMemo(() => {\n    return {\n      data: historyData ?? EMPTY_LIST,\n      isLoading: isLoading,\n      getPositiveRates,\n    };\n  }, [historyData, isLoading, getPositiveRates]);\n};\n","import { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\n\nexport type ApiStatus = {\n  loading: boolean;\n  error?: string;\n};\n\ntype ApiStatusState = {\n  apis: {\n    positions: ApiStatus;\n    [Key: string]: ApiStatus;\n  };\n};\n\ntype ApiStatusActions = {\n  updateStatus: (key: string, status: ApiStatus) => void;\n  updateApiLoading: (key: string, loading: boolean) => void;\n  updateApiError: (key: string, error: string) => void;\n};\n\nexport const useApiStatusStore = create<\n  ApiStatusState & {\n    actions: ApiStatusActions;\n  }\n>()(\n  immer((set) => ({\n    apis: {\n      positions: {\n        loading: false,\n      },\n    },\n    actions: {\n      updateStatus: (key, status) => {\n        set((state) => {\n          state.apis[key] = status;\n        });\n      },\n      updateApiLoading: (key, loading) => {\n        set((state) => {\n          state.apis[key].loading = loading;\n        });\n      },\n      updateApiError: (key, error) => {\n        set((state) => {\n          state.apis[key] = {\n            loading: false,\n            error,\n          };\n        });\n      },\n    },\n  }))\n);\n\nexport const useApiStatusActions = () =>\n  useApiStatusStore((state) => state.actions);\n","import { Calculator, CalculatorCtx, CalculatorScope } from \"../../types\";\n\nabstract class BaseCalculator<T> implements Calculator<T> {\n  abstract name: string;\n  private _cache?: T;\n  abstract calc(\n    scope: CalculatorScope,\n    data: any,\n    ctx: CalculatorCtx\n  ): T | null;\n  abstract update(data: T | null, scope: CalculatorScope): void;\n\n  cache(data: T) {\n    this._cache = data;\n  }\n}\n\nexport { BaseCalculator };\n","import { Calculator, CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { useMarkPriceStore } from \"../useMarkPrice/useMarkPriceStore\";\n\nexport const MarketCalculatorName = \"markPriceCalculator\";\nclass MarkPriceCalculator extends BaseCalculator<any> {\n  name: string = MarketCalculatorName;\n\n  calc(scope: CalculatorScope, data: any, ctx: CalculatorCtx) {\n    return data;\n  }\n\n  update(data: any, scope: CalculatorScope) {\n    useMarkPriceStore.getState().actions.updateMarkPrice(data);\n  }\n}\n\nexport { MarkPriceCalculator };\n","import { API } from \"@orderly.network/types\";\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { Portfolio, useAppStore } from \"../appStore\";\n// import { useTokensInfoStore } from \"../useTokensInfo/tokensInfo.store\";\nimport { MarketCalculatorName } from \"./markPrice\";\n\nexport class CalculatorContext implements CalculatorCtx {\n  accountInfo?: API.AccountInfo;\n  symbolsInfo?: Record<string, API.SymbolExt>;\n  fundingRates?: Record<string, API.FundingRate>;\n  // holding: API.Holding[];\n  // portfolio — dynamic getter to always read the latest output from PortfolioCalculator\n  get portfolio(): Portfolio | undefined {\n    return (\n      this.output[\"portfolio\"] ||\n      (useAppStore.getState().portfolio as Portfolio)\n    );\n  }\n  markPrices?: Record<string, number> | null;\n  // positions: API.PositionTPSLExt[];\n  // markets: Record<string, API.MarketInfoExt> | null;\n  tokensInfo?: API.Token[];\n\n  private output: Record<string, any>;\n\n  private static _instance: CalculatorContext;\n\n  static get instance() {\n    return this._instance;\n  }\n\n  static create(scope: CalculatorScope, data: any) {\n    if (!this._instance) {\n      this._instance = new CalculatorContext(scope, data);\n    }\n    return this._instance.update(scope, data);\n  }\n\n  constructor(scope: CalculatorScope, data: any) {\n    // this.accountInfo = useAppStore.getState().accountInfo as API.AccountInfo;\n    // this.symbolsInfo = useAppStore.getState().symbolsInfo as Record<\n    //   string,\n    //   API.SymbolExt\n    // >;\n    this.setCtxData();\n\n    // this.holding = useAppStore.getState().portfolio.holding as API.Holding[];\n\n    // this.portfolio = useAppStore.getState().portfolio as Portfolio;\n\n    // console.log(\"!!!! CalculatorContext\", this.holding);\n\n    // const positions = usePositionStore.getState().positions;\n    // this.markPrices = scope === CalculatorScope.MARK_PRICE ? data : null;\n    // this.markets = useMarketStore.getState().marketMap;\n\n    // this.positions = usePositionStore.getState().positions[this.symbol];\n\n    this.output = {\n      // rows: positions,\n    };\n  }\n\n  private update(scope: CalculatorScope, data: any) {\n    this.setCtxData();\n    this.markPrices =\n      scope === CalculatorScope.MARK_PRICE\n        ? data\n        : this.output[MarketCalculatorName];\n    return this;\n  }\n\n  private setCtxData() {\n    this.accountInfo = useAppStore.getState().accountInfo as API.AccountInfo;\n    this.symbolsInfo = useAppStore.getState().symbolsInfo as Record<\n      string,\n      API.SymbolExt\n    >;\n    this.fundingRates = useAppStore.getState().fundingRates as Record<\n      string,\n      API.FundingRate\n    >;\n    this.tokensInfo = useAppStore.getState().tokensInfo || [];\n  }\n\n  get(fn: (output: Record<string, any>) => any) {\n    return fn(this.output);\n  }\n\n  getCacheValue(name: string, fallback: () => any) {\n    return this.output[name] || fallback();\n  }\n\n  clearCache() {\n    this.output = {};\n    this.accountInfo = undefined;\n  }\n\n  deleteByName(name: string) {\n    delete this.output[name];\n  }\n\n  // get positions(): API.PositionTPSLExt[] {\n  //   if (this.output.positionCalculator) return this.output.positionCalculator;\n  //   return usePositionStore.getState().positions;\n  // }\n\n  get isReady(): boolean {\n    // return !!this.accountInfo && !!this.symbolsInfo && !!this.fundingRates;\n    return !!this.accountInfo;\n  }\n\n  saveOutput(name: string, data: any) {\n    this.output[name] = data;\n  }\n\n  outputToValue() {\n    return this.output;\n  }\n}\n","import { Calculator, CalculatorScheduler, CalculatorScope } from \"../../types\";\nimport { CalculatorContext } from \"./calculatorContext\";\n\n/**\n * Batch update collector type for grouping updates by scope and calculator name\n */\ntype BatchUpdateCollector = Map<CalculatorScope, Map<string, any>>;\n\ntype CalcOptions = {\n  skipUpdate?: boolean;\n  skipPending?: boolean;\n  /**\n   * Skip calculation when the tab is unactivated.\n   */\n  skipWhenOnPause?: boolean;\n};\n\ntype CalcItem = {\n  scope: CalculatorScope;\n  data: any;\n  options?: CalcOptions;\n};\n\nclass CalculatorService {\n  private calculators: Map<string, Calculator[]>;\n\n  private pendingCalc: CalcItem[] = [];\n\n  private calcQueue: CalcItem[] = [];\n\n  /**\n   * Reference count for each calculator, used to determine if a calculator is still in use.\n   */\n  private referenceCount: Map<string, number> = new Map();\n\n  private ctx?: CalculatorContext;\n\n  private isPaused = false;\n\n  constructor(\n    private readonly scheduler: CalculatorScheduler,\n    calculators: [string, Calculator[]][],\n  ) {\n    this.calculators = new Map(calculators);\n  }\n\n  register(scope: string, calculator: Calculator) {\n    const ref_count_name = `${scope}_${calculator.name}`;\n    const count = this.referenceCount.get(ref_count_name);\n    // console.log(\"register\", scope, calculator.name, count);\n    if (typeof count !== \"undefined\" && count > 0) {\n      this.referenceCount.set(ref_count_name, count + 1);\n\n      return;\n    }\n\n    const calculators = this.calculators.get(scope);\n\n    if (Array.isArray(calculators)) {\n      calculators.push(calculator);\n\n      // this.calculators.set(scope, [...calculators, calculator]);\n    } else {\n      this.calculators.set(scope, [calculator]);\n    }\n\n    // console.log(\"register=====>>>>>>\", scope, calculator.name);\n\n    this.referenceCount.set(ref_count_name, 1);\n  }\n\n  unregister(scope: string, calculator: Calculator) {\n    const ref_count_name = `${scope}_${calculator.name}`;\n    const count = this.referenceCount.get(ref_count_name);\n\n    // console.log(\"unregister\", scope, calculator.name, count);\n\n    if (typeof count !== \"undefined\" && count > 1) {\n      this.referenceCount.set(ref_count_name, count - 1);\n      return;\n    }\n    const calculators = this.calculators.get(scope);\n    if (Array.isArray(calculators)) {\n      const index = calculators.findIndex((c) => c.name === calculator.name);\n      // console.log(\"<<<<<=======unregister\", scope, calculator.name, index);\n      if (index > -1) {\n        calculators[index].destroy?.();\n        calculators.splice(index, 1);\n      }\n    }\n\n    this.referenceCount.delete(ref_count_name);\n  }\n\n  async calc(scope: CalculatorScope, data: any, options?: CalcOptions) {\n    if (scope !== CalculatorScope.POSITION) {\n      if (!options?.skipWhenOnPause) {\n        console.log(`----`);\n      }\n    }\n    const ctx = CalculatorContext.create(scope, data);\n\n    if (!ctx.isReady && options?.skipPending) {\n      return;\n    }\n\n    // handle pending calc\n    // await this.handlePendingCalc();\n\n    /**\n     * if the tab is not activated and this action allows skip, then skip\n     */\n    if (options?.skipWhenOnPause && !this.windowIsVisible) return;\n\n    // console.log(\"-------------[calc]:\", scope, ctx.isReady, data);\n    this.calcQueue.push({ scope, data, options });\n\n    // this.calcQueue.push({ scope, data, options });\n\n    await this.handleCalcQueue(ctx);\n\n    this.ctx = ctx;\n  }\n\n  // private async handlePendingCalc() {\n  //   // console.log(\"[handlePendingCalc]:\", this.pendingCalc);\n  //   if (this.pendingCalc.length === 0) return;\n  //   this.calcQueue = [...this.pendingCalc, ...this.calcQueue];\n\n  //   this.pendingCalc = [];\n  // }\n\n  private async handleCalcQueue(context?: CalculatorContext) {\n    // Phase 1: Collect all updates from queue tasks\n    const batchCollector: BatchUpdateCollector = new Map();\n    let currentContext = context;\n\n    while (this.calcQueue.length > 0) {\n      const first = this.calcQueue.shift();\n      if (!first) break;\n\n      const { scope, data, options } = first;\n      const ctx = currentContext || CalculatorContext.create(scope, data);\n      const calculators = this.calculators.get(scope);\n\n      if (Array.isArray(calculators) && calculators.length) {\n        try {\n          await this.scheduler.calc(scope, calculators, data, ctx);\n        } catch (e) {\n          console.error(e);\n        }\n\n        // Collect updates (skip immediate update call)\n        if (!options?.skipUpdate) {\n          this.collectUpdates(\n            batchCollector,\n            scope,\n            calculators,\n            ctx.outputToValue(),\n          );\n        }\n      }\n\n      // Update context for next task\n      currentContext = ctx;\n    }\n\n    // Phase 2: Batch commit all updates\n    await this.commitBatchUpdates(batchCollector);\n\n    // Save context\n    this.ctx = currentContext;\n  }\n\n  private collectUpdates(\n    collector: BatchUpdateCollector,\n    scope: CalculatorScope,\n    calculators: Calculator[],\n    data: Record<string, any>,\n  ): void {\n    if (!collector.has(scope)) {\n      collector.set(scope, new Map());\n    }\n\n    const scopeCollector = collector.get(scope)!;\n\n    for (const calculator of calculators) {\n      const item = data[calculator.name];\n      if (item !== undefined && item !== null) {\n        scopeCollector.set(calculator.name, item);\n      }\n    }\n  }\n\n  private async commitBatchUpdates(\n    collector: BatchUpdateCollector,\n  ): Promise<void> {\n    if (collector.size === 0) return;\n\n    for (const [scope, updateMap] of collector.entries()) {\n      const calculators = this.calculators.get(scope);\n      if (!Array.isArray(calculators)) continue;\n\n      const batchData: Record<string, any> = {};\n      for (const [calculatorName, data] of updateMap.entries()) {\n        batchData[calculatorName] = data;\n      }\n\n      try {\n        this.scheduler.update(scope, calculators, batchData);\n      } catch (e) {\n        console.error(`Batch update failed for scope ${scope}:`, e);\n      }\n    }\n\n    collector.clear();\n  }\n\n  stop() {\n    this.calcQueue = [];\n    this.ctx?.clearCache();\n  }\n\n  private get windowIsVisible() {\n    if (typeof document === \"undefined\") {\n      return true;\n    }\n    return document.visibilityState === \"visible\";\n  }\n}\n\nconst CalculatorServiceID = \"CalculatorService\";\n\n// SimpleDI.registerByName(CalculatorServiceID, CalculatorService);\n\nexport { CalculatorService, CalculatorServiceID };\n","import {\n  Calculator,\n  CalculatorCtx,\n  CalculatorScheduler,\n  CalculatorScope,\n} from \"../../types\";\n\ntype ShardProcessor<T, R> = (shard: T[]) => R;\n\ninterface IdleDeadline {\n  timeRemaining: () => number;\n  readonly didTimeout: boolean;\n}\n\n/**\n * Polyfill for requestIdleCallback\n */\nconst requestIdleCallbackPolyfill = (\n  callback: (deadline: IdleDeadline) => void,\n  options?: { timeout: number },\n): ReturnType<typeof setTimeout> => {\n  const startTime = Date.now();\n\n  return setTimeout(() => {\n    callback({\n      didTimeout: false,\n      timeRemaining: () => Math.max(0, 50 - (Date.now() - startTime)),\n    });\n  }, 1); // Use 1ms timeout as a fallback\n};\n\n/**\n * Polyfill for cancelIdleCallback\n */\nconst cancelIdleCallbackPolyfill = (id: number) => {\n  clearTimeout(id);\n};\n\n/**\n * Export the native requestIdleCallback or polyfill\n */\nconst safeRequestIdleCallback =\n  typeof window !== \"undefined\" && window.requestIdleCallback\n    ? window.requestIdleCallback.bind(window)\n    : requestIdleCallbackPolyfill;\n\n/**\n * Export the native cancelIdleCallback or polyfill\n */\nconst safeCancelIdleCallback =\n  typeof window !== \"undefined\" && window.cancelIdleCallback\n    ? window.cancelIdleCallback.bind(window)\n    : cancelIdleCallbackPolyfill;\n\nclass ShardingScheduler implements CalculatorScheduler {\n  // run(calculators: Calculator[]) {}\n  calc(\n    scope: CalculatorScope,\n    calculators: Calculator[],\n    data: any,\n    ctx: CalculatorCtx,\n  ): Promise<any> {\n    return new Promise((resolve, reject) => {\n      try {\n        this.computation<Calculator, any>(\n          calculators,\n          (shard) => {\n            const results = [];\n            for (let index = 0; index < shard.length; index++) {\n              const calculator = shard[index];\n              const result = calculator.calc(scope, data, ctx);\n\n              if (result) {\n                ctx.saveOutput(calculator.name, result);\n                results.push(result);\n              }\n            }\n\n            return results;\n          },\n          (results) => {\n            resolve(results);\n          },\n        );\n      } catch (error) {\n        console.error(\"ShardingScheduler calc error\", error);\n        reject(error);\n      }\n    });\n    // for (let index = 0; index < calculators.length; index++) {\n    //   const calculator = calculators[index];\n    //   const result = calculator.calc(scope, data, ctx);\n    //   // console.log(\"item calc ======>>>>>>\", scope, calculator.name, result);\n    //   if (result) {\n    //     ctx.saveOutput(calculator.name, result);\n    //   }\n    // }\n    // return Promise.resolve();\n  }\n\n  update(scope: CalculatorScope, calculators: Calculator[], data: any) {\n    for (let index = 0; index < calculators.length; index++) {\n      const calculator = calculators[index];\n      const item = data[calculator.name];\n\n      if (!!item) {\n        calculator.update(item, scope);\n      }\n    }\n    return Promise.resolve();\n  }\n\n  /**\n   * Maximum continuous execution time per frame (in milliseconds)\n   * Prevents blocking the main thread for too long\n   */\n  private readonly MAX_CONTINUOUS_MS = 5;\n\n  /**\n   * Minimum remaining idle time threshold (in milliseconds)\n   * Ensures the browser has enough idle time for other tasks\n   */\n  private readonly MIN_IDLE_REMAINING = 2;\n\n  private computation<T, R>(\n    data: T[],\n    processor: ShardProcessor<T, R[]>,\n    onComplete: (results: R[]) => void,\n  ): void {\n    let index = 0;\n    const results: R[] = [];\n    const MAX_CONTINUOUS_MS = this.MAX_CONTINUOUS_MS;\n    const MIN_IDLE_REMAINING = this.MIN_IDLE_REMAINING;\n\n    const processNextShard = (deadline: IdleDeadline) => {\n      const frameStart = performance.now();\n\n      while (index < data.length) {\n        // Dual condition check: both actual elapsed time and idle deadline\n        const elapsed = performance.now() - frameStart;\n        const remaining = deadline.timeRemaining();\n\n        // Yield control when time budget is exhausted\n        if (elapsed > MAX_CONTINUOUS_MS || remaining < MIN_IDLE_REMAINING) {\n          safeRequestIdleCallback(processNextShard, {\n            timeout: 1000,\n          });\n          return;\n        }\n\n        // Process one item at a time for better granularity\n        const result = processor([data[index]]);\n        if (result && result.length > 0) {\n          results.push(...result);\n        }\n        index++;\n      }\n\n      // All items processed\n      onComplete(results);\n    };\n\n    safeRequestIdleCallback(processNextShard, {\n      timeout: 1000,\n    });\n  }\n}\n\nexport { ShardingScheduler, safeRequestIdleCallback, safeCancelIdleCallback };\n","import { API } from \"@orderly.network/types\";\nimport { create } from \"zustand\";\nimport { immer } from \"zustand/middleware/immer\";\n// import { devtools } from \"zustand/middleware\";\n\nexport const DEFAULT_POSITIONS = \"positions\";\n\ntype EmptyPosition = Omit<API.PositionsTPSLExt, \"rows\"> & {\n  rows: API.PositionsTPSLExt[\"rows\"] | null;\n};\n\nexport const POSITION_EMPTY: EmptyPosition = {\n  rows: null,\n  margin_ratio: 0,\n  initial_margin_ratio: 0,\n  maintenance_margin_ratio: 0,\n  open_margin_ratio: 0,\n  current_margin_ratio_with_orders: 0,\n  initial_margin_ratio_with_orders: 0,\n  maintenance_margin_ratio_with_orders: 0,\n  total_collateral_value: 0,\n  free_collateral: 0,\n  total_pnl_24_h: 0,\n  unrealPnL: 0,\n  total_unreal_pnl: 0,\n  unsettledPnL: 0,\n  total_unsettled_pnl: 0,\n  notional: 0,\n  unrealPnlROI: 0,\n};\n\ntype PositionState = {\n  positions: {\n    all: EmptyPosition;\n    [key: string]: EmptyPosition;\n  };\n};\n\ntype PositionActions = {\n  // updatePosition: (position: API.PositionTPSLExt[]) => void;\n  setPositions: (key: string, positions: API.PositionsTPSLExt) => void;\n  // setAggregated: (aggregated: API.PositionAggregated) => void;\n  // getPositions: () => SWRResponse<API.PositionInfo>;\n  clearAll: () => void;\n\n  closePosition: (symbol: string) => void;\n};\n\nconst usePositionStore = create<\n  PositionState & {\n    actions: PositionActions;\n  }\n  // [[\"zustand/devtools\", never]]\n>()(\n  immer((set) => ({\n    positions: {\n      all: POSITION_EMPTY,\n    },\n    actions: {\n      setPositions: (key: string, positions: API.PositionsTPSLExt) => {\n        set((state) => {\n          state.positions[key] = positions;\n        });\n      },\n      closePosition: (symbol: string) => {\n        set((state) => {\n          // state.positions[symbol] = POSITION_EMPTY;\n          delete state.positions[symbol];\n        });\n      },\n      clearAll: () => {\n        set((state) => {\n          state.positions = {\n            all: POSITION_EMPTY,\n          };\n        });\n      },\n    },\n  }))\n);\n\nconst usePositions = (symbol: string = \"all\") =>\n  usePositionStore((state) => (state.positions[symbol] ?? POSITION_EMPTY).rows);\n\nconst usePositionActions = () => usePositionStore((state) => state.actions);\n\nexport { usePositionStore, usePositions, usePositionActions };\n","import { propOr } from \"ramda\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { API, MarginMode } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { useAppStore } from \"../appStore\";\nimport { usePositionStore } from \"../usePositionStream/usePosition.store\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { CalculatorContext } from \"./calculatorContext\";\n\nconst NAME_PREFIX = \"positionCalculator\";\nconst AllPositions = \"all\";\n\nclass PositionCalculator extends BaseCalculator<API.PositionInfo> {\n  // name = \"positionCalculator\";\n  name: string;\n  // private id!: string;\n\n  // private state;\n  private symbol: string;\n\n  // private id: string;\n\n  constructor(symbol: string = AllPositions) {\n    super();\n\n    this.name = `${NAME_PREFIX}_${symbol}`;\n\n    this.symbol = symbol;\n  }\n\n  calc(\n    scope: CalculatorScope,\n    data: any,\n    ctx: CalculatorCtx,\n  ): API.PositionsTPSLExt | null {\n    if (scope === CalculatorScope.MARK_PRICE) {\n      return this.calcByMarkPrice(data as Record<string, number>, ctx);\n    }\n\n    if (scope === CalculatorScope.INDEX_PRICE) {\n      return this.calcByIndexPrice(data, ctx);\n    }\n\n    if (scope === CalculatorScope.POSITION) {\n      return this.calcByPosition(\n        this.preprocess(data as API.PositionInfo),\n        ctx,\n      );\n    }\n\n    return data;\n  }\n\n  update(data: API.PositionsTPSLExt | null, scope: CalculatorScope) {\n    // if (this.symbol !== AllPositions) {\n    //   console.log(\"PositionCalculator update\", scope, this.name, data);\n    // }\n    if (!data || !Array.isArray(data.rows)) return;\n\n    usePositionStore.getState().actions.setPositions(this.symbol, data);\n\n    /// update position loading status\n    if (\n      Array.isArray(data.rows) &&\n      useApiStatusStore.getState().apis.positions.loading\n    ) {\n      useApiStatusStore.getState().actions.updateApiLoading(\"positions\", false);\n    }\n  }\n\n  private calcByMarkPrice(\n    markPrice: Record<string, number>,\n    ctx: CalculatorCtx,\n  ) {\n    let positions = this.getPosition(markPrice, ctx);\n    const fundingRates = useAppStore.getState().fundingRates;\n\n    // positions = this.checkIsClosed(positions, ctx);\n\n    // console.log(\"-------PositionCalculator calcByMarkPrice\", positions);\n\n    if (!positions || !Array.isArray(positions.rows) || !positions.rows.length)\n      return positions;\n\n    positions = {\n      ...positions,\n      rows: positions.rows.map((item: API.PositionTPSLExt) => {\n        // console.log(fundingRates?.[item.symbol]);\n\n        return {\n          ...item,\n\n          mark_price: markPrice[item.symbol] || item.mark_price,\n        };\n      }),\n    };\n\n    return this.format(positions, ctx);\n  }\n\n  private calcByIndexPrice(\n    indexPrice: Record<string, number>,\n    ctx: CalculatorCtx,\n  ) {\n    let positions = this.getPosition(indexPrice, ctx);\n    // positions = this.checkIsClosed(positions, ctx);\n\n    if (!positions) {\n      return positions;\n    }\n\n    if (!Array.isArray(positions.rows) || !positions.rows.length)\n      return positions;\n\n    positions = {\n      ...positions,\n      rows: positions.rows.map((item: API.PositionTPSLExt) => ({\n        ...item,\n        index_price:\n          indexPrice[item.symbol] || item.index_price || item.mark_price,\n      })),\n    };\n\n    return this.format(positions, ctx);\n  }\n\n  private calcByPosition(positions: API.PositionInfo, ctx: CalculatorCtx) {\n    if (positions.rows.length === 0) return positions as API.PositionsTPSLExt;\n\n    // need to clear the position if the position has been closed\n    return this.format(positions, ctx);\n  }\n\n  private format(\n    data: API.PositionInfo | API.PositionsTPSLExt,\n    ctx: CalculatorCtx,\n  ): API.PositionsTPSLExt {\n    const { accountInfo, symbolsInfo, fundingRates, portfolio } = ctx;\n\n    if (!accountInfo || !fundingRates || !symbolsInfo) {\n      return data as API.PositionsTPSLExt;\n    }\n\n    let unrealPnL_total = zero,\n      unrealPnL_total_index = zero,\n      notional_total = zero,\n      unsettlementPnL_total = zero,\n      totalUnsettledIsolatedPnl = zero,\n      totalUnsettledCrossPnl = zero;\n\n    let rows = data.rows.map((item) => {\n      const info = symbolsInfo[item.symbol];\n      const sum_unitary_funding =\n        fundingRates?.[item.symbol]?.[\"sum_unitary_funding\"] ?? 0;\n\n      const notional = positions.notional(item.position_qty, item.mark_price);\n      const unrealPnl = positions.unrealizedPnL({\n        qty: item.position_qty,\n        openPrice: item?.average_open_price,\n        // markPrice: unRealizedPrice,\n        markPrice: item.mark_price,\n      });\n      let unrealPnl_index = 0,\n        unrealPnlROI_index = 0;\n\n      const maxLeverage = item.leverage || 1;\n\n      const imr = account.IMR({\n        maxLeverage,\n        baseIMR: info?.[\"base_imr\"],\n        IMR_Factor: accountInfo.imr_factor[item.symbol] as number,\n        positionNotional: notional,\n        ordersNotional: 0,\n        IMR_factor_power: 4 / 5,\n      });\n\n      const unrealPnlROI = positions.unrealizedPnLROI({\n        positionQty: item.position_qty,\n        openPrice: item.average_open_price,\n        IMR: imr,\n        unrealizedPnL: unrealPnl,\n      });\n\n      if (item.index_price) {\n        unrealPnl_index = positions.unrealizedPnL({\n          qty: item.position_qty,\n          openPrice: item?.average_open_price,\n          // markPrice: unRealizedPrice,\n          markPrice: item.index_price,\n        });\n\n        unrealPnlROI_index = positions.unrealizedPnLROI({\n          positionQty: item.position_qty,\n          openPrice: item.average_open_price,\n          IMR: imr,\n          unrealizedPnL: unrealPnl_index,\n        });\n      }\n\n      const unsettlementPnL = positions.unsettlementPnL({\n        positionQty: item.position_qty,\n        markPrice: item.mark_price,\n        costPosition: item.cost_position,\n        sumUnitaryFunding: propOr(\n          0,\n          \"sum_unitary_funding\",\n          fundingRates[item.symbol],\n        ),\n        lastSumUnitaryFunding: item.last_sum_unitary_funding,\n      });\n\n      const MMR = positions.MMR({\n        baseMMR: info?.[\"base_mmr\"],\n        baseIMR: info?.[\"base_imr\"],\n        IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n        positionNotional: notional,\n        IMR_factor_power: 4 / 5,\n      });\n\n      unrealPnL_total = unrealPnL_total.add(unrealPnl);\n      unrealPnL_total_index = unrealPnL_total_index.add(unrealPnl_index);\n      notional_total = notional_total.add(notional);\n      unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n      if (item.margin_mode === MarginMode.CROSS) {\n        totalUnsettledCrossPnl = totalUnsettledCrossPnl.add(unsettlementPnL);\n      }\n\n      if (item.margin_mode === MarginMode.ISOLATED) {\n        totalUnsettledIsolatedPnl =\n          totalUnsettledIsolatedPnl.add(unsettlementPnL);\n      }\n\n      const fundingFee = new Decimal(sum_unitary_funding)\n        .sub(item.last_sum_unitary_funding)\n        .mul(item.position_qty)\n        .negated()\n        .toNumber();\n\n      return {\n        ...item,\n        fundingFee,\n        mm: positions.maintenanceMargin({\n          positionQty: item.position_qty,\n          markPrice: item.mark_price,\n          MMR,\n        }),\n        mmr: MMR,\n        notional,\n        unsettlement_pnl: unsettlementPnL,\n        unrealized_pnl: unrealPnl,\n        unrealized_pnl_index: unrealPnl_index,\n        unrealized_pnl_ROI: unrealPnlROI,\n        unrealized_pnl_ROI_index: unrealPnlROI_index,\n        unsettled_pnl: unsettlementPnL,\n      };\n    });\n\n    const totalUnrealPnl = unrealPnL_total.toNumber();\n    const totalUnrealPnl_index = unrealPnL_total_index.toNumber();\n    const unsettlementPnL = unsettlementPnL_total.toNumber();\n    let totalUnrealizedROI = 0,\n      totalUnrealizedROI_index = 0;\n\n    if (portfolio) {\n      const { totalValue, totalCollateral: crossMarginCollateral } = portfolio;\n\n      rows = rows.map((item) => {\n        const info = symbolsInfo[item.symbol];\n        // NOTE: Calculate totalCollateral based on marginMode.\n        // If margin mode is ISOLATED, use isolated margin plus unsettlementPnL;\n        // otherwise (CROSS margin), use account total collateral value.\n        const totalCollateral =\n          item.margin_mode === MarginMode.ISOLATED\n            ? new Decimal(item.margin ?? 0)\n                .add(item.unsettlement_pnl ?? 0)\n                .toNumber()\n            : crossMarginCollateral.toNumber();\n\n        let est_liq_price;\n        if (item.margin_mode === MarginMode.ISOLATED) {\n          est_liq_price = positions.liquidationPriceIsolated({\n            isolatedPositionMargin: item.margin ?? 0,\n            costPosition: item.cost_position ?? 0,\n            positionQty: item.position_qty ?? 0,\n            sumUnitaryFunding:\n              fundingRates?.[item.symbol]?.[\"sum_unitary_funding\"] ?? 0,\n            lastSumUnitaryFunding: item.last_sum_unitary_funding ?? 0,\n            baseMMR: info?.[\"base_mmr\"] ?? 0,\n            baseIMR: info?.[\"base_imr\"] ?? 0,\n            IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n            referencePrice: item.mark_price,\n            leverage: item.leverage ?? 0,\n          });\n        } else {\n          est_liq_price = positions.liqPrice({\n            symbol: item.symbol,\n            markPrice: item.mark_price,\n            totalCollateral: totalCollateral,\n            positionQty: item.position_qty,\n            positions: rows,\n            MMR: item.mmr,\n            baseMMR: info?.[\"base_mmr\"],\n            baseIMR: info?.[\"base_imr\"],\n            IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n            costPosition: item.cost_position,\n          });\n        }\n        return {\n          ...item,\n          est_liq_price,\n        };\n      });\n\n      if (totalValue !== null && !totalValue.eq(zero)) {\n        totalUnrealizedROI = account.totalUnrealizedROI({\n          totalUnrealizedPnL: totalUnrealPnl,\n          totalValue: totalValue.toNumber(),\n        });\n        totalUnrealizedROI_index = account.totalUnrealizedROI({\n          totalUnrealizedPnL: totalUnrealPnl_index,\n          totalValue: totalValue.toNumber(),\n        });\n      }\n    }\n\n    return {\n      ...data,\n\n      unrealPnL: totalUnrealPnl,\n      total_unreal_pnl: totalUnrealPnl,\n      total_unreal_pnl_index: totalUnrealPnl_index,\n      notional: notional_total.toNumber(),\n\n      unsettledPnL: unsettlementPnL,\n      total_unsettled_pnl: unsettlementPnL,\n      unrealPnlROI: totalUnrealizedROI,\n      unrealPnlROI_index: totalUnrealizedROI_index,\n      total_unsettled_cross_pnl: totalUnsettledCrossPnl.toNumber(),\n      total_unsettled_isolated_pnl: totalUnsettledIsolatedPnl.toNumber(),\n      rows,\n    };\n  }\n\n  private preprocess(data: API.PositionInfo): API.PositionInfo {\n    let rows = data.rows;\n    if (this.symbol !== AllPositions && Array.isArray(rows)) {\n      rows = rows.filter((item: API.Position) => item.symbol === this.symbol);\n    }\n    return {\n      ...data,\n      rows,\n    };\n  }\n\n  private getPosition(_: Record<string, number>, ctx: CalculatorCtx) {\n    const positions =\n      ctx.get((output: Record<string, any>) => output[this.name]) ||\n      usePositionStore.getState().positions[this.symbol];\n\n    if (this.symbol === AllPositions) {\n      return positions;\n    }\n\n    if (positions && Array.isArray(positions.rows)) {\n      return positions;\n    }\n\n    return this.preprocess(this.getAllPositions(ctx) as API.PositionInfo);\n  }\n\n  destroy() {\n    usePositionStore.getState().actions.closePosition(this.symbol);\n    CalculatorContext.instance?.deleteByName(this.name);\n  }\n\n  private getAllPositions(ctx: CalculatorCtx) {\n    return (\n      ctx.get((output: Record<string, any>) => output[AllPositions]) ||\n      usePositionStore.getState().positions[AllPositions]\n    );\n  }\n\n  static logPosition = (symbol = \"all\") => {\n    return usePositionStore.getState().positions[symbol];\n  };\n}\n\n// const usePositionCalculator = () => new PositionCalculator();\n\nexport { PositionCalculator };\n","import { account } from \"@orderly.network/perp\";\nimport type { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ntype NonUSDCHolding = {\n  holding: number;\n  pendingShort: number;\n  indexPrice: number;\n  // margin replacement rate, default 0\n  collateralCap: number;\n  collateralRatio: Decimal;\n  isCollateral: boolean;\n};\n\nexport const parseHolding = (\n  holding: API.Holding[] | ReadonlyArray<API.Holding>,\n  indexPrices: Record<string, number>,\n  tokensInfo: API.Token[] | ReadonlyArray<API.Token>,\n): [number, NonUSDCHolding[]] => {\n  // if (!holding || !indexPrices) {\n  //   return [zero, zero];\n  // }\n  const nonUSDC: NonUSDCHolding[] = [];\n\n  let USDC_holding = 0;\n\n  holding.forEach((item) => {\n    if (item.token === \"USDC\") {\n      USDC_holding = item.holding;\n    } else {\n      const tokenInfo = tokensInfo.find(({ token }) => token === item.token);\n      const {\n        base_weight = 0,\n        discount_factor = 0,\n        user_max_qty = 0,\n        is_collateral = false,\n      } = tokenInfo || {};\n\n      const holdingQty = item?.holding ?? 0;\n      const pendingShort = item?.pending_short ?? 0;\n      const effectiveHolding = new Decimal(holdingQty)\n        .add(pendingShort)\n        .toNumber();\n\n      const indexPrice = indexPrices[`PERP_${item.token}_USDC`] ?? 0;\n\n      const collateralRatio = account.collateralRatio({\n        baseWeight: base_weight,\n        discountFactor: discount_factor,\n        collateralQty: Math.max(effectiveHolding, 0),\n        collateralCap: user_max_qty,\n        indexPrice,\n      });\n\n      nonUSDC.push({\n        holding: holdingQty,\n        pendingShort,\n        indexPrice,\n        collateralCap: user_max_qty,\n        collateralRatio: collateralRatio,\n        isCollateral: is_collateral,\n      });\n    }\n  });\n\n  return [USDC_holding, nonUSDC];\n};\n","import { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { BaseCalculator } from \"./baseCalculator\";\n\nimport { useIndexPriceStore } from \"../useIndexPrice/useIndexPriceStore\";\n\nexport const IndexPriceCalculatorName = \"indexPriceCalculator\";\n\nclass IndexPriceCalculator extends BaseCalculator<any> {\n  name: string = IndexPriceCalculatorName;\n\n  calc(scope: CalculatorScope, data: any, ctx: CalculatorCtx) {\n    return data;\n  }\n\n  update(data: any) {\n    if (!data) return;\n    useIndexPriceStore.getState().actions.updateIndexPrice(data);\n  }\n\n  static getValue() {\n    return useIndexPriceStore.getState().indexPrices;\n  }\n}\n\nexport { IndexPriceCalculator };\n","import { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/perp\";\nimport { API, EMPTY_LIST, MarginMode } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { mergeHoldingBalance } from \"../../utils/mergeHoldingBalance\";\nimport { parseHolding } from \"../../utils/parseHolding\";\nimport { Portfolio, useAppStore } from \"../appStore\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { IndexPriceCalculatorName } from \"./indexPrice\";\nimport { MarketCalculatorName } from \"./markPrice\";\n\nexport const PortfolioCalculatorName = \"portfolio\";\n\nclass PortfolioCalculator extends BaseCalculator<any> {\n  name = PortfolioCalculatorName;\n\n  calc(scope: CalculatorScope, data: any, ctx: CalculatorCtx) {\n    let markPrices: Record<PropertyKey, number>;\n    let indexPrices: Record<PropertyKey, number>;\n    const portfolio = this.getPortfolio(ctx);\n\n    if (scope === CalculatorScope.MARK_PRICE) {\n      markPrices = data;\n    } else {\n      markPrices = ctx.get<Record<string, number>>(\n        (cache) => cache[MarketCalculatorName],\n      );\n    }\n\n    if (scope === CalculatorScope.INDEX_PRICE) {\n      indexPrices = data;\n    } else {\n      indexPrices = ctx.get<Record<string, number>>(\n        (cache) => cache[IndexPriceCalculatorName],\n      );\n    }\n\n    // if (scope === CalculatorScope.POSITION) {\n    //   positions = data;\n    // } else {\n    const positions = ctx.get<API.PositionsTPSLExt>(\n      (output: Record<string, any>) => output.positionCalculator_all,\n    );\n    // }\n\n    let holding = portfolio.holding;\n\n    if (\n      scope === CalculatorScope.PORTFOLIO &&\n      data.holding &&\n      Array.isArray(holding)\n    ) {\n      if (Array.isArray(data.holding)) {\n        holding = data.holding;\n      } else {\n        holding = holding.map((item) => {\n          if (data.holding[item.token]) {\n            return mergeHoldingBalance(item, data.holding[item.token]);\n          }\n\n          return item;\n        });\n      }\n    }\n\n    const accountInfo = ctx.accountInfo!;\n    const symbolsInfo = ctx.symbolsInfo!;\n    const tokensInfo = ctx.tokensInfo;\n\n    return this.format({\n      holding,\n      positions,\n      markPrices,\n      accountInfo,\n      symbolsInfo,\n      indexPrices: indexPrices,\n      tokensInfo: tokensInfo ?? EMPTY_LIST,\n    });\n  }\n\n  private getPortfolio(ctx: CalculatorCtx) {\n    return (\n      ctx.get<Portfolio>((output) => output[this.name]) ||\n      useAppStore.getState().portfolio\n    );\n  }\n\n  private format(inputs: {\n    holding?: API.Holding[] | ReadonlyArray<API.Holding>;\n    positions: API.PositionsTPSLExt;\n    markPrices: Record<string, number> | null;\n    indexPrices: Record<string, number> | null;\n    accountInfo: API.AccountInfo;\n    symbolsInfo: Record<string, API.SymbolExt>;\n    tokensInfo: API.Chain[] | ReadonlyArray<API.Chain>;\n  }) {\n    const {\n      holding,\n      positions,\n      markPrices,\n      indexPrices,\n      accountInfo,\n      symbolsInfo,\n      tokensInfo,\n    } = inputs;\n\n    if (\n      !holding ||\n      !positions ||\n      !Array.isArray(positions.rows) ||\n      !markPrices ||\n      !indexPrices ||\n      !accountInfo\n    ) {\n      return null;\n    }\n\n    // const totallCrossUnsettledPnL1 = positions.rows.reduce(\n    //   (sum, pos) =>\n    //     pos.margin_mode === MarginMode.ISOLATED\n    //       ? sum\n    //       : sum + (pos.unsettled_pnl ?? 0),\n    //   0,\n    // );\n\n    const unsettledPnL = pathOr(0, [\"total_unsettled_pnl\"])(positions);\n    const unsettledCrossPnL = pathOr(0, [\"total_unsettled_cross_pnl\"])(\n      positions,\n    );\n    const unrealizedPnL = pathOr(0, [\"total_unreal_pnl\"])(positions);\n\n    const [USDC_holding, nonUSDC] = parseHolding(\n      holding,\n      indexPrices,\n      tokensInfo,\n    );\n\n    const usdc = holding.find((item) => item.token === \"USDC\");\n\n    const totalCollateral = account.totalCollateral({\n      USDCHolding: USDC_holding,\n      nonUSDCHolding: nonUSDC,\n      unsettlementPnL: unsettledCrossPnL,\n      usdcBalancePendingShortQty: usdc?.pending_short ?? 0,\n      usdcBalanceIsolatedOrderFrozen: usdc?.isolated_order_frozen ?? 0,\n    });\n\n    const sumIsolatedMargin = positions.rows.reduce<Decimal>((acc, curr) => {\n      if (curr.margin_mode !== MarginMode.ISOLATED) {\n        return acc;\n      }\n      return acc.add(curr.margin ?? 0);\n    }, zero);\n\n    const totalValue = account.totalValue({\n      totalUnsettlementPnL: unsettledPnL,\n      USDCHolding: USDC_holding,\n      nonUSDCHolding: nonUSDC,\n      totalIsolatedPositionMargin: sumIsolatedMargin.toNumber(),\n    });\n\n    const totalUnrealizedROI = account.totalUnrealizedROI({\n      totalUnrealizedPnL: unrealizedPnL,\n      totalValue: totalValue.toNumber(),\n    });\n    const maxLeverageBySymbol = positions.rows.reduce<Record<string, number>>(\n      (acc, position) => {\n        if (\n          position.margin_mode !== MarginMode.ISOLATED &&\n          position.leverage &&\n          !acc[position.symbol]\n        ) {\n          acc[position.symbol] = position.leverage;\n        }\n        return acc;\n      },\n      {},\n    );\n\n    const totalInitialMarginWithOrders = account.totalInitialMarginWithQty({\n      positions: positions.rows,\n      markPrices,\n      IMR_Factors: accountInfo.imr_factor,\n      maxLeverageBySymbol,\n      symbolInfo: createGetter({ ...symbolsInfo }),\n    });\n\n    const freeCollateral = account.freeCollateral({\n      totalCollateral,\n      totalInitialMarginWithOrders,\n    });\n\n    // TODO: op code\n    const freeCollateralUSDCOnly = account.freeCollateralUSDCOnly({\n      freeCollateral,\n      nonUSDCHolding: nonUSDC,\n    });\n\n    const availableBalance = account.availableBalance({\n      USDCHolding: usdc?.holding ?? 0,\n      unsettlementPnL: positions.total_unsettled_pnl ?? 0,\n    });\n\n    return {\n      totalCollateral,\n      totalValue,\n      totalUnrealizedROI,\n      freeCollateral,\n      availableBalance,\n      unsettledPnL,\n      holding,\n      usdcHolding: USDC_holding,\n      freeCollateralUSDCOnly,\n    };\n  }\n\n  update(\n    data: { [K in keyof Portfolio]: number | Decimal } | null,\n    scope: CalculatorScope,\n  ) {\n    if (data) {\n      useAppStore.getState().actions.batchUpdateForPortfolio({\n        totalCollateral: data.totalCollateral as Decimal,\n        totalValue: data.totalValue as Decimal,\n        freeCollateral: data.freeCollateral as Decimal,\n        freeCollateralUSDCOnly: data.freeCollateralUSDCOnly as Decimal,\n        availableBalance: data.availableBalance as number,\n        totalUnrealizedROI: data.totalUnrealizedROI as number,\n        unsettledPnL: data.unsettledPnL as number,\n        holding: Array.isArray(data.holding)\n          ? (data.holding as API.Holding[])\n          : [],\n        usdcHolding:\n          typeof data.usdcHolding === \"number\"\n            ? data.usdcHolding\n            : data.usdcHolding.toNumber(),\n      });\n    }\n  }\n}\n\nexport { PortfolioCalculator };\n","import { SimpleDI } from \"@orderly.network/core\";\nimport useConstant from \"use-constant\";\nimport { useSimpleDI } from \"./useSimpleDI\";\nimport {\n  CalculatorService,\n  CalculatorServiceID,\n} from \"./orderly/calculator/calculatorService\";\nimport { ShardingScheduler } from \"./orderly/calculator/shardedScheduler\";\nimport { PositionCalculator } from \"./orderly/calculator/positions\";\nimport { MarkPriceCalculator } from \"./orderly/calculator/markPrice\";\nimport { CalculatorScope } from \"./types\";\nimport { PortfolioCalculator } from \"./orderly/calculator/portfolio\";\nimport { IndexPriceCalculator } from \"./orderly/calculator/indexPrice\";\n\nexport const useCalculatorService = () => {\n  const { get } = useSimpleDI<CalculatorService>();\n  const calculatorService = useConstant(() => {\n    let calculatorService = get(CalculatorServiceID);\n\n    if (!calculatorService) {\n      const positionCalculator = new PositionCalculator();\n      const portfolioCalculator = new PortfolioCalculator();\n      const markPriceCalculator = new MarkPriceCalculator();\n      const indexPriceCalculator = new IndexPriceCalculator();\n      calculatorService = new CalculatorService(new ShardingScheduler(), [\n        [\n          CalculatorScope.MARK_PRICE,\n          [\n            markPriceCalculator,\n            positionCalculator,\n            portfolioCalculator,\n            positionCalculator,\n          ],\n        ],\n        [CalculatorScope.POSITION, [positionCalculator, portfolioCalculator]],\n        [CalculatorScope.PORTFOLIO, [portfolioCalculator]],\n        // indexPrice\n        [\n          CalculatorScope.INDEX_PRICE,\n          [indexPriceCalculator, positionCalculator],\n        ],\n      ]);\n\n      SimpleDI.registerByName(CalculatorServiceID, calculatorService);\n    }\n    return calculatorService;\n  });\n\n  return calculatorService;\n};\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { pathOr, omit } from \"ramda\";\nimport { type SWRConfiguration } from \"swr\";\nimport {\n  AlgoOrderRootType,\n  EMPTY_OBJECT,\n  OrderStatus,\n  type API,\n} from \"@orderly.network/types\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\nimport { CalculatorScope } from \"../../types\";\nimport { useCalculatorService } from \"../../useCalculatorService\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { useAppStore } from \"../appStore\";\nimport { PositionCalculator } from \"../calculator/positions\";\nimport { useOrderStream } from \"../orderlyHooks\";\nimport { POSITION_EMPTY, usePositionStore } from \"./usePosition.store\";\nimport { findPositionTPSLFromOrders, findTPSLFromOrder } from \"./utils\";\n\n// import { usePosition } from \"./usePosition\";\n\n/**\n * Price mode for PnL calculations in position streams\n * @typedef {(\"markPrice\" | \"lastPrice\")} PriceMode\n * - markPrice: Uses mark price for unrealized PnL calculations (default)\n * - lastPrice: Uses last traded price (index price) for unrealized PnL calculations\n */\nexport type PriceMode = \"markPrice\" | \"lastPrice\";\n\n/**\n * Calculator scopes registered for position calculations\n * These scopes enable real-time updates across position, mark price, and index price changes\n */\nconst scopes = [\n  CalculatorScope.POSITION,\n  CalculatorScope.MARK_PRICE,\n  CalculatorScope.INDEX_PRICE,\n];\n\n/**\n * Real-time position stream hook with WebSocket integration\n *\n * Subscribes to position updates via WebSocket and provides real-time position data with automatic\n * calculations for unrealized PnL, ROI, and aggregated portfolio metrics. Integrates TP/SL orders\n * and supports both full portfolio view and single symbol tracking.\n *\n * **Key Features:**\n * - Real-time WebSocket updates for positions\n * - Automatic integration of TP/SL (take-profit/stop-loss) orders\n * - Dual price mode support (mark price vs last price)\n * - Optional pending order inclusion\n * - Calculator service integration for real-time PnL updates\n * - Aggregated portfolio metrics (total collateral, value, ROI)\n *\n * **Price Calculation Modes:**\n * - markPrice (default): Uses mark price for unrealized PnL - recommended for margin calculations\n * - lastPrice: Uses last traded price (index price) - useful for more conservative PnL views\n *\n * **Data Flow:**\n * 1. Subscribes to position store (WebSocket-driven)\n * 2. Fetches related TP/SL orders via useOrderStream\n * 3. Registers calculator for real-time price updates (single symbol only)\n * 4. Merges position data with TP/SL information\n * 5. Applies price mode transformations\n * 6. Filters positions based on includedPendingOrder flag\n *\n * @param {string} [symbol=\"all\"] - Trading symbol to filter positions, or \"all\" for entire portfolio\n *   - \"all\": Returns all positions across all symbols (calculator not registered)\n *   - \"BTC-PERP\": Returns only BTC-PERP position (calculator registered for real-time updates)\n *\n * @param {Object} [options] - Configuration options extending SWR configuration\n * @param {PriceMode} [options.calcMode] - Price calculation mode: \"markPrice\" or \"lastPrice\"\n *   - markPrice: Uses mark_price field for unrealized_pnl (default, matches exchange calculations)\n *   - lastPrice: Uses unrealized_pnl_index field based on last traded price\n * @param {boolean} [options.includedPendingOrder=false] - Include positions with only pending orders\n *   - false: Only returns positions with non-zero position_qty\n *   - true: Returns positions with position_qty !== 0 OR pending_long_qty/pending_short_qty !== 0\n *\n * @returns {readonly [PositionData, PositionInfoGetter, LoadingState]} Tuple containing:\n *   - [0] PositionData object:\n *     - rows: Array of position objects with TP/SL information\n *     - aggregated: Aggregated metrics (total unrealized PnL, ROI, etc.)\n *     - totalCollateral: Total collateral across all positions\n *     - totalValue: Total portfolio value\n *     - totalUnrealizedROI: Total unrealized ROI percentage\n *   - [1] PositionInfoGetter: Memoized getter function for aggregated data access\n *   - [2] LoadingState object:\n *     - loading: Loading status (deprecated, use isLoading)\n *     - isLoading: Current loading state of position data\n *\n * @example\n * // Get all positions with mark price calculation\n * const [{ rows, aggregated, totalCollateral }] = usePositionStream();\n *\n * @example\n * // Get single symbol position with last price calculation\n * const [{ rows }] = usePositionStream(\"BTC-PERP\", {\n *   calcMode: \"lastPrice\"\n * });\n *\n * @example\n * // Include pending orders in results\n * const [{ rows }, getter, { isLoading }] = usePositionStream(\"all\", {\n *   includedPendingOrder: true\n * });\n *\n * @example\n * // Access specific position with TP/SL data\n * const [{ rows }] = usePositionStream(\"ETH-PERP\");\n * const position = rows[0];\n * console.log(position.full_tp_sl.tp_trigger_price); // Full position TP price\n * console.log(position.partial_tp_sl.order_num); // Number of partial TP/SL orders\n */\nexport const usePositionStream = (\n  symbol: string = \"all\",\n  options?: SWRConfiguration & {\n    calcMode?: PriceMode;\n    includedPendingOrder?: boolean;\n  },\n) => {\n  const { calcMode } = options || {};\n\n  const { includedPendingOrder = false } = options || {};\n\n  // Position calculator instance for single symbol tracking\n  // Only instantiated when a specific symbol is provided (not \"all\")\n  const positionCalculator = useRef<PositionCalculator | null>(null);\n  const calculatorService = useCalculatorService();\n\n  /**\n   * Subscribe to TP/SL orders that are related to current positions\n   * Filters for incomplete orders with POSITIONAL_TP_SL or TP_SL types\n   * keeplive ensures WebSocket connection stays active for real-time updates\n   */\n  const [tpslOrders] = useOrderStream(\n    {\n      symbol: symbol === \"all\" ? undefined : symbol,\n      status: OrderStatus.INCOMPLETE,\n      includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n      size: 500,\n    },\n    {\n      keeplive: true,\n    },\n  );\n\n  // Track API loading status for position endpoint\n  const { positions: positionStatus } = useApiStatusStore(\n    (state) => state.apis,\n  );\n\n  /**\n   * Register position calculator for real-time updates when tracking a single symbol\n   * Calculator is NOT registered for \"all\" mode to avoid unnecessary computations\n   * Registers across three scopes: POSITION, MARK_PRICE, INDEX_PRICE\n   * This enables automatic recalculation when any of these values change via WebSocket\n   */\n  useEffect(() => {\n    if (symbol === \"all\") {\n      return;\n    }\n    positionCalculator.current = new PositionCalculator(symbol);\n    for (const scope of scopes) {\n      calculatorService.register(scope, positionCalculator.current);\n    }\n    // Cleanup: unregister calculator on unmount or symbol change\n    return () => {\n      for (const scope of scopes) {\n        calculatorService.unregister(scope, positionCalculator.current!);\n      }\n    };\n  }, [symbol]);\n\n  /**\n   * Fetch position data from the store\n   * Returns tuple: [rows array, aggregated data without rows]\n   * Falls back to POSITION_EMPTY if no data exists for the symbol\n   */\n  const formattedPositions: [\n    API.PositionTPSLExt[] | null,\n    Omit<API.PositionsTPSLExt, \"rows\">,\n  ] = usePositionStore((state) => {\n    const positions = state.positions[symbol] ?? POSITION_EMPTY;\n\n    return [positions.rows, omit([\"rows\"], positions)];\n  });\n\n  // Extract portfolio-level metrics from app store\n  const { totalCollateral, totalValue, totalUnrealizedROI } = useAppStore(\n    (state) => state.portfolio,\n  );\n\n  /**\n   * Transform aggregated data based on selected price calculation mode\n   * - markPrice mode: Returns data as-is (uses mark_price based fields)\n   * - lastPrice mode: Remaps index-based fields to standard field names\n   *   This allows consistent field access regardless of calculation mode\n   */\n  const aggregated = useMemo(() => {\n    const data = formattedPositions[1];\n    if (!data) {\n      return {};\n    }\n\n    if (calcMode === \"markPrice\") {\n      return data;\n    }\n\n    // Remap index-based PnL fields for lastPrice mode\n    const { total_unreal_pnl_index, unrealPnlROI_index, ...rest } = data;\n\n    return {\n      ...rest,\n      unrealPnL: total_unreal_pnl_index,\n      total_unreal_pnl: total_unreal_pnl_index,\n      unrealPnlROI: unrealPnlROI_index,\n    };\n  }, [calcMode, formattedPositions]);\n\n  /**\n   * Process and transform position rows through multiple stages:\n   * 1. Filter based on pending order inclusion setting\n   * 2. Apply price mode transformations (lastPrice vs markPrice)\n   * 3. Merge with TP/SL order data\n   */\n  let rows = formattedPositions[0];\n  {\n    // Initialize empty array if no position data exists\n    if (!rows) {\n      rows = [];\n    }\n\n    /**\n     * Filter positions based on includedPendingOrder flag\n     * - Default (false): Only show positions with actual position quantity\n     * - True: Show positions with either position_qty OR pending orders\n     * This prevents empty rows from cluttering the UI\n     */\n    if (!includedPendingOrder) {\n      rows = rows.filter((item) => item.position_qty !== 0);\n    } else {\n      rows = rows.filter(\n        (item) =>\n          item.position_qty !== 0 ||\n          item.pending_long_qty !== 0 ||\n          item.pending_short_qty !== 0,\n      );\n    }\n\n    /**\n     * Apply lastPrice mode transformations\n     * Remaps index-based PnL fields to standard field names for each position\n     * This ensures UI components can use consistent field names\n     */\n    if (calcMode === \"lastPrice\") {\n      rows = rows.map((item) => {\n        const {\n          unrealized_pnl_index,\n          unrealized_pnl_ROI_index,\n\n          ...rust\n        } = item;\n\n        return {\n          ...rust,\n          unrealized_pnl: unrealized_pnl_index ?? 0,\n          unsettled_pnl_ROI: unrealized_pnl_ROI_index ?? 0,\n        };\n      });\n    }\n\n    /**\n     * Merge TP/SL order data into position rows\n     * Each position gets two TP/SL categories:\n     * - full_tp_sl: Orders that close the entire position\n     * - partial_tp_sl: Orders that close only part of the position\n     * Only processes when TP/SL orders exist to optimize performance\n     */\n    if (Array.isArray(tpslOrders) && tpslOrders.length) {\n      rows = rows.map((item) => {\n        // Find TP/SL orders matching this position's symbol\n        const { fullPositionOrder, partialPositionOrders } =\n          findPositionTPSLFromOrders(tpslOrders, item.symbol, item.margin_mode);\n\n        // Extract TP/SL prices from full position order\n        const full_tp_sl = fullPositionOrder\n          ? findTPSLFromOrder(fullPositionOrder)\n          : undefined;\n\n        // Extract first partial position order (UI typically shows one at a time)\n        const partialPossitionOrder =\n          partialPositionOrders && partialPositionOrders.length\n            ? partialPositionOrders[0]\n            : undefined;\n        const partial_tp_sl = partialPossitionOrder\n          ? findTPSLFromOrder(partialPossitionOrder)\n          : undefined;\n\n        return {\n          ...item,\n          full_tp_sl: {\n            tp_trigger_price: full_tp_sl?.tp_trigger_price,\n            sl_trigger_price: full_tp_sl?.sl_trigger_price,\n            algo_order: fullPositionOrder,\n          },\n          partial_tp_sl: {\n            order_num: partialPositionOrders?.length ?? 0,\n            tp_trigger_price: partial_tp_sl?.tp_trigger_price,\n            sl_trigger_price: partial_tp_sl?.sl_trigger_price,\n            algo_order: partialPossitionOrder,\n          },\n        };\n      });\n    }\n  }\n\n  /**\n   * Create memoized getter function for accessing aggregated data\n   * Provides performance optimization for nested property access\n   */\n  const positionInfoGetter = createGetter(\n    aggregated as Omit<API.PositionInfo, \"rows\">,\n    1,\n  );\n\n  /**\n   * Return tuple with three elements:\n   * 1. Position data object with processed rows and aggregated metrics\n   * 2. Getter function for optimized aggregated data access\n   * 3. Loading state object\n   */\n  return [\n    {\n      rows, // Processed position rows with TP/SL data\n      aggregated: formattedPositions?.[1] ?? EMPTY_OBJECT,\n      totalCollateral, // Portfolio-wide collateral\n      totalValue, // Total portfolio value\n      totalUnrealizedROI, // Total unrealized ROI across all positions\n    },\n    positionInfoGetter,\n    {\n      /**\n       * @deprecated use `isLoading` instead\n       */\n      loading: positionStatus.loading,\n      isLoading: positionStatus.loading,\n    },\n  ] as const;\n};\n\n/**\n * Helper function to extract unsettled PnL from position stream result\n * Uses ramda's pathOr to safely access nested property with fallback to 0\n * @deprecated Consider using direct property access with optional chaining\n */\nexport const pathOr_unsettledPnLPathOr = pathOr(0, [\n  0,\n  \"aggregated\",\n  \"unsettledPnL\",\n]);\n","import { createContext, useContext } from \"react\";\n\nexport type getKeyFunction = (index: number, prevData: any) => string | null;\n\nexport type DataCenterContextState = {\n  registerKeyHandler: (key: string, handler: getKeyFunction) => void;\n  unregisterKeyHandler: (key: string) => void;\n};\n\nexport const DataCenterContext = createContext({} as DataCenterContextState);\n\nexport const useDataCenterContext = () => {\n  return useContext(DataCenterContext);\n};\n","import { API, OrderType } from \"@orderly.network/types\";\nimport { isPositionalTPSL, isTPSLTriggered } from \"@orderly.network/utils\";\nimport { AlgoOrderUpdateEntity } from \"./baseAlgoCreator\";\n\ntype TPSLChildInput = {\n  algo_type: string;\n  type: OrderType;\n  is_activated?: boolean;\n  trigger_price?: number | string;\n  price?: number | string;\n};\n\nconst isLimit = (type?: OrderType) => type === OrderType.LIMIT;\n\nconst isTPSLExecutionType = (type?: OrderType) =>\n  type === OrderType.LIMIT ||\n  type === OrderType.MARKET ||\n  type === OrderType.CLOSE_POSITION;\n\nexport const normalizeTPSLChildType = (\n  type: OrderType | undefined,\n  fullPosition: boolean,\n): OrderType | undefined => {\n  if (!isTPSLExecutionType(type)) return undefined;\n  if (type === OrderType.LIMIT) return OrderType.LIMIT;\n  return fullPosition ? OrderType.CLOSE_POSITION : OrderType.MARKET;\n};\n\nconst hasOrderTypeChanged = (oldType?: OrderType, nextType?: OrderType) =>\n  isLimit(oldType) !== isLimit(nextType);\n\nconst assertLimitPrice = (price?: number | string) => {\n  if (!Number.isFinite(Number(price)) || Number(price) <= 0) {\n    throw new Error(\"A TP/SL limit price must be positive and finite\");\n  }\n};\n\n/** Build minimal updates, allowing an inactive leg to change execution type. */\nexport function createTPSLOrderUpdates(\n  children: TPSLChildInput[],\n  oldValue: API.AlgoOrder,\n  quantity?: number | string,\n  explicitlyDeactivatedTypes: readonly string[] = [],\n): AlgoOrderUpdateEntity[] {\n  const oldChildren = oldValue.child_orders ?? [];\n  const quantityChanged =\n    !isPositionalTPSL(oldValue) &&\n    quantity != null &&\n    Number(quantity) !== Number(oldValue.quantity);\n\n  const missingActiveChild = children.find(\n    (next) =>\n      next.is_activated !== false &&\n      !oldChildren.some((oldOrder) => oldOrder.algo_type === next.algo_type),\n  );\n  if (missingActiveChild) {\n    throw new Error(\"Cannot add a missing TP/SL child while editing\");\n  }\n\n  return oldChildren.flatMap<AlgoOrderUpdateEntity>((oldOrder) => {\n    const next = children.find(\n      (child) => child.algo_type === oldOrder.algo_type,\n    );\n    if (!next) {\n      if (\n        explicitlyDeactivatedTypes.includes(oldOrder.algo_type) &&\n        oldOrder.is_activated !== false\n      ) {\n        return [\n          {\n            order_id: Number(oldOrder.algo_order_id),\n            is_activated: false,\n          },\n        ];\n      }\n      return quantityChanged && oldOrder.is_activated !== false\n        ? [\n            {\n              order_id: Number(oldOrder.algo_order_id),\n              quantity: Number(quantity),\n            },\n          ]\n        : [];\n    }\n\n    const nextIsActive = next.is_activated !== false;\n    if (nextIsActive) {\n      const triggerPrice = Number(next.trigger_price);\n      if (!Number.isFinite(triggerPrice) || triggerPrice <= 0) {\n        throw new Error(\"A TP/SL trigger price must be positive and finite\");\n      }\n    } else {\n      return oldOrder.is_activated !== false\n        ? [{ order_id: Number(oldOrder.algo_order_id), is_activated: false }]\n        : [];\n    }\n\n    const orderId = Number(oldOrder.algo_order_id);\n    if (!Number.isFinite(orderId)) {\n      throw new Error(\"An existing TP/SL child requires an order id\");\n    }\n    const nextType = normalizeTPSLChildType(\n      next.type,\n      isPositionalTPSL(oldValue),\n    );\n    if (!nextType) {\n      throw new Error(\"A TP/SL order type must be LIMIT or MARKET\");\n    }\n    const typeChanged = hasOrderTypeChanged(oldOrder.type, nextType);\n    if (\n      typeChanged &&\n      (oldOrder.is_activated !== false || isTPSLTriggered(oldOrder))\n    ) {\n      throw new Error(\"Changing an existing TP/SL order type is not supported\");\n    }\n\n    const update: AlgoOrderUpdateEntity = { order_id: orderId };\n    if (typeChanged) update.order_type = nextType;\n    const nextTriggerPrice = Number(next.trigger_price);\n    if (\n      oldOrder.is_activated === false ||\n      Number(oldOrder.trigger_price) !== nextTriggerPrice\n    ) {\n      update.trigger_price = nextTriggerPrice;\n    }\n    if (\n      isLimit(nextType) &&\n      (typeChanged || Number(oldOrder.price) !== Number(next.price))\n    ) {\n      assertLimitPrice(next.price);\n      update.price = Number(next.price);\n    }\n    if (quantityChanged) update.quantity = Number(quantity);\n    return Object.keys(update).length > 1 ? [update] : [];\n  });\n}\n\nexport type TPSLChildUpdate = {\n  order_id: number;\n  type?: OrderType;\n  trigger_price?: number | string;\n  price?: number | string;\n  quantity?: number | string;\n  is_activated?: boolean;\n  child_orders?: TPSLChildUpdate[];\n};\n\n/** Guard the low-level SDK update entry point, including nested Bracket parents. */\nexport function sanitizeTPSLChildUpdates(\n  updates: TPSLChildUpdate[],\n  parent?: API.AlgoOrder,\n): any[] {\n  return updates.flatMap<any>((input) => {\n    if (input.order_id == null) {\n      throw new Error(\"A TP/SL child order id is required for editing\");\n    }\n    if (!parent) {\n      throw new Error(\"A parent TP/SL order is required for child updates\");\n    }\n\n    const old = parent.child_orders?.find(\n      (child) => Number(child.algo_order_id) === Number(input.order_id),\n    );\n    if (!old) {\n      throw new Error(\"The TP/SL child order id is invalid\");\n    }\n    if (input.is_activated === false) {\n      return old.is_activated === false\n        ? []\n        : [{ order_id: input.order_id, is_activated: false }];\n    }\n\n    const update: AlgoOrderUpdateEntity = {\n      order_id: input.order_id,\n    };\n    if (input.child_orders) {\n      const children = sanitizeTPSLChildUpdates(input.child_orders, old);\n      if (children.length) (update as any).child_orders = children;\n    }\n    const hasType = input.type != null;\n    const nextType = hasType\n      ? normalizeTPSLChildType(\n          input.type,\n          isPositionalTPSL(parent) || isPositionalTPSL(old),\n        )\n      : undefined;\n    const typeChanged = hasType && hasOrderTypeChanged(old.type, nextType);\n    if (hasType) {\n      if (!nextType) {\n        throw new Error(\"A TP/SL order type must be LIMIT or MARKET\");\n      }\n      if (\n        ![\"TAKE_PROFIT\", \"STOP_LOSS\"].includes(old.algo_type) ||\n        (typeChanged && (old.is_activated !== false || isTPSLTriggered(old)))\n      ) {\n        throw new Error(\n          \"Changing an existing TP/SL order type is not supported\",\n        );\n      }\n      if (typeChanged) {\n        if (input.trigger_price == null) {\n          throw new Error(\n            \"Reactivating a TP/SL child with a new type requires a trigger price\",\n          );\n        }\n        update.order_type = nextType;\n      }\n    }\n    if (input.trigger_price != null) {\n      const triggerPrice = Number(input.trigger_price);\n      if (!Number.isFinite(triggerPrice) || triggerPrice <= 0) {\n        throw new Error(\"A TP/SL trigger price must be positive and finite\");\n      }\n      if (\n        old.is_activated === false ||\n        Number(old.trigger_price) !== triggerPrice\n      ) {\n        update.trigger_price = triggerPrice;\n      }\n    }\n    const effectiveType = hasType ? nextType : old.type;\n    if (isLimit(effectiveType) && (input.price != null || typeChanged)) {\n      assertLimitPrice(input.price);\n      if (typeChanged || Number(old.price) !== Number(input.price)) {\n        update.price = Number(input.price);\n      }\n    }\n    if (\n      input.quantity != null &&\n      !isPositionalTPSL(parent) &&\n      !isPositionalTPSL(old) &&\n      Number(input.quantity) !== Number(old.quantity)\n    ) {\n      update.quantity = Number(input.quantity);\n    }\n    return Object.keys(update).length > 1 ? [update] : [];\n  });\n}\n","import { order as orderUtils } from \"@orderly.network/perp\";\nimport {\n  API,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\n\n/**\n * Compute the effective execution price for an order.\n *\n * Business rules:\n *\n * - MARKET / STOP_MARKET\n *   - BUY:  price = Ask1\n *   - SELL: price = Bid1\n *\n * - LIMIT\n *   - BUY:\n *     - if limit_price >= Ask1 -> price = Ask1\n *     - else                   -> price = limit_price\n *   - SELL:\n *     - if limit_price <= Bid1 -> price = Bid1\n *     - else                   -> price = limit_price\n *\n * This function pre-dates isolated-margin reference price logic and is kept\n * for backward compatibility with existing order helpers.\n */\nexport function getOrderPrice(\n  order: Partial<OrderlyOrder>,\n  askAndBid: number[],\n) {\n  const orderPrice = Number(order.order_price);\n  if (\n    order.order_type === OrderType.MARKET ||\n    order.order_type === OrderType.STOP_MARKET\n  ) {\n    if (order.side === OrderSide.BUY) {\n      return askAndBid[0];\n    } else {\n      return askAndBid[1];\n    }\n  } else {\n    // LIMIT order\n    if (order.side === OrderSide.BUY) {\n      if (orderPrice >= askAndBid[0]) {\n        return askAndBid[0];\n      } else {\n        return orderPrice;\n      }\n    } else {\n      if (orderPrice <= askAndBid[1]) {\n        return askAndBid[1];\n      } else {\n        return orderPrice;\n      }\n    }\n  }\n}\n\n/**\n * Convenience re-export of the core reference price calculator from\n * `@orderly.network/perp`.\n *\n * NOTE: This exposes the low-level API that operates on the light-weight\n * `OrderReferencePriceInput` type. Most UI callers should instead use\n * `getOrderReferencePriceFromOrder`, which adapts a full `OrderlyOrder`.\n */\nexport const getOrderReferencePrice = orderUtils.getOrderReferencePrice;\n\n/**\n * Context required to price MARKET orders the same way the backend risk\n * engine does (mark price +/- symbol price range instead of Ask1/Bid1).\n */\nexport type MarketReferencePriceContext = {\n  /** Mark price of the symbol */\n  markPrice?: number;\n  /** Symbol `price_range` config, e.g. 0.1 = 10% */\n  priceRange?: number;\n  /** Decimal places to round the MARKET reference price to (usually quote_dp) */\n  pricePrecision?: number;\n};\n\n/**\n * Adapter to calculate reference price directly from an `OrderlyOrder`\n * and the best bid / ask prices from orderbook.\n *\n * @param order    Partial order entity (side / type / price fields)\n * @param askAndBid `[Ask1, Bid1]` tuple\n * @param marketContext Mark price / price range context for backend-aligned\n *   MARKET reference pricing; when omitted MARKET falls back to Ask1/Bid1\n * @returns Reference price or null when it cannot be determined\n */\nexport function getOrderReferencePriceFromOrder(\n  order: Partial<OrderlyOrder>,\n  askAndBid: number[],\n  marketContext?: MarketReferencePriceContext,\n): number | null {\n  if (!order.order_type || !order.side) {\n    return null;\n  }\n\n  const askPrice = askAndBid?.[0] ?? 0;\n  const bidPrice = askAndBid?.[1] ?? 0;\n\n  return orderUtils.getOrderReferencePrice(\n    {\n      orderType: order.order_type,\n      orderTypeExt: order.order_type_ext,\n      side: order.side,\n      limitPrice: order.order_price ? Number(order.order_price) : undefined,\n      triggerPrice: order.trigger_price\n        ? Number(order.trigger_price)\n        : undefined,\n      markPrice: marketContext?.markPrice,\n      priceRange: marketContext?.priceRange,\n      pricePrecision: marketContext?.pricePrecision,\n    },\n    askPrice,\n    bidPrice,\n  );\n}\n\nexport function getPriceRange(inputs: {\n  side: OrderSide;\n  basePrice: number;\n  symbolInfo: API.SymbolExt;\n}) {\n  const { basePrice, side, symbolInfo } = inputs;\n  const { price_range, price_scope, quote_min, quote_max } = symbolInfo;\n\n  const maxPriceNumber = orderUtils.maxPrice(basePrice, price_range);\n  const minPriceNumber = orderUtils.minPrice(basePrice, price_range);\n  const scopePriceNumber = orderUtils.scopePrice(basePrice, price_scope, side);\n\n  const priceRange =\n    side === OrderSide.BUY\n      ? {\n          min: scopePriceNumber,\n          max: maxPriceNumber,\n        }\n      : {\n          min: minPriceNumber,\n          max: scopePriceNumber,\n        };\n\n  const minPrice = Math.max(quote_min, priceRange?.min);\n  const maxPrice = Math.min(quote_max, priceRange?.max);\n\n  return {\n    minPrice,\n    maxPrice,\n  };\n}\n\nexport function getTPSLTriggerPriceScope(inputs: {\n  side: OrderSide;\n  basePrice: number;\n  symbolInfo: API.SymbolExt;\n}) {\n  const { basePrice, side, symbolInfo } = inputs;\n  const { price_scope, quote_min, quote_max } = symbolInfo;\n\n  const scopePriceNumber = orderUtils.scopePrice(basePrice, price_scope, side);\n\n  const priceRange =\n    side === OrderSide.BUY\n      ? {\n          min: scopePriceNumber,\n          max: quote_max,\n        }\n      : {\n          min: quote_min,\n          max: scopePriceNumber,\n        };\n\n  return {\n    minPrice: priceRange.min,\n    maxPrice: priceRange.max,\n  };\n}\n\n/** @deprecated use getTPSLTriggerPriceScope instead */\nexport function getTPSLTriggerPriceRange(inputs: {\n  side: OrderSide;\n  basePrice: number;\n  symbolInfo: API.SymbolExt;\n}) {\n  const { basePrice, side, symbolInfo } = inputs;\n  const { price_scope, quote_min, quote_max } = symbolInfo;\n\n  const scopePriceNumber = orderUtils.scopePrice(basePrice, price_scope, side);\n\n  const priceRange =\n    side === OrderSide.BUY\n      ? {\n          min: scopePriceNumber,\n          max: quote_max,\n        }\n      : {\n          min: quote_min,\n          max: scopePriceNumber,\n        };\n\n  return {\n    minPrice: priceRange.min,\n    maxPrice: priceRange.max,\n  };\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { OrderValidationItem } from \"./interface\";\n\nexport class OrderValidation {\n  static getLabel(key: keyof OrderlyOrder) {\n    switch (key) {\n      case \"quantity\":\n      case \"order_quantity\":\n        return \"Quantity\";\n      case \"order_price\":\n        return \"Price\";\n      case \"trigger_price\":\n        return \"Trigger price\";\n      case \"tp_trigger_price\":\n        return \"TP price\";\n      case \"sl_trigger_price\":\n        return \"SL price\";\n      case \"tp_order_price\":\n        return \"TP order price\";\n      case \"sl_order_price\":\n        return \"SL order price\";\n      case \"start_price\":\n        return \"Start price\";\n      case \"end_price\":\n        return \"End price\";\n      case \"total_orders\":\n        return \"Total orders\";\n      case \"skew\":\n        return \"Skew\";\n      default:\n        return key;\n    }\n  }\n\n  static required(key: keyof OrderlyOrder) {\n    return {\n      type: \"required\",\n      message: `${this.getLabel(key)} is required`,\n    } as OrderValidationItem;\n  }\n\n  static priceErrorMin(key: keyof OrderlyOrder) {\n    return {\n      type: \"priceErrorMin\",\n      message: `Your ${this.getLabel(key)} should be set lower than your order price.`,\n    } as OrderValidationItem;\n  }\n  static priceErrorMax(key: keyof OrderlyOrder) {\n    return {\n      type: \"priceErrorMax\",\n      message: `Your ${this.getLabel(key)} should be set higher than your order price.`,\n    } as OrderValidationItem;\n  }\n\n  static min(key: keyof OrderlyOrder, value: number | string) {\n    return {\n      type: \"min\",\n      message: `${this.getLabel(key)} must be greater than ${value}`,\n      value,\n    } as OrderValidationItem;\n  }\n\n  static max(key: keyof OrderlyOrder, value: number | string) {\n    return {\n      type: \"max\",\n      message: `${this.getLabel(key)} must be less than ${value}`,\n      value,\n    } as OrderValidationItem;\n  }\n\n  static range(\n    key: keyof OrderlyOrder,\n    min?: number | string,\n    max?: number | string,\n  ) {\n    return {\n      type: \"range\",\n      message: `${this.getLabel(key)} must be in the range of ${min} to ${max}`,\n      min,\n      max,\n    } as OrderValidationItem;\n  }\n}\n","import {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  OrderSide,\n  OrderType,\n  PositionType,\n} from \"@orderly.network/types\";\nimport { Decimal, resolveTPSLOrderType } from \"@orderly.network/utils\";\nimport { getPriceRange } from \"../../../utils/order/orderPrice\";\nimport {\n  OrderValidationItem,\n  OrderValidationResult,\n  ValuesDepConfig,\n} from \"../interface\";\nimport { OrderValidation } from \"../orderValidation\";\nimport { IValidationStrategy } from \"./IValidationStrategy\";\n\n/**\n * Formats price to specified decimal places\n */\nconst formatPrice = (price: number, quote_dp: number): number => {\n  return new Decimal(price).toDecimalPlaces(quote_dp).toNumber();\n};\n\ntype TPSLValidationConfig = ValuesDepConfig & {\n  /** Skip only the stage-specific trigger-to-mark check for selected legs. */\n  skipTPSLTriggerPriceAgainstMark?: Partial<Record<\"tp\" | \"sl\", boolean>>;\n};\n\n/**\n * Strategy for validating Take Profit / Stop Loss orders\n * Consolidates validation logic from baseBracketOrderCreator and baseAlgoCreator\n * to eliminate code duplication\n */\nexport class TPSLValidationStrategy implements IValidationStrategy<\n  Partial<\n    AlgoOrderEntity<\n      AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n    >\n  >\n> {\n  /**\n   * Validates TP/SL order values\n   * @param values - TP/SL order values including trigger prices, order prices, etc.\n   * @param config - Configuration with symbol info and mark price\n   * @returns Validation result object with any errors found\n   */\n  validate(\n    values: Partial<\n      AlgoOrderEntity<\n        AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n      >\n    >,\n    config: TPSLValidationConfig,\n  ): OrderValidationResult {\n    const result: OrderValidationResult = Object.create(null);\n\n    const normalized = { ...values };\n    for (const leg of [\"tp\", \"sl\"] as const) {\n      const triggerKey = `${leg}_trigger_price` as const;\n      const priceKey = `${leg}_order_price` as const;\n      const trigger = values[triggerKey];\n      const price = values[priceKey];\n      const hasTrigger =\n        trigger !== undefined && trigger !== null && trigger !== \"\";\n      const hasPrice = price !== undefined && price !== null && price !== \"\";\n      const resolvedType = resolveTPSLOrderType(\n        values[`${leg}_order_type`],\n        price,\n      );\n\n      // A LIMIT price means the user is configuring this leg. Do not treat it\n      // as an inactive placeholder when its trigger price is still empty.\n      if (!hasTrigger) {\n        if (hasPrice && resolvedType === OrderType.LIMIT) {\n          result[triggerKey] = OrderValidation.required(triggerKey);\n        }\n        normalized[priceKey] = undefined;\n        continue;\n      }\n\n      const triggerNumber = Number(trigger);\n      if (!Number.isFinite(triggerNumber) || triggerNumber <= 0) {\n        result[triggerKey] = OrderValidation.min(\n          triggerKey,\n          config.symbol.quote_tick,\n        );\n        normalized[triggerKey] = undefined;\n      }\n\n      if (resolvedType !== OrderType.LIMIT) {\n        normalized[priceKey] = undefined;\n        continue;\n      }\n      if (price == null || price === \"\") {\n        result[priceKey] = OrderValidation.required(priceKey);\n        normalized[priceKey] = undefined;\n      } else if (\n        !Number.isFinite(Number(price)) ||\n        new Decimal(price).todp(config.symbol.quote_dp).lte(0)\n      ) {\n        result[priceKey] = OrderValidation.min(\n          priceKey,\n          config.symbol.quote_tick,\n        );\n        normalized[priceKey] = undefined;\n      } else {\n        normalized[priceKey] = new Decimal(price)\n          .todp(config.symbol.quote_dp)\n          .toString();\n      }\n    }\n\n    const {\n      tp_trigger_price,\n      tp_order_price,\n      tp_order_type,\n      sl_trigger_price,\n      sl_order_price,\n      sl_order_type,\n      side,\n      quantity,\n      order_type,\n      order_price,\n    } = normalized;\n\n    const qty = Number(quantity);\n    const maxQty = config.maxQty;\n    const { quote_max, quote_min, quote_dp, base_min } = config.symbol ?? {};\n\n    // Determine mark price based on order type\n    const mark_price =\n      order_type === OrderType.MARKET || order_type == null\n        ? config.markPrice\n        : order_price\n          ? Number(order_price)\n          : undefined;\n\n    // TP/SL side is opposite of order side\n    const tpslSide = side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n    // Validate quantity\n    const fullPosition =\n      values.position_type === PositionType.FULL ||\n      values.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL;\n    if (!fullPosition && !isNaN(qty) && qty > maxQty) {\n      result.quantity = OrderValidation.max(\"quantity\", config.maxQty);\n    }\n    if (!fullPosition && !isNaN(qty) && qty < (base_min ?? 0)) {\n      result.quantity = OrderValidation.min(\"quantity\", base_min ?? 0);\n    }\n\n    // Validate based on order side and mark price\n    if (side === OrderSide.BUY && mark_price) {\n      this.validateBuySide(\n        {\n          tp_trigger_price,\n          tp_order_price,\n          sl_trigger_price,\n          sl_order_price,\n        },\n        {\n          mark_price,\n          quote_min: quote_min ?? 0,\n          quote_max: quote_max ?? 0,\n          quote_dp: quote_dp ?? 0,\n          tpslSide,\n          symbol: config.symbol,\n          skipTriggerPriceAgainstMark: config.skipTPSLTriggerPriceAgainstMark,\n        },\n        result,\n      );\n    } else if (side === OrderSide.SELL && mark_price) {\n      this.validateSellSide(\n        {\n          tp_trigger_price,\n          tp_order_price,\n          sl_trigger_price,\n          sl_order_price,\n        },\n        {\n          mark_price,\n          quote_min: quote_min ?? 0,\n          quote_max: quote_max ?? 0,\n          quote_dp: quote_dp ?? 0,\n          tpslSide,\n          symbol: config.symbol,\n          skipTriggerPriceAgainstMark: config.skipTPSLTriggerPriceAgainstMark,\n        },\n        result,\n      );\n    }\n\n    return Object.keys(result).length > 0 ? result : (null as any);\n  }\n\n  /**\n   * Validates TP/SL for BUY orders\n   * For BUY orders:\n   * - SL trigger price must be < mark price\n   * - TP trigger price must be > mark price\n   */\n  private validateBuySide(\n    prices: {\n      tp_trigger_price?: number | string;\n      tp_order_price?: number | string;\n      sl_trigger_price?: number | string;\n      sl_order_price?: number | string;\n    },\n    config: {\n      mark_price: number;\n      quote_min: number;\n      quote_max: number;\n      quote_dp: number;\n      tpslSide: OrderSide;\n      symbol: any;\n      skipTriggerPriceAgainstMark?: Partial<Record<\"tp\" | \"sl\", boolean>>;\n    },\n    result: OrderValidationResult,\n  ): void {\n    const {\n      tp_trigger_price,\n      tp_order_price,\n      sl_trigger_price,\n      sl_order_price,\n    } = prices;\n    const {\n      mark_price,\n      quote_min,\n      quote_max,\n      quote_dp,\n      tpslSide,\n      symbol,\n      skipTriggerPriceAgainstMark,\n    } = config;\n\n    // Validate SL trigger price\n    if (\n      sl_trigger_price !== undefined &&\n      sl_trigger_price !== \"\" &&\n      sl_trigger_price !== null\n    ) {\n      const slTrigger = Number(sl_trigger_price);\n      if (!isNaN(slTrigger)) {\n        // Only validate against quote_min if it's a valid number > 0\n        if (quote_min > 0 && slTrigger < quote_min) {\n          result.sl_trigger_price = OrderValidation.min(\n            \"sl_trigger_price\",\n            formatPrice(quote_min, quote_dp),\n          );\n        }\n        if (!skipTriggerPriceAgainstMark?.sl && slTrigger >= mark_price) {\n          result.sl_trigger_price = OrderValidation.max(\n            \"sl_trigger_price\",\n            formatPrice(mark_price, quote_dp),\n          );\n        }\n      }\n    }\n\n    // Validate TP trigger price\n    if (\n      tp_trigger_price !== undefined &&\n      tp_trigger_price !== \"\" &&\n      tp_trigger_price !== null\n    ) {\n      const tpTrigger = Number(tp_trigger_price);\n      if (!isNaN(tpTrigger)) {\n        if (!skipTriggerPriceAgainstMark?.tp && tpTrigger <= mark_price) {\n          result.tp_trigger_price = OrderValidation.min(\n            \"tp_trigger_price\",\n            formatPrice(mark_price, quote_dp),\n          );\n        }\n        // Only validate against quote_max if it's a valid number > 0\n        if (quote_max > 0 && tpTrigger > quote_max) {\n          result.tp_trigger_price = OrderValidation.max(\n            \"tp_trigger_price\",\n            formatPrice(quote_max, quote_dp),\n          );\n        }\n      }\n    }\n\n    // Validate SL order price (if limit order)\n    if (sl_trigger_price && sl_order_price) {\n      const priceRange = getPriceRange({\n        side: tpslSide,\n        basePrice: Number(sl_trigger_price),\n        symbolInfo: symbol,\n      });\n      const slOrderPrice = Number(sl_order_price);\n      const slTrigger = Number(sl_trigger_price);\n\n      if (slOrderPrice < priceRange.minPrice) {\n        result.sl_order_price = OrderValidation.min(\n          \"sl_order_price\",\n          formatPrice(priceRange.minPrice, quote_dp),\n        );\n      }\n      if (slOrderPrice > priceRange.maxPrice) {\n        result.sl_order_price = OrderValidation.max(\n          \"sl_order_price\",\n          formatPrice(priceRange.maxPrice, quote_dp),\n        );\n      }\n      // FE limit: sl_order_price must be less than sl_trigger_price for BUY orders\n      if (slTrigger < slOrderPrice) {\n        result.sl_trigger_price =\n          OrderValidation.priceErrorMax(\"sl_trigger_price\");\n      }\n    }\n\n    // Validate TP order price (if limit order)\n    if (tp_trigger_price && tp_order_price) {\n      const priceRange = getPriceRange({\n        side: tpslSide,\n        basePrice: Number(tp_trigger_price),\n        symbolInfo: symbol,\n      });\n      const tpOrderPrice = Number(tp_order_price);\n      const tpTrigger = Number(tp_trigger_price);\n\n      if (tpOrderPrice > priceRange.maxPrice) {\n        result.tp_order_price = OrderValidation.max(\n          \"tp_order_price\",\n          formatPrice(priceRange.maxPrice, quote_dp),\n        );\n      }\n      if (tpOrderPrice < priceRange.minPrice) {\n        result.tp_order_price = OrderValidation.min(\n          \"tp_order_price\",\n          formatPrice(priceRange.minPrice, quote_dp),\n        );\n      }\n      // FE limit: tp_order_price must be greater than tp_trigger_price for BUY orders\n      if (tpTrigger > tpOrderPrice) {\n        result.tp_trigger_price =\n          OrderValidation.priceErrorMin(\"tp_trigger_price\");\n      }\n    }\n  }\n\n  /**\n   * Validates TP/SL for SELL orders\n   * For SELL orders:\n   * - SL trigger price must be > mark price\n   * - TP trigger price must be < mark price\n   */\n  private validateSellSide(\n    prices: {\n      tp_trigger_price?: number | string;\n      tp_order_price?: number | string;\n      sl_trigger_price?: number | string;\n      sl_order_price?: number | string;\n    },\n    config: {\n      mark_price: number;\n      quote_min: number;\n      quote_max: number;\n      quote_dp: number;\n      tpslSide: OrderSide;\n      symbol: any;\n      skipTriggerPriceAgainstMark?: Partial<Record<\"tp\" | \"sl\", boolean>>;\n    },\n    result: OrderValidationResult,\n  ): void {\n    const {\n      tp_trigger_price,\n      tp_order_price,\n      sl_trigger_price,\n      sl_order_price,\n    } = prices;\n    const {\n      mark_price,\n      quote_min,\n      quote_max,\n      quote_dp,\n      tpslSide,\n      symbol,\n      skipTriggerPriceAgainstMark,\n    } = config;\n\n    // Validate SL trigger price\n    if (\n      sl_trigger_price !== undefined &&\n      sl_trigger_price !== \"\" &&\n      sl_trigger_price !== null\n    ) {\n      const slTrigger = Number(sl_trigger_price);\n      if (!isNaN(slTrigger)) {\n        // Only validate against quote_max if it's a valid number > 0\n        if (quote_max > 0 && slTrigger > quote_max) {\n          result.sl_trigger_price = OrderValidation.max(\n            \"sl_trigger_price\",\n            formatPrice(quote_max, quote_dp),\n          );\n        }\n        if (!skipTriggerPriceAgainstMark?.sl && slTrigger <= mark_price) {\n          result.sl_trigger_price = OrderValidation.min(\n            \"sl_trigger_price\",\n            formatPrice(mark_price, quote_dp),\n          );\n        }\n      }\n    }\n\n    // Validate TP trigger price\n    if (\n      tp_trigger_price !== undefined &&\n      tp_trigger_price !== \"\" &&\n      tp_trigger_price !== null\n    ) {\n      const tpTrigger = Number(tp_trigger_price);\n      if (!isNaN(tpTrigger)) {\n        if (!skipTriggerPriceAgainstMark?.tp && tpTrigger >= mark_price) {\n          result.tp_trigger_price = OrderValidation.max(\n            \"tp_trigger_price\",\n            formatPrice(mark_price, quote_dp),\n          );\n        }\n        // Only validate against quote_min if it's a valid number > 0\n        if (quote_min > 0 && tpTrigger < quote_min) {\n          result.tp_trigger_price = OrderValidation.min(\n            \"tp_trigger_price\",\n            formatPrice(quote_min, quote_dp),\n          );\n        }\n      }\n    }\n\n    // Validate SL order price (if limit order)\n    if (sl_trigger_price && sl_order_price) {\n      const priceRange = getPriceRange({\n        side: tpslSide,\n        basePrice: Number(sl_trigger_price),\n        symbolInfo: symbol,\n      });\n      const slOrderPrice = Number(sl_order_price);\n      const slTrigger = Number(sl_trigger_price);\n\n      if (slOrderPrice < priceRange.minPrice) {\n        result.sl_order_price = OrderValidation.min(\n          \"sl_order_price\",\n          formatPrice(priceRange.minPrice, quote_dp),\n        );\n      }\n      if (slOrderPrice > priceRange.maxPrice) {\n        result.sl_order_price = OrderValidation.max(\n          \"sl_order_price\",\n          formatPrice(priceRange.maxPrice, quote_dp),\n        );\n      }\n      // FE limit: sl_order_price must be greater than sl_trigger_price for SELL orders\n      if (slTrigger > slOrderPrice) {\n        result.sl_trigger_price =\n          OrderValidation.priceErrorMin(\"sl_trigger_price\");\n      }\n    }\n\n    // Validate TP order price (if limit order)\n    if (tp_trigger_price && tp_order_price) {\n      const priceRange = getPriceRange({\n        side: tpslSide,\n        basePrice: Number(tp_trigger_price),\n        symbolInfo: symbol,\n      });\n      const tpOrderPrice = Number(tp_order_price);\n      const tpTrigger = Number(tp_trigger_price);\n\n      if (tpOrderPrice < priceRange.minPrice) {\n        result.tp_order_price = OrderValidation.min(\n          \"tp_order_price\",\n          formatPrice(priceRange.minPrice, quote_dp),\n        );\n      }\n      if (tpOrderPrice > priceRange.maxPrice) {\n        result.tp_order_price = OrderValidation.max(\n          \"tp_order_price\",\n          formatPrice(priceRange.maxPrice, quote_dp),\n        );\n      }\n      // FE limit: tp_order_price must be less than tp_trigger_price for SELL orders\n      if (tpTrigger < tpOrderPrice) {\n        result.tp_trigger_price =\n          OrderValidation.priceErrorMax(\"tp_trigger_price\");\n      }\n    }\n  }\n}\n","import {\n  API,\n  AlgoOrderType,\n  OrderSide,\n  OrderType,\n  PositionType,\n} from \"@orderly.network/types\";\nimport { isPositionalTPSL, isTPSLTriggered } from \"@orderly.network/utils\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { TPSLValidationStrategy } from \"./validators/TPSLValidationStrategy\";\n\n/** Validate a leaf using its effective update type and the TP/SL form rules. */\nexport function validateTPSLChild(\n  order: Partial<API.AlgoOrder>,\n  changes: {\n    type?: OrderType;\n    trigger_price?: number | string;\n    price?: number | string;\n  },\n  config: Pick<ValuesDepConfig, \"symbol\" | \"markPrice\">,\n  parent?: Partial<API.AlgoOrder>,\n): OrderValidationResult {\n  const leg = order.algo_type === AlgoOrderType.TAKE_PROFIT ? \"tp\" : \"sl\";\n  const effectiveType = changes.type ?? order.type;\n  const typeChanged =\n    (order.type === OrderType.LIMIT) !== (effectiveType === OrderType.LIMIT);\n  const triggerPriceUnchanged =\n    changes.trigger_price == null ||\n    Number(changes.trigger_price) === Number(order.trigger_price);\n  const skipTriggerPriceAgainstMark =\n    effectiveType === OrderType.LIMIT &&\n    !typeChanged &&\n    (parent?.is_triggered === true || isTPSLTriggered(order)) &&\n    triggerPriceUnchanged;\n  const errors = new TPSLValidationStrategy().validate(\n    {\n      side: order.side === OrderSide.SELL ? OrderSide.BUY : OrderSide.SELL,\n      position_type: isPositionalTPSL(order)\n        ? PositionType.FULL\n        : PositionType.PARTIAL,\n      [`${leg}_trigger_price`]: changes.trigger_price ?? order.trigger_price,\n      [`${leg}_order_price`]: typeChanged\n        ? changes.price\n        : (changes.price ?? order.price),\n      [`${leg}_order_type`]:\n        effectiveType === OrderType.LIMIT ? OrderType.LIMIT : OrderType.MARKET,\n    },\n    // No quantity is ever set below, so the strategy's quantity checks are\n    // unreachable; maxQty is a required placeholder in ValuesDepConfig.\n    {\n      ...config,\n      maxQty: 0,\n      skipTPSLTriggerPriceAgainstMark: skipTriggerPriceAgainstMark\n        ? { [leg]: true }\n        : undefined,\n    },\n  );\n  const mapped: OrderValidationResult = {};\n  if (errors?.[`${leg}_trigger_price`])\n    mapped.trigger_price = errors[`${leg}_trigger_price`];\n  if (errors?.[`${leg}_order_price`])\n    mapped.order_price = errors[`${leg}_order_price`];\n  return mapped;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n  OrderSide,\n  OrderEntity,\n  OrderStatus,\n  API,\n  AlgoOrderRootType,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { withTPSLProvenance, isPositionalTPSL } from \"@orderly.network/utils\";\nimport { useDataCenterContext } from \"../../provider/dataCenter/dataCenterContext\";\nimport {\n  normalizeTPSLChildType,\n  sanitizeTPSLChildUpdates,\n  TPSLChildUpdate,\n} from \"../../services/orderCreator/tpslOrderUpdates\";\nimport { validateTPSLChild } from \"../../services/orderCreator/validateTPSLChild\";\nimport { useMutation } from \"../../useMutation\";\nimport { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport version from \"../../version\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\nexport const useOrderStream = (\n  /**\n   * Orders query params\n   */\n  params: {\n    symbol?: string;\n    status?: OrderStatus;\n    page?: number;\n    size?: number;\n    side?: OrderSide;\n    sourceTypeAll?: boolean;\n    /**\n     * Include the order type\n     * @default [\"ALL\"]\n     */\n    includes?: CombineOrderType[];\n    /**\n     * Exclude the order type\n     * @default []\n     */\n    excludes?: CombineOrderType[];\n    dateRange?: {\n      from?: Date;\n      to?: Date;\n    };\n  },\n  options?: {\n    /**\n     * Keep the state update alive\n     */\n    keeplive?: boolean;\n    /**\n     * Stop the state update when the component unmount\n     */\n    stopOnUnmount?: boolean;\n  },\n) => {\n  const {\n    status,\n    symbol,\n    side,\n    size = 50,\n    page,\n    dateRange,\n    sourceTypeAll,\n  } = params;\n\n  const [includes, setIncludes] = useState<CombineOrderType[]>(\n    params.includes ?? [\"ALL\"],\n  );\n  const [excludes, setExcludes] = useState<CombineOrderType[]>(\n    params.excludes ?? [],\n  );\n\n  const { data: markPrices } = useMarkPricesStream();\n  const symbolsInfo = useSymbolsInfo();\n\n  const { registerKeyHandler, unregisterKeyHandler } = useDataCenterContext();\n  const [\n    doCancelOrder,\n    { error: cancelOrderError, isMutating: cancelMutating },\n  ] = useMutation(\"/v1/order\", \"DELETE\");\n\n  const [doCancelAllOrders] = useMutation(\"/v1/orders\", \"DELETE\");\n\n  const [\n    doUpdateOrder,\n    { error: updateOrderError, isMutating: updateMutating },\n  ] = useMutation(\"/v1/order\", \"PUT\");\n\n  const [\n    doCancelAlgolOrder,\n    { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n  ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n  const [doCancelAllAlgoOrders] = useMutation(\"/v1/algo/orders\", \"DELETE\");\n\n  const [\n    doUpdateAlgoOrder,\n    { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n  ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n  const normalOrderKeyFn = useMemo(() => {\n    return generateKeyFun(\"/v1/orders\", {\n      status,\n      symbol,\n      side,\n      size,\n      page,\n      dateRange,\n      sourceTypeAll,\n    });\n  }, [status, symbol, side, size, page, dateRange]);\n\n  const algoOrderKeyFn = useMemo(() => {\n    return sourceTypeAll\n      ? null\n      : generateKeyFun(\"/v1/algo/orders\", {\n          status,\n          symbol,\n          side,\n          size: 100,\n          page,\n          dateRange,\n        });\n  }, [status, symbol, side, dateRange, size]);\n\n  useEffect(() => {\n    const formatKey = (value?: string) => (value ? `:${value}` : \"\");\n    const key = `orders${formatKey(status)}${formatKey(symbol)}${formatKey(\n      side,\n    )}${formatKey(size.toString())}`;\n\n    registerKeyHandler?.(key, normalOrderKeyFn);\n\n    if (algoOrderKeyFn) {\n      registerKeyHandler?.(key.replace(\"orders\", \"algoOrders\"), algoOrderKeyFn);\n    }\n\n    return () => {\n      if (!options?.stopOnUnmount) return;\n\n      unregisterKeyHandler(key);\n\n      if (algoOrderKeyFn) {\n        unregisterKeyHandler(key.replace(\"orders\", \"algoOrders\"));\n      }\n    };\n  }, [normalOrderKeyFn, options?.keeplive]);\n\n  const normalOrdersResponse = usePrivateInfiniteQuery<API.OrderResponse>(\n    normalOrderKeyFn,\n    {\n      initialSize: 1,\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    },\n  );\n\n  // console.log(\"ordersResponse\", ordersResponse);\n\n  const algoOrdersResponse = usePrivateInfiniteQuery<API.OrderResponse>(\n    algoOrderKeyFn,\n    {\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    },\n  );\n\n  // console.log(\"algoOrdersResponse\", algoOrdersResponse, algoOrdersResponse);\n\n  const flattenOrders = useMemo(() => {\n    if (\n      !normalOrdersResponse.data ||\n      (!algoOrdersResponse.data && !sourceTypeAll)\n    ) {\n      return null;\n    }\n\n    let orders = normalOrdersResponse.data\n      ?.map((item: any) => item.rows)\n      ?.flat();\n\n    if (algoOrdersResponse.data) {\n      const algoOrders = algoOrdersResponse.data\n        ?.map((item: any) => item.rows)\n        ?.flat();\n\n      orders = [...orders, ...algoOrders];\n    }\n\n    orders = orders?.map((order) => withTPSLProvenance(order));\n\n    if (includes.includes(\"ALL\") && excludes.length === 0) {\n      return orders;\n    }\n\n    if (includes.includes(\"ALL\") && excludes.length > 0) {\n      return orders?.filter((item) => !excludes.includes(item.algo_type));\n    }\n\n    if (includes.length > 0 && excludes.length === 0) {\n      return orders?.filter((item) => includes.includes(item.algo_type));\n    }\n\n    if (includes.length > 0 && excludes.length > 0) {\n      return orders?.filter(\n        (item) =>\n          includes.includes(item.algo_type) &&\n          !excludes.includes(item.algo_type),\n      );\n    }\n\n    return orders;\n  }, [normalOrdersResponse.data, algoOrdersResponse.data, includes, excludes]);\n\n  // console.log(ordersResponse.data);\n\n  const orders = useMemo(() => {\n    if (!flattenOrders) {\n      return null;\n    }\n\n    if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n      return flattenOrders;\n    }\n    return flattenOrders.map((item) => {\n      const order = {\n        ...item,\n        mark_price: (markPrices ?? ({} as any))[item.symbol] ?? 0,\n      };\n\n      ///TODO: remove this when BE provides the correct data\n      // console.log(\"------------->>>>>>>>\", order);\n      if (\n        order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n        order.algo_type === AlgoOrderRootType.TP_SL\n      ) {\n        const childQuantity = order.child_orders?.[0]?.quantity;\n        if (childQuantity !== undefined) {\n          order.quantity = childQuantity;\n        }\n      }\n      ///-----------------todo end----------------\n\n      return order;\n    });\n  }, [flattenOrders, markPrices, status]);\n\n  const total = useMemo(() => {\n    return orders?.length || 0;\n    // return ordersResponse.data?.[0]?.meta?.total || 0;\n  }, [orders?.length]);\n\n  // console.log(\"---->>>>>>!!!! orders\", total, orders, {\n  //   status,\n  //   symbol,\n  //   side,\n  //   size,\n  //   page,\n  //   dateRange,\n  //   sourceTypeAll,\n  // });\n\n  const cancelAlgoOrdersByTypes = (\n    types: AlgoOrderRootType[],\n    symbol?: string,\n  ) => {\n    if (!types) {\n      throw new SDKError(\"Types is required\");\n    }\n\n    if (!Array.isArray(types)) {\n      throw new SDKError(\"Types should be an array\");\n    }\n\n    // TODO: order type check\n\n    return Promise.all(\n      types.map((type) => {\n        return doCancelAllAlgoOrders(null, {\n          algo_type: type,\n          ...(symbol && { symbol }),\n        });\n      }),\n    );\n  };\n\n  /**\n   * cancel all orders\n   */\n  const cancelAllOrders = useCallback(() => {\n    return Promise.all([\n      doCancelAllOrders(null),\n      doCancelAllAlgoOrders(null, { algo_type: AlgoOrderRootType.STOP }),\n      doCancelAllAlgoOrders(null, {\n        algo_type: AlgoOrderRootType.TRAILING_STOP,\n      }),\n    ]);\n  }, [normalOrdersResponse.data, algoOrdersResponse.data]);\n\n  const cancelAllPendingOrders = useCallback(\n    (symbol?: string) => {\n      return Promise.all([\n        doCancelAllOrders(null, { ...(symbol && { symbol }) }),\n        doCancelAllAlgoOrders(null, {\n          algo_type: AlgoOrderRootType.STOP,\n          ...(symbol && { symbol }),\n        }),\n        doCancelAllAlgoOrders(null, {\n          algo_type: AlgoOrderRootType.TRAILING_STOP,\n          ...(symbol && { symbol }),\n        }),\n      ]);\n    },\n    [symbol],\n  );\n\n  const cancelPostionOrdersByTypes = useCallback(\n    (symbol: string, types: AlgoOrderRootType[]) => {\n      return doCancelAllAlgoOrders(null, {\n        symbol,\n        algo_type: types,\n      });\n    },\n    [algoOrdersResponse.data],\n  );\n\n  const cancelAllTPSLOrders = useCallback(\n    (symbol?: string) => {\n      return cancelAlgoOrdersByTypes(\n        [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n        symbol,\n      );\n    },\n    [algoOrdersResponse.data],\n  );\n\n  const _updateOrder = useCallback(\n    (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n      const findOrder = (items: any[], id: string | number = orderId): any =>\n        items?.find((item) => Number(item.algo_order_id) === Number(id)) ??\n        items\n          ?.map((item) => findOrder(item.child_orders ?? [], id))\n          .find(Boolean);\n      const original = findOrder(flattenOrders ?? []);\n      switch (type) {\n        case \"algoOrder\":\n          if (\n            original &&\n            [\"TAKE_PROFIT\", \"STOP_LOSS\"].includes(original.algo_type)\n          ) {\n            const requestedType = order.order_type?.replace(\"STOP_\", \"\");\n            const updateType = normalizeTPSLChildType(\n              requestedType as OrderType | undefined,\n              isPositionalTPSL(original),\n            );\n            if (requestedType && !updateType) {\n              return Promise.reject(\n                new SDKError(\"A TP/SL order type must be LIMIT or MARKET\"),\n              );\n            }\n            const errors = validateTPSLChild(\n              original,\n              {\n                type: updateType,\n                price: order.order_price,\n                trigger_price: order.trigger_price,\n              },\n              {\n                symbol: symbolsInfo[original.symbol](),\n                markPrice: markPrices?.[original.symbol],\n              },\n              findOrder(flattenOrders ?? [], original.parent_algo_order_id),\n            );\n            if (Object.keys(errors).length)\n              return Promise.reject(\n                new SDKError(\n                  Object.values(errors)[0]?.message ?? \"Invalid TP/SL price\",\n                ),\n              );\n            const change = {\n              order_id: original.algo_order_id,\n              ...(updateType && { type: updateType }),\n              quantity: isPositionalTPSL(original)\n                ? undefined\n                : order.order_quantity,\n              price: order.order_price,\n              trigger_price: order.trigger_price,\n            };\n            const nested =\n              original.parent_algo_order_id !== original.root_algo_order_id\n                ? [\n                    {\n                      order_id: original.parent_algo_order_id,\n                      child_orders: [change],\n                    },\n                  ]\n                : [change];\n            const root = flattenOrders?.find(\n              (item) => item.algo_order_id === original.root_algo_order_id,\n            );\n            const child_orders = sanitizeTPSLChildUpdates(nested as any, root);\n            if (!child_orders.length) return Promise.resolve();\n            return doUpdateAlgoOrder({\n              order_id: original.root_algo_order_id,\n              child_orders,\n            });\n          }\n          return doUpdateAlgoOrder({\n            order_id: orderId,\n            price: order.order_price,\n            quantity:\n              original && isPositionalTPSL(original)\n                ? undefined\n                : order.order_quantity,\n            trigger_price: order.trigger_price,\n\n            // trailing stop order fields\n            activated_price: order.activated_price,\n            callback_value: order.callback_value,\n            callback_rate: order.callback_rate,\n            // Include margin_mode if present\n            ...(order.margin_mode && { margin_mode: order.margin_mode }),\n          });\n        default:\n          return doUpdateOrder({ ...order, order_id: orderId });\n      }\n    },\n    [flattenOrders, doUpdateAlgoOrder, doUpdateOrder, markPrices, symbolsInfo],\n  );\n\n  /**\n   * update order\n   */\n  const updateOrder = useCallback(\n    (orderId: string, order: OrderEntity) => {\n      return _updateOrder(orderId, order, \"normalOrder\");\n    },\n    [_updateOrder],\n  );\n\n  /**\n   * update algo order\n   */\n  const updateAlgoOrder = useCallback(\n    (orderId: string, order: OrderEntity) => {\n      return _updateOrder(orderId, order, \"algoOrder\");\n    },\n    [_updateOrder],\n  );\n\n  const _cancelOrder = useCallback(\n    (orderId: number, type: CreateOrderType, symbol?: string) => {\n      switch (type) {\n        case \"algoOrder\":\n          return doCancelAlgolOrder(null, {\n            // @ts-ignore\n            order_id: orderId,\n            symbol,\n            source: `SDK${version}`,\n          }).then((res: any) => {\n            if (res.success) {\n              // ordersResponse.mutate();\n              normalOrdersResponse.mutate();\n              algoOrdersResponse.mutate();\n              return res;\n            } else {\n              throw new Error(res.message);\n            }\n          });\n        default:\n          return doCancelOrder(null, {\n            order_id: orderId,\n            symbol,\n            source: `SDK_${version}`,\n          }).then((res: any) => {\n            if (res.success) {\n              // return ordersResponse.mutate().then(() => {\n              //   return res;\n              // });\n              //Optimistic Updates\n              // ordersResponse.mutate();\n              return res;\n            } else {\n              throw new Error(res.message);\n            }\n          });\n      }\n    },\n    [],\n  );\n  /**\n   * calcel order\n   */\n  const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n    return _cancelOrder(orderId, \"normalOrder\", symbol);\n  }, []);\n\n  /**\n   * calcel algo order\n   */\n  const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n    return _cancelOrder(orderId, \"algoOrder\", symbol);\n  }, []);\n\n  const loadMore = () => {\n    // ordersResponse.setSize(ordersResponse.size + 1);\n  };\n\n  // const cancelTPSLOrder = useCallback((orderId:number, symbol:string)=>{\n  //   return\n  // });\n\n  const cancelTPSLChildOrder = useCallback(\n    (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n      return doUpdateAlgoOrder({\n        order_id: rootAlgoOrderId,\n        child_orders: [\n          {\n            order_id: orderId,\n            is_activated: false,\n          },\n        ],\n      });\n    },\n    [],\n  );\n\n  const updateTPSLOrder = useCallback(\n    async (\n      /**\n       * the root algo order id\n       */\n      orderId: number,\n      childOrders: TPSLChildUpdate[],\n    ) => {\n      if (!Array.isArray(childOrders)) {\n        throw new SDKError(\"Children orders is required\");\n      }\n      const original = flattenOrders?.find(\n        (order) => Number(order.algo_order_id) === Number(orderId),\n      );\n      const validateChildren = (changes: any[], parent: any) => {\n        for (const change of changes) {\n          const child = parent?.child_orders?.find(\n            (item: API.AlgoOrder) =>\n              Number(item.algo_order_id) === Number(change.order_id),\n          );\n          if (!child || change.is_activated === false) continue;\n          if (change.child_orders) validateChildren(change.child_orders, child);\n          else if (\n            [\"TAKE_PROFIT\", \"STOP_LOSS\"].includes(child.algo_type) &&\n            (change.type != null ||\n              change.trigger_price != null ||\n              change.price != null)\n          ) {\n            const errors = validateTPSLChild(\n              child,\n              {\n                type: change.type,\n                price: change.price,\n                trigger_price: change.trigger_price,\n              },\n              {\n                symbol: symbolsInfo[child.symbol ?? parent.symbol](),\n                markPrice: markPrices?.[child.symbol ?? parent.symbol],\n              },\n              parent,\n            );\n            if (Object.keys(errors).length)\n              throw new SDKError(\n                Object.values(errors)[0]?.message ?? \"Invalid TP/SL price\",\n              );\n          }\n        }\n      };\n      validateChildren(childOrders, original);\n      const changes = sanitizeTPSLChildUpdates(childOrders, original);\n      if (!changes.length) return Promise.resolve();\n      return doUpdateAlgoOrder({\n        order_id: orderId,\n        child_orders: changes,\n      });\n    },\n    [flattenOrders, doUpdateAlgoOrder, markPrices, symbolsInfo],\n  );\n\n  const meta = useMemo(() => {\n    return normalOrdersResponse.data?.[0]?.meta;\n  }, [normalOrdersResponse.data?.[0]]);\n\n  const refresh = useCallback(() => {\n    normalOrdersResponse.mutate();\n    algoOrdersResponse.mutate();\n  }, []);\n\n  return [\n    orders,\n    {\n      total,\n      isLoading: normalOrdersResponse.isLoading || algoOrdersResponse.isLoading,\n      refresh,\n      loadMore,\n      cancelAllOrders,\n      cancelAllPendingOrders,\n      cancelAllTPSLOrders,\n      cancelAlgoOrdersByTypes,\n      updateOrder,\n      cancelOrder,\n      updateAlgoOrder,\n      cancelAlgoOrder,\n      cancelTPSLChildOrder,\n      updateTPSLOrder,\n      cancelPostionOrdersByTypes,\n      meta,\n      errors: {\n        cancelOrder: cancelOrderError,\n        updateOrder: updateOrderError,\n        cancelAlgoOrder: cancelAlgoOrderError,\n        updateAlgoOrder: updateAlgoOrderError,\n      },\n      submitting: {\n        cancelOrder: cancelMutating,\n        updateOrder: updateMutating,\n        cancelAlgoOrder: cancelAlgoMutating,\n        updateAlglOrder: updateAlgoMutating,\n      },\n    },\n  ] as const;\n};\n","import useSWRMutation, { type SWRMutationConfiguration } from \"swr/mutation\";\nimport {\n  type MessageFactor,\n  type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { mutate } from \"@orderly.network/net\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useMemoizedFn } from \"..\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { useConfig } from \"../useConfig\";\n\ntype HTTP_METHOD = \"POST\" | \"PUT\" | \"DELETE\" | \"GET\";\n\nconst fetcher = (\n  url: string,\n  options: {\n    arg: {\n      data?: any;\n      params?: any;\n      method: HTTP_METHOD;\n      signature: SignedMessagePayload;\n    };\n  },\n) => {\n  const init: RequestInit = {\n    method: options.arg.method,\n    headers: {\n      ...options.arg.signature,\n    },\n  };\n\n  if (options.arg.data) {\n    init.body = JSON.stringify(options.arg.data);\n  }\n\n  if (\n    typeof options.arg.params === \"object\" &&\n    Object.keys(options.arg.params).length\n  ) {\n    const search = new URLSearchParams(options.arg.params);\n    url = `${url}?${search.toString()}`;\n  }\n\n  return mutate(url, init);\n};\n\ntype SubAccountMutationOptions<T, E> = SWRMutationConfiguration<T, E> & {\n  /** sub account id */\n  accountId?: string;\n};\n\n/**\n * This hook is used to execute API requests for data mutation, such as POST, DELETE, PUT, etc.\n */\nexport const useSubAccountMutation = <T, E>(\n  /**\n   * The URL to send the request to. If the URL does not start with \"http\",\n   * it will be prefixed with the API base URL.\n   */\n  url: string,\n  /**\n   * The HTTP method to use for the request. Defaults to \"POST\".\n   */\n  method: HTTP_METHOD = \"POST\",\n  /**\n   * The configuration object for the mutation.\n   * @see [useSWRMutation](https://swr.vercel.app/docs/mutation#api)\n   *\n   * @link https://swr.vercel.app/docs/mutation#api\n   */\n  options?: SubAccountMutationOptions<T, E>,\n) => {\n  const { accountId, ...restOptions } = options || ({} as any);\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n  let fullUrl = url;\n  if (!url.startsWith(\"http\")) {\n    fullUrl = `${apiBaseUrl}${url}`;\n  }\n\n  const account = useAccountInstance();\n\n  const { trigger, reset, data, error, isMutating } = useSWRMutation(\n    fullUrl,\n    // method === \"POST\" ? fetcher : deleteFetcher,\n    fetcher,\n    restOptions,\n  );\n\n  const mutation = async (\n    /**\n     * The data to send with the request.\n     */\n    data: Record<string, any> | null,\n    /**\n     * The query parameters to send with the request.\n     */\n    params?: Record<string, any>,\n    options?: SubAccountMutationOptions<T, E>,\n  ): Promise<any> => {\n    const { accountId: _accountId, ...restOptions } = options || ({} as any);\n    let newUrl = url;\n    if (typeof params === \"object\" && Object.keys(params).length) {\n      const search = new URLSearchParams(params);\n      newUrl = `${url}?${search.toString()}`;\n    }\n\n    const payload: MessageFactor = {\n      method,\n      url: newUrl,\n      data,\n    };\n\n    const signer = account.signer;\n    const signature = await signer.sign(payload, getTimestamp());\n\n    return trigger(\n      {\n        data,\n        params,\n        method,\n        signature: {\n          ...signature,\n          \"orderly-account-id\": accountId || _accountId || account.accountId,\n        },\n      },\n      restOptions,\n    );\n  };\n\n  return [useMemoizedFn(mutation), { data, error, reset, isMutating }] as const;\n};\n","import { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/perp\";\nimport { API, MarginMode } from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { SymbolsInfo } from \"../../orderly/useSymbolsInfo\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { parseHolding } from \"../../utils/parseHolding\";\n\nexport type Portfolio = {\n  holding?: API.Holding[];\n  totalCollateral: Decimal;\n  freeCollateral: Decimal;\n  freeCollateralUSDCOnly: Decimal;\n  totalValue: Decimal | null;\n  availableBalance: number;\n  unsettledPnL: number;\n  totalUnrealizedROI: number;\n};\n\nexport function formatPortfolio(inputs: {\n  holding?: API.Holding[];\n  positions?: API.PositionsTPSLExt;\n  markPrices: Record<string, number> | null;\n  indexPrices?: Record<string, number> | null;\n  accountInfo?: API.AccountInfo;\n  symbolsInfo?: SymbolsInfo;\n  tokensInfo?: API.Token[];\n}) {\n  const {\n    holding,\n    positions,\n    markPrices,\n    indexPrices,\n    accountInfo,\n    symbolsInfo,\n    tokensInfo,\n  } = inputs;\n\n  if (\n    !holding ||\n    !positions ||\n    !Array.isArray(positions.rows) ||\n    !markPrices ||\n    !indexPrices ||\n    !accountInfo ||\n    symbolsInfo?.isNil\n  ) {\n    return null;\n  }\n\n  const unsettledPnL = pathOr(0, [\"total_unsettled_pnl\"])(positions);\n  const unsettledCrossPnL = pathOr(0, [\"total_unsettled_cross_pnl\"])(positions);\n  const unrealizedPnL = pathOr(0, [\"total_unreal_pnl\"])(positions);\n\n  const [USDC_holding, nonUSDC] = parseHolding(\n    holding,\n    indexPrices,\n    tokensInfo!,\n  );\n\n  const usdc = holding.find((item) => item.token === \"USDC\");\n\n  const totalCollateral = account.totalCollateral({\n    USDCHolding: USDC_holding,\n    nonUSDCHolding: nonUSDC,\n    unsettlementPnL: unsettledCrossPnL,\n    usdcBalancePendingShortQty: usdc?.pending_short ?? 0,\n    usdcBalanceIsolatedOrderFrozen: usdc?.isolated_order_frozen ?? 0,\n  });\n\n  const sumIsolatedMargin = positions.rows.reduce<Decimal>((acc, curr) => {\n    if (curr.margin_mode !== MarginMode.ISOLATED) {\n      return acc;\n    }\n    return acc.add(curr.margin ?? 0);\n  }, zero);\n\n  const totalValue = account.totalValue({\n    totalUnsettlementPnL: unsettledPnL,\n    USDCHolding: USDC_holding,\n    nonUSDCHolding: nonUSDC,\n    totalIsolatedPositionMargin: sumIsolatedMargin.toNumber(),\n  });\n\n  const totalUnrealizedROI = account.totalUnrealizedROI({\n    totalUnrealizedPnL: unrealizedPnL,\n    totalValue: totalValue.toNumber(),\n  });\n  const maxLeverageBySymbol = positions.rows.reduce<Record<string, number>>(\n    (acc, position) => {\n      if (\n        position.margin_mode !== MarginMode.ISOLATED &&\n        position.leverage &&\n        !acc[position.symbol]\n      ) {\n        acc[position.symbol] = position.leverage;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  const totalInitialMarginWithOrders = account.totalInitialMarginWithQty({\n    positions: positions.rows,\n    markPrices,\n    IMR_Factors: accountInfo.imr_factor,\n    maxLeverageBySymbol,\n    symbolInfo: createGetter({ ...symbolsInfo }),\n  });\n\n  const freeCollateral = account.freeCollateral({\n    totalCollateral,\n    totalInitialMarginWithOrders,\n  });\n\n  const freeCollateralUSDCOnly = account.freeCollateralUSDCOnly({\n    freeCollateral,\n    nonUSDCHolding: nonUSDC,\n  });\n\n  const availableBalance = account.availableBalance({\n    USDCHolding: usdc?.holding ?? 0,\n    unsettlementPnL: positions.total_unsettled_pnl ?? 0,\n  });\n\n  return {\n    totalCollateral,\n    totalValue,\n    totalUnrealizedROI,\n    freeCollateral,\n    availableBalance,\n    unsettledPnL,\n    holding,\n    freeCollateralUSDCOnly,\n  };\n}\n","import { propOr } from \"ramda\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { API, MarginMode } from \"@orderly.network/types\";\nimport { zero } from \"@orderly.network/utils\";\nimport { SymbolsInfo } from \"../../orderly/useSymbolsInfo\";\n\nexport function formatPositions(\n  data: API.PositionInfo | API.PositionsTPSLExt,\n  accountInfo?: API.AccountInfo,\n  symbolsInfo?: SymbolsInfo,\n  fundingRates?: Record<string, API.FundingRate>,\n): API.PositionsTPSLExt {\n  if (!accountInfo || !fundingRates || !symbolsInfo) {\n    return data as API.PositionsTPSLExt;\n  }\n\n  let unrealPnL_total = zero,\n    unrealPnL_total_index = zero,\n    notional_total = zero,\n    unsettlementPnL_total = zero,\n    totalUnsettledIsolatedPnl = zero,\n    totalUnsettledCrossPnl = zero;\n\n  const rows = data.rows.map((item) => {\n    const info = symbolsInfo[item.symbol];\n\n    const notional = positions.notional(item.position_qty, item.mark_price);\n    const unrealPnl = positions.unrealizedPnL({\n      qty: item.position_qty,\n      openPrice: item?.average_open_price,\n      // markPrice: unRealizedPrice,\n      markPrice: item.mark_price,\n    });\n    let unrealPnl_index = 0,\n      unrealPnlROI_index = 0;\n\n    const maxLeverage = item.leverage || 1;\n\n    const imr = account.IMR({\n      maxLeverage,\n      baseIMR: info?.(\"base_imr\"),\n      IMR_Factor: accountInfo.imr_factor[item.symbol] as number,\n      positionNotional: notional,\n      ordersNotional: 0,\n      IMR_factor_power: 4 / 5,\n    });\n\n    const unrealPnlROI = positions.unrealizedPnLROI({\n      positionQty: item.position_qty,\n      openPrice: item.average_open_price,\n      IMR: imr,\n      unrealizedPnL: unrealPnl,\n    });\n\n    if (item.index_price) {\n      unrealPnl_index = positions.unrealizedPnL({\n        qty: item.position_qty,\n        openPrice: item?.average_open_price,\n        // markPrice: unRealizedPrice,\n        markPrice: item.index_price,\n      });\n\n      unrealPnlROI_index = positions.unrealizedPnLROI({\n        positionQty: item.position_qty,\n        openPrice: item.average_open_price,\n        IMR: imr,\n        unrealizedPnL: unrealPnl_index,\n      });\n    }\n\n    const unsettlementPnL = positions.unsettlementPnL({\n      positionQty: item.position_qty,\n      markPrice: item.mark_price,\n      costPosition: item.cost_position,\n      sumUnitaryFunding: propOr(\n        0,\n        \"sum_unitary_funding\",\n        fundingRates?.[item.symbol],\n      ),\n      lastSumUnitaryFunding: item.last_sum_unitary_funding,\n    });\n\n    const MMR = positions.MMR({\n      baseMMR: info?.(\"base_mmr\"),\n      baseIMR: info?.(\"base_imr\"),\n      IMRFactor: accountInfo.imr_factor[item.symbol] as number,\n      positionNotional: notional,\n      IMR_factor_power: 4 / 5,\n    });\n\n    unrealPnL_total = unrealPnL_total.add(unrealPnl);\n    unrealPnL_total_index = unrealPnL_total_index.add(unrealPnl_index);\n    notional_total = notional_total.add(notional);\n    unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n    if (item.margin_mode === MarginMode.CROSS) {\n      totalUnsettledCrossPnl = totalUnsettledCrossPnl.add(unsettlementPnL);\n    }\n\n    if (item.margin_mode === MarginMode.ISOLATED) {\n      totalUnsettledIsolatedPnl =\n        totalUnsettledIsolatedPnl.add(unsettlementPnL);\n    }\n\n    return {\n      ...item,\n      mm: positions.maintenanceMargin({\n        positionQty: item.position_qty,\n        markPrice: item.mark_price,\n        MMR,\n      }),\n      mmr: MMR,\n      notional,\n      unsettlement_pnl: unsettlementPnL,\n      unrealized_pnl: unrealPnl,\n      unrealized_pnl_index: unrealPnl_index,\n      unrealized_pnl_ROI: unrealPnlROI,\n      unrealized_pnl_ROI_index: unrealPnlROI_index,\n      unsettled_pnl: unsettlementPnL,\n    };\n  });\n\n  const totalUnrealPnl = unrealPnL_total.toNumber();\n  const totalUnrealPnl_index = unrealPnL_total_index.toNumber();\n  const unsettlementPnL = unsettlementPnL_total.toNumber();\n\n  return {\n    ...data,\n\n    unrealPnL: totalUnrealPnl,\n    total_unreal_pnl: totalUnrealPnl,\n    total_unreal_pnl_index: totalUnrealPnl_index,\n    notional: notional_total.toNumber(),\n\n    unsettledPnL: unsettlementPnL,\n    total_unsettled_pnl: unsettlementPnL,\n    total_unsettled_cross_pnl: totalUnsettledCrossPnl.toNumber(),\n    total_unsettled_isolated_pnl: totalUnsettledIsolatedPnl.toNumber(),\n    rows,\n  };\n}\n\nexport function calcByPrice(\n  positions?: API.PositionInfo,\n  markPrice?: Record<string, number>,\n  indexPrice?: Record<string, number>,\n) {\n  if (!positions || !Array.isArray(positions.rows) || !positions.rows.length) {\n    return positions;\n  }\n\n  return {\n    ...positions,\n    rows: positions.rows.map((item) => ({\n      ...item,\n      mark_price: markPrice?.[item.symbol] || item.mark_price,\n      index_price:\n        indexPrice?.[item.symbol] || item.index_price || item.mark_price,\n    })),\n  };\n}\n","import { useContext, useEffect, useRef } from \"react\";\nimport { WS } from \"@orderly.network/net\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useAccount } from \"../useAccount\";\n\ntype Options = {\n  accountId?: string;\n};\n\nexport const useSubAccountWS = (options: Options) => {\n  const { accountId } = options;\n  const { configStore } = useContext(OrderlyContext);\n  const { state, account } = useAccount();\n\n  const websocketClient = useRef<WS>(\n    new WS({\n      networkId: configStore.get(\"networkId\"),\n      // not need to subscribe public socket\n      // publicUrl: configStore.get(\"publicWsUrl\"),\n      privateUrl: configStore.get(\"privateWsUrl\"),\n      onSigntureRequest: async () => {\n        const signer = account.signer;\n        const timestamp = getTimestamp();\n        const result = await signer.signText(timestamp.toString());\n        return { ...result, timestamp };\n      },\n    }),\n  );\n\n  useEffect(() => {\n    // if accountId is exist and user login, open the private websocket\n    if (\n      accountId &&\n      (state.status === AccountStatusEnum.EnableTrading ||\n        state.status === AccountStatusEnum.EnableTradingWithoutConnected)\n    ) {\n      websocketClient.current.openPrivate(accountId);\n    } else {\n      // when accountId is not exist and user logout, close the private websocket\n      // websocketClient.current.closePrivate(3887, \"switch account\");\n    }\n\n    return () => {\n      // when unmount, close the private websocket\n      websocketClient.current.closePrivate(3887, \"switch account\");\n    };\n  }, [accountId, state.status]);\n\n  return websocketClient.current;\n};\n","import { useEffect, useState } from \"react\";\nimport { mutate } from \"swr\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { useAppStore } from \"../orderly/appStore\";\nimport { useFundingRatesStore } from \"../orderly/useFundingRates\";\nimport { useIndexPricesStream } from \"../orderly/useIndexPricesStream\";\nimport { useMarkPricesStream } from \"../orderly/useMarkPricesStream\";\nimport { POSITION_EMPTY } from \"../orderly/usePositionStream/usePosition.store\";\nimport { useSymbolsInfo } from \"../orderly/useSymbolsInfo\";\nimport { mergeHoldingBalance } from \"../utils/mergeHoldingBalance\";\nimport { object2underscore } from \"../utils/ws\";\nimport { formatPortfolio, Portfolio } from \"./calculator/portfolio\";\nimport { calcByPrice, formatPositions } from \"./calculator/positions\";\nimport { useSubAccountQuery } from \"./useSubAccountQuery\";\nimport { useSubAccountWS } from \"./useSubAccountWS\";\n\nexport const useSubAccountDataObserver = (accountId?: string) => {\n  const ws = useSubAccountWS({ accountId });\n\n  const { data: markPrices } = useMarkPricesStream();\n  const { data: indexPrices } = useIndexPricesStream();\n  const symbolsInfo = useSymbolsInfo();\n  const fundingRates = useFundingRatesStore();\n  const tokensInfo = useAppStore((state) => state.tokensInfo);\n\n  const [holding, setHolding] = useState<API.Holding[]>([]);\n  const [positions, setPositions] = useState(\n    POSITION_EMPTY as API.PositionsTPSLExt,\n  );\n  const [portfolio, setPortfolio] = useState<Portfolio>();\n\n  // need to get sub account info to calculate portfolio and positions\n  const { data: accountInfo } = useSubAccountQuery<API.AccountInfo>(\n    \"/v1/client/info\",\n    { accountId, revalidateOnFocus: false },\n  );\n\n  const { data: positionsInfo } = useSubAccountQuery<API.PositionInfo>(\n    \"/v1/positions\",\n    {\n      accountId,\n      formatter: (data) => data,\n    },\n  );\n\n  const { data: holdingRes } = useSubAccountQuery<API.Holding[]>(\n    \"/v1/client/holding\",\n    {\n      accountId,\n      formatter: (data) => data.holding,\n    },\n  );\n\n  useEffect(() => {\n    const portfolio = formatPortfolio({\n      holding,\n      positions,\n      markPrices,\n      indexPrices,\n      accountInfo,\n      symbolsInfo,\n      tokensInfo,\n    });\n    setPortfolio(portfolio!);\n  }, [\n    holding,\n    positions,\n    markPrices,\n    indexPrices,\n    accountInfo,\n    symbolsInfo,\n    tokensInfo,\n  ]);\n\n  useEffect(() => {\n    if (!positionsInfo) return;\n\n    if (positionsInfo.rows?.length === 0) {\n      setPositions(positionsInfo as API.PositionsTPSLExt);\n      return;\n    }\n    const _positionsInfo = calcByPrice(positionsInfo!, markPrices, indexPrices);\n\n    const _positions = formatPositions(\n      _positionsInfo!,\n      accountInfo,\n      symbolsInfo,\n      fundingRates,\n    );\n\n    setPositions({\n      ..._positions,\n      rows: _positions.rows.filter(\n        (item) =>\n          item.position_qty !== 0 ||\n          item.pending_long_qty !== 0 ||\n          item.pending_short_qty !== 0,\n      ),\n    });\n  }, [\n    positionsInfo,\n    accountInfo,\n    symbolsInfo,\n    fundingRates,\n    markPrices,\n    indexPrices,\n  ]);\n\n  useEffect(() => {\n    if (holdingRes) {\n      setHolding(holdingRes);\n    }\n  }, [holdingRes]);\n\n  useEffect(() => {\n    if (!accountId) return;\n\n    const unsubscribe = ws.privateSubscribe(\n      {\n        id: \"balance\",\n        event: \"subscribe\",\n        topic: \"balance\",\n        ts: Date.now(),\n      },\n      {\n        onMessage: (data: any) => {\n          const holding = data?.balances ?? ({} as Record<string, any>);\n\n          setHolding((prev) => {\n            return prev.map((item) => {\n              if (holding[item.token]) {\n                return mergeHoldingBalance(item, holding[item.token]);\n              }\n              return item;\n            });\n          });\n        },\n      },\n    );\n\n    return () => unsubscribe?.();\n  }, [accountId]);\n\n  useEffect(() => {\n    if (!accountId) return;\n    const key = [\"/v1/positions\", accountId];\n    const unsubscribe = ws.privateSubscribe(\"position\", {\n      onMessage: (data: { positions: WSMessage.Position[] }) => {\n        const { positions: nextPositions } = data;\n\n        mutate(\n          key,\n          (prevPositions: any) => {\n            if (!!prevPositions) {\n              const newPositions = {\n                ...prevPositions,\n                rows: prevPositions.rows.map((row: any) => {\n                  const itemIndex = nextPositions.findIndex(\n                    (item) => item.symbol === row.symbol,\n                  );\n\n                  if (itemIndex >= 0) {\n                    const itemArr = nextPositions.splice(itemIndex, 1);\n\n                    const item = itemArr[0];\n\n                    // ignore the ws update with averageOpenPrice === 0\n                    if (item.averageOpenPrice === 0 && item.positionQty !== 0) {\n                      return row;\n                    }\n                    // console.log(\"---->>>>>>!!!! item\", item);\n\n                    return object2underscore(item);\n                  }\n                  return row;\n                }),\n              };\n\n              if (nextPositions.length > 0) {\n                newPositions.rows = [\n                  ...newPositions.rows,\n                  ...nextPositions.map((item) => {\n                    return object2underscore(item);\n                  }),\n                ];\n              }\n\n              return newPositions;\n            }\n          },\n          {\n            revalidate: false,\n          },\n        );\n      },\n    });\n    return () => unsubscribe?.();\n  }, [accountId]);\n\n  return { portfolio, positions };\n};\n","import { useMemo } from \"react\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useAppStore } from \"../orderly/appStore\";\nimport { useIndexPricesStream } from \"../orderly/useIndexPricesStream\";\n\nconst { maxWithdrawalUSDC, maxWithdrawalOtherCollateral, collateralRatio } =\n  accountPerp;\n\n/**\n * The max withdrawal amount for the token\n * if token is not provided, return the max withdrawal amount for USDC\n */\nexport function useSubAccountMaxWithdrawal(options: {\n  token?: string;\n  unsettledPnL?: number;\n  freeCollateral: Decimal;\n  holdings?: API.Holding[];\n}) {\n  const { token, unsettledPnL, freeCollateral, holdings } = options;\n\n  const tokenInfo = useAppStore((state) =>\n    state.tokensInfo?.find((item) => item.token === token),\n  );\n\n  const { data: indexPrices } = useIndexPricesStream();\n\n  const usdc = useMemo(() => {\n    const usdc = holdings?.find((item) => item.token === \"USDC\");\n    return usdc;\n  }, [holdings]);\n\n  const holding = useMemo(() => {\n    return holdings?.find((item) => item?.token === token);\n  }, [holdings, token]);\n\n  const usdcBalance = usdc?.holding ?? 0;\n\n  const indexPrice = useMemo(() => {\n    if (token === \"USDC\") {\n      return 1;\n    }\n    const symbol = `PERP_${token}_USDC`;\n    return indexPrices[symbol] ?? 0;\n  }, [token, indexPrices]);\n\n  const memoizedCollateralRatio = useMemo(() => {\n    const { base_weight = 0, discount_factor = 0 } = tokenInfo || {};\n    const holdingQty = holding?.holding ?? 0;\n    return collateralRatio({\n      baseWeight: base_weight,\n      discountFactor: discount_factor,\n      collateralQty: holdingQty,\n      collateralCap: tokenInfo?.user_max_qty ?? holdingQty,\n      indexPrice,\n    });\n  }, [holdings, tokenInfo, indexPrice, token, holding]);\n\n  const maxAmount = useMemo(() => {\n    if (token === \"USDC\") {\n      return maxWithdrawalUSDC({\n        USDCBalance: usdcBalance,\n        freeCollateral,\n        upnl: unsettledPnL ?? 0,\n      });\n    }\n    return maxWithdrawalOtherCollateral({\n      USDCBalance: usdcBalance,\n      collateralQty: holding?.holding ?? 0,\n      freeCollateral,\n      indexPrice,\n      weight: memoizedCollateralRatio,\n    }).toNumber();\n  }, [\n    usdcBalance,\n    freeCollateral,\n    unsettledPnL,\n    memoizedCollateralRatio,\n    indexPrice,\n    token,\n    holding,\n  ]);\n\n  return maxAmount;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport {\n  OrderSide,\n  OrderEntity,\n  OrderStatus,\n  API,\n  AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { SDKError } from \"@orderly.network/types\";\nimport {\n  sanitizeTPSLChildUpdates,\n  TPSLChildUpdate,\n} from \"../../services/orderCreator/tpslOrderUpdates\";\nimport { useSubAccountMutation, useSubAccountQuery } from \"../../subAccount\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport version from \"../../version\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\n\ntype CreateOrderType = \"normalOrder\" | \"algoOrder\";\n\ntype CombineOrderType = AlgoOrderRootType | \"ALL\";\n\n/**\n * TODO: let useOrderStream support pass accountId, it will be better to use this hook\n */\nexport const useSubAccountAlgoOrderStream = (\n  /**\n   * Orders query params\n   */\n  params: {\n    symbol?: string;\n    status?: OrderStatus;\n    page?: number;\n    size?: number;\n    side?: OrderSide;\n    /**\n     * Include the order type\n     * @default [\"ALL\"]\n     */\n    includes?: CombineOrderType[];\n    /**\n     * Exclude the order type\n     * @default []\n     */\n    excludes?: CombineOrderType[];\n    dateRange?: {\n      from?: Date;\n      to?: Date;\n    };\n  },\n  options: { accountId: string },\n) => {\n  const { status } = params;\n  const accountId = options.accountId;\n  const ee = useEventEmitter();\n\n  const [includes, setIncludes] = useState<CombineOrderType[]>(\n    params.includes ?? [\"ALL\"],\n  );\n  const [excludes, setExcludes] = useState<CombineOrderType[]>(\n    params.excludes ?? [],\n  );\n\n  const { data: markPrices } = useMarkPricesStream();\n\n  const [doCancelOrder, { isMutating: cancelMutating }] = useSubAccountMutation(\n    \"/v1/order\",\n    \"DELETE\",\n    { accountId },\n  );\n\n  const [doCancelAllOrders] = useSubAccountMutation(\"/v1/orders\", \"DELETE\", {\n    accountId,\n  });\n\n  const [doUpdateOrder, { isMutating: updateMutating }] = useSubAccountMutation(\n    \"/v1/order\",\n    \"PUT\",\n    { accountId },\n  );\n\n  const [doCancelAlgolOrder, { isMutating: cancelAlgoMutating }] =\n    useSubAccountMutation(\"/v1/algo/order\", \"DELETE\", { accountId });\n\n  const [doCancelAllAlgoOrders] = useSubAccountMutation(\n    \"/v1/algo/orders\",\n    \"DELETE\",\n    {\n      accountId,\n    },\n  );\n\n  const [doUpdateAlgoOrder, { isMutating: updateAlgoMutating }] =\n    useSubAccountMutation(\"/v1/algo/order\", \"PUT\", { accountId });\n\n  const algoOrderKey = useMemo(() => {\n    const { status, symbol, side, size = 50, page = 1, dateRange } = params;\n\n    const search = new URLSearchParams([\n      [\"size\", size.toString()],\n      [\"page\", `${page}`],\n    ]);\n\n    if (dateRange) {\n      if (dateRange.from) {\n        search.set(\"start_t\", `${dateRange.from.getTime()}`);\n      }\n\n      if (dateRange.to) {\n        search.set(\"end_t\", `${dateRange.to.getTime()}`);\n      }\n    }\n\n    if (page) {\n      search.set(\"page\", `${page}`);\n    }\n\n    if (status) {\n      search.set(`status`, status);\n    }\n\n    if (symbol) {\n      search.set(`symbol`, symbol);\n    }\n\n    if (side) {\n      search.set(`side`, side);\n    }\n\n    return `/v1/algo/orders?${search.toString()}`;\n  }, [params]);\n\n  const { data, mutate, isLoading } = useSubAccountQuery(\n    accountId ? algoOrderKey : null,\n    {\n      accountId: options.accountId,\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n    },\n  );\n\n  const flattenOrders = useMemo(() => {\n    const orders = data?.rows || [];\n\n    if (includes.includes(\"ALL\") && excludes.length === 0) {\n      return orders;\n    }\n\n    if (includes.includes(\"ALL\") && excludes.length > 0) {\n      return orders?.filter((item: any) => !excludes.includes(item.algo_type));\n    }\n\n    if (includes.length > 0 && excludes.length === 0) {\n      return orders?.filter((item: any) => includes.includes(item.algo_type));\n    }\n\n    if (includes.length > 0 && excludes.length > 0) {\n      return orders?.filter(\n        (item: any) =>\n          includes.includes(item.algo_type) &&\n          !excludes.includes(item.algo_type),\n      );\n    }\n\n    return orders;\n  }, [data, includes, excludes]);\n\n  const orders = useMemo(() => {\n    if (!flattenOrders) {\n      return null;\n    }\n\n    if (status !== OrderStatus.NEW && status !== OrderStatus.INCOMPLETE) {\n      return flattenOrders;\n    }\n    return flattenOrders.map((item: any) => {\n      const order = {\n        ...item,\n        mark_price: (markPrices ?? ({} as any))[item.symbol] ?? 0,\n      };\n\n      if (\n        order.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL ||\n        order.algo_type === AlgoOrderRootType.TP_SL\n      ) {\n        const childQuantity = order.child_orders?.[0]?.quantity;\n        if (childQuantity !== undefined) {\n          order.quantity = childQuantity;\n        }\n      }\n      return order;\n    });\n  }, [flattenOrders, markPrices, status]);\n\n  const cancelAlgoOrdersByTypes = (\n    types: AlgoOrderRootType[],\n    symbol?: string,\n  ) => {\n    if (!types) {\n      throw new SDKError(\"Types is required\");\n    }\n\n    if (!Array.isArray(types)) {\n      throw new SDKError(\"Types should be an array\");\n    }\n\n    return Promise.all(\n      types.map((type) => {\n        return doCancelAllAlgoOrders(null, {\n          algo_type: type,\n          ...(symbol && { symbol }),\n        });\n      }),\n    );\n  };\n\n  /**\n   * cancel all orders\n   */\n  const cancelAllOrders = useCallback(() => {\n    return Promise.all([\n      doCancelAllAlgoOrders(null, { algo_type: AlgoOrderRootType.STOP }),\n      doCancelAllAlgoOrders(null, {\n        algo_type: AlgoOrderRootType.TRAILING_STOP,\n      }),\n    ]);\n  }, [data]);\n\n  const cancelAllPendingOrders = useCallback((symbol?: string) => {\n    doCancelAllOrders(null, { ...(symbol && { symbol }) });\n  }, []);\n\n  const cancelPostionOrdersByTypes = useCallback(\n    (symbol: string, types: AlgoOrderRootType[]) => {\n      return doCancelAllAlgoOrders(null, {\n        symbol,\n        algo_type: types,\n      });\n    },\n    [data],\n  );\n\n  const cancelAllTPSLOrders = useCallback(\n    (symbol?: string) => {\n      return cancelAlgoOrdersByTypes(\n        [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n        symbol,\n      );\n    },\n    [data],\n  );\n\n  const _updateOrder = useCallback(\n    (orderId: string, order: OrderEntity, type: CreateOrderType) => {\n      switch (type) {\n        case \"algoOrder\":\n          return doUpdateAlgoOrder({\n            order_id: orderId,\n            price: order.order_price,\n            quantity: order.order_quantity,\n            trigger_price: order.trigger_price,\n\n            // trailing stop order fields\n            activated_price: order.activated_price,\n            callback_value: order.callback_value,\n            callback_rate: order.callback_rate,\n            // include margin_mode if present (align with useOrderStream)\n            ...(order.margin_mode && { margin_mode: order.margin_mode }),\n          });\n        default:\n          return doUpdateOrder({ ...order, order_id: orderId });\n      }\n    },\n    [],\n  );\n\n  /**\n   * update order\n   */\n  const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n    return _updateOrder(orderId, order, \"normalOrder\");\n  }, []);\n\n  /**\n   * update algo order\n   */\n  const updateAlgoOrder = useCallback((orderId: string, order: OrderEntity) => {\n    return _updateOrder(orderId, order, \"algoOrder\");\n  }, []);\n\n  const _cancelOrder = useCallback(\n    (orderId: number, type: CreateOrderType, symbol?: string) => {\n      switch (type) {\n        case \"algoOrder\":\n          return doCancelAlgolOrder(null, {\n            // @ts-ignore\n            order_id: orderId,\n            symbol,\n            source: `SDK${version}`,\n          }).then((res: any) => {\n            if (res.success) {\n              mutate();\n              return res;\n            } else {\n              throw new Error(res.message);\n            }\n          });\n        default:\n          return doCancelOrder(null, {\n            order_id: orderId,\n            symbol,\n            source: `SDK_${version}`,\n          }).then((res: any) => {\n            if (res.success) {\n              return res;\n            } else {\n              throw new Error(res.message);\n            }\n          });\n      }\n    },\n    [],\n  );\n\n  /**\n   * calcel order\n   */\n  const cancelOrder = useCallback((orderId: number, symbol?: string) => {\n    return _cancelOrder(orderId, \"normalOrder\", symbol);\n  }, []);\n\n  /**\n   * calcel algo order\n   */\n  const cancelAlgoOrder = useCallback((orderId: number, symbol?: string) => {\n    return _cancelOrder(orderId, \"algoOrder\", symbol);\n  }, []);\n\n  const cancelTPSLChildOrder = useCallback(\n    (orderId: number, rootAlgoOrderId: number): Promise<any> => {\n      return doUpdateAlgoOrder({\n        order_id: rootAlgoOrderId,\n        child_orders: [\n          {\n            order_id: orderId,\n            is_activated: false,\n          },\n        ],\n      });\n    },\n    [],\n  );\n\n  const updateTPSLOrder = useCallback(\n    (\n      /**\n       * the root algo order id\n       */\n      orderId: number,\n      childOrders: TPSLChildUpdate[],\n    ) => {\n      if (!Array.isArray(childOrders)) {\n        throw new SDKError(\"Children orders is required\");\n      }\n      const original = flattenOrders?.find(\n        (order: API.AlgoOrder) =>\n          Number(order.algo_order_id) === Number(orderId),\n      );\n      const changes = sanitizeTPSLChildUpdates(childOrders, original);\n      if (!changes.length) return Promise.resolve();\n      return doUpdateAlgoOrder({\n        order_id: orderId,\n        child_orders: changes,\n      });\n    },\n    [flattenOrders, doUpdateAlgoOrder],\n  );\n\n  const refresh = useDebouncedCallback(() => {\n    mutate();\n  }, 200);\n\n  useEffect(() => {\n    const handler = (position: API.PositionExt) => {\n      if (position.account_id === accountId) {\n        refresh();\n      }\n    };\n\n    ee.on(\"tpsl:updateOrder\", handler);\n\n    return () => {\n      ee.off(\"tpsl:updateOrder\", handler);\n    };\n  }, [ee, accountId]);\n\n  return [\n    orders,\n    {\n      isLoading,\n      refresh,\n      cancelAllOrders,\n      cancelAllPendingOrders,\n      cancelAllTPSLOrders,\n      cancelAlgoOrdersByTypes,\n      updateOrder,\n      cancelOrder,\n      updateAlgoOrder,\n      cancelAlgoOrder,\n      cancelTPSLChildOrder,\n      updateTPSLOrder,\n      cancelPostionOrdersByTypes,\n      submitting: {\n        cancelOrder: cancelMutating,\n        updateOrder: updateMutating,\n        cancelAlgoOrder: cancelAlgoMutating,\n        updateAlglOrder: updateAlgoMutating,\n      },\n    },\n  ] as const;\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { API, SDKError } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\n\nexport interface MarketTradeStreamOptions {\n  limit?: number;\n}\n\nexport const useMarketTradeStream = (\n  symbol: string,\n  options: MarketTradeStreamOptions = {},\n) => {\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n\n  const [trades, setTrades] = useState<API.Trade[]>([]);\n  const [isLoading, setIsLoading] = useState<boolean>(false);\n\n  const symbolRef = useRef<string>(symbol);\n  symbolRef.current = symbol;\n\n  const { limit = 50 } = options;\n\n  const ws = useWS();\n\n  useEffect(() => {\n    setIsLoading(true);\n    setTrades(() => []);\n    ws.onceSubscribe(\n      {\n        id: `${symbol}@trade`,\n        event: \"request\",\n        params: {\n          type: \"trade\",\n          symbol: symbol,\n          limit,\n        },\n      },\n      {\n        onMessage: (data: any) => {\n          setIsLoading(false);\n          setTrades(() => data);\n        },\n      },\n    );\n  }, [symbol]);\n\n  useEffect(() => {\n    const unsubscribe = ws.subscribe(\n      {\n        id: `${symbol}@trade`,\n        event: \"subscribe\",\n        topic: `${symbol}@trade`,\n        ts: getTimestamp(),\n      },\n      {\n        onMessage: (data: any) => {\n          // when current symbol is not the same as the ws symbol, skip update data and auto unsubscribe old symbol ws\n          if (data.symbol !== symbolRef.current) {\n            unsubscribe?.();\n            return;\n          }\n          setTrades((prev) => {\n            const arr = [{ ...data, ts: getTimestamp() }, ...prev];\n            if (arr.length > limit) {\n              arr.pop();\n            }\n            return arr;\n          });\n        },\n      },\n    );\n\n    return () => {\n      unsubscribe?.();\n    };\n  }, [symbol]);\n\n  return { data: trades, isLoading };\n};\n","import { type API } from \"@orderly.network/types\";\nimport { useAppStore } from \"./appStore\";\n\n/**\n * The return type of useCollateral hook, containing account collateral information\n */\nexport type CollateralOutputs = {\n  /**\n   * Total collateral value in the account\n   *\n   * This includes all assets that can be used as margin\n   */\n  totalCollateral: number;\n  /**\n   * Available collateral that can be used for new positions\n   *\n   * Calculated as: totalCollateral - margin requirements\n   */\n  freeCollateral: number;\n  /**\n   * Legacy free collateral metric backed only by USDC\n   *\n   * Isolated-margin trading limits use `freeCollateral` instead. This field is\n   * retained for backward compatibility.\n   */\n  freeCollateralUSDCOnly: number;\n  /**\n   * Total portfolio value including all positions and collateral\n   *\n   * Can be null if data is not available\n   */\n  totalValue: number | null;\n  /**\n   * Current available balance that can be withdrawn\n   *\n   * Excludes locked collateral and pending settlements\n   */\n  availableBalance: number;\n  /**\n   * Unrealized profit and loss across all open positions\n   *\n   * Positive value indicates profit, negative indicates loss\n   */\n  unsettledPnL: number;\n  /**\n   * List of holdings in the account\n   *\n   * Each holding represents a specific token and its quantity\n   */\n  holding?: API.Holding[];\n  /**\n   * Detailed account information and settings\n   *\n   * Contains account configuration, limits and risk parameters\n   */\n  accountInfo?: API.AccountInfo;\n  /**\n   * USDC holding in the account\n   */\n  usdcHolding: number;\n  // positions: API.Position[];\n};\n\n// const positionsPath = pathOr([], [0, \"rows\"]);\n// const totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\n/**\n *  Hook to get and calculate collateral-related data for an account\n * @example\n * ```typescript\n * const {\n *  totalCollateral,\n *  freeCollateral,\n *  totalValue,\n *  availableBalance,\n *  unsettledPnL,\n *  accountInfo,\n * } = useCollateral({ dp: 4 });\n * ```\n */\nexport const useCollateral = (\n  options: {\n    /**\n     * Decimal precision for numerical values (default: 6)\n     * */\n    dp: number;\n  } = { dp: 6 },\n): CollateralOutputs => {\n  const { dp } = options;\n  const {\n    totalCollateral,\n    totalValue,\n    freeCollateral,\n    freeCollateralUSDCOnly,\n    availableBalance,\n    unsettledPnL,\n    holding,\n    usdcHolding,\n  } = useAppStore((state) => state.portfolio);\n  const accountInfo = useAppStore((state) => state.accountInfo);\n  return {\n    totalCollateral: totalCollateral.toDecimalPlaces(dp).toNumber(),\n    freeCollateral: freeCollateral.toDecimalPlaces(dp).toNumber(),\n    freeCollateralUSDCOnly: freeCollateralUSDCOnly\n      .toDecimalPlaces(dp)\n      .toNumber(),\n    totalValue: totalValue?.toDecimalPlaces(dp).toNumber() ?? null,\n    availableBalance,\n    unsettledPnL,\n    accountInfo,\n    holding,\n    usdcHolding,\n    // @hidden\n    // positions: positionsPath(positions),\n  };\n};\n","import { account } from \"@orderly.network/perp\";\nimport { type API, MarginMode, OrderSide } from \"@orderly.network/types\";\n\ntype IsolatedPendingOrder = account.IsolatedPendingOrder;\n\n/**\n * Map a symbol's open orders (normal + algo) to risk-engine style pending\n * order inputs for the isolated frozen simulation.\n *\n * - reduce-only orders never open positions and are excluded;\n * - cross orders are excluded (their margin is not isolated frozen);\n * - remaining quantity = `quantity - total_executed_quantity`;\n * - reference price = limit price, falling back to the stop trigger price,\n *   then to `fallbackPrice` (mark price) when neither is usable.\n */\nexport const toIsolatedPendingOrders = (\n  orders: Array<API.Order | API.AlgoOrder> | null | undefined,\n  inputs: { symbol: string; fallbackPrice: number },\n): IsolatedPendingOrder[] => {\n  const { symbol, fallbackPrice } = inputs;\n  if (!Array.isArray(orders) || orders.length === 0) {\n    return [];\n  }\n\n  const result: IsolatedPendingOrder[] = [];\n\n  for (const order of orders) {\n    if (order.symbol !== symbol) continue;\n    if (order.margin_mode !== MarginMode.ISOLATED) continue;\n    if (order.reduce_only) continue;\n\n    const remainingQty =\n      Number(order.quantity) - Number(order.total_executed_quantity ?? 0);\n    const rawPrice =\n      (order as API.Order).price ?? (order as API.AlgoOrder).trigger_price;\n    const referencePrice =\n      Number.isFinite(Number(rawPrice)) && Number(rawPrice) > 0\n        ? Number(rawPrice)\n        : fallbackPrice;\n\n    if (\n      !Number.isFinite(remainingQty) ||\n      remainingQty <= 0 ||\n      !Number.isFinite(referencePrice) ||\n      referencePrice <= 0\n    ) {\n      continue;\n    }\n\n    result.push({\n      side: order.side === OrderSide.SELL ? OrderSide.SELL : OrderSide.BUY,\n      referencePrice,\n      quantity: remainingQty,\n      createdTime: order.created_time ?? 0,\n    });\n  }\n\n  return result;\n};\n\n/** Quantities below this are treated as dust when comparing totals. */\nconst DUST_QTY = 1e-8;\n\n/**\n * Resolve per-order pending inputs, falling back to `undefined` (aggregate\n * approximation) when the order stream cannot be trusted:\n *\n * - the stream has not loaded yet; or\n * - the position aggregates report pending quantity the stream does not\n *   positively cover as isolated — WebSocket order payloads may omit\n *   `margin_mode`, and the query only covers the first page (100 orders).\n *\n * Only orders explicitly marked `ISOLATED` count toward the stream side\n * (reduce-only included, since the aggregates contain them but they never\n * freeze margin). Quantity the aggregates claim beyond that — including\n * `margin_mode`-less orders the mapper would drop — forces the conservative\n * fallback, because under-counting pending orders would under-freeze margin.\n */\nexport const resolveIsolatedPendingOrders = (\n  orders: Array<API.Order | API.AlgoOrder> | null | undefined,\n  inputs: {\n    symbol: string;\n    fallbackPrice: number;\n    /** Isolated position aggregate of pending BUY quantity. */\n    pendingLongQty: number;\n    /** Isolated position aggregate of pending SELL quantity. */\n    pendingShortQty: number;\n  },\n): IsolatedPendingOrder[] | undefined => {\n  if (orders === null || orders === undefined) {\n    return undefined;\n  }\n\n  let streamLongQty = 0;\n  let streamShortQty = 0;\n\n  for (const order of orders) {\n    if (order.symbol !== inputs.symbol) continue;\n    if (order.margin_mode !== MarginMode.ISOLATED) continue;\n\n    const remainingQty =\n      Number(order.quantity) - Number(order.total_executed_quantity ?? 0);\n    if (!Number.isFinite(remainingQty) || remainingQty <= 0) continue;\n\n    if (order.side === OrderSide.SELL) {\n      streamShortQty += remainingQty;\n    } else {\n      streamLongQty += remainingQty;\n    }\n  }\n\n  const missingQty =\n    Math.max(0, inputs.pendingLongQty - streamLongQty) +\n    Math.max(0, inputs.pendingShortQty - streamShortQty);\n\n  if (missingQty > DUST_QTY) {\n    return undefined;\n  }\n\n  return toIsolatedPendingOrders(orders, inputs);\n};\n","import { MarginMode } from \"@orderly.network/types\";\nimport { useSymbolLeverageMap } from \"./useSymbolLeverageMap\";\n\n/**\n * A hook to fetch and subscribe to leverage for a given trading symbol.\n * It initially fetches the leverage data via a private query and then listens for real-time\n * updates through a WebSocket subscription to keep the leverage value current.\n *\n * @param symbol - The trading symbol (e.g. \"PERP_BTC_USDC\")\n * @param marginMode - Optional margin mode (CROSS or ISOLATED). If not provided, defaults to CROSS.\n * @returns The current leverage value associated with the symbol, or undefined if not available\n *\n * @example\n * ```typescript\n * const leverage = useLeverageBySymbol(\"PERP_BTC_USDC\");\n * const isolatedLeverage = useLeverageBySymbol(\"PERP_BTC_USDC\", MarginMode.ISOLATED);\n * ```\n */\nexport const useLeverageBySymbol = (\n  symbol?: string,\n  marginMode?: MarginMode,\n) => {\n  const { getSymbolLeverage } = useSymbolLeverageMap();\n\n  return getSymbolLeverage(symbol, marginMode);\n};\n","import { useMemo } from \"react\";\nimport { account, positions as positionsPerp } from \"@orderly.network/perp\";\nimport {\n  type API,\n  MarginMode,\n  OrderSide,\n  OrderStatus,\n} from \"@orderly.network/types\";\nimport { resolveIsolatedPendingOrders } from \"../utils/order/isolatedPendingOrders\";\nimport { useAccountInfo } from \"./appStore\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useLeverageBySymbol } from \"./useLeverageBySymbol\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useOrderStream } from \"./useOrderStream/useOrderStream\";\nimport { usePositions } from \"./usePositionStream/usePosition.store\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\n/**\n * Options for useMaxQty hook\n */\nexport interface UseMaxQtyOptions {\n  /**\n   * Executes buy or sell orders which only reduce a current position.\n   * If true, only allows orders that reduce current position\n   * @default false\n   */\n  reduceOnly?: boolean;\n  /**\n   * Margin mode (\"CROSS\" or \"ISOLATED\")\n   * @default MarginMode.CROSS\n   */\n  marginMode?: MarginMode;\n  /**\n   * Optional reference price for the **new order** when using isolated margin.\n   *\n   * If provided, this value will be used as `currentOrderReferencePrice`\n   * in the isolated-margin max quantity formula instead of the mark price.\n   * When omitted, the hook will fall back to `markPrice`.\n   */\n  currentOrderReferencePrice?: number;\n}\n\n/**\n * A hook that calculates the maximum tradeable quantity for a given symbol and side\n * @returns Maximum tradeable quantity\n * @example\n * ```tsx\n * // Get max buy quantity for BTC (backward compatible)\n * const maxBuyQty = useMaxQty(\"PERP_BTC_USDC\", OrderSide.BUY);\n *\n * // Get max sell quantity with reduce only (backward compatible)\n * const maxSellQty = useMaxQty(\"PERP_BTC_USDC\", OrderSide.SELL, true);\n *\n * // New object parameter style (recommended)\n * const maxQty = useMaxQty(\"PERP_BTC_USDC\", OrderSide.BUY, {\n *   reduceOnly: false,\n *   marginMode: MarginMode.ISOLATED,\n * });\n *\n * // Only specify marginMode without reduceOnly\n * const maxQty = useMaxQty(\"PERP_BTC_USDC\", OrderSide.BUY, {\n *   marginMode: MarginMode.ISOLATED,\n * });\n * ```\n */\nexport function useMaxQty(\n  symbol: string,\n  side: OrderSide,\n  reduceOnly?: boolean,\n  marginMode?: MarginMode,\n): number;\nexport function useMaxQty(\n  symbol: string,\n  side: OrderSide,\n  options?: UseMaxQtyOptions,\n): number;\nexport function useMaxQty(\n  /**\n   * Trading pair symbol (e.g. \"PERP_BTC_USDC\")\n   */\n  symbol: string,\n  /**\n   * Order side (\"BUY\" or \"SELL\")\n   */\n  side: OrderSide,\n  /**\n   * Either reduceOnly boolean (backward compatible) or options object (recommended)\n   */\n  reduceOnlyOrOptions?: boolean | UseMaxQtyOptions,\n  /**\n   * Margin mode (only used when reduceOnlyOrOptions is boolean, for backward compatibility)\n   */\n  marginMode?: MarginMode,\n): number {\n  // Normalize parameters: handle both old (positional) and new (object) API\n  const reduceOnly: boolean =\n    typeof reduceOnlyOrOptions === \"object\" && reduceOnlyOrOptions !== null\n      ? (reduceOnlyOrOptions.reduceOnly ?? false)\n      : (reduceOnlyOrOptions ?? false);\n\n  const finalMarginMode: MarginMode =\n    typeof reduceOnlyOrOptions === \"object\" && reduceOnlyOrOptions !== null\n      ? (reduceOnlyOrOptions.marginMode ?? MarginMode.CROSS)\n      : (marginMode ?? MarginMode.CROSS);\n\n  const currentOrderReferencePrice =\n    typeof reduceOnlyOrOptions === \"object\" &&\n    reduceOnlyOrOptions !== null &&\n    typeof reduceOnlyOrOptions.currentOrderReferencePrice === \"number\" &&\n    reduceOnlyOrOptions.currentOrderReferencePrice > 0\n      ? reduceOnlyOrOptions.currentOrderReferencePrice\n      : undefined;\n\n  const positions = usePositions();\n\n  const accountInfo = useAccountInfo();\n\n  const symbolInfo = useSymbolsInfo();\n\n  const { totalCollateral, freeCollateral } = useCollateral();\n\n  const { data: markPrices } = useMarkPricesStream();\n\n  const symbolLeverage = useLeverageBySymbol(symbol, finalMarginMode);\n\n  // Per-order pending data for the isolated frozen simulation. `null` means\n  // the stream has not loaded yet and the calculation falls back to the\n  // aggregate pending quantities on the position.\n  const [symbolOpenOrders] = useOrderStream({\n    symbol,\n    status: OrderStatus.INCOMPLETE,\n    size: 100,\n  });\n\n  const maxQty = useMemo(() => {\n    // Early return for invalid symbol\n    if (!symbol) return 0;\n\n    // Early return if required data is not available\n    if (!markPrices || !markPrices[symbol] || !accountInfo || !positions) {\n      return 0;\n    }\n\n    const positionsArray = (positions === null ? [] : positions).filter(\n      (position) => position.margin_mode === finalMarginMode,\n    );\n    const positionQty = account.getQtyFromPositions(positionsArray, symbol);\n\n    /**\n     * Reduce-only mode handling:\n     * For long positions (positionQty > 0):\n     * - Buy orders return 0 (cannot increase long position)\n     * - Sell orders return absolute position quantity (can close long position)\n     * For short positions (positionQty < 0):\n     * - Buy orders return absolute position quantity (can close short position)\n     * - Sell orders return 0 (cannot increase short position)\n     */\n    if (reduceOnly) {\n      if (positionQty === 0) return 0;\n      // For long position: BUY returns 0, SELL returns positionQty\n      // For short position: BUY returns |positionQty|, SELL returns 0\n      return side === OrderSide.BUY\n        ? positionQty < 0\n          ? Math.abs(positionQty)\n          : 0\n        : positionQty > 0\n          ? positionQty\n          : 0;\n    }\n\n    const getSymbolInfo = symbolInfo[symbol];\n\n    // Find current symbol position and filter other positions in a single pass\n    let currentSymbolPosition: API.Position | undefined;\n    const otherPositions: API.Position[] = [];\n\n    for (const position of positionsArray) {\n      if (position.symbol === symbol) {\n        currentSymbolPosition = position;\n      } else {\n        otherPositions.push(position);\n      }\n    }\n\n    // Extract common parameters used by both maxQty and maxQtyForIsolatedMargin\n    const markPrice = markPrices[symbol];\n\n    const baseIMR = getSymbolInfo(\"base_imr\") ?? 0;\n    const IMR_Factor = accountInfo.imr_factor[symbol] ?? 0;\n    const leverage = symbolLeverage || currentSymbolPosition?.leverage || 1;\n\n    // current symbol buy/sell order quantities\n    const buyOrdersQty = currentSymbolPosition?.pending_long_qty ?? 0;\n    const sellOrdersQty = currentSymbolPosition?.pending_short_qty ?? 0;\n\n    if (finalMarginMode === MarginMode.ISOLATED) {\n      const availableBalance = freeCollateral;\n\n      // Per-order data when the order stream is trusted; otherwise\n      // approximate the aggregate pending quantities at mark price. Either\n      // way the flip binary search runs the risk-engine close/open\n      // allocation, never the legacy full-notional formula.\n      const isolatedPendingOrders = resolveIsolatedPendingOrders(\n        symbolOpenOrders,\n        {\n          symbol,\n          fallbackPrice: markPrice,\n          pendingLongQty: buyOrdersQty,\n          pendingShortQty: sellOrdersQty,\n        },\n      ) ?? [\n        ...(buyOrdersQty > 0\n          ? [\n              {\n                side: OrderSide.BUY,\n                referencePrice: markPrice,\n                quantity: buyOrdersQty,\n              },\n            ]\n          : []),\n        ...(sellOrdersQty > 0\n          ? [\n              {\n                side: OrderSide.SELL,\n                referencePrice: markPrice,\n                quantity: sellOrdersQty,\n              },\n            ]\n          : []),\n      ];\n\n      // Build pending orders arrays for the simplified same-direction\n      // formula (per-order prices when the stream is trusted).\n      const pendingLongOrders = isolatedPendingOrders\n        .filter((order) => order.side === OrderSide.BUY)\n        .map(({ referencePrice, quantity }) => ({\n          referencePrice,\n          quantity,\n        }));\n\n      const pendingSellOrders = isolatedPendingOrders\n        .filter((order) => order.side === OrderSide.SELL)\n        .map(({ referencePrice, quantity }) => ({\n          referencePrice,\n          quantity,\n        }));\n\n      // Legacy aggregate-frozen inputs, ignored by the allocation-based\n      // binary search; kept only for the maxQtyForIsolatedMargin API shape.\n      const isoOrderFrozenLong = 0;\n      const isoOrderFrozenShort = 0;\n\n      // Get or calculate symbolMaxNotional\n      // Priority: accountInfo.max_notional[symbol] > calculated maxPositionNotional\n      const symbolMaxNotional =\n        accountInfo.max_notional?.[symbol] ??\n        positionsPerp.maxPositionNotional({\n          leverage,\n          IMRFactor: IMR_Factor,\n        });\n\n      const effectiveOrderReferencePrice =\n        currentOrderReferencePrice ?? markPrice;\n\n      return account.maxQtyForIsolatedMargin({\n        symbol,\n        orderSide: side,\n        currentOrderReferencePrice: effectiveOrderReferencePrice,\n        availableBalance,\n        leverage,\n        baseIMR,\n        IMR_Factor,\n        markPrice,\n        positionQty,\n        pendingLongOrders,\n        pendingSellOrders,\n        isoOrderFrozenLong,\n        isoOrderFrozenShort,\n        isolatedPendingOrders,\n        symbolMaxNotional,\n      });\n    }\n\n    // Only calculate otherIMs for CROSS margin mode (not needed for ISOLATED)\n    const otherIMs = account.otherIMs({\n      positions: otherPositions,\n      symbolInfo,\n      markPrices,\n      IMR_Factors: accountInfo.imr_factor,\n    });\n\n    return account.maxQty(side, {\n      markPrice,\n      symbol,\n      baseMaxQty: getSymbolInfo(\"base_max\"),\n      totalCollateral,\n      maxLeverage: leverage,\n      takerFeeRate: accountInfo.futures_taker_fee_rate,\n      baseIMR,\n      otherIMs,\n      positionQty,\n      buyOrdersQty,\n      sellOrdersQty,\n      IMR_Factor,\n    });\n  }, [\n    symbol,\n    positions,\n    reduceOnly,\n    markPrices,\n    accountInfo,\n    symbolInfo,\n    side,\n    totalCollateral,\n    freeCollateral,\n    finalMarginMode,\n    symbolLeverage,\n    currentOrderReferencePrice,\n    symbolOpenOrders,\n  ]);\n\n  return Math.max(maxQty, 0);\n}\n","import { useMemo } from \"react\";\nimport { account } from \"@orderly.network/perp\";\nimport { AccountStatusEnum, EMPTY_LIST } from \"@orderly.network/types\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useAccount } from \"../useAccount\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { usePositionStore } from \"./usePositionStream/usePosition.store\";\n\n/**\n * The return type of useMarginRatio hook\n */\nexport type MarginRatioReturn = {\n  /**\n   * Current leverage of the account, null if trading is not enabled\n   */\n  currentLeverage: number | null;\n  /**\n   * Current margin ratio of the account\n   */\n  marginRatio: number;\n  /**\n   * Maintenance margin ratio (MMR) of the account, null if user has no positions\n   */\n  mmr: number | null;\n  /**\n   * Maintenance margin of the account\n   */\n  maintenanceMargin: number | null;\n};\n\n/**\n * Hook to calculate and monitor account's margin ratio, leverage, and maintenance margin ratio (MMR)\n * @example\n * ```typescript\n * const { marginRatio, currentLeverage, mmr } = useMarginRatio();\n * ```\n */\nexport const useMarginRatio = (): MarginRatioReturn => {\n  // const [{ rows, aggregated }] = usePositionStream();\n\n  const positions = usePositionStore((state) => state.positions.all);\n\n  const { rows, notional } = positions;\n\n  const { state } = useAccount();\n\n  const { data: markPrices } = useMarkPricesStream();\n  //\n  // const markPrices = useMarkPrices();\n  //\n\n  const { totalCollateral } = useCollateral();\n\n  /**\n   * Calculate the total margin ratio based on collateral, mark prices and positions\n   */\n  const marginRatio = useMemo(() => {\n    if (!rows || !markPrices || !totalCollateral || rows.length === 0) {\n      return 0;\n    }\n\n    return account.totalMarginRatio({\n      totalCollateral: totalCollateral,\n      markPrices: markPrices,\n      positions: rows ?? EMPTY_LIST,\n    });\n  }, [rows, markPrices, totalCollateral]);\n\n  /**\n   * Calculate current leverage based on margin ratio\n   * Returns null if trading is not enabled\n   */\n  const currentLeverage = useMemo(() => {\n    if (\n      state.status >= AccountStatusEnum.EnableTrading ||\n      state.status === AccountStatusEnum.EnableTradingWithoutConnected\n    ) {\n      return account.currentLeverage(marginRatio);\n    }\n\n    return null;\n  }, [marginRatio, state.status]);\n\n  /**\n   * Calculate maintenance margin ratio (MMR) based on positions\n   * Returns null if user has no positions\n   */\n  const mmr = useMemo<number | null>(() => {\n    if (!rows || rows.length <= 0 || notional == null) {\n      return null;\n    }\n    let positionsMM = zero;\n    // const positionsNotional = positions.totalNotional(rows);\n\n    for (let index = 0; index < rows.length; index++) {\n      const item = rows[index];\n      if (item.mm !== null) {\n        // console.log(\"calc add mm\", item.mm, positionsMM, notional);\n\n        positionsMM = positionsMM.add(item.mm);\n      }\n    }\n\n    return account.MMR({\n      positionsMMR: positionsMM.toNumber(),\n      positionsNotional: notional,\n    });\n  }, [rows, notional]);\n\n  /**\n   * Calculate Maintenance Margin based on positions\n   * Returns null if user has no positions\n   */\n  const maintenanceMargin = useMemo<number | null>(() => {\n    if (!rows || rows.length <= 0 || notional == null) {\n      return null;\n    }\n    let maintenanceMargin = zero;\n    // const positionsNotional = positions.totalNotional(rows);\n\n    for (let index = 0; index < rows.length; index++) {\n      const item = rows[index];\n      if (item.mm !== null) {\n        maintenanceMargin = maintenanceMargin.add(item.mm);\n      }\n    }\n    return maintenanceMargin.toNumber();\n  }, [rows, notional]);\n\n  return { marginRatio, currentLeverage, mmr, maintenanceMargin };\n};\n","import { useCallback, useContext, useMemo, useRef } from \"react\";\nimport { prop } from \"ramda\";\nimport { SWRConfiguration } from \"swr\";\nimport {\n  NetworkId,\n  type API,\n  Chain as FlatChain,\n  SOLANA_TESTNET_CHAINID,\n  ARBITRUM_TESTNET_CHAINID,\n  BSC_TESTNET_CHAINID,\n  isNativeTokenChecker,\n  XLAYER_TESTNET_CHAINID,\n} from \"@orderly.network/types\";\nimport { nativeTokenAddress } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport {\n  mainnetChainFallback,\n  testnetChainFallback,\n  useMainnetChainsStore,\n  useTestnetChainsStore,\n} from \"../provider/store\";\nimport { useMainTokenStore } from \"../provider/store/mainTokenStore\";\nimport { useTestTokenStore } from \"../provider/store/testTokenStore\";\n\n// testnet white list\nexport const TESTNET_WHITE_LIST = [\n  ARBITRUM_TESTNET_CHAINID,\n  SOLANA_TESTNET_CHAINID,\n  BSC_TESTNET_CHAINID,\n];\n\nexport const TESTNET_WHITE_CHAINS = TESTNET_WHITE_LIST.map((id) => ({\n  id,\n})) satisfies Pick<FlatChain, \"id\">[];\n\nexport type Chain = API.Chain & {\n  nativeToken?: API.TokenInfo;\n  isTestnet?: boolean;\n};\n\nexport type Chains<\n  T extends NetworkId | undefined = undefined,\n  K extends keyof API.Chain | undefined = undefined,\n> = T extends NetworkId\n  ? K extends keyof API.Chain\n    ? API.Chain[K][]\n    : API.Chain[]\n  : K extends keyof API.Chain\n    ? {\n        testnet: API.Chain[K][];\n        mainnet: API.Chain[K][];\n      }\n    : {\n        testnet: API.Chain[];\n        mainnet: API.Chain[];\n      };\n\nexport type UseChainsOptions = {\n  filter?: (item: API.Chain) => boolean;\n  pick?: \"dexs\" | \"network_infos\" | \"token_infos\";\n  // Whether to force the use of data returned by the API, ignoring the customChains.\n  forceAPI?: boolean;\n} & SWRConfiguration;\n\nexport type UseChainsReturnObject = {\n  findByChainId: (chainId: number, field?: string) => Chain | undefined;\n  isTestnetChain: (chainId?: number | string) => boolean;\n  checkChainSupport: (\n    chainId: number | string,\n    networkId: NetworkId,\n  ) => boolean;\n  error: any;\n};\n\n// const testnetTokenFallback = TesnetTokenFallback([\n//   ArbitrumSepoliaTokenInfo,\n//   SolanaDevnetTokenInfo,\n// ]);\n\nexport function useChains(\n  networkId?: undefined,\n  options?: undefined,\n): [Chains<undefined, undefined>, UseChainsReturnObject];\n\nexport function useChains<\n  T extends NetworkId | undefined,\n  K extends UseChainsOptions | undefined,\n>(\n  networkId?: T,\n  options?: K,\n): [\n  Chains<\n    T,\n    K extends UseChainsOptions\n      ? K[\"pick\"] extends keyof API.Chain\n        ? K[\"pick\"]\n        : undefined\n      : undefined\n  >,\n  UseChainsReturnObject,\n];\n\n/**\n *\n * @example\n * // { testnet: API.Chain[];  mainnet: API.Chain[]; }\n * const [chains1] = useChains();\n *\n * // { testnet: API.Chain[];  mainnet: API.Chain[]; }\n * const [chains2] = useChains(undefined);\n *\n * // { testnet: API.NetworkInfos[];  mainnet: API.NetworkInfos[]; }\n * const [chains3] = useChains(undefined, { pick: \"network_infos\" });\n *\n * // API.Chain[]\n * const [chains4] = useChains(\"testnet\");\n *\n * // API.Chain[]\n * const [chains5] = useChains(\"mainnet\");\n *\n * // API.NetworkInfos[]\n * const [chains6] = useChains(\"testnet\", { pick: \"network_infos\" }); *\n *\n */\nexport function useChains(\n  networkId?: NetworkId,\n  options: UseChainsOptions = {},\n): [any, any] {\n  const { pick: pickField } = options;\n  const {\n    filteredChains: allowedChains,\n    customChains,\n    dataAdapter,\n  } = useContext(OrderlyContext);\n\n  const filterFun = useRef(options?.filter);\n  filterFun.current = options?.filter;\n\n  const chainsMap = useRef(new Map<number, Chain>());\n\n  // const brokerId = configStore.get(\"brokerId\");\n  // const env = configStore.get(\"env\");\n  // const brokerIdQuery = brokerId !== \"orderly\" ? `?broker_id=${brokerId}` : \"\";\n\n  // const urlPrefix = env === \"prod\" ? \"https://testnet-api.orderly.org\" : \"\";\n\n  const needFetchFromAPI = options.forceAPI || !customChains;\n\n  // const commonSwrOpts = {\n  //   revalidateIfStale: false,\n  //   revalidateOnFocus: false,\n  //   revalidateOnReconnect: false,\n  //   // If false, undefined data gets cached against the key.\n  //   revalidateOnMount: true,\n  //   // don't duplicate a request with the same key for 1hr\n  //   dedupingInterval: 3_600_000,\n  //   ...swrOptions,\n  // };\n\n  const { data: tokenChainsRes, error: tokenError } = useMainTokenStore();\n\n  // only prod env return mainnet chains info\n  // const { data: tokenChainsRes, error: tokenError } = useQuery<API.Chain[]>(\n  //   \"https://api.orderly.org/v1/public/token\",\n  //   { ...commonSwrOpts },\n  // );\n\n  const testTokenChainsRes = useTestTokenStore((state) => state.data);\n\n  // testnet token info\n  // const { data: testTokenChainsRes } = useQuery<API.Chain[]>(\n  //   `${urlPrefix}/v1/public/token`,\n  //   {\n  //     ...commonSwrOpts,\n  //     fallbackData: testnetTokenFallback,\n  //   },\n  // );\n\n  const mainnetChainInfos = useMainnetChainsStore((state) => state.data);\n  const mainnetChainInfoOrigin = useMainnetChainsStore(\n    (state) => state.dataOrigin,\n  );\n  // Only broker-authorized chain info feeds chain selection (deposit /\n  // withdraw UIs). Wallet connectors (initEvm / privy provider) intentionally\n  // read the store's raw data as a superset: onboard / privy cannot add\n  // chains after initialization, and a missing chain breaks wallet switching\n  // even for chains the broker filter excludes.\n  const chainInfos =\n    mainnetChainInfoOrigin === \"broker\"\n      ? mainnetChainInfos\n      : mainnetChainFallback;\n  // only prod env return mainnet chains info\n  // const { data: chainInfos, error: chainInfoErr } = useQuery(\n  //   needFetchFromAPI\n  //     ? `https://api.orderly.org/v1/public/chain_info${brokerIdQuery}`\n  //     : null,\n  //   { ...commonSwrOpts },\n  // );\n\n  const testnetChainInfos = useTestnetChainsStore((state) => state.data);\n  const testnetChainInfoOrigin = useTestnetChainsStore(\n    (state) => state.dataOrigin,\n  );\n  const testChainInfos =\n    testnetChainInfoOrigin === \"broker\"\n      ? testnetChainInfos\n      : testnetChainFallback;\n  // testnet chains info\n  // const { data: testChainInfos, error: testChainInfoError } = useQuery(\n  //   needFetchFromAPI\n  //     ? `${urlPrefix}/v1/public/chain_info${brokerIdQuery}`\n  //     : null,\n  //   {\n  //     ...commonSwrOpts,\n  //     fallbackData: testnetChainFallback,\n  //     onError: (error) => {\n  //       console.error(\"Failed to fetch testnet chain info:\", error);\n  //     },\n  //   },\n  // );\n\n  const chains = useMemo(() => {\n    if (\n      !tokenChainsRes ||\n      !testTokenChainsRes ||\n      !chainInfos ||\n      !testChainInfos\n    ) {\n      chainsMap.current = new Map();\n      return networkId ? [] : { mainnet: [], testnet: [] };\n    }\n    const mainnetChains = formatChains({\n      tokenChains: tokenChainsRes,\n      chainInfos,\n      filter: filterFun.current,\n      mainnet: true,\n      resolveChains: dataAdapter?.chainsList,\n    });\n\n    const testnetChains = formatChains({\n      tokenChains: testTokenChainsRes,\n      chainInfos: testChainInfos,\n      mainnet: false,\n      resolveChains: dataAdapter?.chainsList,\n    });\n\n    let mainnetArr = needFetchFromAPI ? mainnetChains : customChains?.mainnet;\n    let testnetArr = needFetchFromAPI ? testnetChains : customChains?.testnet;\n\n    const nextChainsMap = new Map<number, Chain>();\n\n    testnetArr?.forEach((chain) => {\n      nextChainsMap.set(chain.network_infos.chain_id, chain);\n    });\n\n    mainnetArr?.forEach((chain) => {\n      nextChainsMap.set(chain.network_infos.chain_id, chain);\n    });\n\n    chainsMap.current = nextChainsMap;\n\n    mainnetArr = filterByAllowedChains(mainnetArr, allowedChains?.mainnet);\n    testnetArr = filterByAllowedChains(\n      testnetArr,\n      allowedChains?.testnet ?? TESTNET_WHITE_CHAINS,\n    );\n\n    if (!!pickField) {\n      //@ts-ignore\n      testnetArr = testnetArr.map((item) => item[pickField]);\n      //@ts-ignore\n      mainnetArr = mainnetArr.map((item) => item[pickField]);\n    }\n\n    if (networkId === \"mainnet\") {\n      return mainnetArr;\n    }\n\n    if (networkId === \"testnet\") {\n      return testnetArr;\n    }\n\n    return {\n      testnet: testnetArr,\n      mainnet: mainnetArr,\n    };\n  }, [\n    networkId,\n    tokenChainsRes,\n    chainInfos,\n    testChainInfos,\n    testTokenChainsRes,\n    customChains,\n    pickField,\n    allowedChains,\n    dataAdapter,\n  ]);\n\n  const findByChainId = useCallback(\n    (chainId: number, field?: string) => {\n      const chain = chainsMap.current.get(chainId);\n\n      if (chain) {\n        chain.nativeToken =\n          chain.token_infos?.find((item) =>\n            isNativeTokenChecker(item.address),\n          ) ||\n          ({\n            symbol: chain.network_infos?.currency_symbol,\n          } as any);\n      }\n\n      if (typeof field === \"string\") {\n        return prop(field as never, chain);\n      }\n\n      return chain;\n    },\n    [chains, chainsMap],\n  );\n\n  const checkChainSupport = useCallback(\n    (chainId: number | string, networkId: NetworkId) => {\n      const _chains = Array.isArray(chains) ? chains : chains[networkId];\n      return _checkChainSupport(chainId, _chains);\n    },\n    [chains],\n  );\n\n  const isTestnetChain = useCallback(\n    (chainId?: number | string) => {\n      if (typeof chainId === \"undefined\") {\n        return false;\n      }\n\n      const normalizedChainId =\n        typeof chainId === \"number\"\n          ? chainId\n          : chainId.trim() === \"\"\n            ? NaN\n            : Number(chainId);\n\n      if (!Number.isFinite(normalizedChainId)) {\n        return false;\n      }\n\n      return (\n        chainsMap.current.get(normalizedChainId)?.network_infos?.mainnet ===\n        false\n      );\n    },\n    [chains],\n  );\n\n  return [\n    chains,\n    {\n      findByChainId,\n      isTestnetChain,\n      checkChainSupport,\n      error: tokenError,\n    },\n  ];\n}\n\nfunction _checkChainSupport(chainId: number | string, chains: API.Chain[]) {\n  if (typeof chainId === \"string\") {\n    chainId = parseInt(chainId);\n  }\n  return chains.some((chain) => {\n    return chain.network_infos.chain_id === chainId;\n  });\n}\n\nexport function filterByAllowedChains(\n  chains: API.Chain[],\n  allowedChains?: Partial<FlatChain>[],\n) {\n  if (!allowedChains) {\n    return chains;\n  }\n\n  return allowedChains\n    .map((allowedChain) => {\n      return chains.find(\n        (chain) =>\n          parseInt(chain.network_infos?.chain_id as any) === allowedChain.id,\n      );\n    })\n    .filter((chain) => !!chain);\n}\n\nexport function formatChains(options: {\n  chainInfos?: any;\n  tokenChains?: API.Token[];\n  filter?: (chain: any) => boolean;\n  mainnet: boolean;\n  resolveChains?: (chains: API.Chain[]) => API.Chain[];\n}) {\n  const {\n    chainInfos = [],\n    tokenChains = [],\n    filter,\n    mainnet,\n    resolveChains,\n  } = options;\n\n  const chains: API.Chain[] = [];\n\n  for (const chainInfo of chainInfos) {\n    const chainId = Number(chainInfo.chain_id);\n\n    const {\n      name,\n      public_rpc_url,\n      currency_symbol,\n      currency_decimal,\n      explorer_base_url,\n      vault_address,\n    } = chainInfo;\n\n    const network_infos = {\n      name,\n      chain_id: chainId,\n      bridgeless: true,\n      mainnet,\n\n      public_rpc_url,\n      currency_symbol,\n      currency_decimal,\n      bridge_enable: true,\n      explorer_base_url,\n\n      shortName: name,\n      vault_address,\n    };\n\n    const tokenInfos = tokenChains\n      .filter((item) =>\n        item.chain_details.some((item) => Number(item.chain_id) === chainId),\n      )\n      .map((item) => {\n        const chain = item.chain_details.find(\n          (item) => Number(item.chain_id) === chainId,\n        );\n\n        return {\n          symbol: item.token,\n          // if contract_address is not exist, use nativeTokenAddress to place holder\n          address: chain?.contract_address || nativeTokenAddress,\n          /** chain decimals */\n          decimals: chain?.decimals,\n          /** token decimals */\n          token_decimal: item?.decimals,\n          precision: item.decimals,\n\n          display_name: chain?.display_name,\n\n          withdrawal_fee: chain?.withdrawal_fee,\n          cross_chain_withdrawal_fee: chain?.cross_chain_withdrawal_fee,\n          minimum_withdraw_amount: item.minimum_withdraw_amount,\n\n          base_weight: item.base_weight,\n          discount_factor: item.discount_factor,\n          haircut: item.haircut,\n          user_max_qty: item.user_max_qty,\n          is_collateral: item.is_collateral,\n        };\n      });\n\n    const _chain: any = {\n      network_infos,\n      token_infos: tokenInfos,\n    };\n\n    if (typeof filter === \"function\") {\n      if (!filter(_chain)) continue;\n    }\n\n    chains.push(_chain);\n  }\n\n  if (typeof resolveChains === \"function\") {\n    return resolveChains(chains);\n  }\n\n  return chains;\n}\n","import { ChainKey, ChainNamespace, SolanaChains } from \"@orderly.network/types\";\nimport { useLocalStorage } from \"../useLocalStorage\";\n\nexport function useStorageChain() {\n  const [chain, setChain] = useLocalStorage<{chainId:number, namespace: ChainNamespace} | null>(ChainKey,null);\n  const setStorageChain = (chainId: number) => {\n    let namespace: ChainNamespace = ChainNamespace.evm;\n    if (SolanaChains.has(chainId)) {\n      namespace = ChainNamespace.solana;\n    }\n\n    setChain({\n      chainId: chainId,\n      namespace,\n    })\n\n  }\n\n  return {\n    storageChain: chain,\n    setStorageChain,\n  }\n}","import { useMemo } from \"react\";\nimport { API, chainsInfoMap } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\n\n/**\n * @param token @deprecated, use useTokenInfo instead\n */\nexport const useChain = (token: string) => {\n  const { data, isLoading } = useQuery<API.Chain[]>(\"/v1/public/token\");\n\n  const chains = useMemo(() => {\n    if (!data) {\n      return null;\n    }\n\n    const item = data.find((chain) => chain.token === token);\n\n    if (item) {\n      item.chain_details = item.chain_details.map((d) => {\n        const chain = chainsInfoMap.get(Number(d.chain_id));\n        return {\n          ...d,\n          chain_name: chain?.chainName ?? \"--\",\n        };\n      });\n    }\n\n    return item || null;\n  }, [data, token]);\n\n  return { chains, isLoading };\n};\n","import { useQuery } from \"../useQuery\";\n\nexport const useChainInfo = () => {\n  return useQuery(\"/v1/public/chain_info\", {\n    revalidateOnFocus: false,\n  });\n};\n","import { useMemo } from \"react\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { API } from \"@orderly.network/types\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useWS } from \"../useWS\";\nimport { mergeHoldingBalance } from \"../utils/mergeHoldingBalance\";\n\nexport const useHoldingStream = () => {\n  const ws = useWS();\n\n  const { data, isLoading, mutate } = usePrivateQuery<API.Holding[]>(\n    \"/v1/client/holding\",\n    {\n      formatter: (data) => {\n        return data.holding;\n      },\n    },\n  );\n\n  const usdc = useMemo(() => {\n    const usdc = data?.find((item) => item.token === \"USDC\");\n    return usdc;\n  }, [data]);\n\n  useSWRSubscription(\"holding\", (_, { next }) => {\n    const unsubscribe = ws.privateSubscribe(\n      {\n        id: \"balance\",\n        event: \"subscribe\",\n        topic: \"balance\",\n        ts: getTimestamp(),\n      },\n      {\n        onMessage: (data: any) => {\n          const holding = data?.balances ?? ({} as Record<string, any>);\n\n          if (holding) {\n            mutate((prevData) => {\n              return prevData?.map((item) => {\n                const token = holding[item.token];\n                if (token) {\n                  return mergeHoldingBalance(item, token);\n                }\n                return item;\n              });\n            });\n\n            next(holding);\n          }\n        },\n      },\n    );\n\n    return () => unsubscribe();\n  });\n\n  return {\n    data,\n    usdc,\n    isLoading,\n  };\n};\n","import { useMemo } from \"react\";\nimport { account as accountPerp } from \"@orderly.network/perp\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport {\n  useCollateral,\n  useIndexPricesStream,\n  useUpdatedRef,\n  useTokenInfo,\n} from \"..\";\nimport { useAppStore } from \"./appStore\";\nimport { useHoldingStream } from \"./useHoldingStream\";\n\nconst { maxWithdrawalUSDC, maxWithdrawalOtherCollateral, collateralRatio } =\n  accountPerp;\n\n/**\n * The max withdrawal amount for the token\n * if token is not provided, return the max withdrawal amount for USDC\n */\nexport const useMaxWithdrawal = (token: string) => {\n  const { unsettledPnL } = useCollateral();\n\n  const { freeCollateral } = useAppStore((state) => state.portfolio);\n\n  const tokenInfo = useTokenInfo(token);\n\n  const { getIndexPrice } = useIndexPricesStream();\n\n  const indexPriceRef = useUpdatedRef(getIndexPrice(token));\n\n  const { usdc, data: holdings = [] } = useHoldingStream();\n\n  const holding = useMemo(() => {\n    return holdings.find(\n      (item) => item.token?.toUpperCase() === token.toUpperCase(),\n    );\n  }, [holdings, token]);\n\n  const usdcBalance = usdc?.holding ?? 0;\n\n  const memoizedCollateralRatio = useMemo(() => {\n    const { base_weight = 0, discount_factor = 0 } = tokenInfo || {};\n    const holdingQty = holding?.holding ?? 0;\n    return collateralRatio({\n      baseWeight: base_weight,\n      discountFactor: discount_factor,\n      collateralQty: holdingQty,\n      collateralCap: tokenInfo?.user_max_qty ?? holdingQty,\n      indexPrice: indexPriceRef.current,\n    });\n  }, [tokenInfo, holding?.holding, indexPriceRef]);\n\n  const maxAmount = useMemo<number>(() => {\n    if (!token) {\n      return 0;\n    }\n\n    let quantity = 0;\n\n    if (token === \"USDC\") {\n      quantity = maxWithdrawalUSDC({\n        USDCBalance: usdcBalance,\n        freeCollateral,\n        upnl: unsettledPnL ?? 0,\n      });\n    } else {\n      quantity = maxWithdrawalOtherCollateral({\n        USDCBalance: usdcBalance,\n        collateralQty: holding?.holding ?? 0,\n        freeCollateral,\n        indexPrice: indexPriceRef.current,\n        weight: memoizedCollateralRatio,\n      }).toNumber();\n    }\n\n    if (Number.isNaN(quantity)) {\n      return 0;\n    }\n\n    if (tokenInfo?.decimals === undefined) {\n      return quantity;\n    }\n\n    return new Decimal(quantity || 0)\n      .todp(tokenInfo.decimals, Decimal.ROUND_DOWN)\n      .toNumber();\n  }, [\n    token,\n    tokenInfo?.decimals,\n    usdcBalance,\n    freeCollateral,\n    unsettledPnL,\n    holding?.holding,\n    indexPriceRef,\n    memoizedCollateralRatio,\n  ]);\n\n  return maxAmount;\n};\n","import { useCallback, useMemo, useState } from \"react\";\nimport {\n  API,\n  ARBITRUM_MAINNET_CHAINID,\n  ARBITRUM_TESTNET_CHAINID,\n  TrackerEventName,\n} from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { useConfig } from \"../useConfig\";\nimport { useTrack } from \"../useTrack\";\nimport { useChains } from \"./useChains\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxWithdrawal } from \"./useMaxWithdrawal\";\n\nexport type UseWithdrawOptions = {\n  srcChainId?: number;\n  token?: string;\n  /** orderly token decimals */\n  decimals?: number;\n};\n\nexport const useWithdraw = (options: UseWithdrawOptions) => {\n  const { srcChainId, token = \"\", decimals } = options;\n  const { account, state } = useAccount();\n\n  const { unsettledPnL, availableBalance, freeCollateral } = useCollateral();\n\n  const networkId = useConfig(\"networkId\");\n\n  const [, { findByChainId, isTestnetChain }] = useChains(undefined);\n\n  const { track } = useTrack();\n\n  const maxAmount = useMaxWithdrawal(token);\n\n  const availableWithdraw = useMemo(() => {\n    if (unsettledPnL < 0) {\n      return freeCollateral;\n    } else {\n      return freeCollateral - unsettledPnL;\n    }\n  }, [freeCollateral, unsettledPnL]);\n\n  const targetChain = useMemo(() => {\n    let chain: API.Chain | undefined;\n\n    // Orderly testnet supported chain\n    if (networkId === \"testnet\") {\n      chain = findByChainId(\n        isTestnetChain(srcChainId) ? srcChainId! : ARBITRUM_TESTNET_CHAINID,\n      ) as API.Chain;\n    } else {\n      chain = findByChainId(srcChainId!) as API.Chain;\n      // if is orderly un-supported chain\n      if (!chain?.network_infos?.bridgeless) {\n        // Orderly mainnet supported chain\n        chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n      }\n    }\n    return chain;\n  }, [networkId, findByChainId, isTestnetChain, srcChainId]);\n\n  // Mantle chain: USDC → USDC.e\n  const dst = useMemo(() => {\n    const USDC = targetChain?.token_infos.find(\n      (token: API.TokenInfo) => token.symbol === \"USDC\",\n    );\n\n    return {\n      symbol: USDC?.display_name || \"USDC\",\n      decimals: USDC?.decimals || 6,\n      address: USDC?.address,\n      chainId: targetChain?.network_infos?.chain_id,\n      network: targetChain?.network_infos?.shortName,\n    };\n  }, [targetChain]);\n\n  const withdraw = useCallback(\n    (inputs: {\n      chainId: number;\n      token: string;\n      amount: string;\n      allowCrossChainWithdraw: boolean;\n      receiver?: string;\n    }): Promise<any> => {\n      return account.assetsManager\n        .withdraw({ ...inputs, decimals: decimals ?? 6 })\n        .then((res: any) => {\n          if (res.success) {\n            track(TrackerEventName.withdrawSuccess, {\n              wallet: state?.connectWallet?.name,\n              // TODO: fix network name, befault is not pass srcChainId\n              network: targetChain?.network_infos.name,\n              quantity: inputs.amount,\n            });\n            //   withdrawQueue.current.push(res.data.withdraw_id);\n          }\n          return res;\n        })\n        .catch((err) => {\n          track(TrackerEventName.withdrawFailed, {\n            wallet: state?.connectWallet?.name,\n            network: targetChain?.network_infos.name,\n            msg: JSON.stringify(err),\n          });\n          throw err;\n        });\n    },\n    [\n      account.assetsManager,\n      decimals,\n      state?.connectWallet?.name,\n      targetChain?.network_infos.name,\n    ],\n  );\n\n  return {\n    dst,\n    withdraw,\n    maxAmount,\n    unsettledPnL,\n    availableBalance,\n    /** @deprecated use maxAmount instead */\n    availableWithdraw,\n  };\n};\n","import { SDKError } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nconst allowanceRetryDelays = [500, 1000, 2000, 2000, 2000] as const;\n\nexport type AllowanceComparison = \"gte\" | \"eq\";\n\ntype WaitForAllowanceOptions = {\n  readAllowance: () => Promise<string>;\n  expectedAmount: string;\n  comparison?: AllowanceComparison;\n  onRead?: (allowance: string) => void;\n  onSatisfied?: (allowance: string) => Promise<void>;\n};\n\nexport async function waitForAllowance({\n  readAllowance,\n  expectedAmount,\n  comparison = \"gte\",\n  onRead,\n  onSatisfied,\n}: WaitForAllowanceOptions) {\n  let hasSuccessfulRead = false;\n  let lastReadError: unknown;\n\n  for (let attempt = 0; attempt <= allowanceRetryDelays.length; attempt++) {\n    let currentAllowance: string;\n\n    try {\n      currentAllowance = await readAllowance();\n    } catch (error) {\n      lastReadError = error;\n      currentAllowance = \"\";\n    }\n\n    if (currentAllowance !== \"\") {\n      hasSuccessfulRead = true;\n      onRead?.(currentAllowance);\n\n      const current = new Decimal(currentAllowance);\n      const expected = new Decimal(expectedAmount);\n      const isSatisfied =\n        comparison === \"eq\" ? current.eq(expected) : current.gte(expected);\n\n      if (isSatisfied) {\n        await onSatisfied?.(currentAllowance);\n        return currentAllowance;\n      }\n    }\n\n    if (attempt < allowanceRetryDelays.length) {\n      await new Promise((resolve) =>\n        setTimeout(resolve, allowanceRetryDelays[attempt]),\n      );\n    }\n  }\n\n  if (!hasSuccessfulRead && lastReadError) {\n    throw lastReadError;\n  }\n\n  throw new SDKError(\"Insufficient allowance\");\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport useSWR from \"swr\";\nimport {\n  API,\n  ARBITRUM_MAINNET_CHAINID,\n  ARBITRUM_TESTNET_CHAINID,\n  AccountStatusEnum,\n  ChainNamespace,\n  DEPOSIT_FEE_RATE,\n  ETHEREUM_MAINNET_CHAINID,\n  MaxUint256,\n  SDKError,\n  TrackerEventName,\n  isNativeTokenChecker,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useAccount } from \"../useAccount\";\nimport { useConfig } from \"../useConfig\";\nimport { useTrack } from \"../useTrack\";\nimport {\n  type AllowanceComparison,\n  waitForAllowance as pollAllowanceUntilSatisfied,\n} from \"./allowance\";\nimport { useChains } from \"./useChains\";\n\nexport type DepositOptions = {\n  // from address\n  address?: string;\n  decimals?: number;\n\n  srcChainId?: number;\n  /** input token */\n  srcToken?: string;\n  /** output token */\n  dstToken?: string;\n\n  // swap deposit options\n  /** cross chain route address */\n  crossChainRouteAddress?: string;\n  /** swap deposit vault address */\n  depositorAddress?: string;\n};\n\nexport type DST = {\n  symbol: string;\n  address: string;\n  decimals: number;\n  chainId: number;\n  network: string;\n};\n\nexport type UseDepositReturn = ReturnType<typeof useDeposit>;\n\nexport const useDeposit = (options: DepositOptions) => {\n  const [quantity, setQuantity] = useState<string>(\"\");\n  const { account, state } = useAccount();\n  const { track } = useTrack();\n\n  const targetChain = useTargetChain(options.srcChainId);\n\n  const dst = useMemo(() => {\n    const symbol = options.dstToken || \"USDC\";\n\n    const targetToken = targetChain?.token_infos.find(\n      (token) => token.symbol === symbol,\n    );\n\n    return {\n      symbol,\n      address: targetToken?.address,\n      decimals: targetToken?.decimals,\n      chainId: targetChain?.network_infos.chain_id,\n      network: targetChain?.network_infos.shortName,\n    } as DST;\n  }, [targetChain, options.dstToken]);\n\n  const isNativeToken = useMemo(\n    () => isNativeTokenChecker(options.address),\n    [options.address],\n  );\n\n  const vaultAddress = useMemo(() => {\n    // cross swap deposit vault address\n    if (dst?.chainId !== options.srcChainId) {\n      return options.crossChainRouteAddress;\n    }\n\n    // swap deposit vault address\n    if (options.srcToken !== options.dstToken) {\n      return options.depositorAddress;\n    }\n\n    // orderly deposit vault address\n    return targetChain?.network_infos.vault_address;\n  }, [\n    dst,\n    options.srcChainId,\n    options.srcToken,\n    options.dstToken,\n    options.crossChainRouteAddress,\n    options.depositorAddress,\n    targetChain,\n  ]);\n\n  const {\n    balance,\n    balanceRevalidating,\n    fetchBalance,\n    fetchBalances,\n    setBalance,\n  } = useBalance({\n    address: options.address,\n    decimals: options.decimals,\n    srcToken: options.srcToken,\n    account,\n    status: state.status,\n  });\n\n  const {\n    allowance,\n    allowanceRevalidating,\n    updateAllowanceWhenTxSuccess,\n    enquireAllowance,\n  } = useAllowance({\n    address: options.address,\n    decimals: options.decimals,\n    vaultAddress,\n    account,\n    status: state.status,\n    quantity,\n    chainId: dst?.chainId,\n  });\n\n  const { depositFee, depositFeeRevalidating } = useDepositFee({\n    quantity,\n    account,\n    targetChain,\n    decimals: options.decimals,\n    dstToken: options.dstToken,\n    vaultAddress,\n    isNativeToken,\n    dst,\n  });\n\n  const resetApprove = useCallback(\n    async (tokenAddress: string, decimal: number, vaultAddress: string) => {\n      const result = await account.assetsManager.approve({\n        address: tokenAddress,\n        amount: \"0\",\n        vaultAddress,\n        decimals: decimal,\n      });\n\n      await updateAllowanceWhenTxSuccess(result.hash, \"0\", \"eq\");\n    },\n    [account, updateAllowanceWhenTxSuccess],\n  );\n\n  const approve = useCallback(\n    async (amount?: string) => {\n      if (!options.address) {\n        throw new Error(\"address is required\");\n      }\n\n      let isSetMaxValue = false;\n\n      if (\n        checkIfChainTokenNeedRestApprove(options.srcChainId!, options.srcToken!)\n      ) {\n        isSetMaxValue = true;\n        if (allowance && new Decimal(allowance).gt(0)) {\n          await resetApprove(\n            options.address!,\n            options.decimals!,\n            vaultAddress!,\n          );\n        }\n      }\n      const result = await account.assetsManager.approve({\n        address: options.address,\n        amount,\n        vaultAddress,\n        isSetMaxValue,\n        decimals: options.decimals!,\n      });\n\n      const expectedAllowance =\n        amount ||\n        account.walletAdapter?.formatUnits(MaxUint256, options.decimals!);\n\n      return updateAllowanceWhenTxSuccess(result.hash, expectedAllowance);\n    },\n    [\n      account,\n      options.srcChainId,\n      options.srcToken,\n      allowance,\n      options.address,\n      options.decimals,\n      vaultAddress,\n      updateAllowanceWhenTxSuccess,\n      resetApprove,\n    ],\n  );\n\n  // only support orderly deposit\n  const deposit = useCallback(async () => {\n    await enquireAllowance();\n\n    const inputs: Parameters<typeof account.assetsManager.deposit>[0] = {\n      amount: quantity,\n      fee: depositFee,\n      decimals: options.decimals!,\n      token: options.srcToken,\n      address: options.address,\n      vaultAddress: vaultAddress!,\n    };\n\n    const depositPromise = isNativeToken\n      ? account.assetsManager.depositNativeToken(inputs)\n      : account.assetsManager.deposit(inputs);\n\n    return depositPromise\n      .then((result: any) => {\n        void updateAllowanceWhenTxSuccess(result.hash).catch((error) => {\n          console.error(\"deposit allowance refresh error\", error);\n        });\n        // when deposit request success, update balance\n        setBalance((value) =>\n          value ? new Decimal(value).sub(quantity).toString() : \"0\",\n        );\n\n        track(TrackerEventName.depositSuccess, {\n          wallet: state?.connectWallet?.name,\n          network: targetChain?.network_infos.name,\n          quantity,\n          currency: options.srcToken,\n        });\n        return result;\n      })\n      .catch((e) => {\n        track(TrackerEventName.depositFailed, {\n          wallet: state?.connectWallet?.name,\n          network: targetChain?.network_infos?.name,\n          msg: JSON.stringify(e),\n        });\n        throw e;\n      });\n  }, [\n    state,\n    account,\n    quantity,\n    depositFee,\n    targetChain,\n    options.decimals,\n    options.srcToken,\n    enquireAllowance,\n    updateAllowanceWhenTxSuccess,\n    isNativeToken,\n    vaultAddress,\n  ]);\n\n  return {\n    balance,\n    allowance,\n    /** deposit fee, unit: wei */\n    depositFee,\n    balanceRevalidating,\n    allowanceRevalidating,\n    depositFeeRevalidating,\n    isNativeToken,\n    dst,\n    targetChain,\n    /** input quantiy */\n    quantity,\n    /** set input quantity */\n    setQuantity,\n    approve,\n    deposit,\n    fetchBalance,\n    fetchBalances,\n  };\n};\n\nfunction useBalance(options: {\n  address?: string;\n  decimals?: number;\n  srcToken?: string;\n  account: ReturnType<typeof useAccount>[\"account\"];\n  status: AccountStatusEnum;\n}) {\n  const { srcToken, address, decimals, account, status } = options;\n  const [balance, setBalance] = useState<string | null>(null);\n\n  const fetchBalance = useCallback(\n    async (address: string, decimals?: number) => {\n      try {\n        if (isNativeTokenChecker(address)) {\n          return await account.assetsManager.getNativeBalance({\n            decimals,\n          });\n        }\n\n        return await account.assetsManager.getBalance(address, {\n          decimals,\n        });\n      } catch (err: any) {\n        if (\n          ignoreBalanceError({\n            token: srcToken!,\n            chainNamespace: account.walletAdapter?.chainNamespace!,\n            err,\n          })\n        ) {\n          console.log(\"ignore balance error: \", err);\n          return \"0\";\n        }\n        throw err;\n      }\n    },\n    [srcToken, account],\n  );\n\n  const fetchBalances = useCallback(\n    async (tokens: API.TokenInfo[]) => {\n      return account.assetsManager.getBalances(tokens);\n    },\n    [account],\n  );\n\n  // create key for useSWR, return null when conditions are not met\n  const key = useMemo(() => {\n    if (!address || status < AccountStatusEnum.Connected) {\n      return null;\n    }\n    return [\"balance\", address, decimals];\n  }, [status, address, decimals]);\n\n  // create fetcher function\n  const fetcher = useCallback(async () => {\n    if (!address) {\n      return \"0\";\n    }\n    const balance = await fetchBalance(address, decimals);\n    // console.log(\"balance\", balance);\n    return balance;\n  }, [address, decimals, fetchBalance]);\n\n  // get refresh interval based on chain namespace, solana is 10s, other is 3s\n  const refreshInterval = useMemo(() => {\n    return account.walletAdapter?.chainNamespace === ChainNamespace.solana\n      ? 10000\n      : 3000;\n  }, [account]);\n\n  // use useSWR for polling balance\n  const { data: swrBalance, isLoading: balanceRevalidating } = useSWR(\n    key,\n    fetcher,\n    {\n      revalidateOnFocus: true,\n      refreshInterval: refreshInterval,\n      errorRetryCount: 10,\n    },\n  );\n\n  // sync balance from SWR data; reset to null (loading) when address changes\n  useEffect(() => {\n    if (swrBalance !== undefined) {\n      setBalance(swrBalance || \"0\");\n    } else {\n      setBalance(null);\n    }\n  }, [swrBalance, address]);\n\n  return {\n    balance,\n    balanceRevalidating: balanceRevalidating || balance === null,\n    setBalance,\n    fetchBalance,\n    fetchBalances,\n  };\n}\n\nfunction useAllowance(options: {\n  address?: string;\n  decimals?: number;\n  vaultAddress?: string;\n  account: ReturnType<typeof useAccount>[\"account\"];\n  status: AccountStatusEnum;\n  quantity: string;\n  chainId?: number;\n}) {\n  const {\n    address,\n    decimals,\n    vaultAddress,\n    account,\n    status,\n    quantity,\n    chainId,\n  } = options;\n  const [allowance, setAllowance] = useState(\"0\");\n\n  const fetchAllowance = useCallback(\n    async (options: {\n      address?: string;\n      decimals?: number;\n      vaultAddress?: string;\n    }) => {\n      const { address, decimals, vaultAddress } = options;\n      if (!address || !decimals || !vaultAddress) {\n        return \"0\";\n      }\n      // native token and solana don't need to get allowance, so return max uint256\n      if (\n        isNativeTokenChecker(address) ||\n        account.walletAdapter?.chainNamespace === ChainNamespace.solana\n      ) {\n        return account.walletAdapter?.formatUnits(MaxUint256, decimals!)!;\n      }\n\n      const allowance = await account.assetsManager.getAllowance({\n        address,\n        vaultAddress,\n        decimals,\n      });\n\n      console.info(\"allowance\", address, allowance);\n      return allowance;\n    },\n    [account],\n  );\n\n  // create key for useSWR, return null when conditions are not met\n  const key = useMemo(() => {\n    if (\n      !address ||\n      !decimals ||\n      !vaultAddress ||\n      status < AccountStatusEnum.Connected\n    ) {\n      return null;\n    }\n\n    return [\"allowance\", address, vaultAddress, decimals];\n  }, [status, address, vaultAddress, decimals, account]);\n\n  // get refresh interval based on chain namespace, solana is 10s, other is 3s\n  const refreshInterval = useMemo(() => {\n    return account.walletAdapter?.chainNamespace === ChainNamespace.solana\n      ? 10000\n      : 3000;\n  }, [account, chainId]);\n\n  const fetcher = useCallback(async () => {\n    return fetchAllowance({ address, decimals, vaultAddress });\n  }, [address, decimals, vaultAddress, fetchAllowance]);\n\n  // use useSWR for polling allowance\n  const {\n    data: swrAllowance,\n    isLoading: allowanceRevalidating,\n    mutate: mutateAllowance,\n  } = useSWR(key, fetcher, {\n    revalidateOnFocus: true,\n    refreshInterval: refreshInterval,\n    errorRetryCount: 10,\n  });\n\n  useEffect(() => {\n    if (swrAllowance !== undefined) {\n      setAllowance(swrAllowance || \"0\");\n    }\n  }, [swrAllowance]);\n\n  const waitForAllowance = useCallback(\n    async (expectedAmount: string, comparison: AllowanceComparison = \"gte\") => {\n      return pollAllowanceUntilSatisfied({\n        readAllowance: () =>\n          fetchAllowance({\n            address,\n            decimals,\n            vaultAddress,\n          }),\n        expectedAmount,\n        comparison,\n        onRead: setAllowance,\n        onSatisfied: (currentAllowance) =>\n          mutateAllowance(currentAllowance, { revalidate: false }).then(() => {\n            return undefined;\n          }),\n      });\n    },\n    [address, decimals, fetchAllowance, mutateAllowance, vaultAddress],\n  );\n\n  const updateAllowanceWhenTxSuccess = useCallback(\n    async (\n      txHash: string,\n      expectedAmount?: string,\n      comparison: AllowanceComparison = \"gte\",\n    ) => {\n      const receipt =\n        await account.walletAdapter?.pollTransactionReceiptWithBackoff(txHash);\n\n      if (!receipt || Number(receipt.status) !== 1) {\n        throw new SDKError(\"Transaction failed\");\n      }\n\n      if (expectedAmount !== undefined) {\n        return waitForAllowance(expectedAmount, comparison);\n      }\n\n      const currentAllowance = await fetchAllowance({\n        address,\n        decimals,\n        vaultAddress,\n      });\n      setAllowance(currentAllowance);\n      await mutateAllowance(currentAllowance, { revalidate: false });\n      return currentAllowance;\n    },\n    [\n      account,\n      address,\n      decimals,\n      fetchAllowance,\n      mutateAllowance,\n      vaultAddress,\n      waitForAllowance,\n    ],\n  );\n\n  const enquireAllowance = useCallback(() => {\n    return waitForAllowance(quantity);\n  }, [quantity, waitForAllowance]);\n\n  return {\n    allowance,\n    allowanceRevalidating,\n    updateAllowanceWhenTxSuccess,\n    enquireAllowance,\n  };\n}\n\nfunction useDepositFee(options: {\n  quantity: string;\n  account: ReturnType<typeof useAccount>[\"account\"];\n  targetChain?: API.Chain;\n  decimals?: number;\n  dstToken?: string;\n  vaultAddress?: string;\n  isNativeToken?: boolean;\n  dst?: DST;\n}) {\n  const {\n    quantity,\n    account,\n    targetChain,\n    decimals,\n    dstToken,\n    vaultAddress,\n    isNativeToken,\n    dst,\n  } = options;\n\n  const getDepositFee = useCallback(\n    async (quantity: string) => {\n      if (!quantity || Number(quantity) === 0 || isNaN(Number(quantity))) {\n        return 0n;\n      }\n\n      const depositFee = await account.assetsManager.getDepositFee({\n        amount: quantity,\n        chain: targetChain?.network_infos!,\n        decimals: decimals!,\n        token: dstToken,\n        // TODO: when swap deposit, dstToken address is not same as src token address\n        address: dst?.address,\n      });\n\n      let estimatedGasFee = 0n;\n\n      try {\n        const inputs: Parameters<\n          typeof account.assetsManager.estimateDepositGasFee\n        >[0] = {\n          amount: quantity,\n          fee: depositFee,\n          decimals: decimals!,\n          token: dstToken,\n          address: dst?.address,\n          vaultAddress: vaultAddress!,\n        };\n\n        estimatedGasFee = isNativeToken\n          ? await account.assetsManager.estimateNativeDepositGasFee(inputs)\n          : await account.assetsManager.estimateDepositGasFee(inputs);\n      } catch (error) {\n        console.error(\"estimateDepositGas\", error);\n        estimatedGasFee = 0n;\n      }\n\n      console.log(\"depositFee\", depositFee);\n      console.log(\"estimatedGasFee\", estimatedGasFee);\n\n      return depositFee + estimatedGasFee;\n    },\n    [\n      account,\n      targetChain,\n      decimals,\n      dstToken,\n      dst?.address,\n      vaultAddress,\n      isNativeToken,\n      dst,\n    ],\n  );\n\n  const key = useMemo(() => {\n    if (\n      !dst?.address ||\n      !decimals ||\n      !vaultAddress ||\n      !dstToken ||\n      !quantity ||\n      !targetChain?.network_infos?.chain_id\n    ) {\n      return null;\n    }\n\n    return [\n      \"depositFee\",\n      dst?.address,\n      vaultAddress,\n      dstToken,\n      decimals,\n      targetChain?.network_infos?.chain_id,\n      quantity,\n    ];\n  }, [quantity, targetChain, decimals, dstToken, dst, vaultAddress]);\n\n  const fetcher = useCallback(async () => {\n    const res = await getDepositFee(quantity);\n    return res;\n  }, [getDepositFee, quantity]);\n\n  const {\n    data,\n    isValidating: depositFeeRevalidating,\n    mutate: mutateDepositFee,\n  } = useSWR(key, fetcher, {\n    revalidateOnFocus: true,\n  });\n\n  const depositFee = useMemo(() => {\n    const fee = data ?? 0n;\n    return BigInt(\n      new Decimal(fee.toString())\n        .mul(DEPOSIT_FEE_RATE)\n        .toFixed(0, Decimal.ROUND_UP)\n        .toString(),\n    );\n  }, [data]);\n\n  return { depositFee, depositFeeRevalidating, mutateDepositFee };\n}\n\nfunction useTargetChain(srcChainId?: number) {\n  const networkId = useConfig(\"networkId\");\n  const [, { findByChainId, isTestnetChain }] = useChains(undefined);\n\n  const targetChain = useMemo(() => {\n    let chain: API.Chain | undefined;\n\n    // Orderly testnet supported chain\n    if (networkId === \"testnet\") {\n      chain = findByChainId(\n        isTestnetChain(srcChainId) ? srcChainId! : ARBITRUM_TESTNET_CHAINID,\n      ) as API.Chain;\n    } else {\n      chain = findByChainId(srcChainId!) as API.Chain;\n      // if is orderly un-supported chain\n      if (!chain?.network_infos?.bridgeless) {\n        // Orderly mainnet supported chain\n        chain = findByChainId(ARBITRUM_MAINNET_CHAINID) as API.Chain;\n      }\n    }\n    return chain;\n  }, [networkId, findByChainId, isTestnetChain, srcChainId]);\n\n  return targetChain;\n}\n\nfunction checkIfChainTokenNeedRestApprove(chainId: number, token: string) {\n  // check chain (except ethereum mainnet)\n  return chainId === ETHEREUM_MAINNET_CHAINID && token === \"USDT\";\n}\n\n// When no SPL token found, get balance will throw TokenAccountNotFoundError\nfunction ignoreBalanceError(options: {\n  token: string;\n  chainNamespace: string;\n  err: any;\n}) {\n  const { token, chainNamespace, err } = options;\n  return (\n    chainNamespace === ChainNamespace.solana &&\n    err?.name === \"TokenAccountNotFoundError\"\n  );\n}\n","import { useAccount } from \"../useAccount\";\nimport { useMaxWithdrawal } from \"./useMaxWithdrawal\";\n\ninterface ConvertOptions {\n  token?: string;\n}\n\nexport const useConvert = (options: ConvertOptions) => {\n  const { token = \"\" } = options;\n\n  const { account } = useAccount();\n  const maxAmount = useMaxWithdrawal(token);\n\n  const convert = async (inputs: {\n    amount: number;\n    slippage: number;\n    receivedAsset?: string;\n  }) => {\n    return account.assetsManager.convert({\n      amount: inputs.amount,\n      slippage: inputs.slippage,\n      converted_asset: token,\n      received_asset: inputs.receivedAsset,\n    });\n  };\n\n  return { maxAmount, convert };\n};\n","import { useCallback } from \"react\";\nimport { useSubAccountMutation } from \"../subAccount/useSubAccountMutation\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxWithdrawal } from \"./useMaxWithdrawal\";\n\nexport type TransferReturn = ReturnType<typeof useTransfer>;\n\ntype Receiver = {\n  account_id: string;\n  amount: number;\n};\n\ntype TransferOptions = {\n  /** if not provided, use current account id */\n  fromAccountId?: string;\n  token?: string;\n};\n\nexport const useTransfer = (options?: TransferOptions) => {\n  const { fromAccountId, token = \"\" } = options || {};\n\n  const { unsettledPnL, holding } = useCollateral();\n\n  const [doTransfer, { isMutating: submitting }] = useSubAccountMutation(\n    \"/v1/internal_transfer\",\n    \"POST\",\n    {\n      accountId: fromAccountId,\n    },\n  );\n\n  const transfer = useCallback(\n    async (token: string, receivers: Receiver | Receiver[]) => {\n      return doTransfer({\n        token,\n        receiver_list: Array.isArray(receivers) ? receivers : [receivers],\n      })\n        .then((res) => {\n          if (res.success) {\n            return res;\n          }\n          throw res;\n        })\n        .catch((err) => {\n          throw err;\n        });\n    },\n    [doTransfer],\n  );\n\n  const maxAmount = useMaxWithdrawal(token);\n\n  return {\n    submitting,\n    transfer,\n    maxAmount,\n    unsettledPnL,\n    holding,\n  };\n};\n","import { useCallback, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\n\nexport type InternalTransferReturn = ReturnType<typeof useInternalTransfer>;\n\nexport type InternalTransferInputs = {\n  token: string;\n  amount: string;\n  receiver: string;\n  /** orderly token decimals */\n  decimals: number;\n};\n\nexport const useInternalTransfer = () => {\n  const [submitting, setSubmitting] = useState(false);\n  const { account } = useAccount();\n\n  const transfer = useCallback(\n    async (inputs: InternalTransferInputs) => {\n      setSubmitting(true);\n      return account.assetsManager\n        .internalTransfer(inputs)\n        .then((res: any) => {\n          if (res.success) {\n            return res;\n          }\n          throw res;\n        })\n        .catch((err) => {\n          throw err;\n        })\n        .finally(() => {\n          setSubmitting(false);\n        });\n    },\n    [account],\n  );\n\n  return {\n    submitting,\n    transfer,\n  };\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useAccount } from \"../useAccount\";\nimport { useWS } from \"../useWS\";\n\n// only first callball will be called\n// TODO: refactor this, reference useBalanceTopic\nexport const useWalletSubscription = (options?: {\n  onMessage?: (data: any) => void;\n}) => {\n  const ws = useWS();\n  const { state } = useAccount();\n\n  return useSWRSubscription(\n    state.accountId ? [\"wallet\", state.accountId] : null,\n    (_, { next }) => {\n      const unsubscribe = ws.privateSubscribe(\n        {\n          id: \"wallet\",\n          event: \"subscribe\",\n          topic: \"wallet\",\n          ts: Date.now(),\n        },\n        {\n          onMessage: (data: any) => {\n            //\n            options?.onMessage?.(data);\n            next(null, data);\n          },\n        },\n      );\n\n      return () => unsubscribe();\n    },\n  );\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useAccount } from \"../useAccount\";\nimport { useWS } from \"../useWS\";\n\nexport const useBalanceSubscription = (options?: {\n  onMessage?: (data: any) => void;\n}) => {\n  const ws = useWS();\n  const { state } = useAccount();\n\n  return useSWRSubscription(\n    state.accountId ? [\"balance\", state.accountId] : null,\n    (_, { next }) => {\n      const unsubscribe = ws.privateSubscribe(\n        {\n          id: \"balance\",\n          event: \"subscribe\",\n          topic: \"balance\",\n          ts: Date.now(),\n        },\n        {\n          onMessage: (data: any) => {\n            options?.onMessage?.(data);\n            next(null, data);\n          },\n        },\n      );\n\n      return () => unsubscribe();\n    },\n  );\n};\n","import { useEffect } from \"react\";\nimport { useAccount } from \"../../useAccount\";\nimport { useWS } from \"../../useWS\";\n\nexport const useWalletTopic = (options: { onMessage: (data: any) => void }) => {\n  const ws = useWS();\n  const { state } = useAccount();\n\n  useEffect(() => {\n    if (!state.accountId) return;\n\n    const unsubscribe = ws.privateSubscribe(\n      {\n        id: \"wallet\",\n        event: \"subscribe\",\n        topic: \"wallet\",\n        ts: Date.now(),\n      },\n      {\n        onMessage: (data: any) => {\n          options.onMessage(data);\n        },\n      },\n    );\n\n    return () => unsubscribe?.();\n  }, [state.accountId]);\n};\n","import { useEffect } from \"react\";\nimport { useAccount } from \"../../useAccount\";\nimport { useWS } from \"../../useWS\";\n\nexport const useBalanceTopic = (options: {\n  onMessage: (data: any) => void;\n}) => {\n  const ws = useWS();\n  const { state } = useAccount();\n\n  useEffect(() => {\n    if (!state.accountId) return;\n\n    const unsubscribe = ws.privateSubscribe(\n      {\n        id: \"balance\",\n        event: \"subscribe\",\n        topic: \"balance\",\n        ts: Date.now(),\n      },\n      {\n        onMessage: (data: any) => {\n          options.onMessage(data);\n        },\n      },\n    );\n\n    return () => unsubscribe?.();\n  }, [state.accountId]);\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useAccount } from \"../useAccount\";\nimport { useWS } from \"../useWS\";\n\nexport const useSettleSubscription = (options?: {\n  onMessage?: (data: any) => void;\n}) => {\n  const ws = useWS();\n  const { state } = useAccount();\n\n  return useSWRSubscription(\n    state.accountId ? [\"settle\", state.accountId] : null,\n    (_, { next }) => {\n      const unsubscribe = ws.privateSubscribe(\n        {\n          id: \"settle\",\n          event: \"subscribe\",\n          topic: \"settle\",\n          ts: getTimestamp(),\n        },\n        {\n          onMessage: (data: any) => {\n            //\n            options?.onMessage?.(data);\n            next(data);\n          },\n        },\n      );\n\n      return () => unsubscribe();\n    },\n  );\n};\n","import { useEffect, useRef } from \"react\";\nimport { mutate } from \"swr\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { AccountState, EVENT_NAMES } from \"@orderly.network/core\";\nimport { API, MarginMode, WSMessage } from \"@orderly.network/types\";\nimport { useApiStatusActions } from \"../next/apiStatus/apiStatus.store\";\nimport { getKeyFunction } from \"../provider/dataCenter/dataCenterContext\";\nimport {\n  AlgoOrderFieldChanges,\n  AlgoOrderMergeHandler,\n} from \"../services/orderMerge/algoOrderMergeHandler\";\nimport { CalculatorScope } from \"../types\";\nimport { useAccount } from \"../useAccount\";\nimport { useCalculatorService } from \"../useCalculatorService\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useLocalStorage } from \"../useLocalStorage\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useWS } from \"../useWS\";\nimport { updateOrdersHandler, updateAlgoOrdersHandler } from \"../utils/swr\";\nimport { object2underscore } from \"../utils/ws\";\nimport { useAppStore } from \"./appStore\";\nimport { usePositionActions } from \"./orderlyHooks\";\n\nexport const usePrivateDataObserver = (options: {\n  getKeysMap: (type: string) => Map<string, getKeyFunction>;\n}) => {\n  const ws = useWS();\n  // const { mutate } = useSWRConfig();\n  const ee = useEventEmitter();\n  const { state, account } = useAccount();\n  const { setAccountInfo, restoreHolding, cleanAll } = useAppStore(\n    (state) => state.actions,\n  );\n  const statusActions = useApiStatusActions();\n  const calculatorService = useCalculatorService();\n  const positionsActions = usePositionActions();\n  // fetch the data of current account\n\n  const { data: clientInfo } = usePrivateQuery<API.AccountInfo>(\n    \"/v1/client/info\",\n    {\n      revalidateOnFocus: false,\n    },\n  );\n\n  useEffect(() => {\n    if (clientInfo) {\n      setAccountInfo(clientInfo);\n    }\n  }, [clientInfo, setAccountInfo]);\n  //======================\n\n  /**\n   * fetch the positions of current account\n   */\n  const { data: positions, isLoading: isPositionLoading } =\n    usePrivateQuery<API.PositionInfo>(\"/v1/positions\", {\n      formatter: (data) => data,\n      onError: (error) => {\n        statusActions.updateApiError(\"positions\", error.message);\n      },\n      // revalidateOnFocus: false,\n    });\n\n  // check status, if state less than AccountStatusEnum.EnableTrading, will be clean positions\n  useEffect(() => {\n    const handler = (state: AccountState) => {\n      if (!state.accountId) {\n        calculatorService.stop();\n        cleanAll();\n        positionsActions.clearAll();\n      }\n    };\n\n    account.on(EVENT_NAMES.statusChanged, handler);\n\n    return () => {\n      account.off(EVENT_NAMES.statusChanged, handler);\n    };\n  }, []);\n\n  useEffect(() => {\n    /// start load positions\n    if (isPositionLoading) {\n      statusActions.updateApiLoading(\"positions\", isPositionLoading);\n    }\n  }, [isPositionLoading, statusActions]);\n\n  useEffect(() => {\n    if (positions && Array.isArray(positions.rows)) {\n      // if (positions.rows.length > 0) {\n      calculatorService.calc(CalculatorScope.POSITION, positions);\n      // } else {\n      //   statusActions.updateApiLoading(\"positions\", false);\n      // }\n    }\n  }, [calculatorService, positions]);\n\n  //======================\n\n  // useHolding\n  const { data: holding } = usePrivateQuery<API.Holding[]>(\n    \"/v1/client/holding\",\n    {\n      formatter: (data) => data.holding,\n      // revalidateOnFocus: false,\n    },\n  );\n\n  useEffect(() => {\n    if (!account.accountId) return;\n\n    // TODO: useBalanceTopic\n    const unsubscribe = ws.privateSubscribe(\n      {\n        id: \"balance\",\n        event: \"subscribe\",\n        topic: \"balance\",\n        ts: Date.now(),\n      },\n      {\n        onMessage: (data: any) => {\n          const holding = data?.balances ?? ({} as Record<string, any>);\n\n          if (holding) {\n            console.log(\"---->>>>>>!!!! holding\", holding);\n            calculatorService.calc(CalculatorScope.PORTFOLIO, { holding });\n          }\n        },\n      },\n    );\n\n    return () => unsubscribe?.();\n    // TODO: use state.accountId\n  }, [account.accountId]);\n\n  const isHoldingInit = useRef(false);\n\n  useEffect(() => {\n    isHoldingInit.current = false;\n    // if switch address, we should reset the holding\n  }, [state.address]);\n\n  useEffect(() => {\n    if (!holding) {\n      return;\n    }\n    // [\n    //   {\n    //     updated_time: 1747701141241,\n    //     token: \"USDC\",\n    //     holding: 12000.963747,\n    //     frozen: 37855.270927,\n    //     pending_short: 0.0,\n    //   },\n    // ];\n    if (isHoldingInit.current) {\n      calculatorService.calc(CalculatorScope.PORTFOLIO, { holding });\n    } else {\n      restoreHolding(holding);\n    }\n    isHoldingInit.current = true;\n  }, [holding]);\n\n  const [subOrder] = useLocalStorage(\"orderly_subscribe_order\", true);\n\n  const updateOrders = (\n    data: WSMessage.AlgoOrder[] | WSMessage.Order,\n    isAlgoOrder: boolean,\n  ) => {\n    const keysMap = options.getKeysMap(\"orders\");\n\n    const filteredKeys = new Map();\n    const keyStartWith = isAlgoOrder ? \"algoOrders\" : \"orders\";\n\n    const keys = keysMap.keys();\n\n    for (const key of keys) {\n      if (key.startsWith(keyStartWith)) {\n        filteredKeys.set(key, keysMap.get(key));\n      }\n    }\n\n    let fieldChanges: AlgoOrderFieldChanges = {};\n\n    filteredKeys.forEach((getKey, key) => {\n      mutate(\n        unstable_serialize((index, prevData) => [\n          getKey(index, prevData),\n          state.accountId,\n        ]),\n        (prevData?: any[]) => {\n          try {\n            if (isAlgoOrder) {\n              const res = updateAlgoOrdersHandler(\n                key,\n                data as WSMessage.AlgoOrder[],\n                prevData!,\n              );\n              fieldChanges = res?.fieldChanges || {};\n              return res?.mergedOrders;\n            }\n            return updateOrdersHandler(key, data as WSMessage.Order, prevData);\n          } catch (error) {\n            return prevData;\n          }\n        },\n        {\n          revalidate: false,\n        },\n      );\n    });\n\n    //  emit events;\n    // ee.emit(\"orders:changed\", {\n    //   ...data,\n    //   status: data.status || (data as WSMessage.AlgoOrder).algoStatus,\n    // });\n\n    const formattedData = isAlgoOrder\n      ? AlgoOrderMergeHandler.groupOrders(data as WSMessage.AlgoOrder[])\n      : object2underscore(data);\n\n    ee.emit(\"orders:changed\", {\n      ...formattedData,\n      status: isAlgoOrder\n        ? formattedData.algo_status\n        : (data as WSMessage.Order).status,\n      // custom field name\n      fieldChanges,\n    });\n  };\n\n  // orders\n  useEffect(() => {\n    if (!state.accountId) {\n      return;\n    }\n    if (subOrder !== true) {\n      return;\n    }\n    const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n      onMessage: (data: any) => {\n        updateOrders(data, false);\n      },\n    });\n\n    return () => unsubscribe?.();\n  }, [state.accountId, subOrder]);\n\n  // algo orders\n  useEffect(() => {\n    if (!state.accountId) return;\n    if (subOrder !== true) return;\n    const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n      onMessage: (data: any) => {\n        updateOrders(data, true);\n      },\n    });\n\n    return () => unsubscribe?.();\n  }, [state.accountId, subOrder]);\n\n  useEffect(() => {\n    if (!state.accountId) return;\n    // {\n    //     \"accountDetail\": {\n    //       \"marginMode\": \"SPOT_FUTURES\",\n    //       \"futuresLeverage\": 10,\n    //       \"takerFeeRate\": 10,\n    //       \"makerFeeRate\": 10,\n    //       \"futuresTakerFeeRate\": 8,\n    //       \"futuresMakerFeeRate\": 4,\n    //       \"maintenanceCancelFlag\": false\n    //       \"symbolLeverage\":{\n    //           \"leverage\":20\n    //           \"symbol\":\"PERP_BTC_USDC\"\n    //       }\n    //   }\n    // }\n    const positionsKey = [\"/v1/positions\", state.accountId];\n    const leveragesKey = [\"/v1/client/leverages\", state.accountId];\n    const unsubscribe = ws.privateSubscribe(\"account\", {\n      onMessage: (data) => {\n        const { symbol, leverage, marginMode } =\n          data?.accountDetail?.symbolLeverage || {};\n        if (!symbol || leverage === undefined) {\n          return;\n        }\n\n        mutate(\n          positionsKey,\n          (prevPositions: API.PositionInfo | undefined) => {\n            if (prevPositions?.rows?.length) {\n              return {\n                ...prevPositions,\n                rows: prevPositions.rows.map((row: API.Position) => {\n                  // update position leverage when symbol leverage changed\n                  return row.symbol === symbol && row.margin_mode === marginMode\n                    ? { ...row, leverage }\n                    : row;\n                }),\n              };\n            }\n            return prevPositions;\n          },\n          {\n            revalidate: false,\n          },\n        );\n\n        mutate(\n          leveragesKey,\n          (prev: API.LeverageInfo[] | undefined) => {\n            if (!prev) {\n              return [\n                {\n                  symbol,\n                  leverage,\n                  margin_mode: marginMode,\n                },\n              ];\n            }\n\n            const index = prev.findIndex(\n              (item) =>\n                item.symbol === symbol &&\n                (item.margin_mode ?? MarginMode.CROSS) ===\n                  (marginMode ?? MarginMode.CROSS),\n            );\n\n            if (index === -1) {\n              return [\n                ...prev,\n                {\n                  symbol,\n                  leverage,\n                  margin_mode: marginMode,\n                },\n              ];\n            }\n\n            const next = [...prev];\n            next[index] = {\n              ...next[index],\n              leverage,\n            };\n\n            return next;\n          },\n          {\n            revalidate: false,\n          },\n        );\n      },\n    });\n\n    return () => unsubscribe?.();\n  }, [state.accountId]);\n\n  // positions\n  useEffect(() => {\n    if (!state.accountId) {\n      return;\n    }\n    const key = [\"/v1/positions\", state.accountId];\n    const unsubscribe = ws.privateSubscribe(\"position\", {\n      onMessage: (data: { positions: WSMessage.Position[] }) => {\n        const { positions: nextPositions } = data;\n\n        // updatePositions();\n\n        mutate(\n          key,\n          (prevPositions: any) => {\n            // return nextPositions;\n            if (!!prevPositions) {\n              const newPositions = {\n                ...prevPositions,\n                rows: prevPositions.rows.map((row: API.PositionExt) => {\n                  const itemIndex = nextPositions.findIndex(\n                    (item) =>\n                      item.symbol === row.symbol &&\n                      item.marginMode === row.margin_mode,\n                  );\n\n                  // const item = nextPositions.find(\n                  //   (item) => item.symbol === row.symbol\n                  // );\n\n                  if (itemIndex >= 0) {\n                    const itemArr = nextPositions.splice(itemIndex, 1);\n\n                    const item = itemArr[0];\n\n                    // ignore the ws update with averageOpenPrice === 0\n                    if (item.averageOpenPrice === 0 && item.positionQty !== 0) {\n                      return row;\n                    }\n                    // console.log(\"---->>>>>>!!!! item\", item);\n\n                    return object2underscore(item);\n                  }\n\n                  return row;\n                }),\n              };\n\n              if (nextPositions.length > 0) {\n                newPositions.rows = [\n                  ...newPositions.rows,\n                  ...nextPositions.map(object2underscore),\n                ];\n              }\n\n              return newPositions;\n            }\n          },\n          {\n            revalidate: false,\n          },\n        );\n      },\n    });\n    return () => {\n      unsubscribe?.();\n    };\n  }, [state.accountId]);\n};\n","import { Decimal } from \"@orderly.network/utils\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useEffect, useMemo, useState } from \"react\";\n\n// Define the PriceRange type to represent a range of prices\nexport type PriceRange = {\n    min: number,\n    max: number,\n};\n\n/**\n * Get the price range for the specified symbol with an optional price\n *\n * @param symbol - The symbol to get the price range for\n * @param price - Optional parameter to set the price\n * @returns PriceRange | undefined - Returns the PriceRange representing the price range or undefined\n */\nexport const useSymbolPriceRange = (symbol: string, side: \"BUY\" | \"SELL\", price?: number): PriceRange | undefined => {\n    const config = useSymbolsInfo();\n    const priceRange = config?.[symbol](\"price_range\");\n    const priceScrope = config?.[symbol](\"price_scope\");\n    const { data: prices } = useMarkPricesStream();\n    const markPrice = price || prices?.[symbol];\n\n    /// max mark_price_i * (1+price_range)\n    /// min mark_price_i * (1-price_range)\n\n    const range = useMemo(() => {\n        if (config === undefined || markPrice === undefined) {\n            return undefined;\n        }\n\n        if (priceRange === undefined || Number.isNaN(markPrice)) {\n            return undefined;\n        }\n\n        if (side === \"BUY\") {\n            return {\n                max: new Decimal(markPrice).mul((1 + priceRange)).toNumber(),\n                min: new Decimal(markPrice).mul((1 - priceScrope)).toNumber(),\n            };\n        }\n\n        return {\n            max: new Decimal(markPrice).mul((1 + priceScrope)).toNumber(),\n            min: new Decimal(markPrice).mul((1 - priceRange)).toNumber(),\n        };\n    }, [symbol, side, priceRange, markPrice]);\n\n    return range;\n}\n","import { Decimal } from \"@orderly.network/utils\";\n\n/**\n * get the min notional for the order\n */\nexport function getMinNotional(props: {\n  base_tick?: number;\n  price?: string | number;\n  qty?: string | number;\n  min_notional?: number;\n  quote_dp?: number;\n  base_dp?: number;\n  quote_tick?: number;\n}) {\n  const { price, base_tick, qty, min_notional, base_dp, quote_dp, quote_tick } =\n    props;\n  if (price && qty && min_notional) {\n    try {\n      const calcMinNotional = new Decimal(price).mul(new Decimal(qty));\n\n      if (calcMinNotional.lt(min_notional)) {\n        let minQty = new Decimal(min_notional)\n          .div(price)\n          .toDecimalPlaces(base_dp, Decimal.ROUND_DOWN)\n          .add(base_tick ?? 0);\n\n        if (base_tick && base_tick > 0) {\n          minQty = new Decimal(\n            getRoundedDownDivision(minQty.toNumber(), base_tick),\n          );\n        }\n\n        const newMinNotional = minQty\n          .mul(price)\n          .add(quote_tick ?? 0)\n          .toFixed(quote_dp);\n\n        return newMinNotional;\n      }\n    } catch (e) {\n      console.log(\"getMinNotional error\", e);\n    }\n  }\n}\n\n/**\n * @deprecated please use getMinNotional instead, it will be removed in next major version\n */\nexport function checkNotional(props: {\n  base_tick: number;\n  price?: string | number;\n  qty?: string | number;\n  min_notional?: number;\n  quote_dp?: number;\n  base_dp?: number;\n  quote_tick?: number;\n}): string | undefined {\n  const { price, base_tick, qty, min_notional, base_dp, quote_dp, quote_tick } =\n    props;\n  if (price !== undefined && qty !== undefined && min_notional !== undefined) {\n    try {\n      const calcNotional = new Decimal(price).mul(new Decimal(qty)).toNumber();\n      const notional = Number.parseFloat(`${min_notional}`);\n\n      if (calcNotional < notional) {\n        let minQty = new Decimal(notional)\n          .div(price)\n          .toDecimalPlaces(base_dp, Decimal.ROUND_DOWN)\n          .add(base_tick ?? 0);\n        if (base_tick && base_tick > 0) {\n          minQty = new Decimal(\n            getRoundedDownDivision(minQty.toNumber(), base_tick),\n          );\n        }\n        const newMinNotional = minQty\n          .mul(price)\n          .add(quote_tick ?? 0)\n          .toFixed(quote_dp);\n        return `The order value should be greater or equal to ${newMinNotional} USDC`;\n      }\n\n      return undefined;\n    } catch (e) {\n      return undefined;\n    }\n  }\n\n  return undefined;\n}\n\n/**\n *\n * 452, 100 callback: 400\n * 333, 10 callback:  330\n * 222, 1 callback:  222\n */\nfunction getRoundedDownDivision(\n  value: number | string,\n  tick: number | string,\n): number {\n  const decimalValue = new Decimal(value);\n  const decimalTick = new Decimal(tick);\n\n  const quotient = decimalValue.dividedToIntegerBy(decimalTick);\n\n  return quotient.mul(decimalTick).toNumber();\n}\n","import {\n  OrderEntity,\n  OrderType,\n  OrderlyOrder,\n  AlgoOrderType,\n  ChildOrder,\n  AlgoOrderRootType,\n  AlgoOrderChildOrders,\n  OrderSide,\n  PositionType,\n  MarginMode,\n} from \"@orderly.network/types\";\nimport { Decimal, resolveTPSLOrderType } from \"@orderly.network/utils\";\nimport { getMinNotional } from \"../../utils/createOrder\";\nimport {\n  OrderCreator,\n  ValuesDepConfig,\n  OrderValidationItem,\n  OrderValidationResult,\n} from \"./interface\";\nimport { OrderValidation } from \"./orderValidation\";\n\n/**\n * Base order creator implementing Template Method pattern\n * Defines the skeleton of order creation and validation algorithms,\n * deferring some steps to subclasses\n */\nexport abstract class BaseOrderCreator<T> implements OrderCreator<T> {\n  abstract orderType: OrderType;\n\n  /**\n   * Template method for order creation\n   * Defines the algorithm structure with hooks for subclasses\n   */\n  create(values: T, config?: ValuesDepConfig): T {\n    this.beforeCreate(values, config);\n    const order = this.buildOrder(values, config);\n    return this.afterCreate(order, config);\n  }\n\n  /**\n   * Template method for order validation\n   * Defines the algorithm structure with hooks for subclasses\n   */\n  validate(values: T, config: ValuesDepConfig): Promise<OrderValidationResult> {\n    this.beforeValidate(values, config);\n    const errors = this.runValidations(values, config);\n    return Promise.resolve(this.afterValidate(errors, values, config));\n  }\n\n  /**\n   * Hook method called before order creation\n   * Subclasses can override to perform pre-creation setup\n   * @param values - Order values\n   * @param config - Configuration\n   */\n  protected beforeCreate(values: T, config?: ValuesDepConfig): void {\n    // Default implementation does nothing\n  }\n\n  /**\n   * Hook method to build the order\n   * Must be implemented by subclasses\n   * @param values - Order values\n   * @param config - Configuration\n   * @returns The created order\n   */\n  protected abstract buildOrder(values: T, config?: ValuesDepConfig): T;\n\n  /**\n   * Hook method called after order creation\n   * Subclasses can override to perform post-creation processing\n   * @param order - The created order\n   * @param config - Configuration\n   * @returns The final order (possibly modified)\n   */\n  protected afterCreate(order: T, config?: ValuesDepConfig): T {\n    return order;\n  }\n\n  /**\n   * Hook method called before validation\n   * Subclasses can override to perform pre-validation setup\n   * @param values - Order values to validate\n   * @param config - Configuration\n   */\n  protected beforeValidate(values: T, config: ValuesDepConfig): void {\n    // Default implementation does nothing\n  }\n\n  /**\n   * Hook method to run validations\n   * Must be implemented by subclasses\n   * @param values - Order values to validate\n   * @param config - Configuration\n   * @returns Validation result with any errors\n   */\n  protected abstract runValidations(\n    values: T,\n    config: ValuesDepConfig,\n  ): OrderValidationResult;\n\n  /**\n   * Hook method called after validation\n   * Subclasses can override to perform post-validation processing\n   * @param errors - Validation errors found\n   * @param values - Original order values\n   * @param config - Configuration\n   * @returns Final validation result (possibly modified)\n   */\n  protected afterValidate(\n    errors: OrderValidationResult,\n    values: T,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    return errors;\n  }\n\n  baseOrder(data: OrderlyOrder, config?: ValuesDepConfig): OrderlyOrder {\n    const order: Pick<\n      OrderEntity,\n      | \"symbol\"\n      | \"order_type\"\n      | \"side\"\n      | \"reduce_only\"\n      | \"order_quantity\"\n      | \"total\"\n      | \"visible_quantity\"\n      | \"slippage\"\n      | \"margin_mode\"\n    > = {\n      symbol: data.symbol!,\n      order_type:\n        data.order_type === OrderType.LIMIT\n          ? !!data.order_type_ext\n            ? data.order_type_ext\n            : data.order_type\n          : data.order_type,\n      side: data.side,\n      reduce_only: data.reduce_only!,\n      order_quantity: data.order_quantity!,\n      total: data.total,\n      margin_mode: data.margin_mode || MarginMode.CROSS,\n      // slippage: data.slippage,\n    };\n\n    if (data.order_type === OrderType.MARKET && !!data.slippage) {\n      order.slippage = new Decimal(data.slippage).div(100).toNumber();\n    }\n\n    if (data.visible_quantity === 0) {\n      order.visible_quantity = data.visible_quantity;\n    }\n\n    const bracketOrder = this.parseBracketOrder(data, config);\n\n    if (!bracketOrder) {\n      return order as OrderlyOrder;\n    }\n\n    return {\n      ...order,\n      algo_type: AlgoOrderRootType.BRACKET,\n\n      child_orders: [bracketOrder],\n    } as OrderlyOrder;\n  }\n\n  /**\n   * Base validation method that can be called by subclasses\n   * Validates common order properties like quantity and min notional\n   * @param values - Order values to validate\n   * @param configs - Configuration\n   * @returns Validation result (synchronous, not a Promise)\n   */\n  baseValidate(\n    values: OrderlyOrder,\n    configs: ValuesDepConfig,\n  ): OrderValidationResult {\n    const errors: {\n      [P in keyof OrderEntity]?: OrderValidationItem;\n    } = {};\n\n    const { maxQty, symbol, markPrice } = configs;\n\n    // Extract order properties with proper type handling\n    let order_quantity = (values as any).order_quantity as\n      | number\n      | string\n      | undefined;\n    const total = (values as any).total as string | number | undefined;\n    const order_price = (values as any).order_price as\n      | number\n      | string\n      | undefined;\n    const reduce_only = (values as any).reduce_only as boolean | undefined;\n    const order_type = (values as any).order_type as OrderType | undefined;\n\n    const { min_notional, base_tick, quote_dp, quote_tick, base_dp } =\n      symbol || {};\n\n    if (!order_quantity) {\n      // calculate order_quantity from total\n      if (total && order_price) {\n        const { quote_dp } = configs.symbol;\n        const totalNumber = new Decimal(total);\n        const qty = totalNumber.dividedBy(order_price).toFixed(quote_dp);\n        order_quantity = qty;\n      }\n    }\n\n    if (!order_quantity) {\n      errors.order_quantity = OrderValidation.required(\"order_quantity\");\n    } else {\n      // need to use MaxQty+base_max, base_min to compare\n      const { base_min, quote_dp, base_dp } = configs.symbol;\n      const qty = new Decimal(order_quantity);\n      if (qty.lt(base_min)) {\n        errors.order_quantity = OrderValidation.min(\n          \"order_quantity\",\n          new Decimal(base_min).todp(base_dp).toString(),\n        );\n      } else if (qty.gt(maxQty)) {\n        errors.order_quantity = OrderValidation.max(\n          \"order_quantity\",\n          new Decimal(maxQty).todp(base_dp).toString(),\n        );\n      }\n    }\n\n    // remove total validation\n    // if (!!total) {\n    //   const { quote_max, quote_min, quote_dp } = configs.symbol;\n    //   const totalNumber = new Decimal(total);\n    //   if (totalNumber.lt(quote_min)) {\n    //     errors.total = {\n    //       type: \"min\",\n    //       message: `Quantity must be at least ${new Decimal(quote_min).todp(\n    //         quote_dp\n    //       )}`,\n    //     };\n    //   } else if (totalNumber.gt(quote_max)) {\n    //     errors.total = {\n    //       type: \"max\",\n    //       message: `Quantity should be less or equal than ${new Decimal(\n    //         quote_max\n    //       ).todp(quote_dp)}`,\n    //     };\n    //   }\n    // }\n\n    const price = `${order_type}`.includes(\"MARKET\") ? markPrice : order_price;\n    const minNotional = getMinNotional({\n      base_tick,\n      quote_tick,\n      price,\n      qty: order_quantity,\n      min_notional,\n      quote_dp,\n      base_dp,\n    });\n\n    if (minNotional !== undefined && !reduce_only) {\n      errors.total = {\n        type: \"min\",\n        message: `The order value should be greater or equal to ${minNotional} USDC`,\n        value: minNotional,\n      };\n    }\n\n    this.validateBracketOrder(values, configs, errors);\n\n    return errors;\n  }\n\n  totalToQuantity(\n    order: {\n      order_quantity?: number | string;\n      total?: string | number;\n      order_price?: string | number;\n    },\n    config: ValuesDepConfig,\n  ): OrderEntity {\n    // if order_quantity is not set but total is set, calculate order_quantity from total\n    if (!order.order_quantity && order.total && order.order_price) {\n      const { base_dp } = config.symbol;\n      const totalNumber = new Decimal(order.total);\n      const qty = totalNumber.div(order.order_price).toDecimalPlaces(base_dp);\n      order.order_quantity = qty.toNumber();\n\n      delete order.total;\n    }\n\n    return order as OrderEntity;\n  }\n\n  get type(): OrderType {\n    return this.orderType;\n  }\n\n  protected getChildOrderType(\n    positionType?: PositionType,\n    orderPrice?: string,\n    orderType?: OrderType,\n  ): OrderType {\n    return resolveTPSLOrderType(\n      orderType,\n      orderPrice,\n      positionType !== PositionType.PARTIAL,\n    );\n  }\n\n  protected parseBracketOrder(\n    data: OrderlyOrder,\n    config?: ValuesDepConfig,\n  ): AlgoOrderChildOrders | null {\n    const orders: ChildOrder[] = [];\n\n    const side = data.side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n    const algoType: AlgoOrderRootType =\n      data.position_type === PositionType.PARTIAL\n        ? AlgoOrderRootType.TP_SL\n        : AlgoOrderRootType.POSITIONAL_TP_SL;\n    if (!!data.tp_trigger_price) {\n      const tp_trigger_price = data.tp_trigger_price;\n      const orderItem: ChildOrder = {\n        algo_type: AlgoOrderType.TAKE_PROFIT,\n        side: side,\n        // TODO need confirm child order type\n        type: this.getChildOrderType(\n          data.position_type,\n          data.tp_order_price,\n          data.tp_order_type,\n        ),\n        trigger_price: tp_trigger_price,\n        symbol: data.symbol,\n        reduce_only: true,\n      };\n      if (orderItem.type === OrderType.LIMIT) {\n        this.assertValidBracketLimitPrice(data.tp_order_price, config);\n        orderItem.price = data.tp_order_price;\n      }\n\n      orders.push(orderItem);\n    }\n\n    if (!!data.sl_trigger_price) {\n      const sl_trigger_price = data.sl_trigger_price;\n      const orderItem: ChildOrder = {\n        algo_type: AlgoOrderType.STOP_LOSS,\n        side: side,\n        // TODO need confirm child order type\n        type: this.getChildOrderType(\n          data.position_type,\n          data.sl_order_price,\n          data.sl_order_type,\n        ),\n        trigger_price: sl_trigger_price,\n        symbol: data.symbol,\n        reduce_only: true,\n      };\n\n      if (orderItem.type === OrderType.LIMIT) {\n        this.assertValidBracketLimitPrice(data.sl_order_price, config);\n        orderItem.price = data.sl_order_price;\n      }\n\n      orders.push(orderItem);\n    }\n\n    if (!orders.length) return null;\n\n    return {\n      symbol: data.symbol,\n      algo_type: algoType,\n      child_orders: orders,\n    };\n  }\n\n  private assertValidBracketLimitPrice(\n    price: string | number | undefined,\n    config?: ValuesDepConfig,\n  ): asserts price is string | number {\n    if (!config) {\n      throw new Error(\n        \"Order configuration is required for a Bracket TP/SL limit order\",\n      );\n    }\n\n    if (\n      price == null ||\n      price === \"\" ||\n      !Number.isFinite(Number(price)) ||\n      new Decimal(price).todp(config.symbol.quote_dp).lte(0)\n    ) {\n      throw new Error(\n        \"An enabled Bracket TP/SL limit order requires a positive finite price\",\n      );\n    }\n  }\n\n  private validateBracketOrder(\n    values: OrderlyOrder,\n    config: ValuesDepConfig,\n    errors: {\n      [P in keyof OrderlyOrder]?: OrderValidationItem;\n    },\n  ) {\n    const { tp_trigger_price, sl_trigger_price, side, order_price } = values;\n    const { markPrice } = config;\n\n    if (!tp_trigger_price && !sl_trigger_price) return errors;\n\n    const hasTPPrice = !!tp_trigger_price;\n    const hasSLPrice = !!sl_trigger_price;\n    const { symbol } = config;\n    const { price_range, price_scope, quote_max, quote_min, quote_dp } = symbol;\n    const _orderPrice = order_price || markPrice;\n\n    if (hasTPPrice) {\n      const tpPrice = new Decimal(tp_trigger_price);\n      if (tpPrice.gt(quote_max)) {\n        errors.tp_trigger_price = OrderValidation.max(\n          \"tp_trigger_price\",\n          quote_max,\n        );\n      }\n      if (tpPrice.lt(quote_min)) {\n        errors.tp_trigger_price = OrderValidation.min(\n          \"tp_trigger_price\",\n          quote_min,\n        );\n      }\n\n      if (side === OrderSide.BUY) {\n        if (tpPrice.lte(_orderPrice)) {\n          errors.tp_trigger_price = OrderValidation.min(\n            \"tp_trigger_price\",\n            _orderPrice,\n          );\n        }\n      }\n\n      if (side === OrderSide.SELL) {\n        if (tpPrice.gte(_orderPrice)) {\n          errors.tp_trigger_price = OrderValidation.max(\n            \"tp_trigger_price\",\n            _orderPrice,\n          );\n        }\n      }\n    }\n\n    if (hasSLPrice) {\n      const slPrice = new Decimal(sl_trigger_price);\n      if (slPrice.gt(quote_max)) {\n        errors.sl_trigger_price = OrderValidation.max(\n          \"sl_trigger_price\",\n          quote_max,\n        );\n      }\n      if (slPrice.lt(quote_min)) {\n        errors.sl_trigger_price = OrderValidation.min(\n          \"sl_trigger_price\",\n          quote_min,\n        );\n      }\n\n      if (side === OrderSide.BUY) {\n        if (slPrice.gte(_orderPrice)) {\n          errors.sl_trigger_price = OrderValidation.max(\n            \"sl_trigger_price\",\n            _orderPrice,\n          );\n        }\n        //SL price < mark_price * price_scope\n      }\n\n      if (side === OrderSide.SELL) {\n        if (slPrice.lte(_orderPrice)) {\n          errors.sl_trigger_price = OrderValidation.min(\n            \"sl_trigger_price\",\n            _orderPrice,\n          );\n        }\n      }\n    }\n\n    // if (side === OrderSide.BUY && hasTPPrice && hasSLPrice) {\n    //   const slPrice = new Decimal(sl_trigger_price);\n    //   const tpPrice = new Decimal(tp_trigger_price);\n\n    //   if (tpPrice.lte(_orderPrice)) {\n    //     errors.tp_trigger_price = OrderValidation.min(\n    //       \"tp_trigger_price\",\n    //       _orderPrice\n    //     );\n    //   }\n    //   if (slPrice.gte(_orderPrice)) {\n    //     errors.sl_trigger_price = OrderValidation.max(\n    //       \"sl_trigger_price\",\n    //       _orderPrice\n    //     );\n    //   }\n\n    //   const slPriceScope = slPrice\n    //     .mul(1 - price_scope)\n    //     .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n    //     .toNumber();\n\n    //   if (slPrice.lt(slPriceScope)) {\n    //     errors.sl_trigger_price = OrderValidation.max(\n    //       \"sl_trigger_price\",\n    //       slPriceScope\n    //     );\n    //   }\n    // } else if (side === OrderSide.SELL && hasTPPrice && hasSLPrice) {\n    //   const slPrice = new Decimal(sl_trigger_price);\n    //   const tpPrice = new Decimal(tp_trigger_price);\n\n    //   if (tpPrice.gte(_orderPrice)) {\n    //     errors.tp_trigger_price = OrderValidation.max(\n    //       \"tp_trigger_price\",\n    //       _orderPrice\n    //     );\n    //   }\n\n    //   if (slPrice.lte(_orderPrice)) {\n\n    //   }\n    // }\n\n    return errors;\n  }\n}\n","import { pick } from \"ramda\";\nimport { OrderEntity, OrderlyOrder, OrderType } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\n\n/**\n * Creator for BBO (Best Bid/Offer) orders\n * Uses Template Method pattern from BaseOrderCreator\n */\nexport class BBOOrderCreator extends BaseOrderCreator<OrderEntity> {\n  orderType = OrderType.LIMIT;\n\n  /**\n   * Builds the BBO order\n   * Implements template method hook\n   */\n  protected buildOrder(values: OrderEntity): OrderEntity {\n    const order = {\n      ...this.baseOrder(values as OrderlyOrder),\n      level: values.level,\n    };\n\n    return pick(\n      [\n        \"symbol\",\n        \"order_quantity\",\n        \"visible_quantity\",\n        \"reduce_only\",\n        \"side\",\n        \"order_type\",\n        \"margin_mode\",\n        \"level\",\n      ],\n      order,\n    );\n  }\n\n  /**\n   * Runs base validations\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderlyOrder,\n    configs: ValuesDepConfig,\n  ): OrderValidationResult {\n    return this.baseValidate(values, configs);\n  }\n}\n","import { AlgoOrderEntity, AlgoOrderRootType } from \"@orderly.network/types\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { TPSLValidationStrategy } from \"./validators/TPSLValidationStrategy\";\n\n/**\n * Validates bracket order (order with TP/SL)\n * Uses TPSLValidationStrategy to eliminate code duplication\n */\nexport async function bracketOrderValidator<\n  T extends AlgoOrderEntity<\n    AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n  >,\n>(values: Partial<T>, config: ValuesDepConfig): Promise<OrderValidationResult> {\n  const strategy = new TPSLValidationStrategy();\n  return strategy.validate(values, config);\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport {\n  OrderValidationItem,\n  OrderValidationResult,\n  ValuesDepConfig,\n} from \"../interface\";\n\n/**\n * Base validator class implementing Chain of Responsibility pattern\n * Each validator can pass validation to the next validator in the chain\n */\nexport abstract class BaseValidator {\n  protected next?: BaseValidator;\n\n  /**\n   * Sets the next validator in the chain\n   * @param validator - The next validator to call\n   * @returns The next validator for method chaining\n   */\n  setNext(validator: BaseValidator): BaseValidator {\n    this.next = validator;\n    return validator;\n  }\n\n  /**\n   * Validates values and passes to next validator in chain\n   * @param values - The values to validate\n   * @param config - Configuration for validation\n   * @param errors - Accumulated validation errors\n   * @returns Updated validation result\n   */\n  validate(\n    values: any,\n    config: ValuesDepConfig,\n    errors: OrderValidationResult,\n  ): OrderValidationResult {\n    // Perform this validator's validation\n    const result = this.doValidate(values, config);\n    if (result) {\n      errors[this.getFieldName()] = result;\n    }\n\n    // Pass to next validator in chain, or return if no next validator\n    return this.next?.validate(values, config, errors) ?? errors;\n  }\n\n  /**\n   * Performs the actual validation logic\n   * Must be implemented by concrete validators\n   * @param values - The values to validate\n   * @param config - Configuration for validation\n   * @returns Validation error if validation fails, undefined otherwise\n   */\n  protected abstract doValidate(\n    values: any,\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined;\n\n  /**\n   * Returns the field name this validator validates\n   * Must be implemented by concrete validators\n   * @returns The field name as a key of OrderlyOrder\n   */\n  protected abstract getFieldName(): keyof OrderlyOrder;\n}\n","import { order as orderUtils } from \"@orderly.network/perp\";\nimport { OrderSide, OrderlyOrder } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { getPriceRange } from \"../../../utils/order/orderPrice\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { OrderValidation } from \"../orderValidation\";\nimport { IValidationStrategy } from \"./IValidationStrategy\";\n\n/**\n * Strategy for validating order prices\n * Handles price validation for limit orders and stop-limit orders\n */\nexport class PriceValidationStrategy implements IValidationStrategy<{\n  order_price?: number | string;\n  side: OrderSide;\n  order_type?: string;\n}> {\n  /**\n   * Validates order price against symbol constraints and price range\n   * @param values - Object containing order_price, side, and order_type\n   * @param config - Configuration with symbol info and mark price\n   * @returns Validation error if price is invalid, undefined otherwise\n   */\n  validate(\n    values: {\n      order_price?: number | string;\n      side: OrderSide;\n      order_type?: string;\n    },\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    const { order_price, side } = values;\n\n    if (!order_price) {\n      return OrderValidation.required(\"order_price\");\n    }\n\n    const price = new Decimal(order_price);\n    const { symbol } = config;\n    if (!symbol) {\n      return;\n    }\n    const { quote_max, quote_min, quote_dp, price_range, price_scope } = symbol;\n\n    // Calculate price range based on side and mark price\n    const maxPriceNumber = orderUtils.maxPrice(config.markPrice, price_range);\n    const minPriceNumber = orderUtils.minPrice(config.markPrice, price_range);\n    const scopePriceNumber = orderUtils.scopePrice(\n      config.markPrice,\n      price_scope,\n      side,\n    );\n\n    const priceRange =\n      side === OrderSide.BUY\n        ? {\n            min: scopePriceNumber,\n            max: maxPriceNumber,\n          }\n        : {\n            min: minPriceNumber,\n            max: scopePriceNumber,\n          };\n\n    // Check against absolute quote limits first\n    if (price.gt(quote_max)) {\n      return OrderValidation.max(\"order_price\", quote_max);\n    }\n\n    if (price.lt(quote_min)) {\n      return OrderValidation.min(\"order_price\", quote_min);\n    }\n\n    // Check against calculated price range\n    if (price.gt(priceRange.max)) {\n      return OrderValidation.max(\n        \"order_price\",\n        new Decimal(priceRange.max).todp(quote_dp).toString(),\n      );\n    }\n\n    if (price.lt(priceRange.min)) {\n      return OrderValidation.min(\n        \"order_price\",\n        new Decimal(priceRange.min).todp(quote_dp).toString(),\n      );\n    }\n\n    return undefined;\n  }\n}\n\n/**\n * Strategy for validating trigger prices in stop orders\n */\nexport class TriggerPriceValidationStrategy implements IValidationStrategy<{\n  trigger_price?: number | string;\n}> {\n  /**\n   * Validates trigger price against symbol constraints\n   * @param values - Object containing trigger_price\n   * @param config - Configuration with symbol info\n   * @returns Validation error if trigger price is invalid, undefined otherwise\n   */\n  validate(\n    values: { trigger_price?: number | string },\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    const { trigger_price } = values;\n    const { symbol } = config;\n    if (!symbol) {\n      return;\n    }\n    const { quote_max, quote_min } = symbol;\n\n    if (!trigger_price) {\n      return OrderValidation.required(\"trigger_price\");\n    }\n\n    const triggerPrice = Number(trigger_price);\n\n    if (triggerPrice > quote_max) {\n      return OrderValidation.max(\"trigger_price\", quote_max);\n    }\n\n    if (triggerPrice < quote_min || triggerPrice === 0) {\n      return OrderValidation.min(\"trigger_price\", quote_min);\n    }\n\n    return undefined;\n  }\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { BaseValidator } from \"./BaseValidator\";\nimport { PriceValidationStrategy } from \"./PriceValidationStrategy\";\n\n/**\n * Validator for order price using Strategy pattern\n * Implements Chain of Responsibility pattern\n */\nexport class PriceValidator extends BaseValidator {\n  private strategy: PriceValidationStrategy;\n\n  constructor() {\n    super();\n    this.strategy = new PriceValidationStrategy();\n  }\n\n  protected doValidate(\n    values: any,\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    return this.strategy.validate(\n      {\n        order_price: values.order_price,\n        side: values.side,\n        order_type: values.order_type,\n      },\n      config,\n    );\n  }\n\n  protected getFieldName(): keyof OrderlyOrder {\n    return \"order_price\";\n  }\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { OrderValidation } from \"../orderValidation\";\nimport { IValidationStrategy } from \"./IValidationStrategy\";\n\n/**\n * Strategy for validating order quantities\n * Handles quantity validation including min/max checks\n */\nexport class QuantityValidationStrategy implements IValidationStrategy<{\n  order_quantity?: number | string;\n  total?: number | string;\n  order_price?: number | string;\n}> {\n  /**\n   * Validates order quantity against symbol constraints\n   * Also handles conversion from total to quantity if needed\n   * @param values - Object containing order_quantity, total, and order_price\n   * @param config - Configuration with symbol info and max quantity\n   * @returns Validation error if quantity is invalid, undefined otherwise\n   */\n  validate(\n    values: {\n      order_quantity?: number | string;\n      total?: number | string;\n      order_price?: number | string;\n    },\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    let { order_quantity, total, order_price } = values;\n    const { maxQty, symbol } = config;\n    if (!symbol) {\n      return;\n    }\n    const { base_min, base_dp, quote_dp } = symbol;\n\n    // Calculate order_quantity from total if not provided\n    if (!order_quantity && total && order_price) {\n      const totalNumber = new Decimal(total);\n      const qty = totalNumber.dividedBy(order_price).toFixed(quote_dp);\n      order_quantity = qty;\n    }\n\n    if (!order_quantity) {\n      return OrderValidation.required(\"order_quantity\");\n    }\n\n    const qty = new Decimal(order_quantity);\n\n    // Check minimum quantity\n    if (qty.lt(base_min)) {\n      return OrderValidation.min(\n        \"order_quantity\",\n        new Decimal(base_min).todp(base_dp).toString(),\n      );\n    }\n\n    // Check maximum quantity\n    if (qty.gt(maxQty)) {\n      return OrderValidation.max(\n        \"order_quantity\",\n        new Decimal(maxQty).todp(base_dp).toString(),\n      );\n    }\n\n    return undefined;\n  }\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { BaseValidator } from \"./BaseValidator\";\nimport { QuantityValidationStrategy } from \"./QuantityValidationStrategy\";\n\n/**\n * Validator for order quantity using Strategy pattern\n * Implements Chain of Responsibility pattern\n */\nexport class QuantityValidator extends BaseValidator {\n  private strategy: QuantityValidationStrategy;\n\n  constructor() {\n    super();\n    this.strategy = new QuantityValidationStrategy();\n  }\n\n  protected doValidate(\n    values: any,\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    return this.strategy.validate(\n      {\n        order_quantity: values.order_quantity,\n        total: values.total,\n        order_price: values.order_price,\n      },\n      config,\n    );\n  }\n\n  protected getFieldName(): keyof OrderlyOrder {\n    return \"order_quantity\";\n  }\n}\n","import { OrderValidationResult, ValuesDepConfig } from \"../interface\";\nimport { BaseValidator } from \"./BaseValidator\";\n\n/**\n * Validation chain implementing Chain of Responsibility pattern\n * Allows chaining multiple validators together for sequential validation\n */\nexport class ValidationChain {\n  private validators: BaseValidator[] = [];\n  private head?: BaseValidator;\n\n  /**\n   * Adds a validator to the chain\n   * @param validator - The validator to add\n   * @returns This chain instance for method chaining\n   */\n  addValidator(validator: BaseValidator): this {\n    this.validators.push(validator);\n\n    // Build chain by linking validators\n    if (!this.head) {\n      this.head = validator;\n    } else {\n      // Find the last validator in the chain and link the new one\n      let current = this.head;\n      while (current && (current as any).next) {\n        current = (current as any).next;\n      }\n      if (current) {\n        current.setNext(validator);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Adds multiple validators to the chain\n   * @param validators - Array of validators to add\n   * @returns This chain instance for method chaining\n   */\n  addValidators(validators: BaseValidator[]): this {\n    validators.forEach((validator) => this.addValidator(validator));\n    return this;\n  }\n\n  /**\n   * Validates values using all validators in the chain\n   * @param values - The values to validate\n   * @param config - Configuration for validation\n   * @returns Validation result with all errors found\n   */\n  validate(values: any, config: ValuesDepConfig): OrderValidationResult {\n    const errors: OrderValidationResult = {};\n\n    if (this.head) {\n      return this.head.validate(values, config, errors);\n    }\n\n    return errors;\n  }\n\n  /**\n   * Clears all validators from the chain\n   */\n  clear(): void {\n    this.validators = [];\n    this.head = undefined;\n  }\n\n  /**\n   * Gets the number of validators in the chain\n   * @returns The number of validators\n   */\n  get length(): number {\n    return this.validators.length;\n  }\n}\n","import { pick } from \"ramda\";\nimport { OrderEntity, OrderType, OrderlyOrder } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { PriceValidationStrategy } from \"./validators/PriceValidationStrategy\";\nimport { PriceValidator } from \"./validators/PriceValidator\";\nimport { QuantityValidator } from \"./validators/QuantityValidator\";\nimport { ValidationChain } from \"./validators/ValidationChain\";\n\n/**\n * Creator for limit orders\n * Uses Strategy pattern for validation and Template Method pattern for creation\n */\nexport class LimitOrderCreator<\n  T extends OrderEntity = OrderlyOrder,\n> extends BaseOrderCreator<T> {\n  // private priceValidationStrategy = new PriceValidationStrategy();\n  private validationChain = new ValidationChain()\n    .addValidator(new QuantityValidator())\n    .addValidator(new PriceValidator());\n\n  /**\n   * Builds the limit order\n   * Implements template method hook\n   */\n  protected buildOrder(values: T, config?: ValuesDepConfig): T {\n    // Cast to OrderlyOrder for baseOrder method which expects OrderlyOrder\n    const orderlyValues = values as unknown as OrderlyOrder;\n    const order = {\n      ...this.baseOrder(orderlyValues, config),\n      order_price: orderlyValues.order_price,\n    };\n\n    this.totalToQuantity(order, config!);\n\n    // Use unknown as intermediate type to safely convert pick result to T\n    return pick(\n      [\n        \"symbol\",\n        \"order_price\",\n        \"order_quantity\",\n        \"visible_quantity\",\n        \"reduce_only\",\n        \"side\",\n        \"order_type\",\n        \"margin_mode\",\n        \"algo_type\",\n        \"child_orders\",\n      ],\n      order,\n    ) as unknown as T;\n  }\n\n  /**\n   * Runs validations using validation chain\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: T,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    // Cast to OrderlyOrder for baseValidate method which expects OrderlyOrder\n    const orderlyValues = values as unknown as OrderlyOrder;\n    const errors = this.baseValidate(orderlyValues, config);\n\n    // Use validation chain for price and quantity validation\n    const chainErrors = this.validationChain.validate(orderlyValues, config);\n    Object.assign(errors, chainErrors);\n\n    return errors;\n  }\n\n  orderType = OrderType.LIMIT;\n}\n","import { OrderEntity, OrderType, OrderlyOrder } from \"@orderly.network/types\";\nimport { BracketOrder } from \"@orderly.network/types\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class BracketLimitOrderCreator extends LimitOrderCreator {\n  // orderType: OrderType;\n  create(values: OrderlyOrder, config?: ValuesDepConfig): BracketOrder {\n    const order = super.create(values, config);\n\n    return {\n      ...order,\n      quantity: order.order_quantity,\n      type: order.order_type,\n      price: order.order_price,\n    };\n  }\n\n  async validate(\n    values: OrderlyOrder,\n    config: ValuesDepConfig,\n  ): Promise<OrderValidationResult> {\n    const value = await super.validate(values, config);\n\n    // bracketOrderValidator is async, so we need to await it\n    const bracketData = await bracketOrderValidator(values as any, config);\n\n    return { ...value, ...bracketData };\n  }\n}\n","import { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { IValidationStrategy } from \"./IValidationStrategy\";\n\n/**\n * Strategy for validating slippage in market orders\n * Compares user's slippage tolerance with estimated slippage\n */\nexport class SlippageValidationStrategy\n  implements\n    IValidationStrategy<{\n      slippage?: number | string;\n    }>\n{\n  /**\n   * Validates slippage against estimated slippage\n   * @param values - Object containing slippage value\n   * @param config - Configuration with estimated slippage\n   * @returns Validation error if slippage exceeds estimated, undefined otherwise\n   */\n  validate(\n    values: { slippage?: number | string },\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    const slippage = Number(values.slippage);\n    const estSlippage = Number.isNaN(config.estSlippage)\n      ? 0\n      : Number(config.estSlippage) * 100;\n\n    if (!isNaN(slippage) && estSlippage > slippage) {\n      return {\n        type: \"max\",\n        message: \"Estimated slippage exceeds your maximum allowed slippage.\",\n        value: estSlippage,\n      } as OrderValidationItem;\n    }\n\n    return undefined;\n  }\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { BaseValidator } from \"./BaseValidator\";\nimport { SlippageValidationStrategy } from \"./SlippageValidationStrategy\";\n\n/**\n * Validator for slippage using Strategy pattern\n * Implements Chain of Responsibility pattern\n */\nexport class SlippageValidator extends BaseValidator {\n  private strategy: SlippageValidationStrategy;\n\n  constructor() {\n    super();\n    this.strategy = new SlippageValidationStrategy();\n  }\n\n  protected doValidate(\n    values: any,\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    return this.strategy.validate(\n      {\n        slippage: values.slippage,\n      },\n      config,\n    );\n  }\n\n  protected getFieldName(): keyof OrderlyOrder {\n    return \"slippage\";\n  }\n}\n","import { OrderEntity, OrderType, OrderlyOrder } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { QuantityValidator } from \"./validators/QuantityValidator\";\nimport { SlippageValidationStrategy } from \"./validators/SlippageValidationStrategy\";\nimport { SlippageValidator } from \"./validators/SlippageValidator\";\nimport { ValidationChain } from \"./validators/ValidationChain\";\n\n/**\n * Creator for market orders\n * Uses Strategy pattern for validation and Template Method pattern for creation\n */\nexport class MarketOrderCreator extends BaseOrderCreator<OrderEntity> {\n  private slippageValidationStrategy = new SlippageValidationStrategy();\n  private validationChain = new ValidationChain()\n    .addValidator(new QuantityValidator())\n    .addValidator(new SlippageValidator());\n\n  /**\n   * Builds the market order\n   * Implements template method hook\n   */\n  protected buildOrder(\n    values: OrderEntity,\n    config?: ValuesDepConfig,\n  ): OrderEntity {\n    // Cast to OrderlyOrder for baseOrder method which expects OrderlyOrder\n    const orderlyValues = values as unknown as OrderlyOrder;\n    const data = this.baseOrder(orderlyValues, config);\n\n    // Remove fields that should not be in market orders\n    // Using type assertion to safely delete optional properties\n    const result = { ...data } as Partial<OrderlyOrder>;\n    delete result.order_price;\n    delete result.total;\n    delete result.trigger_price;\n    // isStopOrder might not be in the type definition but could exist at runtime\n    if (\"isStopOrder\" in result) {\n      delete (result as any).isStopOrder;\n    }\n\n    return result as OrderEntity;\n  }\n\n  /**\n   * Runs validations using validation chain\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderEntity,\n    configs: ValuesDepConfig,\n  ): OrderValidationResult {\n    // Cast to OrderlyOrder for baseValidate method which expects OrderlyOrder\n    const orderlyValues = values as unknown as OrderlyOrder;\n    const result = this.baseValidate(orderlyValues, configs);\n\n    // Use validation chain for quantity and slippage validation\n    const chainErrors = this.validationChain.validate(orderlyValues, configs);\n    Object.assign(result, chainErrors);\n\n    return result;\n  }\n\n  orderType = OrderType.MARKET;\n}\n","import { OrderlyOrder, OrderType } from \"@orderly.network/types\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\n\nexport class BracketMarketOrderCreator extends MarketOrderCreator {\n  orderType = OrderType.MARKET;\n  create(values: OrderlyOrder, config?: ValuesDepConfig) {\n    const order = super.create(values, config);\n    return {\n      ...order,\n      quantity: order.order_quantity,\n      type: order.order_type,\n      price: order.order_price,\n    };\n  }\n\n  async validate(\n    values: OrderlyOrder,\n    config: ValuesDepConfig,\n  ): Promise<OrderValidationResult> {\n    const value = await super.validate(values, config);\n\n    const bracketData = await bracketOrderValidator(values as any, config);\n\n    return { ...value, ...bracketData };\n  }\n}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class FOKOrderCreator extends LimitOrderCreator {}\n","import { OrderEntity } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport {\n  OrderFormEntity,\n  ValuesDepConfig,\n  OrderValidationResult,\n} from \"./interface\";\n\n/**\n * General order creator for basic orders\n * Uses Template Method pattern from BaseOrderCreator\n */\nexport class GeneralOrderCreator extends BaseOrderCreator<OrderEntity> {\n  /**\n   * Builds the general order\n   * Implements template method hook\n   */\n  protected buildOrder(data: OrderEntity): OrderEntity {\n    return {\n      ...this.baseOrder(data),\n      order_price: data.order_price,\n      order_quantity: data.order_quantity,\n    };\n  }\n\n  /**\n   * Runs base validations\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderFormEntity,\n    configs: ValuesDepConfig,\n  ): OrderValidationResult {\n    return super.baseValidate(values, configs);\n  }\n\n  orderType: any = undefined;\n}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class IOCOrderCreator extends LimitOrderCreator {}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class PostOnlyOrderCreator extends LimitOrderCreator {}\n","import {\n  API,\n  DistributionType,\n  OrderlyOrder,\n  OrderType,\n  MarginMode,\n} from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { getOrderPrice } from \"./orderPrice\";\n\n/**\n * priceStep = (maxPrice - minPrice) / (totalOrders - 1)\n * price[i] = minPrice + i × priceStep\n */\nexport function calcScaledOrderPrices(inputs: {\n  start_price: string;\n  end_price: string;\n  total_orders: string;\n  quote_dp: number;\n}) {\n  const { start_price, end_price, total_orders, quote_dp } = inputs;\n\n  const startPrice = new Decimal(start_price);\n  const endPrice = new Decimal(end_price);\n  const totalOrders = Number(total_orders);\n\n  const priceStep = endPrice.minus(startPrice).div(totalOrders - 1);\n\n  const prices = [];\n\n  for (let i = 0; i < totalOrders; i++) {\n    prices[i] = startPrice.plus(priceStep.mul(i)).todp(quote_dp).toString();\n  }\n\n  return prices;\n}\n\nexport function getScaledOrderSkew(inputs: {\n  skew: string;\n  distribution_type: DistributionType;\n  total_orders: string;\n}) {\n  const { skew, distribution_type, total_orders } = inputs;\n\n  if (distribution_type === DistributionType.FLAT) {\n    return new Decimal(1);\n  } else if (distribution_type === DistributionType.ASCENDING) {\n    return new Decimal(total_orders);\n  } else if (distribution_type === DistributionType.DESCENDING) {\n    return new Decimal(1).div(total_orders);\n  }\n\n  return new Decimal(skew);\n}\n\n/**\n * slope = (skew - 1) / (totalOrders - 1)\n * weights[i] = 1 + slope × i\n */\nexport function calcScaledOrderWeights(inputs: {\n  total_orders?: string;\n  distribution_type?: DistributionType;\n  skew?: string;\n}) {\n  const { total_orders, distribution_type, skew } = inputs;\n\n  const weights: Decimal[] = [];\n\n  if (\n    isInvalidTotalOrders(total_orders) ||\n    isInvalidSkew(skew, distribution_type)\n  ) {\n    return {\n      weights: [],\n      sumWeights: zero,\n      minWeight: zero,\n    };\n  }\n\n  const totalOrders = Number(total_orders);\n\n  const _skew = getScaledOrderSkew({\n    skew: skew!,\n    distribution_type: distribution_type!,\n    total_orders: total_orders!,\n  });\n\n  const slope = _skew.minus(1).div(totalOrders - 1);\n\n  for (let i = 0; i < totalOrders; i++) {\n    weights[i] = new Decimal(1).plus(slope.mul(i));\n  }\n\n  const sumWeights = weights.reduce((acc, cur) => acc.plus(cur), zero);\n\n  // Find the min weight\n  const minWeight = weights.reduce(\n    (min, current) => (current.lt(min) ? current : min),\n    weights?.[0],\n  );\n\n  return {\n    weights,\n    sumWeights,\n    minWeight,\n  };\n}\n\n/**\n * qty[i] = (weights[i] / sum(weights)) × totalAmount\n */\nexport function calcScaledOrderQtys(inputs: {\n  order_quantity: string;\n  total_orders: string;\n  distribution_type: DistributionType;\n  skew: string;\n  base_dp: number;\n  base_tick: number;\n}) {\n  const {\n    order_quantity,\n    total_orders,\n    distribution_type,\n    skew,\n    base_dp,\n    base_tick,\n  } = inputs;\n\n  const qtys = [];\n\n  const totalOrders = Number(total_orders);\n\n  const { weights, sumWeights } = calcScaledOrderWeights({\n    total_orders,\n    distribution_type,\n    skew,\n  });\n\n  for (let i = 0; i < totalOrders; i++) {\n    let qty: Decimal | string = new Decimal(order_quantity)\n      .mul(weights[i])\n      .div(sumWeights);\n\n    if (base_tick > 1) {\n      // format quantity to base_tick, if base_tick is 10, 11 => 10, 115 => 110\n      qty = qty.div(base_tick).todp(0, Decimal.ROUND_DOWN).mul(base_tick);\n    } else {\n      qty = qty.todp(base_dp);\n    }\n\n    qtys[i] = qty.toString();\n  }\n\n  return qtys;\n}\n\nexport function calcScaledOrderBatchBody(\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n) {\n  if (isInvalidScaledOrderInput(order)) {\n    return [];\n  }\n\n  try {\n    const { base_dp, quote_dp, base_tick } = symbolInfo;\n\n    const {\n      symbol,\n      side,\n      order_quantity,\n      start_price,\n      end_price,\n      total_orders,\n      distribution_type,\n      skew,\n      reduce_only,\n      visible_quantity,\n      margin_mode,\n    } = order;\n\n    const prices = calcScaledOrderPrices({\n      start_price: start_price!,\n      end_price: end_price!,\n      total_orders: total_orders!,\n      quote_dp,\n    });\n\n    const qtys = calcScaledOrderQtys({\n      order_quantity: order_quantity!,\n      total_orders: total_orders!,\n      distribution_type: distribution_type!,\n      skew: skew!,\n      base_dp,\n      base_tick,\n    });\n\n    const now = Date.now();\n    const orders = prices.map((price, index) => {\n      const subOrder: Partial<OrderlyOrder> = {\n        symbol,\n        side,\n        // this order type is scaled order, so we need to set the order type to limit\n        order_type: OrderType.LIMIT,\n        order_quantity: qtys[index],\n        order_price: price,\n        reduce_only,\n        margin_mode: margin_mode || MarginMode.CROSS, // Default to CROSS if not provided for backward compatibility\n        // it will be used for identify the scaled order from ws\n        client_order_id: `scaled_${index}_${now}`,\n      };\n      // if visible_quantity is 0, set visible_quantity to 0\n      if (visible_quantity === 0) {\n        subOrder.visible_quantity = visible_quantity;\n      }\n      return subOrder;\n    });\n\n    return orders;\n  } catch (error) {\n    console.error(\"calcScaledOrdersBody error\", error);\n    return [];\n  }\n}\n\n/**\n * avg_order_price = sum(order_price_i * qty_i) / sum(qty_i)\n */\nexport function calcScaledOrderAvgPrice(\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n  askAndBid: number[],\n) {\n  if (isInvalidScaledOrderInput(order)) {\n    return null;\n  }\n\n  try {\n    const orders = calcScaledOrderBatchBody(order, symbolInfo);\n\n    const sumQtys = orders.reduce((acc, order) => {\n      return acc.plus(new Decimal(order.order_quantity!));\n    }, zero);\n\n    const totalNational = orders.reduce((acc, order) => {\n      const orderPrice = getOrderPrice(order, askAndBid);\n      return acc.plus(new Decimal(orderPrice).mul(order.order_quantity!));\n    }, zero);\n\n    return totalNational.div(sumQtys).todp(symbolInfo.quote_dp).toNumber();\n  } catch (error) {\n    console.error(\"calcScaledOrderAvgOrderPrice error\", error);\n    return null;\n  }\n}\n\nexport function calcScaledOrderMinTotalAmount(\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n  askAndBid: number[],\n) {\n  try {\n    const minTotalAmount_baseMin = calcScaledOrderMinTotalAmountByBaseMin(\n      order,\n      symbolInfo,\n    );\n\n    const minTotalAmount_minNotional =\n      calcScaledOrderMinTotalAmountByMinNotional(order, symbolInfo, askAndBid);\n\n    const minTotalAmount = Math.max(\n      minTotalAmount_baseMin,\n      minTotalAmount_minNotional,\n    );\n\n    return minTotalAmount;\n  } catch (error) {\n    console.error(\"calcScaledOrderMinTotalAmount error\", error);\n    return null;\n  }\n}\n/**\n * minWeight / sum(weights)) × totalAmount ≥ base_min\n * totalAmount ≥ base_min × (sum(weights) / minWeight), value need to ceil\n * totalAmount ≥ max ((min_notional x sum(weights)) / (weights[i] x order_price[i]))\n */\nexport function calcScaledOrderMinTotalAmountByBaseMin(\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n) {\n  const { total_orders, distribution_type, skew } = order;\n  const { base_min, base_dp } = symbolInfo;\n\n  const { sumWeights, minWeight } = calcScaledOrderWeights({\n    total_orders,\n    distribution_type,\n    skew,\n  });\n\n  const minTotalAmount = new Decimal(base_min)\n    .mul(sumWeights.div(minWeight))\n    .todp(base_dp, Decimal.ROUND_UP)\n    .toNumber();\n\n  return minTotalAmount;\n}\n\nexport function calcScaledOrderMinTotalAmountByMinNotional(\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n  askAndBid: number[],\n) {\n  const { base_dp, min_notional } = symbolInfo;\n\n  const orders = calcScaledOrderBatchBody(order, symbolInfo);\n\n  const { total_orders, distribution_type, skew } = order;\n\n  const { weights, sumWeights } = calcScaledOrderWeights({\n    total_orders,\n    distribution_type,\n    skew,\n  });\n\n  const minQtys = orders.map((order, i) => {\n    const orderPrice = getOrderPrice(order, askAndBid);\n    return new Decimal(min_notional)\n      .mul(sumWeights)\n      .div(new Decimal(weights[i]).mul(orderPrice));\n  });\n\n  // Find the max minQty\n  const max_minQty = minQtys.reduce(\n    (max, current) => (current.gt(max) ? current : max),\n    minQtys?.[0],\n  );\n\n  return max_minQty.todp(base_dp, Decimal.ROUND_UP).toNumber();\n}\n\nfunction isInvalidSkew(skew?: string, distribution_type?: DistributionType) {\n  const skewNum = Number(skew);\n  return (\n    !distribution_type ||\n    (distribution_type === DistributionType.CUSTOM &&\n      (!skew || skewNum <= 0 || skewNum > 100))\n  );\n}\n\nfunction isInvalidTotalOrders(total_orders?: string) {\n  const totalOrders = Number(total_orders);\n  return !total_orders || totalOrders < 2 || totalOrders > 20;\n}\n\nfunction isInvalidScaledOrderInput(order: Partial<OrderlyOrder>) {\n  const {\n    start_price,\n    end_price,\n    order_quantity,\n    total_orders,\n    distribution_type,\n    skew,\n  } = order;\n\n  return (\n    !start_price ||\n    !end_price ||\n    !order_quantity ||\n    isInvalidTotalOrders(total_orders) ||\n    isInvalidSkew(skew, distribution_type)\n  );\n}\n","import { pick } from \"ramda\";\nimport {\n  DistributionType,\n  OrderEntity,\n  OrderlyOrder,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { getPriceRange } from \"../../utils/order/orderPrice\";\nimport {\n  calcScaledOrderBatchBody,\n  calcScaledOrderMinTotalAmount,\n} from \"../../utils/order/scaledOrder\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport {\n  ValuesDepConfig,\n  OrderValidationResult,\n  OrderValidationItem,\n} from \"./interface\";\nimport { OrderValidation } from \"./orderValidation\";\n\n/**\n * Creator for scaled orders\n * Uses Template Method pattern from BaseOrderCreator\n */\nexport class ScaledOrderCreator extends BaseOrderCreator<OrderEntity> {\n  orderType = OrderType.SCALED;\n\n  /**\n   * Builds the scaled order\n   * Implements template method hook\n   */\n  protected buildOrder(values: OrderEntity, config: ValuesDepConfig) {\n    const orders = calcScaledOrderBatchBody(values, config.symbol);\n    const { total_orders, distribution_type, skew } = values;\n\n    const order = {\n      ...this.baseOrder(values as unknown as OrderlyOrder),\n      total_orders,\n      distribution_type,\n      skew,\n      orders,\n    };\n\n    return pick(\n      [\n        \"symbol\",\n        \"order_quantity\",\n        \"visible_quantity\",\n        \"reduce_only\",\n        \"side\",\n        \"order_type\",\n        \"margin_mode\",\n        \"orders\",\n        \"total_orders\",\n        \"distribution_type\",\n        \"skew\",\n      ],\n      order,\n    );\n  }\n\n  /**\n   * Runs validations for scaled order\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderlyOrder,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    const { maxQty, askAndBid, markPrice, symbol } = config;\n    const { base_dp, quote_dp } = config.symbol;\n    const { order_quantity, total, total_orders, distribution_type, skew } =\n      values;\n\n    const errors = validatePrice(values, config);\n\n    if (!total_orders) {\n      errors.total_orders = OrderValidation.required(\"total_orders\");\n    } else {\n      const totalOrdersNum = Number(total_orders);\n      if (totalOrdersNum < 2 || totalOrdersNum > 20) {\n        errors.total_orders = OrderValidation.range(\"total_orders\", 2, 20);\n      }\n    }\n\n    if (distribution_type === DistributionType.CUSTOM) {\n      if (!skew) {\n        errors.skew = OrderValidation.required(\"skew\");\n      } else {\n        const skewNum = Number(skew);\n        if (skewNum <= 0) {\n          errors.skew = OrderValidation.min(\"skew\", 0);\n        } else if (skewNum > 100) {\n          errors.skew = OrderValidation.max(\"skew\", 100);\n        }\n      }\n    }\n\n    if (!order_quantity) {\n      errors.order_quantity = OrderValidation.required(\"order_quantity\");\n    } else {\n      const qty = new Decimal(order_quantity);\n\n      if (qty.gt(maxQty)) {\n        errors.order_quantity = OrderValidation.max(\n          \"order_quantity\",\n          new Decimal(maxQty).todp(base_dp).toString(),\n        );\n        errors.total = OrderValidation.max(\n          \"total\",\n          new Decimal(maxQty).mul(markPrice).todp(quote_dp).toString(),\n        );\n      } else if (!errors.skew && !errors.total_orders) {\n        // if skew and total_orders are not errors, and order_quantity is less than minTotalAmount, set error\n        const minTotalAmount = calcScaledOrderMinTotalAmount(\n          values,\n          symbol,\n          askAndBid!,\n        );\n\n        if (minTotalAmount && qty.lt(minTotalAmount)) {\n          errors.order_quantity = OrderValidation.min(\n            \"order_quantity\",\n            minTotalAmount,\n          );\n          errors.total = OrderValidation.min(\n            \"total\",\n            new Decimal(minTotalAmount)\n              .mul(markPrice)\n              .todp(quote_dp)\n              .toString(),\n          );\n        }\n      }\n    }\n\n    if (!total) {\n      errors.total = OrderValidation.required(\"total\");\n    }\n\n    return errors;\n  }\n}\n\nfunction validatePrice(values: OrderlyOrder, config: ValuesDepConfig) {\n  const errors: {\n    [P in keyof OrderEntity]?: OrderValidationItem;\n  } = {};\n\n  const { start_price, end_price } = values;\n  const { quote_dp } = config.symbol;\n\n  // when markPrice is empty, skip price validation\n  if (!config.markPrice) {\n    return errors;\n  }\n\n  const { minPrice, maxPrice } = getPriceRange({\n    side: values.side,\n    basePrice: config.markPrice,\n    symbolInfo: config.symbol,\n  });\n\n  const comparePrice = (key: \"start_price\" | \"end_price\", value?: string) => {\n    const price = new Decimal(value || 0);\n\n    if (price.lt(minPrice)) {\n      errors[key] = OrderValidation.min(\n        key,\n        new Decimal(minPrice).todp(quote_dp).toString(),\n      );\n    } else if (price.gt(maxPrice)) {\n      errors[key] = OrderValidation.max(\n        key,\n        new Decimal(maxPrice).todp(quote_dp).toString(),\n      );\n    }\n  };\n\n  comparePrice(\"start_price\", start_price);\n  comparePrice(\"end_price\", end_price);\n\n  return errors;\n}\n","import { OrderlyOrder } from \"@orderly.network/types\";\nimport { OrderValidationItem, ValuesDepConfig } from \"../interface\";\nimport { BaseValidator } from \"./BaseValidator\";\nimport { TriggerPriceValidationStrategy } from \"./PriceValidationStrategy\";\n\n/**\n * Validator for trigger price using Strategy pattern\n * Implements Chain of Responsibility pattern\n */\nexport class TriggerPriceValidator extends BaseValidator {\n  private strategy: TriggerPriceValidationStrategy;\n\n  constructor() {\n    super();\n    this.strategy = new TriggerPriceValidationStrategy();\n  }\n\n  protected doValidate(\n    values: any,\n    config: ValuesDepConfig,\n  ): OrderValidationItem | undefined {\n    return this.strategy.validate(\n      {\n        trigger_price: values.trigger_price,\n      },\n      config,\n    );\n  }\n\n  protected getFieldName(): keyof OrderlyOrder {\n    return \"trigger_price\";\n  }\n}\n","import { pick } from \"ramda\";\nimport {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  TriggerPriceType,\n  OrderlyOrder,\n  OrderType,\n  OrderSide,\n} from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { OrderValidation } from \"./orderValidation\";\nimport { PriceValidationStrategy } from \"./validators/PriceValidationStrategy\";\nimport { TriggerPriceValidationStrategy } from \"./validators/PriceValidationStrategy\";\nimport { PriceValidator } from \"./validators/PriceValidator\";\nimport { QuantityValidator } from \"./validators/QuantityValidator\";\nimport { TriggerPriceValidator } from \"./validators/TriggerPriceValidator\";\nimport { ValidationChain } from \"./validators/ValidationChain\";\n\n/**\n * Creator for stop-limit orders\n * Uses Strategy pattern for validation and Template Method pattern for creation\n */\nexport class StopLimitOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n  private priceValidationStrategy = new PriceValidationStrategy();\n  private triggerPriceValidationStrategy = new TriggerPriceValidationStrategy();\n  private validationChain = new ValidationChain()\n    .addValidator(new QuantityValidator())\n    .addValidator(new TriggerPriceValidator())\n    .addValidator(new PriceValidator());\n\n  /**\n   * Builds the stop-limit order\n   * Implements template method hook\n   */\n  protected buildOrder(\n    values: AlgoOrderEntity & {\n      order_quantity: number;\n      order_price: number;\n    },\n    config?: ValuesDepConfig,\n  ): AlgoOrderEntity<AlgoOrderRootType.STOP> {\n    this.totalToQuantity(values, config!);\n\n    const order: AlgoOrderEntity<AlgoOrderRootType.STOP> = {\n      ...this.baseOrder(values as unknown as OrderlyOrder),\n      trigger_price: values.trigger_price!,\n      algo_type: AlgoOrderRootType.STOP,\n      type: OrderType.LIMIT,\n      quantity: values[\"order_quantity\"]!,\n      price: values[\"order_price\"],\n      trigger_price_type: TriggerPriceType.MARK_PRICE,\n    };\n\n    return pick(\n      [\n        \"symbol\",\n        \"trigger_price\",\n        \"algo_type\",\n        \"type\",\n        \"quantity\",\n        \"price\",\n        \"trigger_price_type\",\n        \"side\",\n        \"reduce_only\",\n        \"margin_mode\",\n        \"visible_quantity\",\n      ],\n      order,\n    );\n  }\n\n  /**\n   * Runs validations using validation chain\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: AlgoOrderEntity,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    // Cast to OrderlyOrder for baseValidate method which expects OrderlyOrder\n    const orderlyValues = values as unknown as OrderlyOrder;\n    const errors = this.baseValidate(orderlyValues, config);\n\n    // Validate trigger price\n    // Access trigger_price from AlgoOrderEntity - using type assertion because\n    // AlgoOrderEntity may have different field structures depending on the algo type\n    const triggerPrice = (values as { trigger_price?: number | string })\n      .trigger_price;\n\n    // Check if trigger_price is missing or 0 (both should be treated as required error)\n    if (!triggerPrice || triggerPrice === 0) {\n      errors.trigger_price = OrderValidation.required(\"trigger_price\");\n    } else {\n      const triggerError = this.triggerPriceValidationStrategy.validate(\n        { trigger_price: triggerPrice },\n        config,\n      );\n      if (triggerError) {\n        errors.trigger_price = triggerError;\n      }\n    }\n\n    // Validate order price using trigger price as base\n    // Note: For stop orders, we need to validate order_price against trigger_price range\n    // Access order_price and side from values - may be in different field names\n    // (order_price in input form, price in AlgoOrderEntity)\n    const valuesWithFields = values as {\n      order_price?: number | string;\n      price?: number | string;\n      side?: OrderSide | string;\n    };\n    const orderPrice = valuesWithFields.order_price ?? valuesWithFields.price;\n    const triggerPriceForPriceValidation = triggerPrice;\n    // Get side from orderlyValues if not in valuesWithFields\n    const side = (valuesWithFields.side ?? orderlyValues.side) as\n      | OrderSide\n      | undefined;\n\n    if (!orderPrice) {\n      errors.order_price = OrderValidation.required(\"order_price\");\n    } else if (orderPrice && triggerPriceForPriceValidation && side) {\n      // Create a modified config with trigger_price as base price\n      const modifiedConfig = {\n        ...config,\n        markPrice: Number(triggerPriceForPriceValidation),\n      };\n      // side is guaranteed to be defined at this point due to the if condition\n      const priceError = this.priceValidationStrategy.validate(\n        {\n          order_price: orderPrice,\n          side: side as OrderSide,\n          order_type: OrderType.LIMIT,\n        },\n        modifiedConfig,\n      );\n      if (priceError) {\n        errors.order_price = priceError;\n      }\n    } else if (orderPrice && triggerPriceForPriceValidation) {\n      // If side is missing, at least validate against quote_max and quote_min\n      // This handles cases where side might not be available but we still need basic validation\n      const { quote_max, quote_min } = config.symbol;\n      const price = Number(orderPrice);\n      if (quote_max && price > quote_max) {\n        errors.order_price = OrderValidation.max(\"order_price\", quote_max);\n      } else if (quote_min && price < quote_min) {\n        errors.order_price = OrderValidation.min(\"order_price\", quote_min);\n      }\n    }\n\n    return errors;\n  }\n\n  orderType: OrderType.STOP_LIMIT = OrderType.STOP_LIMIT;\n}\n","import { pick } from \"ramda\";\nimport {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  OrderEntity,\n  OrderType,\n  TriggerPriceType,\n} from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport {\n  OrderFormEntity,\n  ValuesDepConfig,\n  OrderValidationResult,\n} from \"./interface\";\nimport { OrderValidation } from \"./orderValidation\";\nimport { TriggerPriceValidationStrategy } from \"./validators/PriceValidationStrategy\";\nimport { QuantityValidator } from \"./validators/QuantityValidator\";\nimport { TriggerPriceValidator } from \"./validators/TriggerPriceValidator\";\nimport { ValidationChain } from \"./validators/ValidationChain\";\n\n/**\n * Creator for stop-market orders\n * Uses Strategy pattern for validation and Template Method pattern for creation\n */\nexport class StopMarketOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n  private triggerPriceValidationStrategy = new TriggerPriceValidationStrategy();\n  private validationChain = new ValidationChain()\n    .addValidator(new QuantityValidator())\n    .addValidator(new TriggerPriceValidator());\n\n  /**\n   * Builds the stop-market order\n   * Implements template method hook\n   */\n  protected buildOrder(\n    values: AlgoOrderEntity & {\n      order_quantity: number;\n      order_price: number;\n    },\n  ) {\n    const order = {\n      ...this.baseOrder(values as unknown as OrderEntity),\n      trigger_price: values.trigger_price!,\n      algo_type: AlgoOrderRootType.STOP,\n      type: OrderType.MARKET,\n      quantity: values[\"order_quantity\"]!,\n      trigger_price_type: TriggerPriceType.MARK_PRICE,\n    };\n\n    return pick(\n      [\n        \"symbol\",\n        \"trigger_price\",\n        \"algo_type\",\n        \"type\",\n        \"quantity\",\n        \"trigger_price_type\",\n        \"side\",\n        \"reduce_only\",\n        \"margin_mode\",\n        \"visible_quantity\",\n      ],\n      order,\n    );\n  }\n\n  /**\n   * Runs validations using validation chain\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderFormEntity,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    const errors = this.baseValidate(values, config);\n\n    // Use validation chain for trigger price and quantity validation\n    const chainErrors = this.validationChain.validate(values, config);\n    Object.assign(errors, chainErrors);\n\n    return errors;\n  }\n}\n","import {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  OrderType,\n} from \"@orderly.network/types\";\nimport {\n  OrderCreator,\n  ValuesDepConfig,\n  OrderValidationItem,\n  OrderValidationResult,\n} from \"./interface\";\nimport { TPSLValidationStrategy } from \"./validators/TPSLValidationStrategy\";\n\nexport type AlgoOrderUpdateEntity = {\n  trigger_price?: number;\n  price?: number;\n  order_id: number;\n  quantity?: number;\n  is_activated?: boolean;\n  order_type?: OrderType;\n};\n\n/**\n * Base creator for algo orders (TP/SL orders)\n * Uses TPSLValidationStrategy to eliminate code duplication\n */\nexport abstract class BaseAlgoOrderCreator<\n  T extends AlgoOrderEntity<\n    AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n  >,\n> implements OrderCreator<T> {\n  private tpslValidationStrategy = new TPSLValidationStrategy();\n\n  abstract create(values: T, config: ValuesDepConfig): T;\n\n  /**\n   * Validates TP/SL order using TPSLValidationStrategy\n   * Consolidates validation logic from baseBracketOrderCreator\n   */\n  validate(\n    values: Partial<T>,\n    config: ValuesDepConfig,\n  ): Promise<{\n    [P in keyof T]?: OrderValidationItem;\n  }> {\n    return Promise.resolve(\n      this.tpslValidationStrategy.validate(values, config) as {\n        [P in keyof T]?: OrderValidationItem;\n      },\n    );\n  }\n\n  abstract get type(): OrderType;\n}\n","import {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  AlgoOrderType,\n  API,\n  MarginMode,\n  OrderSide,\n  OrderType,\n  PositionType,\n  TriggerPriceType,\n} from \"@orderly.network/types\";\nimport { Decimal, resolveTPSLOrderType } from \"@orderly.network/utils\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { createTPSLOrderUpdates } from \"./tpslOrderUpdates\";\n\nexport class TPSLOrderCreator extends BaseAlgoOrderCreator<\n  AlgoOrderEntity<AlgoOrderRootType.TP_SL>\n> {\n  type = OrderType.MARKET;\n\n  create(\n    values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n    config: ValuesDepConfig,\n  ) {\n    const side = values.side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n    // Unlike TPSLPositionOrderCreator, this creator omits legs without a\n    // trigger entirely (\"\" means deactivated there); explicit deactivations\n    // are carried separately in crateUpdateOrder.\n    const child_orders = ([\"tp\", \"sl\"] as const).flatMap((leg) => {\n      const trigger = values[`${leg}_trigger_price`];\n      if (!trigger) return [];\n      const type = resolveTPSLOrderType(\n        values[`${leg}_order_type`],\n        values[`${leg}_order_price`],\n        false,\n      );\n      const child: any = {\n        algo_type:\n          leg === \"tp\" ? AlgoOrderType.TAKE_PROFIT : AlgoOrderType.STOP_LOSS,\n        reduce_only: true,\n        side,\n        type,\n        trigger_price: new Decimal(trigger)\n          .todp(config.symbol.quote_dp)\n          .toNumber(),\n\n        symbol: values.symbol,\n        is_activated: true,\n      };\n      if (type === OrderType.LIMIT) {\n        const price = values[`${leg}_order_price`];\n        if (\n          price == null ||\n          price === \"\" ||\n          !Number.isFinite(Number(price)) ||\n          new Decimal(price).todp(config.symbol.quote_dp).lte(0)\n        ) {\n          throw new Error(\n            \"An enabled TP/SL limit order requires a positive finite price\",\n          );\n        }\n        child.price = new Decimal(price)\n          .todp(config.symbol.quote_dp)\n          .toNumber();\n      }\n      return [child];\n    });\n    return {\n      algo_type: AlgoOrderRootType.TP_SL,\n      trigger_price_type: TriggerPriceType.MARK_PRICE,\n      reduce_only: true,\n      quantity: values.quantity,\n      symbol: values.symbol,\n      child_orders,\n      margin_mode: values.margin_mode || MarginMode.CROSS,\n    };\n  }\n\n  crateUpdateOrder(\n    values: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n    oldValue: API.AlgoOrder,\n    config: ValuesDepConfig,\n  ): [\n    { child_orders: AlgoOrderUpdateEntity[] },\n    AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n  ] {\n    const data = this.create(values, config);\n    const explicitlyDeactivatedTypes = ([\"tp\", \"sl\"] as const).flatMap(\n      (leg) => {\n        const trigger = values[`${leg}_trigger_price`];\n        if (trigger === undefined || trigger) return [];\n        return [\n          leg === \"tp\" ? AlgoOrderType.TAKE_PROFIT : AlgoOrderType.STOP_LOSS,\n        ];\n      },\n    );\n    return [\n      {\n        child_orders: createTPSLOrderUpdates(\n          data.child_orders,\n          oldValue,\n          values.quantity,\n          explicitlyDeactivatedTypes,\n        ),\n      },\n      data,\n    ];\n  }\n}\n","import {\n  AlgoOrderEntity,\n  AlgoOrderRootType,\n  AlgoOrderType,\n  API,\n  MarginMode,\n  OrderSide,\n  OrderType,\n  PositionType,\n  TriggerPriceType,\n} from \"@orderly.network/types\";\nimport { Decimal, resolveTPSLOrderType } from \"@orderly.network/utils\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { createTPSLOrderUpdates } from \"./tpslOrderUpdates\";\n\nexport class TPSLPositionOrderCreator extends BaseAlgoOrderCreator<\n  AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>\n> {\n  type = AlgoOrderRootType.POSITIONAL_TP_SL as unknown as OrderType;\n\n  create(\n    values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n    config: ValuesDepConfig,\n  ) {\n    const side = values.side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n    const child_orders = ([\"tp\", \"sl\"] as const).flatMap((leg) => {\n      const trigger = values[`${leg}_trigger_price`];\n      if (trigger === undefined) return [];\n      const type = resolveTPSLOrderType(\n        values[`${leg}_order_type`],\n        values[`${leg}_order_price`],\n        true,\n      );\n      const active = !!trigger;\n      const child: any = {\n        algo_type:\n          leg === \"tp\" ? AlgoOrderType.TAKE_PROFIT : AlgoOrderType.STOP_LOSS,\n        reduce_only: true,\n        side,\n        type,\n        trigger_price: active\n          ? new Decimal(trigger!).todp(config.symbol.quote_dp).toNumber()\n          : trigger,\n        trigger_price_type: TriggerPriceType.MARK_PRICE,\n        symbol: values.symbol,\n        is_activated: active,\n      };\n      if (active && type === OrderType.LIMIT) {\n        const price = values[`${leg}_order_price`];\n        if (\n          price == null ||\n          price === \"\" ||\n          !Number.isFinite(Number(price)) ||\n          new Decimal(price).todp(config.symbol.quote_dp).lte(0)\n        ) {\n          throw new Error(\n            \"An enabled TP/SL limit order requires a positive finite price\",\n          );\n        }\n        child.price = new Decimal(price)\n          .todp(config.symbol.quote_dp)\n          .toNumber();\n      }\n      return [child];\n    });\n    return {\n      algo_type:\n        values.position_type === PositionType.FULL\n          ? AlgoOrderRootType.POSITIONAL_TP_SL\n          : AlgoOrderRootType.TP_SL,\n      trigger_price_type: TriggerPriceType.MARK_PRICE,\n\n      symbol: values.symbol,\n      child_orders,\n      margin_mode: values.margin_mode || MarginMode.CROSS,\n    };\n  }\n\n  crateUpdateOrder(\n    values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n    oldValue: API.AlgoOrder,\n    config: ValuesDepConfig,\n  ): [\n    { child_orders: AlgoOrderUpdateEntity[] },\n    AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n  ] {\n    const data = this.create(values, config);\n    return [\n      { child_orders: createTPSLOrderUpdates(data.child_orders, oldValue) },\n      data,\n    ];\n  }\n}\n","import { pick } from \"ramda\";\nimport {\n  AlgoOrderRootType,\n  API,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { getPriceRange } from \"../../utils/order/orderPrice\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, OrderValidationResult } from \"./interface\";\nimport { OrderValidation } from \"./orderValidation\";\n\n/**\n * Creator for trailing stop orders\n * Uses Template Method pattern from BaseOrderCreator\n */\nexport class TrailingStopOrderCreator extends BaseOrderCreator<OrderlyOrder> {\n  orderType = OrderType.TRAILING_STOP;\n\n  /**\n   * Builds the trailing stop order\n   * Implements template method hook\n   */\n  protected buildOrder(values: OrderlyOrder, config: ValuesDepConfig) {\n    const { order_quantity, activated_price, callback_value, callback_rate } =\n      values;\n\n    const order = {\n      ...this.baseOrder(values),\n      algo_type: AlgoOrderRootType.TRAILING_STOP,\n      type: OrderType.MARKET,\n      trigger_price_type: \"MARK_PRICE\",\n      quantity: order_quantity,\n      activated_price,\n      callback_value,\n      callback_rate: callback_rate\n        ? new Decimal(callback_rate).div(100).toString()\n        : undefined,\n    };\n\n    return pick(\n      [\n        \"symbol\",\n        \"algo_type\",\n        \"type\",\n        \"trigger_price_type\",\n        \"quantity\",\n        \"side\",\n        \"reduce_only\",\n        \"margin_mode\",\n        \"visible_quantity\",\n        \"activated_price\",\n        \"callback_value\",\n        \"callback_rate\",\n      ],\n      order,\n    );\n  }\n\n  /**\n   * Runs validations for trailing stop order\n   * Implements template method hook\n   */\n  protected runValidations(\n    values: OrderlyOrder,\n    config: ValuesDepConfig,\n  ): OrderValidationResult {\n    const { markPrice, symbol } = config;\n    const { quote_dp } = config.symbol;\n    const { side, activated_price, callback_value, callback_rate } = values;\n\n    const errors = this.baseValidate(values, config);\n\n    if (activated_price) {\n      const { minPrice, maxPrice } = getPriceRange({\n        side,\n        basePrice: markPrice,\n        symbolInfo: symbol,\n      });\n\n      // Only validate if minPrice and maxPrice are valid numbers\n      if (!isNaN(minPrice) && !isNaN(maxPrice)) {\n        const activatedPrice = new Decimal(activated_price);\n\n        if (activatedPrice.lt(minPrice) || activatedPrice.equals(0)) {\n          errors.activated_price = OrderValidation.min(\n            \"activated_price\",\n            new Decimal(minPrice).todp(quote_dp).toString(),\n          );\n        } else if (activatedPrice.gt(maxPrice)) {\n          errors.activated_price = OrderValidation.max(\n            \"activated_price\",\n            new Decimal(maxPrice).todp(quote_dp).toString(),\n          );\n        }\n      }\n    }\n\n    if (!callback_value && !callback_rate) {\n      errors.callback_value = OrderValidation.required(\"callback_value\");\n      errors.callback_rate = OrderValidation.required(\"callback_rate\");\n    }\n\n    if (callback_value) {\n      // 0 < callback_value < market_price\n      // (callback_value - min_quote) % quote_tick == 0\n      const callbackValue = new Decimal(callback_value);\n      if (callbackValue.equals(0)) {\n        errors.callback_value = OrderValidation.min(\"callback_value\", \"0\");\n      } else if (callbackValue.gt(markPrice)) {\n        errors.callback_value = OrderValidation.range(\n          \"callback_value\",\n          \"0\",\n          new Decimal(markPrice).todp(quote_dp).toString(),\n        );\n      }\n    }\n\n    if (callback_rate) {\n      // 0.001 < callback_rate < 0.05\n      // (callback_rate - 0.001) % 0.001 == 0\n      const callbackRate = new Decimal(callback_rate).div(100);\n      if (callbackRate.lt(0.001) || callbackRate.gt(0.05)) {\n        errors.callback_rate = OrderValidation.range(\n          \"callback_rate\",\n          \"0.1%\",\n          \"5%\",\n        );\n      }\n    }\n    return errors;\n  }\n}\n","import { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { BBOOrderCreator } from \"./bboOrderCreator\";\nimport { BracketLimitOrderCreator } from \"./bracketLimitOrderCreator\";\nimport { BracketMarketOrderCreator } from \"./bracketMarketOrderCreator\";\nimport { FOKOrderCreator } from \"./fokCreator\";\nimport { GeneralOrderCreator } from \"./generalCreator\";\nimport { OrderCreator } from \"./interface\";\nimport { IOCOrderCreator } from \"./iocCreator\";\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\nimport { PostOnlyOrderCreator } from \"./postOnlyCreator\";\nimport { ScaledOrderCreator } from \"./scaledOrderCreator\";\nimport { StopLimitOrderCreator } from \"./stopLimitOrderCreator\";\nimport { StopMarketOrderCreator } from \"./stopMarketOrderCreator\";\nimport { TPSLOrderCreator } from \"./tpslOrderCreator\";\nimport { TPSLPositionOrderCreator } from \"./tpslPositionOrderCreator\";\nimport { TrailingStopOrderCreator } from \"./trailingStopOrderCreator\";\n\nexport class OrderFactory {\n  static create(\n    type: OrderType | AlgoOrderRootType | string,\n  ): OrderCreator<any> {\n    switch (type) {\n      case `${AlgoOrderRootType.BRACKET}:${OrderType.LIMIT}`:\n        return new BracketLimitOrderCreator();\n      case `${AlgoOrderRootType.BRACKET}:${OrderType.MARKET}`:\n        return new BracketMarketOrderCreator();\n      case OrderType.LIMIT:\n        return new LimitOrderCreator();\n      case OrderType.MARKET:\n        return new MarketOrderCreator();\n      case OrderType.ASK:\n      case OrderType.BID:\n        return new BBOOrderCreator();\n      case OrderType.IOC:\n        return new IOCOrderCreator();\n      case OrderType.FOK:\n        return new FOKOrderCreator();\n      case OrderType.POST_ONLY:\n        return new PostOnlyOrderCreator();\n      case OrderType.STOP_LIMIT:\n        return new StopLimitOrderCreator();\n      case OrderType.STOP_MARKET:\n        return new StopMarketOrderCreator();\n      case OrderType.SCALED:\n        return new ScaledOrderCreator();\n      case OrderType.TRAILING_STOP:\n        return new TrailingStopOrderCreator();\n\n      // algo order\n      case AlgoOrderRootType.TP_SL:\n        return new TPSLOrderCreator();\n      case AlgoOrderRootType.POSITIONAL_TP_SL:\n        return new TPSLPositionOrderCreator();\n\n      default:\n        return new GeneralOrderCreator();\n    }\n  }\n}\n","import { order as orderUtils } from \"@orderly.network/perp\";\nimport {\n  AlgoOrderRootType,\n  API,\n  MarginMode,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { OrderMetadataConfig } from \"../../orderlyContext\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { getOrderPrice } from \"../../utils/order/orderPrice\";\nimport {\n  calcScaledOrderAvgPrice,\n  calcScaledOrderBatchBody,\n} from \"../../utils/order/scaledOrder\";\n\nexport const getCreateOrderUrl = (order: Partial<OrderlyOrder>): string => {\n  const isAlgoOrder =\n    order?.order_type === OrderType.STOP_LIMIT ||\n    order?.order_type === OrderType.STOP_MARKET ||\n    order?.order_type === OrderType.TRAILING_STOP ||\n    order?.order_type === OrderType.CLOSE_POSITION ||\n    (order.algo_type && order.algo_type === AlgoOrderRootType.BRACKET) ||\n    isBracketOrder(order);\n\n  // scaled order will create multiple orders, so it is a batch order\n  if (order.order_type === OrderType.SCALED) {\n    return \"/v1/batch-order\";\n  }\n\n  return isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\";\n};\n\nexport const getOrderCreator = (order: Partial<OrderlyOrder>) => {\n  let type;\n  if (isBracketOrder(order)) {\n    type = `${AlgoOrderRootType.BRACKET}:${order.order_type}`;\n  } else if (order.order_type === OrderType.LIMIT) {\n    type = order.order_type_ext || order.order_type;\n  } else {\n    type = order.order_type;\n  }\n  return OrderFactory.create(type!);\n};\n\nexport const tpslFields = [\n  \"tp_trigger_price\",\n  \"sl_trigger_price\",\n  \"tp_pnl\",\n  \"sl_pnl\",\n  \"tp_offset\",\n  \"sl_offset\",\n  \"tp_offset_percentage\",\n  \"sl_offset_percentage\",\n  \"tp_offset_from_mark\",\n  \"sl_offset_from_mark\",\n  \"tp_offset_percentage_from_mark\",\n  \"sl_offset_percentage_from_mark\",\n] as (keyof OrderlyOrder)[];\n\nexport const isBracketOrder = (order: Partial<OrderlyOrder>): boolean => {\n  // if (order.sl_enable || order.tp_enable) {\n  //   return true;\n  // }\n  return !!order.tp_trigger_price || !!order.sl_trigger_price;\n};\n\nexport const hasTPSL = (order: Partial<OrderlyOrder>): boolean => {\n  return tpslFields.some((field) => !!order[field]);\n};\n\nexport const getPriceAndQty = (\n  order: Partial<OrderlyOrder>,\n  symbolInfo: API.SymbolExt,\n  askAndBid: number[],\n) => {\n  let quantity = Number(order.order_quantity);\n  const orderPrice = Number(order.order_price);\n\n  if (isNaN(quantity) || quantity <= 0) {\n    return null;\n  }\n\n  if (askAndBid.length === 0) {\n    console.warn(\n      \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\",\n    );\n    return null;\n  }\n\n  if (\n    (order.order_type === OrderType.LIMIT ||\n      order.order_type === OrderType.STOP_LIMIT) &&\n    isNaN(orderPrice)\n  ) {\n    return null;\n  }\n\n  let price: number | null;\n\n  if (order.order_type === OrderType.SCALED) {\n    price = calcScaledOrderAvgPrice(order, symbolInfo, askAndBid);\n    const orders = calcScaledOrderBatchBody(order, symbolInfo);\n\n    const sumQtys = orders.reduce((acc, order) => {\n      return acc.plus(new Decimal(order.order_quantity!));\n    }, zero);\n\n    quantity = sumQtys.todp(symbolInfo.base_dp).toNumber();\n\n    // revalidate quantity\n    if (!quantity || isNaN(quantity)) {\n      return null;\n    }\n  } else {\n    price = getOrderPrice(order, askAndBid);\n  }\n\n  if (!price || isNaN(price)) {\n    return null;\n  }\n\n  if (order.side === OrderSide.SELL) {\n    quantity = -quantity;\n  }\n\n  return { price, quantity };\n};\n\nexport const calcEstLiqPrice = (\n  order: Partial<OrderlyOrder>,\n  askAndBid: number[],\n  inputs: {\n    futures_taker_fee_rate: number;\n    imr_factor: number;\n    symbol: string;\n    totalCollateral: number;\n    markPrice: number;\n    positions: API.PositionTPSLExt[] | null;\n    symbolInfo: API.SymbolExt;\n    sumUnitaryFunding: number;\n    symbolLeverage?: number;\n  },\n) => {\n  const { symbolInfo } = inputs;\n  const result = getPriceAndQty(order, symbolInfo, askAndBid);\n\n  if (!result) return null;\n\n  const { price, quantity } = result;\n  if (!price || !quantity) return null;\n\n  const {\n    symbol,\n    imr_factor,\n    markPrice,\n    totalCollateral,\n    futures_taker_fee_rate,\n    positions,\n    symbolLeverage,\n    sumUnitaryFunding,\n  } = inputs;\n\n  const orderFee = orderUtils.orderFee({\n    qty: quantity,\n    price,\n    futuresTakeFeeRate: Number(futures_taker_fee_rate) / 10000,\n  });\n\n  let liqPrice = 0;\n\n  if (order.margin_mode === MarginMode.CROSS) {\n    liqPrice = orderUtils.estLiqPrice({\n      markPrice,\n      baseIMR: symbolInfo.base_imr,\n      baseMMR: symbolInfo.base_mmr,\n      totalCollateral,\n      positions: positions == null ? [] : positions,\n      IMR_Factor: imr_factor,\n      orderFee,\n      newOrder: {\n        qty: quantity,\n        price,\n        symbol,\n      },\n    });\n  } else {\n    let isolatedPositionMargin = 0,\n      costPosition = 0,\n      positionQty = 0,\n      lastSumUnitaryFunding = 0,\n      leverage = symbolLeverage ?? 1;\n\n    if (positions) {\n      const position = positions.find(\n        (p) => p.symbol === symbol && p.margin_mode === MarginMode.ISOLATED,\n      );\n      if (position) {\n        isolatedPositionMargin = position.margin ?? 0;\n        costPosition = position.cost_position ?? 0;\n        positionQty = position.position_qty ?? 0;\n        lastSumUnitaryFunding = position.last_sum_unitary_funding ?? 0;\n        leverage = position.leverage ? Number(position.leverage) : 1;\n      }\n    }\n\n    liqPrice = orderUtils.estLiqPriceIsolated({\n      isolatedPositionMargin,\n      costPosition,\n      positionQty,\n      sumUnitaryFunding,\n      lastSumUnitaryFunding,\n      markPrice,\n      baseIMR: symbolInfo.base_imr,\n      baseMMR: symbolInfo.base_mmr,\n      IMR_Factor: imr_factor,\n      leverage,\n      newOrder: {\n        symbol,\n        qty: quantity,\n        price,\n      },\n    });\n  }\n\n  if (liqPrice <= 0) return null;\n\n  return liqPrice;\n};\n\nexport const calcEstLeverage = (\n  order: Partial<OrderlyOrder>,\n  askAndBid: number[],\n  inputs: {\n    totalCollateral: number;\n    positions: any;\n    symbol: string;\n    symbolInfo: API.SymbolExt;\n  },\n) => {\n  const { totalCollateral, positions, symbol, symbolInfo } = inputs;\n\n  const result = getPriceAndQty(order, symbolInfo, askAndBid);\n\n  if (!result) return null;\n\n  const { price, quantity } = result;\n  if (!price || !quantity) return null;\n\n  return orderUtils.estLeverage({\n    totalCollateral,\n    positions,\n    newOrder: {\n      symbol,\n      qty: result.quantity,\n      price: result.price,\n    },\n  });\n};\n\nexport function isBBOOrder(options: {\n  order_type?: OrderType;\n  order_type_ext?: OrderType;\n}) {\n  const { order_type, order_type_ext } = options;\n\n  return (\n    order_type === OrderType.LIMIT &&\n    [OrderType.ASK, OrderType.BID].includes(order_type_ext!)\n  );\n}\n\nexport function appendOrderMetadata(\n  order: Partial<OrderlyOrder> | Partial<OrderlyOrder>[],\n  orderMetadata?: OrderMetadataConfig,\n) {\n  if (Array.isArray(order)) {\n    return order.map((item) => ({\n      ...item,\n      ...(typeof orderMetadata === \"function\"\n        ? orderMetadata(item)\n        : orderMetadata),\n    }));\n  }\n\n  return {\n    ...order,\n    ...(typeof orderMetadata === \"function\"\n      ? orderMetadata(order)\n      : orderMetadata),\n  };\n}\n","import { useEffect, useState } from \"react\";\nimport { produce } from \"immer\";\nimport { omit } from \"ramda\";\nimport {\n  API,\n  AlgoOrderEntity,\n  MarginMode,\n  OrderSide,\n  OrderType,\n  OrderlyOrder,\n  PositionType,\n  SDKError,\n} from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport {\n  getTPSLLeg,\n  getTPSLQuantity,\n  isActiveTPSLLeg,\n  isTPSLTriggered,\n} from \"@orderly.network/utils\";\nimport { appendOrderMetadata } from \"../../next/useOrderEntry/helper\";\nimport { useOrderlyContext } from \"../../orderlyContext\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { OrderValidationItem } from \"../../services/orderCreator/interface\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { useSubAccountMutation } from \"../../subAccount\";\nimport { useMutation } from \"../../useMutation\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { UpdateOrderKey, tpslCalculateHelper } from \"./tp_slUtils\";\n\nexport type TPSLComputedData = {\n  /**\n   * Computed take profit\n   */\n  tp_pnl: number;\n  tp_offset: number;\n  tp_offset_percentage: number;\n\n  /**\n   * Computed stop loss\n   */\n  sl_pnl: number;\n  sl_offset: number;\n  sl_offset_percentage: number;\n};\n\nexport type ComputedAlgoOrder = Partial<\n  AlgoOrderEntity<AlgoOrderRootType.TP_SL> & TPSLComputedData\n>;\n\nexport type ValidateError = {\n  [P in keyof ComputedAlgoOrder]?: OrderValidationItem;\n};\n\nconst triggeredTPSLTriggerPriceError = {\n  type: -1,\n  message: \"Trigger price cannot be changed after TP/SL is triggered\",\n} as const;\n\n// const checkIsEnableTpSL = (\n//   order?: API.AlgoOrder,\n// ): {\n//   tp_enable: boolean;\n//   sl_enable: boolean;\n// } => {\n//   const result = {\n//     tp_enable: true,\n//     sl_enable: true,\n//   };\n//   if (!order) {\n//     return result;\n//   }\n//   const tp = order.child_orders.find(\n//     (o) => o.algo_type === AlgoOrderType.TAKE_PROFIT && o.is_activated,\n//   );\n//   const sl = order.child_orders.find(\n//     (o) => o.algo_type === AlgoOrderType.STOP_LOSS && o.is_activated,\n//   );\n\n//   if (!tp) {\n//     result.tp_enable = false;\n//   }\n//   if (!sl) {\n//     result.sl_enable = false;\n//   }\n//   return result;\n// };\n\n/**\n * @hidden\n */\nexport const useTaskProfitAndStopLossInternal = (\n  position: Partial<API.PositionTPSLExt> &\n    Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n  options?: {\n    defaultOrder?: API.AlgoOrder;\n    /**\n     * If the order is editing, set to true\n     * if the isEditing is true, the defaultOrder must be provided\n     * Conversely, even if defaultOrder is provided and isEditing is false, a new TPSL order is still created\n     */\n    isEditing?: boolean;\n    // tpslEnable?: {\n    //   tp_enable?: boolean;\n    //   sl_enable?: boolean;\n    // };\n    positionType?: PositionType;\n  },\n): [\n  /**\n   * return the computed & formatted order\n   */\n  ComputedAlgoOrder,\n  {\n    /**\n     * Update the take profit and stop loss order, this will merge the new data with the old one\n     */\n    setValue: (key: string, value: number | string | boolean) => void;\n    setValues: (values: Partial<ComputedAlgoOrder>) => void;\n    // getOrderEntity: () => AlgoOrderEntity<AlgoOrderRootType.TP_SL|AlgoOrderRootType.POSITIONAL_TP_SL>;\n    /**\n     * Submit the TP/SL order\n     */\n    submit: (params?: { accountId?: string }) => Promise<any>;\n    deleteOrder: (orderId: number, symbol: string) => Promise<any>;\n    // /**\n    //  * Create the take profit and stop loss order, auto-detect the order type\n    //  */\n    // create: () => Promise<void>;\n    // update: (orderId: number) => Promise<any>;\n    errors: ValidateError | null;\n    /**\n     *\n     */\n    validate: (\n      otherErrors?: ValidateError,\n    ) => Promise<\n      AlgoOrderEntity<\n        AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n      >\n    >;\n    metaState: {\n      dirty: { [K in keyof OrderlyOrder]?: boolean };\n      submitted: boolean;\n      validated: boolean;\n      errors: ValidateError | null;\n    };\n    isCreateMutating: boolean;\n    isUpdateMutating: boolean;\n  },\n] => {\n  const isEditing =\n    typeof options?.isEditing !== \"undefined\"\n      ? options!.isEditing\n      : !!options?.defaultOrder;\n\n  const [order, setOrder] = useState<\n    ComputedAlgoOrder & {\n      ignoreValidate?: boolean;\n    }\n  >({\n    algo_order_id: options?.defaultOrder?.algo_order_id,\n    symbol: position.symbol as string,\n    side: Number(position.position_qty) > 0 ? OrderSide.BUY : OrderSide.SELL,\n    quantity: isEditing\n      ? options?.defaultOrder?.quantity === 0\n        ? Math.abs(position.position_qty)\n        : options?.defaultOrder?.quantity\n      : options?.positionType === PositionType.FULL\n        ? Math.abs(position.position_qty)\n        : 0,\n    // quantity:\n    //   options?.positionType === PositionType.PARTIAL\n    //     ? 0\n    //     : Math.abs(position.position_qty),\n    // quantity:\n    //   options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n    algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n    // tp_enable: isEditing\n    //   ? checkIsEnableTpSL(options?.defaultOrder).tp_enable\n    //   : options?.tpslEnable?.tp_enable,\n    // sl_enable: isEditing\n    //   ? checkIsEnableTpSL(options?.defaultOrder).sl_enable\n    //   : options?.tpslEnable?.sl_enable,\n    position_type: options?.positionType,\n    // Use defaultOrder.margin_mode when editing; otherwise position.margin_mode; default CROSS for backward compatibility\n    margin_mode:\n      options?.defaultOrder?.margin_mode ??\n      position?.margin_mode ??\n      MarginMode.CROSS,\n  });\n\n  const symbolInfo = useSymbolsInfo()[position.symbol!]();\n  const { data: markPrice } = useMarkPrice(order.symbol!);\n\n  const [doCreateOrder, { isMutating: isCreateMutating }] =\n    useSubAccountMutation(\"/v1/algo/order\");\n  const [doUpdateOrder, { isMutating: isUpdateMutating }] =\n    useSubAccountMutation(\"/v1/algo/order\", \"PUT\");\n  const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n  const [errors, setErrors] = useState<ValidateError | null>(null);\n\n  const [meta, setMeta] = useState<{\n    dirty: { [K in keyof OrderlyOrder]?: boolean };\n    submitted: boolean;\n    validated: boolean;\n    errors: ValidateError | null;\n  }>({\n    dirty: {},\n    submitted: false,\n    validated: false,\n    errors: null,\n  });\n\n  const { orderMetadata } = useOrderlyContext();\n\n  useEffect(() => {\n    if (!isEditing || !options?.defaultOrder) return;\n    const order: ComputedAlgoOrder = {};\n    for (const leg of [\"tp\", \"sl\"] as const) {\n      const child = options.defaultOrder.child_orders?.find(\n        (item) =>\n          item.algo_type === (leg === \"tp\" ? \"TAKE_PROFIT\" : \"STOP_LOSS\"),\n      );\n      if (isActiveTPSLLeg(child)) {\n        order[`${leg}_trigger_price`] = child!.trigger_price;\n      }\n      order[`${leg}_order_type`] =\n        child?.type === OrderType.LIMIT ? OrderType.LIMIT : OrderType.MARKET;\n      order[`${leg}_order_price`] =\n        isActiveTPSLLeg(child) && child?.type === OrderType.LIMIT\n          ? child.price?.toString()\n          : undefined;\n    }\n    setValues(order);\n  }, []);\n\n  const editingOrder = isEditing ? options?.defaultOrder : undefined;\n  const _setOrderValue = (\n    key: string,\n    value: number | string | boolean,\n    options?: {\n      ignoreValidate?: boolean;\n    },\n  ) => {\n    // console.log(\"[updateOrder:]\", key, value);\n\n    setOrder((prev) => {\n      const leg = key.startsWith(\"tp_\")\n        ? \"tp\"\n        : key.startsWith(\"sl_\")\n          ? \"sl\"\n          : undefined;\n      const child =\n        editingOrder && leg ? getTPSLLeg(editingOrder, leg) : undefined;\n      const triggered = child && isTPSLTriggered(child);\n      const quantity = triggered\n        ? getTPSLQuantity(child)\n        : Number(prev.quantity);\n      const side = triggered\n        ? child.side === OrderSide.BUY\n          ? OrderSide.SELL\n          : OrderSide.BUY\n        : position.position_qty! > 0\n          ? OrderSide.BUY\n          : OrderSide.SELL;\n\n      // if (key === \"sl_pnl\") {\n      //   value = value ? `-${value}` : \"\";\n      // }\n\n      const newValue = tpslCalculateHelper(\n        key,\n        {\n          key,\n          value,\n          entryPrice: position.average_open_price!,\n          qty: side === OrderSide.BUY ? (quantity ?? 0) : -(quantity ?? 0),\n          orderSide: side,\n          markPrice: markPrice ?? position.average_open_price!, // use mark price as the default value\n          values: prev as Partial<OrderlyOrder>,\n        },\n        {\n          symbol: symbolInfo,\n        },\n      );\n\n      if (triggered && quantity == null && leg) {\n        newValue[`${leg}_pnl`] = \"\";\n      }\n      const newValueAll = {\n        ...prev,\n        ...newValue,\n        ignoreValidate: options?.ignoreValidate,\n      };\n      interactiveValidate(\n        newValueAll as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n      );\n      return {\n        ...prev,\n        ...newValue,\n        ignoreValidate: options?.ignoreValidate,\n      };\n    });\n  };\n\n  const setOrderValue = async (\n    key: string,\n    value: number | string | boolean,\n    options?: {\n      ignoreValidate?: boolean;\n    },\n  ) => {\n    // console.log(\"-------->>>>>\", key, value);\n    if (key === \"quantity\") {\n      setOrder((prev) => ({ ...prev, quantity: value as string }));\n\n      if (typeof order.sl_trigger_price !== \"undefined\") {\n        _setOrderValue(\"sl_trigger_price\", order.sl_trigger_price, {\n          ignoreValidate: true,\n        });\n      }\n      if (typeof order.sl_order_price !== \"undefined\") {\n        _setOrderValue(\"sl_order_price\", order.sl_order_price, {\n          ignoreValidate: true,\n        });\n      }\n\n      if (typeof order.tp_trigger_price !== \"undefined\") {\n        _setOrderValue(\"tp_trigger_price\", order.tp_trigger_price, {\n          ignoreValidate: true,\n        });\n      }\n      if (typeof order.tp_order_price !== \"undefined\") {\n        _setOrderValue(\"tp_order_price\", order.tp_order_price, {\n          ignoreValidate: true,\n        });\n      }\n\n      // TODO: need to optimizations code\n      _setOrderValue(key, value, options);\n\n      return;\n    }\n\n    _setOrderValue(key, value, options);\n  };\n\n  /**\n   * calculate value config\n   */\n  const valueConfig = {\n    symbol: symbolInfo,\n    maxQty: Math.abs(position.position_qty),\n    markPrice,\n  };\n\n  // auto validate when order changed\n  // useEffect(() => {\n  //   requestAnimationFrame(() => {\n  //     if (order.ignoreValidate) return;\n  //     if (!order.quantity) {\n  //       return;\n  //     }\n  //     const orderCreator = getOrderCreator();\n  //     orderCreator\n  //       .validate(order as AlgoOrderEntity, valueConfig)\n  //       .then((errors) => {\n  //         setErrors(errors);\n  //       });\n  //   });\n  // }, [order, valueConfig.markPrice, order.quantity]);\n\n  const interactiveValidate = (\n    order: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n  ) => {\n    validateFunc(order).then((errors) => {\n      const keys = Object.keys(errors ?? {});\n      if (keys.length > 0) {\n        setMeta(\n          produce((draft) => {\n            draft.errors = errors;\n          }),\n        );\n      } else {\n        setMeta(\n          produce((draft) => {\n            draft.errors = null;\n          }),\n        );\n      }\n    });\n  };\n\n  const validateFunc = async (\n    currentOrder: AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n  ) => {\n    const creator = getOrderCreator();\n    const lockedTriggerErrors: ValidateError = {};\n    const skipTPSLTriggerPriceAgainstMark = ([\"tp\", \"sl\"] as const).reduce<\n      Partial<Record<\"tp\" | \"sl\", boolean>>\n    >((result, leg) => {\n      const child = editingOrder?.child_orders?.find(\n        (item) =>\n          item.algo_type === (leg === \"tp\" ? \"TAKE_PROFIT\" : \"STOP_LOSS\"),\n      );\n      const currentTriggerPrice = currentOrder[`${leg}_trigger_price`];\n      const triggerPriceEmpty =\n        currentTriggerPrice === undefined || currentTriggerPrice === \"\";\n      const triggerPriceChanged =\n        !!child &&\n        (isActiveTPSLLeg(child)\n          ? triggerPriceEmpty ||\n            Number(currentTriggerPrice) !== Number(child.trigger_price)\n          : !triggerPriceEmpty);\n      if (\n        editingOrder &&\n        editingOrder.is_triggered === true &&\n        child &&\n        !triggerPriceChanged\n      ) {\n        result[leg] = true;\n      }\n      if (editingOrder?.is_triggered === true && triggerPriceChanged) {\n        lockedTriggerErrors[`${leg}_trigger_price`] =\n          triggeredTPSLTriggerPriceError;\n      }\n      return result;\n    }, {});\n\n    const validationConfig = {\n      ...valueConfig,\n      skipTPSLTriggerPriceAgainstMark:\n        Object.keys(skipTPSLTriggerPriceAgainstMark).length > 0\n          ? skipTPSLTriggerPriceAgainstMark\n          : undefined,\n    };\n    const errors = await creator.validate(currentOrder, validationConfig);\n    return Object.keys(lockedTriggerErrors).length\n      ? { ...errors, ...lockedTriggerErrors }\n      : errors;\n  };\n\n  const setValues = (values: Partial<ComputedAlgoOrder>) => {\n    const keys = Object.keys(values);\n    keys.forEach((key) => {\n      setOrderValue(\n        key as UpdateOrderKey,\n        values[key as keyof ComputedAlgoOrder] as number | string,\n      );\n    });\n  };\n\n  const validate = (\n    otherErrors?: ValidateError,\n  ): Promise<\n    AlgoOrderEntity<\n      AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n    >\n  > => {\n    const orderCreator = getOrderCreator();\n\n    return new Promise((resolve, reject) => {\n      return validateFunc(\n        order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n      ).then((errors) => {\n        if (otherErrors) {\n          errors = {\n            ...errors,\n            ...otherErrors,\n          };\n        }\n        if (errors) {\n          const keys = Object.keys(errors);\n          if (keys.length > 0) {\n            // setErrors(errors);\n            setMeta(\n              produce((draft) => {\n                draft.errors = errors;\n              }),\n            );\n            if (!meta.validated) {\n              // setMeta((prev) => ({ ...prev, validated: true }));\n              setMeta(\n                produce((draft) => {\n                  draft.validated = true;\n                }),\n              );\n            }\n          }\n          setErrors(errors);\n          return reject(errors);\n        }\n\n        resolve(\n          orderCreator.create(\n            order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n            valueConfig,\n          ),\n        );\n      });\n    });\n  };\n\n  // useEffect(() => {\n  //   // setError(validate());\n  // }, [order]);\n\n  const getOrderCreator = () => {\n    if (\n      isEditing &&\n      options?.defaultOrder?.algo_type === AlgoOrderRootType.POSITIONAL_TP_SL\n    ) {\n      return OrderFactory.create(AlgoOrderRootType.POSITIONAL_TP_SL);\n    }\n    if (\n      isEditing &&\n      options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL\n    ) {\n      return OrderFactory.create(AlgoOrderRootType.TP_SL);\n    }\n    return OrderFactory.create(\n      options?.positionType === PositionType.FULL\n        ? AlgoOrderRootType.POSITIONAL_TP_SL\n        : AlgoOrderRootType.TP_SL,\n    );\n  };\n\n  const submit = async (params?: {\n    /**\n     * if you are main account to create tpsl order, you need to provide the accountId\n     */\n    accountId?: string;\n  }) => {\n    const defaultOrder = options?.defaultOrder;\n    const orderId = defaultOrder?.algo_order_id;\n\n    // A default order does not turn an explicitly non-editing flow into an update.\n    if (!isEditing || !orderId) {\n      return createOrder(params);\n    }\n\n    return updateOrder(orderId!, params);\n  };\n\n  const createOrder = (params?: { accountId?: string }) => {\n    const orderCreator = getOrderCreator();\n\n    const orderBody = orderCreator.create(\n      order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n      valueConfig,\n    );\n\n    if (orderBody.child_orders.length === 0) {\n      throw new SDKError(\"No child orders\");\n    }\n\n    // filter the order that is not activated\n    orderBody.child_orders = orderBody.child_orders.filter(\n      (order: API.AlgoOrderExt) => order.is_activated,\n    );\n\n    const body = appendOrderMetadata(orderBody, orderMetadata);\n    return doCreateOrder(body, {}, params);\n  };\n\n  const deleteOrder = (orderId: number, symbol: string): Promise<any> => {\n    return doDeleteOrder(null, {\n      order_id: orderId,\n      symbol,\n    });\n  };\n\n  const updateOrder = (\n    orderId: number,\n    params?: { accountId?: string },\n  ): Promise<any> => {\n    const orderCreator =\n      getOrderCreator() as unknown as TPSLPositionOrderCreator;\n\n    const [updatedOrderEntity, orderEntity] = orderCreator.crateUpdateOrder(\n      // @ts-ignore\n      order,\n      options?.defaultOrder,\n      valueConfig,\n    );\n\n    if (updatedOrderEntity.child_orders.length === 0) {\n      return Promise.resolve(\"Not any order needs to update\");\n    }\n\n    const needDelete =\n      orderEntity.child_orders.filter(\n        (order) =>\n          typeof order.is_activated === \"boolean\" && !order.is_activated,\n      ).length === orderEntity.child_orders.length;\n\n    if (needDelete) {\n      return deleteOrder(orderId, order.symbol!);\n    }\n\n    return doUpdateOrder(\n      {\n        order_id: orderId,\n        ...updatedOrderEntity,\n      },\n      {},\n      params,\n    );\n  };\n\n  return [\n    omit([\"ignoreValidate\"], order) as ComputedAlgoOrder,\n    {\n      submit,\n      deleteOrder,\n      // create: submit,\n\n      // update: updateOrder,/\n      setValue: setOrderValue,\n      setValues,\n      // createPositionTPSL: submit,\n      // createTPSL: submit,\n      validate,\n      metaState: meta,\n      errors,\n      isCreateMutating,\n      isUpdateMutating,\n    },\n  ];\n};\n","import { API, PositionType, SDKError } from \"@orderly.network/types\";\nimport { useTaskProfitAndStopLossInternal } from \"./useTPSL\";\n\nexport const useTPSLOrder = (\n  /**\n   * Position that needs to set take profit and stop loss\n   */\n  position: Partial<API.PositionTPSLExt> &\n    Pick<API.PositionTPSLExt, \"symbol\" | \"average_open_price\" | \"position_qty\">,\n  options?: {\n    /**\n     * You can set the default value for the take profit and stop loss order,\n     * it is usually used when editing order\n     */\n    defaultOrder?: API.AlgoOrder;\n    // tpslEnable?: {\n    //   tp_enable?: boolean;\n    //   sl_enable?: boolean;\n    // };\n    isEditing?: boolean;\n    positionType?: PositionType;\n  },\n): ReturnType<typeof useTaskProfitAndStopLossInternal> => {\n  if (!position) {\n    throw new SDKError(\"Position is required\");\n  }\n\n  if (!position.symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n\n  if (typeof position.average_open_price === \"undefined\") {\n    throw new SDKError(\"Average open price is required\");\n  }\n\n  if (typeof position.position_qty === \"undefined\") {\n    throw new SDKError(\"Position quantity is required\");\n  }\n\n  // const { data: markPrice } = useMarkPrice(position.symbol);\n\n  const result = useTaskProfitAndStopLossInternal(position, options);\n\n  return result;\n};\n\nexport type { ComputedAlgoOrder } from \"./useTPSL\";\n","import { useMemo } from \"react\";\nimport { useAccountInfo } from \"./appStore\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\n/**\n * A custom hook that calculates the maximum allowed leverage for a given trading pair symbol.\n *\n * The final leverage is determined by taking the minimum value between the account's maximum\n * leverage and the symbol's maximum leverage.\n *\n * @param symbol - Trading pair symbol (e.g. \"PERP_BTC_USDC\")\n * @returns The maximum allowed leverage as a number, or \"-\" if the leverage cannot be determined\n *\n * @example\n * ```typescript\n * const leverage = useMaxLeverage(\"PERP_BTC_USDC\");\n * console.log(`Maximum leverage for PERP_BTC_USDC: ${leverage}x`);\n * ```\n */\nexport const useMaxLeverage = (symbol: string): number => {\n  const symbolsInfo = useSymbolsInfo();\n  const accountInfo = useAccountInfo();\n  const maxAccountLeverage = accountInfo?.max_leverage;\n\n  /**\n   * Calculates the maximum leverage for the symbol based on its base initial margin requirement (IMR)\n   */\n  const maxSymbolLeverage = useMemo(() => {\n    const symbolInfo = symbolsInfo[symbol];\n    const baseIMR = symbolInfo(\"base_imr\");\n    return baseIMR ? 1 / baseIMR : 1;\n  }, [symbolsInfo, symbol]);\n\n  /**\n   * Determines the final maximum leverage by taking the minimum between\n   * account leverage limit and symbol leverage limit\n   */\n  const maxLeverage = useMemo(() => {\n    if (!maxAccountLeverage || !maxSymbolLeverage) {\n      return 1;\n    }\n\n    return Math.min(maxAccountLeverage, maxSymbolLeverage);\n  }, [maxAccountLeverage, maxSymbolLeverage]);\n\n  return maxLeverage;\n};\n","import { useMemo } from \"react\";\nimport { mutate } from \"swr\";\nimport { API, MarginMode } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { useMutation } from \"../useMutation\";\nimport { useSymbolInfo } from \"./useSymbolInfo\";\n\n/**\n * A custom hook that calculates the maximum allowed leverage for a given trading pair symbol.\n *\n * The final leverage is determined by taking the minimum value between the account's maximum\n * leverage and the symbol's maximum leverage.\n *\n * @param symbol - Trading pair symbol (e.g. \"PERP_BTC_USDC\")\n * @returns The maximum allowed leverage as a number, or \"-\" if the leverage cannot be determined\n *\n * @example\n * ```typescript\n * const leverage = useMaxSymbolLeverage(\"PERP_BTC_USDC\");\n * console.log(`Maximum leverage for PERP_BTC_USDC: ${leverage}x`);\n * ```\n */\nexport const useSymbolLeverage = (symbol?: string) => {\n  const symbolInfo = useSymbolInfo(symbol);\n  const { state } = useAccount();\n\n  const [updateMutation, { isMutating }] = useMutation(\"/v1/client/leverage\");\n\n  /**\n   * Calculates the maximum leverage for the symbol based on its base initial margin requirement (IMR)\n   */\n  const maxLeverage = useMemo(() => {\n    const baseIMR = symbolInfo?.(\"base_imr\");\n    return baseIMR ? 1 / baseIMR : 1;\n  }, [symbolInfo]);\n\n  const update = async (data: {\n    leverage: number;\n    symbol: string;\n    margin_mode?: MarginMode;\n  }) => {\n    const result = await updateMutation(data);\n\n    if (result?.success && data.symbol && state.accountId) {\n      const key = [\"/v1/client/leverages\", state.accountId];\n\n      mutate(\n        key,\n        (prev: API.LeverageInfo[] | undefined) => {\n          if (!prev) {\n            return [\n              {\n                symbol: data.symbol,\n                leverage: data.leverage,\n                margin_mode: data.margin_mode,\n              },\n            ];\n          }\n\n          const index = prev.findIndex(\n            (item) =>\n              item.symbol === data.symbol &&\n              (item.margin_mode ?? MarginMode.CROSS) ===\n                (data.margin_mode ?? MarginMode.CROSS),\n          );\n\n          if (index === -1) {\n            return [\n              ...prev,\n              {\n                symbol: data.symbol,\n                leverage: data.leverage,\n                margin_mode: data.margin_mode,\n              },\n            ];\n          }\n\n          const next = [...prev];\n          next[index] = {\n            ...next[index],\n            leverage: data.leverage,\n          };\n\n          return next;\n        },\n        { revalidate: false },\n      );\n    }\n\n    return result;\n  };\n\n  return {\n    maxLeverage,\n    update,\n    isLoading: isMutating,\n  };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useEffect, useMemo } from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport {\n  API,\n  AssetHistoryStatusEnum,\n  EMPTY_LIST,\n} from \"@orderly.network/types\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\n\ntype AssetHistoryOptions = {\n  /** token name you want to search */\n  token?: string;\n  /** DEPOSIT、WITHDRAW, all */\n  side?: string;\n  status?: AssetHistoryStatusEnum;\n  /** start time in milliseconds */\n  startTime?: number;\n  /** end time in milliseconds */\n  endTime?: number;\n  page?: number;\n  pageSize?: number;\n};\n\n/**\n * Get asset history, including token deposits/withdrawals.\n * https://orderly.network/docs/build-on-omnichain/evm-api/restful-api/private/get-asset-history#get-asset-history\n */\nexport const useAssetsHistory = (\n  options: AssetHistoryOptions,\n  config?: {\n    /**\n     * should update when wallet changed, default is update\n     */\n    shouldUpdateOnWalletChanged?: (data: any) => boolean;\n  },\n) => {\n  const ee = useEventEmitter();\n\n  const getKey = () => {\n    const {\n      page = 1,\n      pageSize = 10,\n      token,\n      side,\n      status,\n      startTime,\n      endTime,\n    } = options;\n    const searchParams = new URLSearchParams();\n\n    searchParams.set(\"page\", page.toString());\n    searchParams.set(\"size\", pageSize.toString());\n\n    if (token) {\n      searchParams.set(\"token\", token);\n    }\n\n    if (side && side !== \"All\") {\n      searchParams.set(\"side\", side);\n    }\n\n    if (status) {\n      searchParams.set(\"status\", status);\n    }\n\n    if (startTime) {\n      searchParams.set(\"start_t\", startTime.toString());\n    }\n\n    if (endTime) {\n      searchParams.set(\"end_t\", endTime.toString());\n    }\n\n    return `/v1/asset/history?${searchParams.toString()}`;\n  };\n\n  const { data, isLoading, mutate } = usePrivateQuery<API.AssetHistory>(\n    getKey(),\n    {\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n      errorRetryInterval: 60 * 1000,\n    },\n  );\n\n  const updateList = useDebouncedCallback(\n    (data: any) => {\n      const isUpdate =\n        typeof config?.shouldUpdateOnWalletChanged === \"function\"\n          ? config.shouldUpdateOnWalletChanged(data)\n          : true;\n\n      if (isUpdate) {\n        mutate();\n      }\n    },\n    // delay in ms\n    300,\n  );\n\n  useEffect(() => {\n    ee.on(\"wallet:changed\", updateList);\n\n    return () => {\n      ee.off(\"wallet:changed\", updateList);\n    };\n  }, []);\n\n  return useMemo(\n    () => [data?.rows ?? EMPTY_LIST, { meta: data?.meta, isLoading }] as const,\n    [data?.rows, data?.meta, isLoading],\n  );\n};\n","import { useMemo } from \"react\";\nimport { API, EMPTY_LIST, SDKError } from \"@orderly.network/types\";\nimport { zero } from \"@orderly.network/utils\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\n\ntype QueryParams = {\n  startDate: string;\n  endDate: string;\n  page?: number;\n};\n\n/**\n * Fetch statistics data, only support weekly/monthly/quarterly for now\n */\nexport const useStatisticsDaily = (\n  params: QueryParams,\n  options?: {\n    ignoreAggregation?: boolean;\n  },\n) => {\n  const { startDate, endDate, page = 1 } = params;\n  const { ignoreAggregation = false } = options || {};\n\n  if (!startDate || !endDate) {\n    throw new SDKError(\"Start date and end date are required\");\n  }\n\n  const getPeriod = (startDate: string, endDate: string) => {\n    if (startDate === endDate) {\n      return 1;\n    }\n    const diff = new Date(endDate).getTime() - new Date(startDate).getTime();\n    return diff / (1000 * 60 * 60 * 24);\n  };\n\n  const key = useMemo(() => {\n    // if (previousPageData && !previousPageData.length) return null;\n    const searchParams = new URLSearchParams();\n\n    searchParams.set(\"page\", page.toString());\n    searchParams.set(\n      \"size\",\n      (getPeriod(startDate, endDate) + (ignoreAggregation ? 0 : 1)).toString(),\n    );\n\n    /*\n     * add one day for the start date, for ROI calculation\n     */\n    const modifiedStartDate = new Date(startDate);\n    modifiedStartDate.setDate(new Date(startDate).getDate() - 1);\n\n    searchParams.set(\n      \"start_date\",\n      modifiedStartDate.toISOString().split(\"T\")[0],\n    );\n    searchParams.set(\"end_date\", params.endDate);\n\n    return `/v1/client/statistics/daily?${searchParams.toString()}`;\n  }, [page, startDate, endDate]);\n\n  const { data } = usePrivateQuery<API.DailyRow[]>(key, {\n    formatter: (data) => {\n      let rows = data.rows || [];\n\n      // remove the first item if the account_value, perp_volume, pnl are all 0\n      if (rows.length > 0 && rows[0].date === endDate) {\n        const { account_value, perp_volume, pnl } = rows[0];\n        if (account_value === 0 && perp_volume === 0 && pnl === 0) {\n          rows = rows.slice(1);\n        }\n      }\n\n      rows.reverse();\n      return rows;\n    },\n    revalidateOnFocus: false,\n  });\n\n  const aggregateValue = useMemo(() => {\n    if (ignoreAggregation) {\n      return { vol: null, pnl: null, roi: null };\n    }\n    let vol = zero;\n    let pnl = zero;\n    let roi = zero;\n\n    if (Array.isArray(data) && data.length) {\n      const prevDate = data.shift();\n      data.forEach((d) => {\n        vol = vol.add(d.perp_volume);\n        pnl = pnl.add(d.pnl);\n      });\n\n      roi = pnl.div(prevDate!.account_value);\n    }\n\n    return { vol: vol.toNumber(), pnl: pnl.toNumber(), roi: roi.toNumber() };\n  }, [data]);\n\n  return useMemo(\n    () => [data ?? EMPTY_LIST, { aggregateValue: aggregateValue }] as const,\n    [data, aggregateValue],\n  );\n};\n\nexport type UseStatisticsDailyReturn = ReturnType<typeof useStatisticsDaily>;\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\n\ntype UserStatistics = {\n  perp_trading_volume_last_24_hours?: number;\n  perp_trading_volume_today?: number;\n};\n\nexport const useUserStatistics = () => {\n  const { data, isValidating } = usePrivateQuery<UserStatistics>(\n    \"/v1/client/statistics\",\n    {\n      revalidateOnFocus: false,\n    },\n  );\n\n  return useMemo(\n    () => [data ?? null, { isValidating }] as const,\n    [data, isValidating],\n  );\n};\n\nexport type UseUserStatisticsReturn = ReturnType<typeof useUserStatistics>;\n","import { useMemo } from \"react\";\nimport type { SWRConfiguration } from \"swr\";\nimport type { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\n\ntype FundingSearchParams = {\n  /**\n   * Data range for the funding fee history\n   * noted that the time stamp is a 13-digits timestamp\n   * the first element is the start date and the second element is the end date\n   * @default [Now subtract 3 months, Now]\n   */\n  dataRange?: number[];\n  symbol?: string;\n  page?: number;\n  pageSize?: number;\n};\n\nexport const useFundingFeeHistory = (\n  params: FundingSearchParams,\n  options?: SWRConfiguration,\n) => {\n  const { symbol, dataRange, page = 1, pageSize = 10 } = params;\n\n  const infos = useSymbolsInfo();\n\n  const getKey = () => {\n    // console.log(\"symbol\", symbol, dataRange);\n\n    const search = new URLSearchParams();\n\n    if (typeof symbol !== \"undefined\" && symbol !== \"All\") {\n      search.set(\"symbol\", symbol);\n    }\n    search.set(\"page\", `${page}`);\n    search.set(\"size\", `${pageSize}`);\n\n    if (dataRange) {\n      search.set(\"start_t\", dataRange[0].toString());\n      search.set(\"end_t\", dataRange[1].toString());\n    }\n\n    return `/v1/funding_fee/history?${search.toString()}`;\n  };\n  const { data, isLoading, isValidating } =\n    usePrivateQuery<API.FundingFeeHistory>(getKey(), {\n      // initialSize: 1,\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n      errorRetryCount: 3,\n      // keepPreviousData: true,\n      ...options,\n    });\n\n  const parsedData = useMemo<\n    (API.FundingFeeRow & { annual_rate: number })[] | null\n  >(() => {\n    if (!data || !Array.isArray(data?.rows) || infos.isNil) {\n      return null;\n    }\n\n    return data.rows.map((row: API.FundingFeeRow) => {\n      const config = infos[row.symbol];\n      return {\n        ...row,\n        annual_rate: row.funding_rate * (24 / config(\"funding_period\")) * 365,\n      };\n    });\n  }, [data, infos]);\n\n  return useMemo(\n    () => [parsedData, { meta: data?.meta, isLoading, isValidating }] as const,\n    [parsedData, data?.meta, isLoading, isValidating],\n  );\n};\n\nexport type UseFundingFeeHistoryReturn = ReturnType<\n  typeof useFundingFeeHistory\n>;\n","import { useMemo } from \"react\";\nimport { API, EMPTY_LIST } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\n\ntype DistributionSearchParams = {\n  /**\n   * Data range for the distribution history\n   * noted that the time stamp is a 13-digits timestamp\n   * the first element is the start date and the second element is the end date\n   * @default [Now subtract 3 months, Now]\n   */\n  dataRange?: number[];\n  type?: string;\n  page: number;\n  pageSize: number;\n};\n\nexport const useDistributionHistory = (parmas: DistributionSearchParams) => {\n  const { type, dataRange, page, pageSize } = parmas;\n\n  const infos = useSymbolsInfo();\n\n  const getKey = () => {\n    const search = new URLSearchParams();\n\n    if (typeof type !== \"undefined\" && type !== \"All\") {\n      search.set(\"type\", type);\n    }\n    search.set(\"page\", page.toString());\n    search.set(\"size\", pageSize.toString());\n\n    if (dataRange) {\n      search.set(\"start_t\", dataRange[0].toString());\n      search.set(\"end_t\", dataRange[1].toString());\n    }\n\n    return `/v1/client/distribution_history?${search.toString()}`;\n  };\n  const { data, isLoading, isValidating } =\n    usePrivateQuery<API.FundingFeeHistory>(getKey(), {\n      // initialSize: 1,\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n      errorRetryCount: 3,\n    });\n\n  const parsedData = useMemo<\n    (API.FundingFeeRow & { annual_rate: number })[]\n  >(() => {\n    if (!Array.isArray(data?.rows) || !data?.rows.length || infos.isNil) {\n      return [];\n    }\n\n    return data.rows.map((row: API.FundingFeeRow) => {\n      const config = infos[row.symbol];\n      return {\n        ...row,\n        annual_rate: row.funding_rate * (24 / config(\"funding_period\")),\n      };\n    });\n  }, [data, infos]);\n\n  return useMemo(\n    () =>\n      [\n        parsedData ?? EMPTY_LIST,\n        { meta: data?.meta, isLoading, isValidating },\n      ] as const,\n    [parsedData, data?.meta, isLoading, isValidating],\n  );\n};\n\nexport type UseDistributionHistoryReturn = ReturnType<\n  typeof useDistributionHistory\n>;\n","import { useMemo } from \"react\";\nimport { EMPTY_LIST, type API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\n\ninterface TransferHistorySearchParams {\n  dataRange?: number[];\n  page: number;\n  size: number;\n  fromId?: string;\n  toId?: string;\n  side: \"IN\" | \"OUT\";\n  /**\n   * If True, return only internal transfers between main account and sub-accounts.\n   * If False, return only internal transfers between main account and other main accounts.\n   * If empty, return all transfer history.\n   * @default true\n   */\n  main_sub_only?: boolean;\n}\n\nexport const useTransferHistory = (parmas: TransferHistorySearchParams) => {\n  const { dataRange, page, size, side, fromId, toId, main_sub_only } = parmas;\n  const infos = useSymbolsInfo();\n\n  const memoizedQueryKey = useMemo<string>(() => {\n    const search = new URLSearchParams();\n    search.set(\"page\", page.toString());\n    search.set(\"size\", size.toString());\n    search.set(\"side\", side);\n    if (main_sub_only === true || main_sub_only === false) {\n      search.set(\"main_sub_only\", main_sub_only.toString());\n    }\n    if (dataRange) {\n      search.set(\"start_t\", dataRange[0].toString());\n      search.set(\"end_t\", dataRange[1].toString());\n    }\n    return `/v1/internal_transfer_history?${search.toString()}`;\n  }, [page, size, fromId, toId, dataRange, main_sub_only]);\n\n  const { data, isLoading, mutate } = usePrivateQuery<API.TransferHistory>(\n    memoizedQueryKey,\n    {\n      // initialSize: 1,\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n      errorRetryCount: 3,\n    },\n  );\n\n  const parsedData = useMemo<API.TransferHistoryRow[]>(() => {\n    if (!Array.isArray(data?.rows) || !data?.rows.length || infos.isNil) {\n      return [];\n    }\n    return data.rows;\n  }, [data, infos]);\n\n  return useMemo(\n    () =>\n      [\n        parsedData ?? EMPTY_LIST,\n        { meta: data?.meta, isLoading, mutate },\n      ] as const,\n    [parsedData, data?.meta, isLoading, mutate],\n  );\n};\n\nexport type UseTransferHistoryReturn = ReturnType<typeof useTransferHistory>;\n","import React, { useMemo } from \"react\";\nimport type { API } from \"@orderly.network/types\";\nimport { EMPTY_LIST } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\n\ninterface TransferHistorySearchParams {\n  dataRange?: number[];\n  page: number;\n  size: number;\n}\n\nexport const useVaultsHistory = (parmas: TransferHistorySearchParams) => {\n  const { dataRange, page, size } = parmas;\n\n  const infos = useSymbolsInfo();\n\n  const memoizedQueryKey = React.useMemo<string>(() => {\n    const search = new URLSearchParams();\n    search.set(\"page\", page.toString());\n    search.set(\"size\", size.toString());\n    if (dataRange) {\n      search.set(\"start_t\", dataRange[0].toString());\n      search.set(\"end_t\", dataRange[1].toString());\n    }\n    return `/v1/account_sv_transaction_history?${search.toString()}`;\n  }, [page, size, dataRange]);\n\n  const { data, isLoading, mutate } = usePrivateQuery<API.StrategyVaultHistory>(\n    memoizedQueryKey,\n    {\n      formatter: (data) => data,\n      revalidateOnFocus: false,\n      errorRetryCount: 3,\n    },\n  );\n\n  const parsedData = React.useMemo<API.StrategyVaultHistoryRow[]>(() => {\n    if (!Array.isArray(data?.rows) || !data?.rows.length || infos.isNil) {\n      return [];\n    }\n    return data.rows;\n  }, [data, infos]);\n\n  return useMemo(\n    () => [parsedData ?? EMPTY_LIST, { meta: data?.meta, isLoading, mutate }],\n    [parsedData, data?.meta, isLoading, mutate],\n  );\n};\n\nexport type VaultsHistoryReturn = ReturnType<typeof useVaultsHistory>;\n","import { useEffect, useState } from \"react\";\nimport { useConfig } from \"../useConfig\";\nimport { useQuery } from \"../useQuery\";\nimport { useWS } from \"../useWS\";\n\n/** 0 for nothing,  2 for maintenance */\nexport enum MaintenanceStatus {\n  None = 0,\n  Maintenance = 2,\n}\n\nexport const useMaintenanceStatus = () => {\n  const [status, setStatus] = useState<number>(MaintenanceStatus.None);\n  const [startTime, setStartTime] = useState<number>();\n  const [endTime, setEndTime] = useState<number>();\n  const [brokerName, setBrokerName] = useState<string>(\"Orderly network\");\n  const { data: systemInfo } = useQuery<any>(\n    `/v1/public/system_info?source=maintenance`,\n    {\n      revalidateOnFocus: false,\n      errorRetryCount: 2,\n      errorRetryInterval: 200,\n    },\n  );\n  const ws = useWS();\n\n  const config = useConfig();\n\n  useEffect(() => {\n    if (!systemInfo) {\n      return;\n    }\n\n    const brokerName = config.get(\"brokerName\");\n    if (brokerName) {\n      setBrokerName(brokerName);\n    }\n    if (systemInfo.scheduled_maintenance) {\n      setStartTime(systemInfo.scheduled_maintenance.start_time);\n      setEndTime(systemInfo.scheduled_maintenance.end_time);\n    }\n    if (systemInfo.status === MaintenanceStatus.Maintenance) {\n      setStatus(MaintenanceStatus.Maintenance);\n    }\n  }, [systemInfo, config]);\n\n  useEffect(() => {\n    const unsubscribe = ws.subscribe(`maintenance_status`, {\n      onMessage: (message: any) => {\n        setStatus(message.status);\n        if (message.scheduled_maintenance) {\n          setStartTime(message.scheduled_maintenance.start_time);\n          setEndTime(message.scheduled_maintenance.end_time);\n        }\n      },\n    });\n\n    return () => {\n      unsubscribe?.();\n    };\n  }, []);\n\n  return {\n    status,\n    brokerName,\n    startTime,\n    endTime,\n  };\n};\n","import {\n  LedgerWalletKey,\n  LedgerWalletManualOverrideKey,\n} from \"@orderly.network/types\";\nimport { useMemoizedFn } from \"../shared/useMemoizedFn\";\nimport { useLocalStorage } from \"../useLocalStorage\";\n\ntype LedgerWalletManualOverride = {\n  address: string;\n  adapterName: string;\n};\n\nconst normalizeAdapterName = (adapterName: string) =>\n  adapterName.trim().toLowerCase();\n\nconst isLedgerAdapter = (adapterName: string) =>\n  normalizeAdapterName(adapterName) === \"ledger\";\n\nconst isValidManualOverride = (\n  value: unknown,\n): value is LedgerWalletManualOverride => {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const override = value as LedgerWalletManualOverride;\n  return (\n    typeof override.address === \"string\" &&\n    typeof override.adapterName === \"string\" &&\n    override.address.length > 0 &&\n    override.adapterName.length > 0\n  );\n};\n\nconst isSameIdentity = (\n  override: LedgerWalletManualOverride,\n  address: string,\n  adapterName: string,\n) =>\n  override.address === address &&\n  override.adapterName === normalizeAdapterName(adapterName);\n\nexport const useStorageLedgerAddress = () => {\n  const [storedLedgerWallet, setLedgerWallet] = useLocalStorage<string[]>(\n    LedgerWalletKey,\n    [],\n  );\n  const ledgerWallet = storedLedgerWallet as string[];\n  const [storedManualOverride, setManualOverride] =\n    useLocalStorage<LedgerWalletManualOverride | null>(\n      LedgerWalletManualOverrideKey,\n      null,\n    );\n  const manualOverride =\n    storedManualOverride as LedgerWalletManualOverride | null;\n\n  const updateLedgerWallet = useMemoizedFn((nextLedgerWallet: string[]) => {\n    if (\n      nextLedgerWallet.length !== ledgerWallet.length ||\n      nextLedgerWallet.some((address, index) => address !== ledgerWallet[index])\n    ) {\n      setLedgerWallet(nextLedgerWallet);\n    }\n  });\n\n  const setLedgerAddress = useMemoizedFn((address: string) => {\n    if (!ledgerWallet.includes(address)) {\n      updateLedgerWallet([...ledgerWallet, address]);\n    }\n  });\n\n  const setManualLedgerAddress = useMemoizedFn(\n    (address: string, adapterName: string) => {\n      const normalizedAdapterName = normalizeAdapterName(adapterName);\n      if (!normalizedAdapterName) {\n        setLedgerAddress(address);\n        return;\n      }\n\n      let nextLedgerWallet = ledgerWallet;\n      if (\n        isValidManualOverride(manualOverride) &&\n        !isSameIdentity(manualOverride, address, normalizedAdapterName)\n      ) {\n        nextLedgerWallet = nextLedgerWallet.filter(\n          (ledgerAddress) => ledgerAddress !== manualOverride.address,\n        );\n      }\n      if (!nextLedgerWallet.includes(address)) {\n        nextLedgerWallet = [...nextLedgerWallet, address];\n      }\n\n      updateLedgerWallet(nextLedgerWallet);\n      setManualOverride({\n        address,\n        adapterName: normalizedAdapterName,\n      });\n    },\n  );\n\n  const clearManualLedgerAddress = useMemoizedFn(\n    (address: string, adapterName: string) => {\n      let nextLedgerWallet = ledgerWallet;\n      if (isValidManualOverride(manualOverride)) {\n        nextLedgerWallet = nextLedgerWallet.filter(\n          (ledgerAddress) => ledgerAddress !== manualOverride.address,\n        );\n      }\n\n      if (isLedgerAdapter(adapterName)) {\n        if (!nextLedgerWallet.includes(address)) {\n          nextLedgerWallet = [...nextLedgerWallet, address];\n        }\n      } else {\n        nextLedgerWallet = nextLedgerWallet.filter(\n          (ledgerAddress) => ledgerAddress !== address,\n        );\n      }\n\n      updateLedgerWallet(nextLedgerWallet);\n      if (manualOverride !== null) {\n        setManualOverride(null);\n      }\n    },\n  );\n\n  const syncLedgerAddress = useMemoizedFn(\n    (address: string, adapterName: string) => {\n      if (\n        isValidManualOverride(manualOverride) &&\n        isSameIdentity(manualOverride, address, adapterName)\n      ) {\n        setLedgerAddress(address);\n        return;\n      }\n\n      let nextLedgerWallet = ledgerWallet;\n      if (isValidManualOverride(manualOverride)) {\n        nextLedgerWallet = nextLedgerWallet.filter(\n          (ledgerAddress) => ledgerAddress !== manualOverride.address,\n        );\n      }\n\n      if (isLedgerAdapter(adapterName)) {\n        if (!nextLedgerWallet.includes(address)) {\n          nextLedgerWallet = [...nextLedgerWallet, address];\n        }\n      } else {\n        nextLedgerWallet = nextLedgerWallet.filter(\n          (ledgerAddress) => ledgerAddress !== address,\n        );\n      }\n\n      updateLedgerWallet(nextLedgerWallet);\n      if (manualOverride !== null) {\n        setManualOverride(null);\n      }\n    },\n  );\n\n  return {\n    setLedgerAddress,\n    setManualLedgerAddress,\n    clearManualLedgerAddress,\n    syncLedgerAddress,\n    ledgerWallet,\n  };\n};\n","import { useMemo } from \"react\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { useMainTokenStore } from \"../../provider/store/mainTokenStore\";\nimport { useTestTokenStore } from \"../../provider/store/testTokenStore\";\nimport { useAppStore } from \"../appStore\";\n\n// interface TokensInfoStore {\n//   tokensInfo: API.Chain[];\n// }\n\n// interface TokensInfoActions {\n//   setTokensInfo: (data: API.Chain[]) => void;\n// }\n\n// export const useTokensInfoStore = create<TokensInfoStore & TokensInfoActions>(\n//   (set) => ({\n//     tokensInfo: [],\n//     setTokensInfo(data) {\n//       set({ tokensInfo: data });\n//     },\n//   }),\n// );\n\n/**\n * return all tokens info\n */\nexport const useTokensInfo = (networkId?: NetworkId) => {\n  const appTokensInfo = useAppStore((state) => state.tokensInfo);\n  const mainTokensInfo = useMainTokenStore((state) => state.data);\n  const testTokensInfo = useTestTokenStore((state) => state.data);\n\n  return useMemo(() => {\n    if (networkId === \"mainnet\") {\n      return mainTokensInfo;\n    }\n\n    if (networkId === \"testnet\") {\n      return testTokensInfo;\n    }\n\n    return appTokensInfo;\n  }, [appTokensInfo, mainTokensInfo, networkId, testTokensInfo]);\n};\n\n/**\n * return token info by specify token\n */\nexport const useTokenInfo = (token: string, networkId?: NetworkId) => {\n  const tokensInfo = useTokensInfo(networkId);\n\n  return useMemo(() => {\n    return tokensInfo?.find((item) => item.token === token);\n  }, [tokensInfo, token]);\n};\n","import { useMemo } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { useOrderlyContext } from \"../orderlyContext\";\nimport { useQuery } from \"../useQuery\";\nimport { useRwaSymbolsInfoStore } from \"./useRwaSymbolsInfo\";\n\n/**\n * get symbol list\n */\nexport const useFutures = () => {\n  const { dataAdapter } = useOrderlyContext();\n\n  const rwaSymbolsInfo = useRwaSymbolsInfoStore();\n\n  const { data } = useQuery<API.MarketInfo[]>(\"/v1/public/futures\", {\n    // 24 hours\n    focusThrottleInterval: 1000 * 60 * 60 * 24,\n    revalidateOnFocus: true,\n    // 24 hours\n    dedupingInterval: 1000 * 60 * 60 * 24,\n    // onSuccess will not be called, because /v1/public/futures trigger multiple times\n    // onSuccess(data: API.MarketInfo[]) {\n    // if (!data || !data?.length) {\n    //   return [];\n    // }\n    // updateMarket(data as API.MarketInfoExt[]);\n    // },\n  });\n\n  const futures = useMemo(() => {\n    if (Array.isArray(data)) {\n      return typeof dataAdapter?.symbolList === \"function\"\n        ? dataAdapter.symbolList(data as API.MarketInfoExt[], {\n            rwaSymbolsInfo,\n          })\n        : data;\n    }\n\n    return [];\n  }, [data, dataAdapter?.symbolList, rwaSymbolsInfo]);\n\n  return {\n    data: futures,\n  };\n};\n","import { useEffect } from \"react\";\nimport { type API } from \"@orderly.network/types\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useSymbolStore } from \"../provider/store/symbolStore\";\nimport { getSymbolDisplayName } from \"../useBadgeBySymbol\";\nimport { useQuery } from \"../useQuery\";\nimport { useAppStore } from \"./appStore\";\nimport { RWA_SYMBOLS_INFO_QUERY_KEY } from \"./rwaSymbolsInfoRevalidator\";\nimport { useFutures } from \"./useFutures\";\nimport { useMarketStore } from \"./useMarket/market.store\";\n\n// import { useTokensInfoStore } from \"./useTokensInfo/tokensInfo.store\";\n\nconst publicQueryOptions = {\n  // 24 hours, not effective, because revalidateOnFocus is false\n  focusThrottleInterval: 1000 * 60 * 60 * 24,\n  revalidateOnFocus: false,\n  // 24 hours\n  dedupingInterval: 1000 * 60 * 60 * 24,\n};\n\nconst rwaSymbolsInfoQueryOptions = {\n  ...publicQueryOptions,\n  revalidateOnFocus: true,\n  focusThrottleInterval: 1000 * 60,\n  dedupingInterval: 1000 * 30,\n};\n\nexport const usePublicDataObserver = () => {\n  const { setSymbolsInfo, setFundingRates, setRwaSymbolsInfo } = useAppStore(\n    (state) => state.actions,\n  );\n\n  // const setTokensInfo = useTokensInfoStore((state) => state.setTokensInfo);\n\n  const symbols = useSymbolStore((state) => state.data);\n\n  /**\n   * symbol config\n   */\n  // useQuery<Record<string, API.SymbolExt>>(`/v1/public/info`, {\n  //   ...publicQueryOptions,\n  //   onSuccess(data: API.Symbol[]) {\n  //     if (!data || !data?.length) {\n  //       return {};\n  //     }\n\n  //   },\n  // });\n\n  useEffect(() => {\n    if (!symbols || !symbols?.length) {\n      return;\n    }\n    const obj: Record<string, API.SymbolExt> = {};\n\n    for (let index = 0; index < symbols.length; index++) {\n      const item = symbols[index];\n      const arr = item.symbol.split(\"_\");\n      const base_dp = getPrecisionByNumber(item.base_tick);\n      const quote_dp = getPrecisionByNumber(item.quote_tick);\n      const symbol = item.symbol;\n\n      obj[symbol] = {\n        ...item,\n        base_dp,\n        quote_dp,\n        base: arr[1],\n        quote: arr[2],\n        type: arr[0],\n        name: `${arr[1]}-${arr[0]}`,\n        display_symbol_name: getSymbolDisplayName(\n          symbol,\n          item.display_symbol_name,\n        ),\n      };\n    }\n    setSymbolsInfo(obj);\n  }, [symbols]);\n\n  /**\n   * symbol config\n   * TODO: remove onSuccess because it can't be called when trigger multiple times\n   */\n  useQuery<API.RwaSymbol[]>(RWA_SYMBOLS_INFO_QUERY_KEY, {\n    ...rwaSymbolsInfoQueryOptions,\n    onSuccess(data: API.RwaSymbol[]) {\n      if (!data || !data?.length) {\n        return {};\n      }\n      const obj: Record<string, API.RwaSymbol> = {};\n\n      for (let index = 0; index < data.length; index++) {\n        const item = data[index];\n        const arr = item.symbol.split(\"_\");\n        obj[item.symbol] = {\n          ...item,\n          base: arr[1],\n          quote: arr[2],\n          type: arr[0],\n          name: `${arr[1]}-${arr[0]}`,\n        };\n      }\n      setRwaSymbolsInfo(obj);\n    },\n  });\n\n  /**\n   * funding rates\n   * TODO: remove onSuccess because it can't be called when trigger multiple times\n   */\n  useQuery<{ [key: string]: API.FundingRate }>(`/v1/public/funding_rates`, {\n    ...publicQueryOptions,\n    onSuccess(data: API.FundingRate[]) {\n      if (!data || !data?.length) {\n        return {};\n      }\n      const obj = Object.create(null);\n\n      for (let index = 0; index < data.length; index++) {\n        const item = data[index];\n        obj[item.symbol] = {\n          ...item,\n          est_funding_rate: getEstFundingRate(item),\n        };\n      }\n\n      // return obj;\n      setFundingRates(obj);\n    },\n  });\n\n  const { data: futures } = useFutures();\n  const { updateMarket } = useMarketStore((state) => state.actions);\n\n  useEffect(() => {\n    updateMarket(futures);\n  }, [futures]);\n\n  /**\n   * token info\n   */\n  // useQuery<API.Chain[]>(`/v1/public/token`, {\n  //   // revalidateOnFocus: false,\n  //   ...publicQueryOptions,\n  //   onSuccess(data: API.Chain[]) {\n  //     if (!data || !data.length) {\n  //       return [];\n  //     }\n  //     setTokensInfo(data);\n  //   },\n  // });\n};\n\nfunction getEstFundingRate(data: API.FundingRate) {\n  if (!data) {\n    return;\n  }\n\n  const { next_funding_time, est_funding_rate } = data;\n\n  if (Date.now() > next_funding_time) {\n    return null;\n  }\n\n  return est_funding_rate;\n}\n","import { useState } from \"react\";\nimport { useEffect } from \"react\";\nimport {\n  DEFAULT_DATABASE_CONFIG,\n  initializeAppDatabase,\n} from \"./middleware/indexedDBManager\";\n\nexport const useDatabaseInitialization = () => {\n  const [isInitialized, setIsInitialized] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n\n  useEffect(() => {\n    const initialize = async () => {\n      try {\n        await initializeAppDatabase(DEFAULT_DATABASE_CONFIG);\n        setIsInitialized(true);\n      } catch (err) {\n        setError(err as Error);\n      }\n    };\n\n    initialize();\n  }, []);\n\n  return { isInitialized, error };\n};\n","import React, { PropsWithChildren, useMemo, useRef } from \"react\";\nimport { useWSObserver } from \"../../orderly/internal/useWSObserver\";\nimport { useInitRwaSymbolsRuntime } from \"../../orderly/orderlyHooks\";\nimport { usePrivateDataObserver } from \"../../orderly/usePrivateDataObserver\";\nimport { usePublicDataObserver } from \"../../orderly/usePublicDataObserver\";\nimport { useCalculatorService } from \"../../useCalculatorService\";\nimport { useDatabaseInitialization } from \"../../useDatabaseInitialization\";\nimport { usePreLoadData } from \"../../usePreloadData\";\nimport {\n  DataCenterContext,\n  DataCenterContextState,\n  getKeyFunction,\n} from \"./dataCenterContext\";\n\nexport const DataCenterProvider: React.FC<PropsWithChildren> = ({\n  children,\n}) => {\n  /**\n   *  preload the required data for the app\n   *  hidden view while the required data is not ready\n   */\n  useDatabaseInitialization();\n  const { error, done } = usePreLoadData();\n\n  useInitRwaSymbolsRuntime();\n\n  const calculatorService = useCalculatorService();\n\n  usePublicDataObserver();\n\n  /**\n   * WS observer\n   */\n  useWSObserver(calculatorService);\n\n  const getKeyHandlerMapRef = useRef<Map<string, getKeyFunction>>(new Map());\n\n  usePrivateDataObserver({\n    getKeysMap(type) {\n      return getKeyHandlerMapRef.current;\n    },\n  });\n\n  const memoizedValue = useMemo<DataCenterContextState>(() => {\n    return {\n      registerKeyHandler: (key, fun) => {\n        getKeyHandlerMapRef.current.set(key, fun);\n      },\n      unregisterKeyHandler: (key) => {\n        getKeyHandlerMapRef.current.delete(key);\n      },\n    };\n  }, [getKeyHandlerMapRef.current]);\n\n  // if (databaseError) {\n  //   return (\n  //     <div>{`Database initialization failed: ${databaseError.message}`}</div>\n  //   );\n  // }\n\n  if (error) {\n    return <div>Data load failed</div>;\n  }\n\n  // if (!done) {\n  //   return null;\n  // }\n\n  return (\n    <DataCenterContext.Provider value={memoizedValue}>\n      {children}\n    </DataCenterContext.Provider>\n  );\n};\n","import type { FC, PropsWithChildren } from \"react\";\nimport React, { useLayoutEffect, useMemo } from \"react\";\nimport {\n  ConfigStore,\n  // MemoryConfigStore,\n  OrderlyKeyStore,\n  LocalStorageStore,\n  SimpleDI,\n  Account,\n  IContract,\n  WalletAdapter,\n} from \"@orderly.network/core\";\nimport { DefaultEVMWalletAdapter } from \"@orderly.network/default-evm-adapter\";\nimport { DefaultSolanaWalletAdapter } from \"@orderly.network/default-solana-adapter\";\nimport { NetworkId } from \"@orderly.network/types\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { EthersProvider } from \"@orderly.network/web3-provider-ethers\";\nimport { DEFAULT_SYMBOL_DEPTHS, DEFAULT_TICK_SIZES } from \"./constants\";\nimport { ProxyConfigStore } from \"./dev/proxyConfigStore\";\nimport { ExtendedConfigStore } from \"./extendedConfigStore\";\nimport {\n  FilteredChains,\n  OrderlyConfigContextState,\n  OrderlyProvider,\n} from \"./orderlyContext\";\n// import { usePreLoadData } from \"./usePreloadData\";\nimport { DataCenterProvider } from \"./provider/dataCenter/dataCenterProvider\";\nimport { StatusProvider } from \"./provider/status/statusProvider\";\n\n// import { useParamsCheck } from \"./useParamsCheck\";\n\nexport type ChainFilterFunc = (config: ConfigStore) => FilteredChains;\n\nexport type ChainFilter = FilteredChains | ChainFilterFunc;\n\nexport type BaseConfigProviderProps = {\n  keyStore?: OrderlyKeyStore;\n  contracts?: IContract;\n  walletAdapters?: WalletAdapter[];\n  /** filter chains, only show chains in the filter */\n  chainFilter?: ChainFilter;\n  /**\n   * Custom orderbook default tick sizes.\n   */\n  orderbookDefaultTickSizes?: Record<string, string>;\n  /**\n   * Custom orderbook default symbol depths.\n   */\n  orderbookDefaultSymbolDepths?: Record<PropertyKey, number[]>;\n} & Pick<\n  OrderlyConfigContextState,\n  | \"enableSwapDeposit\"\n  | \"customChains\"\n  | \"dataAdapter\"\n  | \"notification\"\n  | \"amplitudeConfig\"\n  | \"orderMetadata\"\n>;\n\nexport type ExclusiveConfigProviderProps =\n  | {\n      brokerId: string;\n      brokerName?: string;\n      networkId: NetworkId;\n      configStore?: never;\n    }\n  | {\n      brokerId?: never;\n      brokerName?: never;\n      networkId?: never;\n      configStore: ConfigStore;\n    };\n\nexport type ConfigProviderProps = BaseConfigProviderProps &\n  ExclusiveConfigProviderProps;\n\nexport const OrderlyConfigProvider: FC<\n  PropsWithChildren<ConfigProviderProps>\n> = (props) => {\n  const [account, setAccount] = React.useState<Account | null>(null);\n  const {\n    configStore,\n    keyStore,\n    walletAdapters,\n    brokerId,\n    brokerName,\n    networkId,\n    contracts,\n    chainFilter,\n    customChains,\n    enableSwapDeposit = false,\n    dataAdapter,\n    notification,\n    amplitudeConfig,\n    orderbookDefaultTickSizes,\n    orderbookDefaultSymbolDepths,\n    children,\n    orderMetadata,\n  } = props;\n\n  if (!brokerId && typeof configStore === \"undefined\") {\n    console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n  }\n\n  if (typeof configStore !== \"undefined\" && !configStore.get(\"brokerId\")) {\n    // console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n    throw new SDKError(\n      \"if configStore is provided, brokerId is required in configStore\",\n    );\n  }\n\n  if (\n    typeof brokerId !== \"undefined\" &&\n    typeof configStore !== \"undefined\" &&\n    brokerId !== (configStore as ConfigStore).get(\"brokerId\")\n  ) {\n    throw new SDKError(\n      \"If you have provided a custom `configStore` and the `brokerId` is set in the `configStore`, please remove the `brokerId` prop.\",\n    );\n  }\n\n  const innerConfigStore = useMemo<ConfigStore>(() => {\n    return new ProxyConfigStore(\n      configStore ||\n        new ExtendedConfigStore({\n          brokerId,\n          brokerName,\n          networkId,\n        }),\n    );\n  }, [configStore, brokerId, brokerName, networkId]);\n\n  const innerKeyStore = useMemo<OrderlyKeyStore>(() => {\n    if (keyStore) return keyStore;\n\n    const networkId = innerConfigStore.get<NetworkId>(\"networkId\");\n    return new LocalStorageStore(networkId);\n  }, [innerConfigStore, keyStore]);\n\n  const innerWalletAdapters = useMemo<WalletAdapter[]>(() => {\n    return (\n      walletAdapters || [\n        new DefaultEVMWalletAdapter(new EthersProvider()),\n        new DefaultSolanaWalletAdapter(),\n      ]\n    );\n  }, [walletAdapters]);\n\n  const defaultOrderbookTickSizes = useMemo(() => {\n    return orderbookDefaultTickSizes || DEFAULT_TICK_SIZES;\n  }, [orderbookDefaultTickSizes]);\n\n  const defaultOrderbookSymbolDepths = useMemo(() => {\n    return orderbookDefaultSymbolDepths || DEFAULT_SYMBOL_DEPTHS;\n  }, [orderbookDefaultSymbolDepths]);\n\n  // check params, if has mismatch, throw warning message to console\n  // useParamsCheck({ brokerId: innerConfigStore.get(\"brokerId\") });\n\n  useLayoutEffect(() => {\n    let account = SimpleDI.get<Account>(Account.instanceName);\n\n    if (!account) {\n      account = new Account(\n        innerConfigStore,\n        innerKeyStore,\n        // innerGetWalletAdapter,\n        innerWalletAdapters,\n        {\n          contracts,\n        },\n      );\n\n      SimpleDI.registerByName(Account.instanceName, account);\n    }\n\n    setAccount(account);\n  }, []);\n\n  const filteredChains = useMemo(() => {\n    if (typeof chainFilter === \"function\") {\n      return chainFilter(innerConfigStore);\n    }\n    return chainFilter;\n  }, [chainFilter, innerConfigStore]);\n\n  const memoizedValue = useMemo<OrderlyConfigContextState>(() => {\n    return {\n      configStore: innerConfigStore,\n      keyStore: innerKeyStore,\n      networkId: innerConfigStore.get(\"networkId\") || networkId,\n      filteredChains,\n      walletAdapters: innerWalletAdapters,\n      customChains,\n      enableSwapDeposit,\n      defaultOrderbookTickSizes,\n      defaultOrderbookSymbolDepths,\n      dataAdapter,\n      notification: notification,\n      amplitudeConfig,\n      orderMetadata,\n    };\n  }, [\n    innerConfigStore,\n    innerKeyStore,\n    networkId,\n    filteredChains,\n    innerWalletAdapters,\n    customChains,\n    enableSwapDeposit,\n    defaultOrderbookTickSizes,\n    defaultOrderbookSymbolDepths,\n    dataAdapter,\n    notification,\n    amplitudeConfig,\n    orderMetadata,\n  ]);\n\n  if (!account) {\n    return null;\n  }\n\n  return (\n    <OrderlyProvider value={memoizedValue}>\n      <StatusProvider>\n        <DataCenterProvider>{children}</DataCenterProvider>\n      </StatusProvider>\n    </OrderlyProvider>\n  );\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport {\n  API,\n  MarginMode,\n  OrderEntity,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n  SDKError,\n} from \"@orderly.network/types\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useCollateral } from \"../orderly/useCollateral\";\nimport { useMarginModeBySymbol } from \"../orderly/useMarginModes\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"../orderly/useMarkPrice\";\nimport { useMaxQty } from \"../orderly/useMaxQty\";\nimport { usePositions } from \"../orderly/usePositionStream/usePosition.store\";\nimport { useSymbolsInfo } from \"../orderly/useSymbolsInfo\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useMutation } from \"../useMutation\";\nimport {\n  baseInputHandle,\n  getCalculateHandler,\n  orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\n\nexport type UseOrderEntryOptions = {\n  commify?: boolean;\n  // Whether to observe the orderbook,  if it is a limit order, the orderbook will automatically calculate the est. liq. price when it is updated.\n  watchOrderbook?: boolean;\n  validate?: (\n    data: OrderEntity,\n  ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\nexport type UseOrderEntryMetaState = {\n  errors:\n    | { [P in keyof OrderEntity]?: { type: string; message: string } }\n    | null\n    | undefined;\n  dirty: { [P in keyof OrderEntity]?: boolean } | null | undefined;\n  submitted: boolean;\n};\n\nexport type UseOrderEntryReturn = {\n  // Maximum open position\n  maxQty: number;\n  freeCollateral: number;\n  markPrice: number;\n  estLiqPrice?: number | null;\n  estLeverage?: number | null;\n  //@Deprecated\n  onSubmit: (order: OrderEntity) => Promise<any>;\n  submit: () => Promise<OrderEntity>;\n  // order: data,\n  submitting: boolean;\n  formattedOrder: Partial<OrderEntity>;\n  helper: {\n    calculate: (\n      values: Partial<OrderlyOrder>,\n      field: keyof OrderEntity,\n      value: any,\n    ) => Partial<OrderEntity>;\n    validator: (values: Partial<OrderEntity>) => any;\n    // clearErrors: () => void;\n    // setValues: (values: Partial<OrderEntity>) => void;\n  };\n  // formState: any;\n  metaState: UseOrderEntryMetaState;\n  symbolConfig: API.SymbolExt;\n};\n\nexport type OrderParams = Required<\n  Pick<OrderEntity, \"side\" | \"order_type\" | \"symbol\">\n> &\n  Partial<Omit<OrderEntity, \"side\" | \"symbol\" | \"order_type\">>;\n\n/**\n * Create Order\n * @example\n * ```tsx\n * import { useOrderEntry } from \"@orderly.network/hooks\";\n * import {OrderSide, OrderType} from '@orderly.network/types';\n *\n * const { formattedOrder, onSubmit, helper } = useOrderEntry({\n *  symbol: \"PERP_ETH_USDC\",\n *  side: OrderSide.BUY,\n *  order_type: OrderType.LIMIT,\n *  order_price: 10000,\n *  order_quantity: 1,\n * },{\n *  // **Note:** it's required\n *  watchOrderbook: true,\n * });\n * ```\n */\nexport function useOrderEntry(\n  order: OrderParams,\n  options?: UseOrderEntryOptions,\n): UseOrderEntryReturn;\n/**\n * @deprecated\n */\nexport function useOrderEntry(\n  symbol: string,\n  side: OrderSide,\n  reduceOnly: boolean,\n): UseOrderEntryReturn;\nexport function useOrderEntry(\n  symbolOrOrder: string | OrderParams,\n  sideOrOptions?: OrderSide | UseOrderEntryOptions,\n  reduceOnly?: boolean,\n  options?: UseOrderEntryOptions,\n): UseOrderEntryReturn {\n  // if symbolOrOrder is string, then it's deprecated\n  let isNewVersion = false;\n  if (typeof symbolOrOrder === \"object\") {\n    isNewVersion = true;\n\n    if (!symbolOrOrder.symbol) {\n      throw new SDKError(\"Symbol is required\");\n    }\n\n    if (!symbolOrOrder.side) {\n      throw new SDKError(\"Order side is required\");\n    }\n\n    if (!symbolOrOrder.order_type) {\n      throw new SDKError(\"Order type is required\");\n    }\n  }\n\n  const prevOrderData = useRef<Partial<OrderEntity> | null>(null);\n  // Cache data from the last calculate\n  const orderDataCache = useRef<Partial<OrderEntity> | null>(null);\n  //\n  const notSupportData = useRef<Partial<OrderEntity>>({});\n\n  const [errors, setErrors] = useState<any>(null);\n\n  const ee = useEventEmitter();\n\n  const positions = usePositions();\n\n  const fieldDirty = useRef<{ [K in keyof OrderEntity]?: boolean }>({});\n  const submitted = useRef<boolean>(false);\n  const askAndBid = useRef<number[]>([]); // 0: ask0, 1: bid0\n\n  const onOrderBookUpdate = useDebouncedCallback((data: number[]) => {\n    askAndBid.current = data;\n  }, 200);\n\n  const { freeCollateral, totalCollateral, accountInfo } = useCollateral();\n\n  const symbolInfo = useSymbolsInfo();\n  // const tokenInfo = useTokenInfo();\n\n  const symbol = useMemo(() => {\n    if (typeof symbolOrOrder === \"string\") {\n      return symbolOrOrder;\n    }\n    return symbolOrOrder.symbol!;\n  }, [symbolOrOrder]);\n\n  const optionsValue = useMemo(() => {\n    if (typeof sideOrOptions === \"object\") {\n      return sideOrOptions;\n    }\n\n    return options;\n  }, [sideOrOptions]);\n\n  const isReduceOnly = useMemo<boolean>(() => {\n    if (typeof reduceOnly === \"boolean\") {\n      return reduceOnly;\n    }\n\n    if (typeof symbolOrOrder === \"object\") {\n      return !!symbolOrOrder.reduce_only;\n    }\n\n    return false;\n  }, [symbolOrOrder, reduceOnly]);\n\n  const sideValue = useMemo(() => {\n    if (typeof symbolOrOrder === \"object\") {\n      return symbolOrOrder.side;\n    }\n\n    // if (typeof sideOrOptions === \"string\") {\n    return sideOrOptions as OrderSide;\n    // }\n  }, [symbolOrOrder, sideOrOptions]);\n\n  const baseDP = useMemo(\n    () => getPrecisionByNumber(symbolInfo[symbol](\"base_tick\", 0)),\n    [symbolInfo],\n  );\n  const quoteDP = useMemo(() => {\n    return getPrecisionByNumber(symbolInfo[symbol](\"quote_tick\", 0));\n  }, [symbolInfo]);\n\n  const baseIMR = useMemo(\n    () => symbolInfo[symbol](\"base_imr\", 0),\n    [symbolInfo],\n  );\n  const baseMMR = useMemo(\n    () => symbolInfo[symbol](\"base_mmr\", 0),\n    [symbolInfo],\n  );\n\n  const { data: markPrice } = useMarkPrice(symbol);\n  // const markPrice = 1;\n\n  const diffOrderEntry = (\n    prev: Partial<OrderParams>,\n    current: Partial<OrderParams>,\n  ): { key: keyof OrderParams; value: any; preValue: any } | null => {\n    if (!prev) return null;\n    let key, value, preValue;\n    const keys = Object.keys(current) as (keyof OrderParams)[];\n\n    for (let i = 0; i < keys.length; i++) {\n      const k = keys[i];\n\n      const preveValue = prev[k];\n      const currentValue = current[k];\n\n      if (\n        typeof preveValue === \"undefined\" &&\n        typeof currentValue === \"undefined\"\n      )\n        continue;\n\n      // if (k === \"order_quantity\") {\n      //   preveValue = Number(preveValue);\n      //   currentValue = Number(currentValue);\n      // }\n\n      if (preveValue !== currentValue) {\n        key = k;\n        value = currentValue;\n        preValue = preveValue;\n        break;\n      }\n    }\n\n    if (!key) return null;\n\n    return { key, value, preValue };\n  };\n\n  const { marginMode: symbolMarginMode } = useMarginModeBySymbol(symbol);\n  const marginMode =\n    typeof symbolOrOrder === \"object\" && symbolOrOrder.margin_mode\n      ? symbolOrOrder.margin_mode\n      : symbolMarginMode;\n  const maxQty = useMaxQty(symbol, sideValue, {\n    reduceOnly: isReduceOnly,\n    marginMode: marginMode ?? MarginMode.CROSS,\n  });\n\n  const parseString2Number = (\n    order: OrderParams & Record<string, any>,\n    key: keyof OrderParams,\n    dp?: number,\n  ) => {\n    if (typeof order[key] !== \"string\") return;\n    // fix: delete the comma then remove the forward one of the string\n    // first find the difference between current value and previous value\n\n    if (order[key] && (order[key] as string).startsWith(\".\")) {\n      (order[key] as string) = `0${order[key]}`;\n    }\n\n    // order[`${key}_origin`] = order[key];\n    (order[key] as string) = (order[key] as string).replace(/,/g, \"\");\n\n    // format input by decimal precision\n    if (dp && (order[key] as string).length > 0) {\n      const hasPoint = `${order[key]}`.includes(\".\");\n      const endOfPoint = `${order[key]}`.endsWith(\".\");\n      const decimalPart = `${order[key]}`.split(\".\");\n      if (hasPoint && !endOfPoint) {\n        (order[key] as string) = `${decimalPart[0]}.${decimalPart[1].slice(\n          0,\n          quoteDP,\n        )}`;\n      }\n    }\n  };\n\n  // just for performance optimization\n  const needParse = useMemo(() => {\n    if (typeof symbolOrOrder === \"string\") {\n      return null;\n    }\n    return pick([\n      \"order_price\",\n      \"side\",\n      \"order_quantity\",\n      \"visible_quantity\",\n      \"order_type\",\n      \"order_type_ext\",\n      \"symbol\",\n      \"total\",\n      \"reduce_only\",\n      \"trigger_price\",\n    ])(\n      //@ts-ignore\n      symbolOrOrder,\n    );\n  }, [symbolOrOrder]);\n\n  const parsedData = useMemo<OrderParams | null>(() => {\n    if (typeof symbolOrOrder === \"string\") {\n      return null;\n    }\n    // clean comma\n\n    if (typeof symbolOrOrder.order_quantity === \"string\") {\n      parseString2Number(symbolOrOrder, \"order_quantity\");\n    } else if (typeof symbolOrOrder.order_quantity === \"number\") {\n      symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n        .toDecimalPlaces(baseDP)\n        .toString();\n    }\n\n    if (typeof symbolOrOrder.order_price === \"string\") {\n      parseString2Number(symbolOrOrder, \"order_price\", quoteDP);\n    }\n\n    if (typeof symbolOrOrder.total === \"string\") {\n      parseString2Number(symbolOrOrder, \"total\", quoteDP);\n    }\n\n    if (typeof symbolOrOrder.trigger_price === \"string\") {\n      parseString2Number(symbolOrOrder, \"trigger_price\", quoteDP);\n    }\n\n    // if (typeof symbolOrOrder.trigger_price === \"string\") {\n    //   symbolOrOrder.trigger_price = symbolOrOrder.trigger_price.replace(\n    //     /,/g,\n    //     \"\"\n    //   );\n    // }\n\n    return symbolOrOrder;\n  }, [\n    needParse?.order_price,\n    needParse?.order_quantity,\n    needParse?.total,\n    needParse?.trigger_price,\n    needParse?.order_type,\n    needParse?.order_type_ext,\n    needParse?.symbol,\n    needParse?.reduce_only,\n    needParse?.side,\n    needParse?.visible_quantity,\n    quoteDP,\n    baseDP,\n  ]);\n\n  const isAlgoOrder =\n    parsedData?.order_type === OrderType.STOP_LIMIT ||\n    parsedData?.order_type === OrderType.STOP_MARKET ||\n    parsedData?.order_type === OrderType.CLOSE_POSITION;\n\n  const [doCreateOrder, { isMutating }] = useMutation<OrderEntity, any>(\n    isAlgoOrder ? \"/v1/algo/order\" : \"/v1/order\",\n  );\n\n  // const maxQty = 3;\n\n  const createOrder = (values: Partial<OrderEntity>): Promise<OrderEntity> => {\n    if (!values.symbol) {\n      throw new SDKError(\"Symbol is error\");\n    }\n\n    if (!values.side) {\n      throw new SDKError(\"Order side is error\");\n    }\n\n    if (!values || typeof values.order_type === \"undefined\") {\n      throw new SDKError(\"Order type is error\");\n    }\n\n    const orderCreator = OrderFactory.create(\n      // @ts-ignore\n      values.order_type_ext ? values.order_type_ext : values.order_type,\n    );\n\n    if (!orderCreator) {\n      return Promise.reject(new SDKError(\"Order creator is null\"));\n    }\n\n    return new Promise((resolve, reject) => {\n      return orderCreator\n        .validate(values, {\n          symbol: symbolInfo[symbol](),\n          // token: tokenInfo[symbol](),\n          maxQty,\n          markPrice: markPrice,\n        })\n        .then((errors: any) => {\n          submitted.current = true;\n\n          if (\n            errors.order_price ||\n            errors.order_quantity ||\n            errors.trigger_price ||\n            errors.total\n          ) {\n            setErrors(errors);\n            reject(\n              errors.order_price?.message || errors.order_quantity?.message,\n            );\n            // throw new SDKError(\n            //   errors.order_price?.message ||\n            //     errors.order_quantity?.message ||\n            //     \"order validation error\"\n            // );\n          } else {\n            const data = orderCreator.create(values as OrderEntity, {\n              symbol: symbolInfo[symbol](),\n              maxQty,\n              markPrice: markPrice,\n            });\n\n            // console.log(\"------------------\", values, data);\n\n            return doCreateOrder(\n              omit([\"order_type_ext\"], {\n                // ...values,\n                // ...omit([\"order_price\"], values),\n                ...data,\n              }),\n            ).then((res) => {\n              // resolve(res);\n              if (res && res.success) {\n                // TODO: remove when the WS service is fixed\n\n                // if (Array.isArray(res.data.rows)) {\n                //   ee.emit(\"algoOrder:cache\", {\n                //     ...res.data.rows[0],\n                //     trigger_price: data.trigger_price,\n                //   });\n                // }\n\n                resolve(res.data);\n              } else {\n                reject(res);\n              }\n            }, reject);\n          }\n        });\n    });\n  };\n\n  /**\n   * submit form，validate values\n   * @param values\n   * @returns\n   */\n  const onSubmit = (values: OrderEntity) => {\n    if (typeof reduceOnly === \"boolean\" && reduceOnly && !values.reduce_only) {\n      return Promise.reject(\n        new SDKError(\n          \"The reduceOny parameter of hook does not match your order data\",\n        ),\n      );\n    }\n    return createOrder({\n      ...values,\n      symbol,\n    });\n  };\n\n  const submit = useCallback(() => {\n    if (!parsedData) {\n      throw new SDKError(\"Function is not supported, please use onSubmit()\");\n    }\n    return createOrder(parsedData);\n  }, [parsedData]);\n\n  const calculate = useCallback(\n    (\n      values: Partial<OrderlyOrder>,\n      field: keyof OrderlyOrder,\n      value: any,\n    ): Partial<OrderEntity> => {\n      const fieldHandler = getCalculateHandler(field);\n      const newValues = compose(\n        head,\n        orderEntityFormatHandle(baseDP, quoteDP),\n        fieldHandler,\n        baseInputHandle,\n      )([\n        values,\n        field,\n        value,\n        markPrice,\n        { base_dp: baseDP, quote_dp: quoteDP } as API.SymbolExt,\n      ]);\n\n      return newValues as Partial<OrderEntity>;\n    },\n    [markPrice],\n  );\n\n  // const estLiqPrice = useMemo(() => {}, []);\n\n  const validator = (values: any) => {\n    // @ts-ignore\n    const creator = OrderFactory.create(values.order_type);\n\n    return creator?.validate(values, {\n      symbol: symbolInfo[symbol](),\n      // token: tokenInfo[symbol](),\n      maxQty,\n      markPrice: markPrice,\n    });\n  };\n\n  const formattedOrder = useMemo<Partial<OrderEntity>>(() => {\n    if (!parsedData) {\n      return notSupportData.current;\n    }\n    // prevOrderData.current = symbolOrOrder;\n\n    if (!prevOrderData.current) {\n      // prevOrderData.current = {\n      //   ...symbolOrOrder,\n      //   total: \"\",\n      // };\n\n      prevOrderData.current = parsedData;\n      orderDataCache.current = {\n        ...parsedData,\n        total: \"\",\n      };\n\n      return orderDataCache.current as Partial<OrderEntity>;\n    }\n\n    // diff order entry\n    const item = diffOrderEntry(prevOrderData.current, parsedData);\n\n    // console.log(prevOrderData.current, symbolOrOrder, item);\n    // console.log(item);\n\n    if (!item) {\n      return orderDataCache.current as Partial<OrderEntity>;\n    }\n\n    // set the field dirty\n    if (typeof parsedData.order_price !== \"undefined\") {\n      fieldDirty.current.order_price = true;\n    }\n    if (typeof parsedData.order_quantity !== \"undefined\") {\n      fieldDirty.current.order_quantity = true;\n    }\n\n    const values = calculate(parsedData, item.key as any, item.value);\n\n    values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n    values.total = values.total || \"\";\n\n    prevOrderData.current = parsedData;\n    orderDataCache.current = values;\n\n    return values;\n  }, [parsedData, markPrice]);\n\n  /// validator order info\n  useEffect(() => {\n    if (!markPrice || symbolInfo.isNil) return;\n    // validate order data;\n    validator(formattedOrder)\n      ?.then((err) => {\n        setErrors(err);\n      })\n      .catch((err) => {});\n  }, [\n    formattedOrder.order_quantity,\n    formattedOrder.total,\n    formattedOrder.trigger_price,\n    formattedOrder.order_type,\n    markPrice,\n  ]);\n\n  //====== update orderbook ask0/bid0 ======\n  useEffect(() => {\n    if (isNewVersion) {\n      if (!optionsValue?.watchOrderbook) {\n        throw new SDKError(\n          \"In order to calculate the estimated liquidation price, the `options.watchOrderbook` parameter must be set to true.\",\n        );\n      }\n    } else {\n      if (!optionsValue?.watchOrderbook) {\n        return;\n      }\n    }\n\n    ee.on(\"orderbook:update\", onOrderBookUpdate);\n\n    return () => {\n      ee.off(\"orderbook:update\", onOrderBookUpdate);\n    };\n  }, [optionsValue?.watchOrderbook]);\n\n  useEffect(() => {\n    askAndBid.current = [];\n  }, [parsedData?.symbol]);\n\n  //====== end ======\n\n  const getPriceAndQty = (\n    symbolOrOrder: OrderEntity,\n  ): { quantity: number; price: number } | null => {\n    let quantity = Number(symbolOrOrder.order_quantity);\n    const orderPrice = Number(symbolOrOrder.order_price);\n\n    if (isNaN(quantity) || quantity <= 0) {\n      return null;\n    }\n\n    if (!!options?.watchOrderbook && askAndBid.current.length === 0) {\n      throw new SDKError(\n        \"Please check if you are using the `useOrderbookStream` hook or if the orderBook has data.\",\n      );\n    }\n\n    if (\n      (symbolOrOrder.order_type === OrderType.LIMIT ||\n        symbolOrOrder.order_type === OrderType.STOP_LIMIT) &&\n      isNaN(orderPrice)\n    )\n      return null;\n\n    /**\n     * price\n     * if order_type = market order,\n     order side = long, then order_price_i = ask0\n     order side = short, then order_price_i = bid0\n     if order_type = limit order\n     order side = long\n     limit_price >= ask0, then order_price_i = ask0\n     limit_price < ask0, then order_price_i = limit_price\n     order side = short\n     limit_price <= bid0, then order_price_i = bid0\n     limit_price > ask0, then order_price_i = ask0\n     */\n    let price: number | undefined;\n\n    if (\n      symbolOrOrder.order_type === OrderType.MARKET ||\n      symbolOrOrder.order_type === OrderType.STOP_MARKET\n    ) {\n      if (symbolOrOrder.side === OrderSide.BUY) {\n        price = askAndBid.current[0];\n      } else {\n        price = askAndBid.current[1];\n      }\n    } else {\n      // LIMIT order\n      if (symbolOrOrder.side === OrderSide.BUY) {\n        if (orderPrice >= askAndBid.current[0]) {\n          price = askAndBid.current[0];\n        } else {\n          price = orderPrice;\n        }\n      } else {\n        if (orderPrice <= askAndBid.current[1]) {\n          price = askAndBid.current[1];\n        } else {\n          price = orderPrice;\n        }\n      }\n    }\n\n    if (symbolOrOrder.side === OrderSide.SELL) {\n      quantity = -quantity;\n    }\n\n    return { price, quantity };\n  };\n\n  const estLiqPrice = useMemo(() => {\n    if (!accountInfo || !parsedData || !markPrice) return null;\n\n    const result = getPriceAndQty(formattedOrder as OrderEntity);\n    if (result === null) return null;\n    const { price, quantity } = result;\n    if (!price || !quantity) return null;\n\n    const orderFee = orderUtils.orderFee({\n      qty: quantity,\n      price,\n      futuresTakeFeeRate: Number(accountInfo[\"futures_taker_fee_rate\"]) / 10000,\n    });\n\n    const liqPrice = orderUtils.estLiqPrice({\n      markPrice,\n      baseIMR,\n      baseMMR,\n      totalCollateral,\n      positions: positions == null ? [] : positions,\n      IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n      orderFee,\n      newOrder: {\n        qty: quantity,\n        price,\n        symbol: parsedData.symbol!,\n      },\n    });\n\n    // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\n\n    if (liqPrice <= 0) return null;\n\n    return liqPrice;\n  }, [\n    markPrice,\n    baseIMR,\n    baseMMR,\n    totalCollateral,\n    formattedOrder?.order_price,\n    formattedOrder?.order_quantity,\n    formattedOrder?.total,\n    formattedOrder?.trigger_price,\n    accountInfo,\n  ]);\n\n  const estLeverage = useMemo(() => {\n    if (!accountInfo || !parsedData) return null;\n    const result = getPriceAndQty(formattedOrder as OrderEntity);\n    if (result === null || !result.price || !result.quantity) return null;\n\n    const leverage = orderUtils.estLeverage({\n      totalCollateral,\n      positions: positions === null ? [] : positions,\n      newOrder: {\n        symbol: parsedData.symbol,\n        qty: result.quantity,\n        price: result.price,\n      },\n    });\n\n    return leverage;\n  }, [\n    baseIMR,\n    baseMMR,\n    totalCollateral,\n    positions,\n    formattedOrder?.order_price,\n    formattedOrder?.order_quantity,\n    formattedOrder?.total,\n    formattedOrder?.trigger_price,\n  ]);\n\n  return {\n    maxQty,\n    freeCollateral,\n    markPrice,\n    onSubmit,\n    submit,\n    submitting: isMutating,\n    formattedOrder,\n    // errors,\n    estLiqPrice,\n    estLeverage,\n    helper: {\n      //@ts-ignore\n      calculate,\n      validator,\n      // clearErrors,\n    },\n    metaState: {\n      dirty: fieldDirty.current,\n      submitted: submitted.current,\n      errors,\n    },\n    symbolConfig: symbolInfo[symbol](),\n  };\n}\n","import { useEffect, useState } from \"react\";\n\nexport function useMediaQuery(query: string): boolean {\n  const getMatches = (query: string): boolean => {\n    // Prevents SSR issues\n    if (typeof window !== \"undefined\") {\n      return window.matchMedia(query).matches;\n    }\n    return false;\n  };\n\n  const [matches, setMatches] = useState<boolean>(getMatches(query));\n\n  function handleChange() {\n    setMatches(getMatches(query));\n  }\n\n  useEffect(() => {\n    const matchMedia = window?.matchMedia(query);\n\n    // Triggered at the first client-side load and if query changes\n    handleChange();\n\n    // Listen matchMedia\n    if (matchMedia?.addListener) {\n      matchMedia?.addListener(handleChange);\n    } else {\n      matchMedia?.addEventListener?.(\"change\", handleChange);\n    }\n\n    return () => {\n      if (matchMedia?.removeListener) {\n        matchMedia?.removeListener(handleChange);\n      } else {\n        matchMedia?.removeEventListener?.(\"change\", handleChange);\n      }\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [query]);\n\n  return matches;\n}\n","import { MarginMode } from \"@orderly.network/types\";\nimport { PosterPainter } from \"./painter\";\n\nexport type posterDataSource = {\n  /**\n   * slogan of the poster\n   */\n  message?: string;\n  position: {\n    symbol: string;\n    brokerName?: string;\n    // side: OrderSide;\n    side: \"LONG\" | \"SHORT\";\n    marginMode?: MarginMode;\n    /**\n     * The leverage of the position\n     */\n    leverage: number;\n    /**\n     * The unrealized PnL of the position\n     */\n    pnl: number;\n    /**\n     * The return on investment of the position\n     */\n    ROI: number;\n    /**\n     * The informations of the position, such as open price, opened at, mark price, quantity and custom message.\n     */\n    informations: { title: string; value: string }[];\n    /**\n     * The quote currency of the position\n     */\n    currency: string;\n  };\n  /**\n   * The domain of the application\n   */\n  domain: string;\n\n  /**\n   * The update time of the position\n   */\n  updateTime: string;\n\n  referral?: {\n    code: string;\n    slogan: string;\n    link: string;\n  } | null;\n};\n\nexport type layoutInfo = {\n  width?: number;\n  height?: number;\n  // padding?: number;\n  // margin?: number;\n  fontSize?: number;\n\n  color?: string;\n  textAlign?: CanvasTextAlign;\n  textBaseline?: CanvasTextBaseline;\n  position: Partial<{\n    left: number;\n    right: number;\n    top: number;\n    bottom: number;\n  }>;\n};\n\nexport type PosterLayoutConfig = {\n  message?: layoutInfo;\n\n  domain?: layoutInfo;\n  position?: layoutInfo;\n  unrealizedPnl?: layoutInfo & {\n    secondaryColor: string;\n    secondaryFontSize: number;\n  };\n\n  informations?: layoutInfo & {\n    labelColor?: string;\n  };\n  updateTime?: layoutInfo;\n};\n\nexport type DrawOptions = {\n  direction?: \"ltr\" | \"rtl\";\n  /**\n   * Color of common text\n   */\n  color?: string;\n  fontFamily?: string;\n  /**\n   * Lose color\n   */\n  lossColor?: string;\n  /**\n   * Profit color\n   */\n  profitColor?: string;\n  /**\n   * The brand color of the application\n   */\n  brandColor?: string;\n  backgroundColor?: string;\n  backgroundImg?: string;\n  data?: posterDataSource;\n  layout?: PosterLayoutConfig;\n};\n\nexport abstract class BasePaint {\n  constructor(\n    protected ctx: CanvasRenderingContext2D,\n    protected painter: PosterPainter,\n  ) {}\n  abstract draw(options: DrawOptions): Promise<void>;\n}\n","import { BasePaint, type DrawOptions } from \"./basePaint\";\n\nexport class BackgroundPaint extends BasePaint {\n  private img: HTMLImageElement | null = null;\n\n  async draw(options: DrawOptions) {\n    if (\n      typeof options.backgroundImg !== \"undefined\" &&\n      options.backgroundImg !== \"\"\n    ) {\n      return this._drawImage(options);\n    } else if (typeof options.backgroundColor !== \"undefined\") {\n      return this._drawColor(options);\n    }\n  }\n\n  _drawColor(options: DrawOptions) {\n    console.log(\"graw background color\", options);\n    this.ctx.fillStyle = options.backgroundColor || \"black\";\n    this.ctx.fillRect(\n      0,\n      0,\n      this.painter.width * this.painter.ratio,\n      this.painter.height * this.painter.ratio,\n    );\n  }\n\n  async _drawImage(options: DrawOptions) {\n    const width = this.painter.width * this.painter.ratio;\n    const height = this.painter.height * this.painter.ratio;\n\n    return this.loadImg(options.backgroundImg!).then((img) => {\n      this.img = img;\n      this.ctx.save();\n      if (options.direction === \"rtl\") {\n        this.ctx.translate(width, 0);\n        this.ctx.scale(-1, 1);\n      }\n      this.ctx.drawImage(this.img!, 0, 0, width, height);\n      this.ctx.restore();\n    });\n  }\n\n  private loadImg(url: string): Promise<HTMLImageElement> {\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.crossOrigin = \"anonymous\";\n      img.onload = () => {\n        resolve(img);\n      };\n      img.onerror = (e) => {\n        reject(e);\n      };\n      img.src = url;\n    });\n  }\n}\n","//@ts-ignore\n// import QRious from \"./qrious\";\nimport { qrcode } from \"@akamfoad/qr\";\n\nexport const qrPaint = (\n  ctx: CanvasRenderingContext2D,\n  options: {\n    size: number;\n    padding: number;\n    left: number;\n    top: number;\n    data: string;\n  }\n) => {\n  const { size, left, top, data, padding } = options;\n\n  const qr = qrcode(data);\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = size;\n  canvas.height = size;\n  const ctx2 = canvas.getContext(\"2d\");\n\n  // const qr = new QRious({\n  //   value: data,\n  //   size: 200,\n  //   padding: 5,\n  //   level: \"L\",\n  // });\n\n  const cells = qr.modules;\n\n  if (!cells) {\n    return;\n  }\n\n  const tileW = size / cells.length;\n  const tileH = size / cells.length;\n\n  for (let r = 0; r < cells.length; ++r) {\n    const row = cells[r];\n    for (let c = 0; c < row.length; ++c) {\n      ctx2!.fillStyle = row[c] ? \"#000\" : \"#fff\";\n      const w = Math.ceil((c + 1) * tileW) - Math.floor(c * tileW);\n      const h = Math.ceil((r + 1) * tileH) - Math.floor(r * tileH);\n      ctx2!.fillRect(Math.round(c * tileW), Math.round(r * tileH), w, h);\n    }\n  }\n\n  ctx.save();\n  ctx.fillStyle = \"#fff\";\n\n  ctx.fillRect(\n    left - padding,\n    top - padding,\n    size + padding * 2,\n    size + padding * 2\n  );\n  ctx.restore();\n\n  ctx.drawImage(canvas, left, top, size, size);\n};\n","import { path } from \"ramda\";\nimport { MarginMode } from \"@orderly.network/types\";\nimport { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { qrPaint } from \"./qrPaint\";\n\nexport class DataPaint extends BasePaint {\n  private positionInfoCellWidth = 90;\n\n  private DEFAULT_PROFIT_COLOR = \"rgb(0,181,159)\";\n  private DEFAULT_LOSS_COLOR = \"rgb(255,103,194)\";\n\n  private transformTop = 0;\n\n  private QRCODE_SIZE = 56;\n  private BROKER_BADGE_HEIGHT = 18;\n  private BROKER_BADGE_PADDING_X = 8;\n  private BROKER_BADGE_RADIUS = 4;\n  private ITEM_GAP = 7;\n\n  private formatMarginMode(marginMode: MarginMode) {\n    return marginMode === MarginMode.ISOLATED ? \"Isolated\" : \"Cross\";\n  }\n\n  async draw(options: DrawOptions) {\n    const needDrawDetails =\n      Array.isArray(options.data?.position?.informations) &&\n      (options.data?.position?.informations?.length ?? 0) > 0;\n\n    const hasReferral = this.hasReferral(options);\n\n    // const hasMessage = !!options.data?.message;\n    const hasMessage = true;\n\n    this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;\n\n    // If position details are not displayed, the position PNL information will be margin\n    // const offsetTop = hasMessage ? 50 : 100;\n    const offsetTop = 0; // 100;\n    // const offsetMessage = hasMessage ? 0 : -50;\n\n    if (!!options.data?.message) {\n      this.drawMessage(options);\n    }\n\n    if (!!options.data?.position) {\n      this.drawPosition(\n        options,\n        needDrawDetails || hasReferral ? 0 : offsetTop,\n      );\n    }\n\n    if (needDrawDetails) {\n      this.drawInformations(options);\n    }\n\n    this.drawUnrealizedPnL(\n      options,\n      needDrawDetails || hasReferral ? 0 : offsetTop,\n    );\n\n    if (!hasReferral) {\n      if (!!options.data?.domain) {\n        this.drawDomainUrl(options);\n      }\n\n      if (typeof options.data?.updateTime !== \"undefined\") {\n        this.drawPositionTime(options);\n      }\n    }\n\n    if (typeof options.data?.referral !== \"undefined\") {\n      this.drawReferralCode(options);\n    }\n  }\n\n  private drawMessage(options: DrawOptions) {\n    // console.log(\"draw message\", options);\n\n    const layout = path<layoutInfo>(\n      [\"layout\", \"message\"],\n      options,\n    ) as layoutInfo;\n    const { position } = layout;\n\n    this._drawText(`\"${options.data?.message!}\"`, {\n      color: layout.color,\n      fontSize: this._ratio(layout.fontSize as number),\n      top: this._ratio(position.top!),\n      left: this.inlineStart(options, position.left!),\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n      textBaseline: \"top\",\n      fontFamily: options.fontFamily,\n    });\n  }\n  private drawPosition(options: DrawOptions, offsetTop: number = 0) {\n    const layout = path<layoutInfo>(\n      [\"layout\", \"position\"],\n      options,\n    ) as layoutInfo;\n    const { position, fontSize = 14 } = layout;\n    let cursor = this.inlineStart(options, position.left!);\n\n    const top = layout.position.top! + offsetTop + this.transformTop;\n    const items: Array<{\n      kind: \"text\" | \"badge\";\n      text: string;\n      color?: string;\n      fontSize: number;\n      fontWeight?: number;\n    }> = [];\n\n    if (typeof options.data?.position.side !== \"undefined\") {\n      items.push({\n        kind: \"text\",\n        text: options.data.position.side,\n        color:\n          options.data?.position.side.toUpperCase() === \"LONG\"\n            ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n            : options.lossColor || this.DEFAULT_LOSS_COLOR,\n        fontSize: this._ratio(fontSize),\n      });\n    }\n\n    if (typeof options.data?.position.symbol !== \"undefined\") {\n      items.push({\n        kind: \"text\",\n        text: options.data.position.symbol,\n        color: layout.color,\n        fontSize: this._ratio(fontSize),\n      });\n    }\n\n    const brokerName = options.data?.position.brokerName?.trim();\n    if (brokerName) {\n      items.push({\n        kind: \"badge\",\n        text: brokerName,\n        fontSize: this._ratio(12),\n        fontWeight: 600,\n      });\n    }\n\n    const marginMode = options.data?.position.marginMode;\n    if (marginMode) {\n      items.push({\n        kind: \"text\",\n        text: this.formatMarginMode(marginMode),\n        color: layout.color,\n        fontSize: this._ratio(fontSize),\n      });\n    }\n\n    if (typeof options.data?.position.leverage !== \"undefined\") {\n      items.push({\n        kind: \"text\",\n        text: `${options.data.position.leverage}X`,\n        color: layout.color,\n        fontSize: this._ratio(fontSize),\n      });\n    }\n\n    const topPx = this._ratio(top);\n    items.forEach((item, index) => {\n      cursor = this.drawInlineItem(options, item, cursor, topPx);\n      if (index < items.length - 1) {\n        cursor = this.drawInlineSeparator(\n          options,\n          cursor,\n          topPx,\n          this._ratio(fontSize),\n        );\n      }\n    });\n  }\n\n  private _fillRoundedRect(\n    x: number,\n    y: number,\n    width: number,\n    height: number,\n    radius: number,\n    color: string,\n  ) {\n    const r = Math.min(radius, width / 2, height / 2);\n    this.ctx.save();\n    this.ctx.fillStyle = color;\n    this.ctx.beginPath();\n    this.ctx.moveTo(x + r, y);\n    this.ctx.arcTo(x + width, y, x + width, y + height, r);\n    this.ctx.arcTo(x + width, y + height, x, y + height, r);\n    this.ctx.arcTo(x, y + height, x, y, r);\n    this.ctx.arcTo(x, y, x + width, y, r);\n    this.ctx.closePath();\n    this.ctx.fill();\n    this.ctx.restore();\n  }\n\n  private drawUnrealizedPnL(options: DrawOptions, offsetTop: number = 0) {\n    // reset left value;\n    const layout = path<layoutInfo>(\n      [\"layout\", \"unrealizedPnl\"],\n      options,\n    ) as layoutInfo & {\n      secondaryColor: string;\n      secondaryFontSize: number;\n    };\n    const { position } = layout;\n    let cursor = this.inlineStart(options, position.left!);\n    let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n    const top = (position.top ?? 0) + offsetTop + this.transformTop;\n\n    // ROI\n    if (typeof options.data?.position.ROI !== \"undefined\") {\n      const prefix = options.data?.position.ROI! > 0 ? \"+\" : \"\";\n      prevElementBoundingBox = this._drawText(\n        `${prefix}${commify(options.data?.position.ROI)}%`,\n        {\n          color:\n            prefix === \"+\"\n              ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n              : options.lossColor || this.DEFAULT_LOSS_COLOR,\n          left: cursor,\n          top: this._ratio(top),\n\n          fontSize: this._ratio(layout.fontSize as number),\n          fontWeight: 700,\n          fontFamily: options.fontFamily,\n          textAlign: this.inlineStartAlign(options),\n          direction: this.textDirection(options),\n        },\n      );\n    }\n    // unrelPnL\n    if (typeof options.data?.position.pnl !== \"undefined\") {\n      const prefix = options.data?.position.pnl! >= 0 ? \"+\" : \"\";\n      let text = `${prefix}${commify(options.data?.position.pnl)} ${\n        options.data?.position.currency\n      }`;\n      let fontWeight = 600;\n\n      if (prevElementBoundingBox.width) {\n        cursor = this.advanceCursor(\n          options,\n          cursor,\n          (prevElementBoundingBox.width ?? 0) + this._ratio(8),\n        );\n        text = `(${text})`;\n      } else {\n        cursor = this.inlineStart(options, position.left!);\n        fontWeight = 700;\n      }\n\n      const color =\n        typeof options.data.position.ROI === \"undefined\"\n          ? prefix === \"+\"\n            ? options.profitColor || this.DEFAULT_PROFIT_COLOR\n            : options.lossColor || this.DEFAULT_LOSS_COLOR\n          : layout.secondaryColor;\n\n      const fontSize =\n        typeof options.data.position.ROI === \"undefined\"\n          ? this._ratio(layout.fontSize as number)\n          : this._ratio(layout.secondaryFontSize as number);\n\n      prevElementBoundingBox = this._drawText(text, {\n        color,\n        left: cursor,\n        top: this._ratio(top),\n        fontSize,\n        fontWeight,\n        fontFamily: options.fontFamily,\n        textAlign: this.inlineStartAlign(options),\n        direction: this.textDirection(options),\n      });\n    }\n  }\n\n  private drawInformations(options: DrawOptions) {\n    const layout = path<layoutInfo>(\n      [\"layout\", \"informations\"],\n      options,\n    ) as layoutInfo & {\n      labelColor?: string;\n    };\n    const { position } = layout;\n\n    const informations = options.data?.position?.informations || [];\n\n    const isVertical = (options.data?.position.informations.length ?? 0) === 2;\n    const col = informations.length > 4 ? 3 : 2;\n\n    informations.forEach((info, index) => {\n      const colIndex = index % col;\n      const inlineOffset =\n        position.left! + colIndex * this.positionInfoCellWidth;\n\n      // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n      const top =\n        (position.top as number) +\n        Math.floor(index / col) * 38 +\n        this.transformTop;\n\n      this._drawText(info.title, {\n        left: this.inlineStart(options, inlineOffset),\n        top: this._ratio(top),\n        fontSize: this._ratio(10),\n        color: layout.labelColor,\n        fontFamily: options.fontFamily,\n        textAlign: this.inlineStartAlign(options),\n        direction: this.textDirection(options),\n      });\n\n      this._drawText(info.value, {\n        left: this.inlineStart(options, inlineOffset),\n        top: this._ratio(top + 17),\n        fontSize: this._ratio(layout.fontSize as number),\n        fontWeight: 500,\n        color: layout.color as string,\n        fontFamily: options.fontFamily,\n        textAlign: this.inlineStartAlign(options),\n        direction: this.textDirection(options),\n      });\n    });\n  }\n\n  private drawDomainUrl(options: DrawOptions, onlyMeasure: boolean = false) {\n    const layout = path<layoutInfo>(\n      [\"layout\", \"domain\"],\n      options,\n    ) as layoutInfo;\n\n    const hasReferral = this.hasReferral(options);\n\n    const { position } = layout;\n    const top = this.painter.height - position.bottom!;\n\n    return this._drawText(\n      options.data?.domain!,\n      {\n        left: !hasReferral\n          ? this.inlineStart(options, position.left!)\n          : this.inlineEnd(options, 20),\n        top: !hasReferral\n          ? this._ratio(top)\n          : this._ratio(this.painter.height - 16),\n        fontSize: this._ratio(layout.fontSize as number),\n        color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n        fontFamily: options.fontFamily,\n        textBaseline: layout.textBaseline,\n        textAlign: !hasReferral\n          ? this.inlineStartAlign(options)\n          : this.inlineEndAlign(options),\n        direction: this.textDirection(options),\n        fontWeight: 600,\n      },\n      onlyMeasure,\n    );\n  }\n\n  private drawPositionTime(options: DrawOptions) {\n    const layout = path<layoutInfo>(\n      [\"layout\", \"updateTime\"],\n      options,\n    ) as layoutInfo;\n    const { position } = layout;\n    const hasReferral = this.hasReferral(options);\n\n    let top = this.painter.height - position.bottom!;\n    let left = this.inlineStart(options, position.left!);\n\n    if (hasReferral) {\n      const metrics = this.drawDomainUrl(options, true);\n      // console.log(\"metrics\", metrics);\n      left =\n        this.inlineStart(options, position.left! + 8) +\n        (this.isRTL(options) ? metrics.width : -metrics.width);\n      top = this.painter.height - position.bottom!;\n      // console.log(\"left\", left, top, metrics.width, this._ratio(top));\n    }\n\n    this._drawText(\n      !hasReferral\n        ? options.data?.updateTime!\n        : `Share on ${options.data?.updateTime}   |`,\n      {\n        left,\n        top: this._ratio(top),\n        // top: 536,\n        fontSize: this._ratio(layout.fontSize as number),\n        color: layout.color as string,\n        // color: \"red\",\n        textAlign: !hasReferral\n          ? this.inlineStartAlign(options)\n          : this.inlineEndAlign(options),\n        fontFamily: options.fontFamily,\n        textBaseline: layout.textBaseline,\n        direction: this.textDirection(options),\n      },\n    );\n  }\n\n  private drawReferralCode(options: DrawOptions) {\n    if (!options.data?.referral) {\n      return;\n    }\n\n    const layout = path<layoutInfo>(\n      [\"layout\", \"updateTime\"],\n      options,\n    ) as layoutInfo;\n    const { position } = layout;\n    const top = this.painter.height - (position.bottom ?? 0);\n\n    const messageLayout = path<layoutInfo>(\n      [\"layout\", \"message\"],\n      options,\n    ) as layoutInfo;\n\n    const url = new URL(options.data.referral.link);\n\n    const searchParams = url.searchParams;\n    searchParams.append(\"ref\", options.data.referral.code);\n\n    url.search = searchParams.toString();\n\n    const qrSize = this._ratio(this.QRCODE_SIZE);\n    const qrLeft = this.isRTL(options)\n      ? this.inlineStart(options, position.left!) - qrSize\n      : this.inlineStart(options, position.left!);\n\n    qrPaint(this.ctx, {\n      size: this._ratio(this.QRCODE_SIZE),\n      padding: this._ratio(2),\n      left: qrLeft,\n      top: this._ratio(top - this.QRCODE_SIZE),\n      data: `${url.toString()}`,\n    });\n\n    this._drawText(options.data.referral.slogan, {\n      left: this.inlineStart(options, position.left! + 66),\n      top: this._ratio(top - this.QRCODE_SIZE),\n      fontSize: this._ratio(14),\n      color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,\n      fontFamily: options.fontFamily,\n      textBaseline: \"top\",\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n    });\n\n    this._drawText(\"Referral Code\", {\n      left: this.inlineStart(options, position.left! + 66),\n      top: this._ratio(top - 29),\n      fontSize: this._ratio(12),\n      color: layout.color as string,\n      fontFamily: options.fontFamily,\n      textBaseline: \"middle\",\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n    });\n\n    this._drawText(options.data.referral.code, {\n      left: this.inlineStart(options, position.left! + 66),\n      top: this._ratio(top),\n      fontSize: this._ratio(16),\n      color: messageLayout.color as string,\n      fontFamily: options.fontFamily,\n      textBaseline: \"bottom\",\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n    });\n  }\n\n  private _drawText(\n    str: string,\n    options?: {\n      left?: number;\n      top?: number;\n      fontSize?: number;\n      fontFamily?: string;\n      fontWeight?: number;\n      color?: string;\n      textBaseline?: CanvasTextBaseline;\n      textAlign?: CanvasTextAlign;\n      direction?: CanvasDirection;\n    },\n    onlyMeasure: boolean = false,\n  ): TextMetrics {\n    let boundingBox: TextMetrics;\n    const {\n      left = 30,\n      top = 30,\n      fontSize = 13,\n      fontWeight = 500,\n      color = \"black\",\n      textBaseline = \"middle\",\n      textAlign = \"start\",\n      direction = \"ltr\",\n    } = options ?? {};\n\n    this.ctx.save();\n    // \"Nunito Sans\",-apple-system,\"San Francisco\",BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Helvetica,Arial,sans-serif\n    this.ctx.font = `${fontWeight} ${fontSize}px ${options?.fontFamily}`;\n\n    this.ctx.fillStyle = color;\n    this.ctx.textBaseline = textBaseline;\n    this.ctx.textAlign = textAlign;\n    this.ctx.direction = direction;\n    boundingBox = this.ctx.measureText(str);\n\n    if (!onlyMeasure) {\n      this.ctx.fillText(str, left, top);\n    }\n    this.ctx.restore();\n\n    return boundingBox;\n  }\n\n  private hasReferral(options: DrawOptions): boolean {\n    return typeof options.data?.referral !== \"undefined\";\n  }\n\n  private _ratio(num: number) {\n    return num * this.painter.ratio;\n  }\n\n  private canvasWidth() {\n    return this._ratio(this.painter.width);\n  }\n\n  private textDirection(options: DrawOptions): CanvasDirection {\n    return this.isRTL(options) ? \"rtl\" : \"ltr\";\n  }\n\n  private isRTL(options: DrawOptions): boolean {\n    return options.direction === \"rtl\";\n  }\n\n  private inlineStart(options: DrawOptions, value: number): number {\n    return this.isRTL(options)\n      ? this.canvasWidth() - this._ratio(value)\n      : this._ratio(value);\n  }\n\n  private inlineEnd(options: DrawOptions, value: number): number {\n    return this.isRTL(options)\n      ? this._ratio(value)\n      : this.canvasWidth() - this._ratio(value);\n  }\n\n  private inlineStartAlign(options: DrawOptions): CanvasTextAlign {\n    return this.isRTL(options) ? \"right\" : \"left\";\n  }\n\n  private inlineEndAlign(options: DrawOptions): CanvasTextAlign {\n    return this.isRTL(options) ? \"left\" : \"right\";\n  }\n\n  private advanceCursor(\n    options: DrawOptions,\n    cursor: number,\n    width: number,\n  ): number {\n    return this.isRTL(options) ? cursor - width : cursor + width;\n  }\n\n  private drawInlineSeparator(\n    options: DrawOptions,\n    cursor: number,\n    top: number,\n    fontSize: number,\n  ): number {\n    const gap = this._ratio(this.ITEM_GAP);\n    const separatorMetrics = this._drawText(\"|\", {\n      color: \"rgba(255,255,255,0.2)\",\n      left: this.advanceCursor(options, cursor, gap),\n      top,\n      fontSize,\n      fontFamily: options.fontFamily,\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n    });\n    return this.advanceCursor(\n      options,\n      this.advanceCursor(options, cursor, gap),\n      (separatorMetrics.width ?? 0) + gap,\n    );\n  }\n\n  private drawInlineItem(\n    options: DrawOptions,\n    item: {\n      kind: \"text\" | \"badge\";\n      text: string;\n      color?: string;\n      fontSize: number;\n      fontWeight?: number;\n    },\n    cursor: number,\n    top: number,\n  ): number {\n    if (item.kind === \"text\") {\n      const metrics = this._drawText(item.text, {\n        color: item.color,\n        left: cursor,\n        top,\n        fontSize: item.fontSize,\n        fontWeight: item.fontWeight,\n        fontFamily: options.fontFamily,\n        textAlign: this.inlineStartAlign(options),\n        direction: this.textDirection(options),\n      });\n      return this.advanceCursor(options, cursor, metrics.width ?? 0);\n    }\n\n    const badgeHeight = this._ratio(this.BROKER_BADGE_HEIGHT);\n    const badgePaddingX = this._ratio(this.BROKER_BADGE_PADDING_X);\n    const badgeRadius = this._ratio(this.BROKER_BADGE_RADIUS);\n    const textMetrics = this._drawText(\n      item.text,\n      {\n        left: 0,\n        top: 0,\n        fontSize: item.fontSize,\n        fontWeight: item.fontWeight ?? 600,\n        direction: this.textDirection(options),\n      },\n      true,\n    );\n    const badgeWidth = (textMetrics.width ?? 0) + badgePaddingX * 2;\n    const badgeTop = top - badgeHeight / 2;\n    const badgeLeft = this.isRTL(options) ? cursor - badgeWidth : cursor;\n    this._fillRoundedRect(\n      badgeLeft,\n      badgeTop,\n      badgeWidth,\n      badgeHeight,\n      badgeRadius,\n      \"rgba(255,255,255,0.06)\",\n    );\n    this._drawText(item.text, {\n      color: \"rgba(255,255,255,0.36)\",\n      left: this.isRTL(options)\n        ? badgeLeft + badgeWidth - badgePaddingX\n        : badgeLeft + badgePaddingX,\n      top: badgeTop + badgeHeight / 2,\n      fontSize: item.fontSize,\n      fontWeight: item.fontWeight ?? 600,\n      textBaseline: \"middle\",\n      textAlign: this.inlineStartAlign(options),\n      direction: this.textDirection(options),\n    });\n    return this.advanceCursor(options, cursor, badgeWidth);\n  }\n}\n","import { BackgroundPaint } from \"./backgroundPaint\";\nimport { DrawOptions } from \"./basePaint\";\nimport { DataPaint } from \"./dataPaint\";\nexport class PosterPainter {\n  private ctx: CanvasRenderingContext2D;\n  width: number = 0;\n  height: number = 0;\n  ratio: number;\n  // resourceManager: Resource;\n  constructor(\n    private canvas: HTMLCanvasElement,\n    options?: {\n      ratio: number;\n    }\n  ) {\n    // console.log(\"PosterPainter constructor\");\n\n    this.ctx = this.canvas.getContext(\"2d\")!;\n\n    this.width = this.canvas.width;\n    this.height = this.canvas.height;\n\n    // this.ratio =\n    //   options?.ratio ||\n    //   (typeof window !== \"undefined\"\n    //     ? Math.ceil(window.devicePixelRatio)\n    //     : 1) ||\n    //   1;\n\n    this.ratio = Math.max(\n      options?.ratio || 1,\n      typeof window !== \"undefined\" ? Math.ceil(window.devicePixelRatio) : 1\n    );\n\n    // render to high resolution\n    this.canvas.width = this.width * this.ratio;\n    this.canvas.height = this.height * this.ratio;\n    this.canvas.style.width = this.width + \"px\";\n    this.canvas.style.height = this.height + \"px\";\n\n    //\n  }\n\n  draw(options: DrawOptions) {\n    requestAnimationFrame(() => this._draw.bind(this)(options));\n  }\n\n  async _draw(options: DrawOptions) {\n    if (this.ctx === null) return;\n    // console.log(\"============ DRAW ============\");\n    // this.ctx.font = options.fontFamily!;\n    // this.ctx.clearRect(0, 0, this.width * this.ratio, this.height * this.ratio);\n    // start draw\n    // background\n    await new BackgroundPaint(this.ctx, this).draw(options);\n    // data paint\n    await new DataPaint(this.ctx, this).draw(options);\n  }\n}\n","import { type PosterLayoutConfig } from \"./basePaint\";\n\nexport const DefaultLayoutConfig: PosterLayoutConfig = {\n  domain: {\n    fontSize: 13,\n    // color: undefined,\n    textBaseline: \"bottom\",\n    position: {\n      left: 20,\n      bottom: 32,\n    },\n  },\n  message: {\n    fontSize: 20,\n    color: \"rgba(255, 255, 255, 0.98)\",\n    textBaseline: \"top\",\n    position: {\n      left: 20,\n      top: 16,\n    },\n  },\n  position: {\n    fontSize: 14,\n    color: \"rgba(255,255,255,0.98)\",\n    position: {\n      left: 20,\n      top: 70,\n    },\n  },\n  unrealizedPnl: {\n    fontSize: 36,\n    color: \"rgba(255,255,255,0.5)\",\n    secondaryColor: \"rgba(255,255,255,0.54)\",\n    secondaryFontSize: 20,\n    position: {\n      left: 20,\n      top: 110,\n    },\n  },\n  informations: {\n    fontSize: 12,\n    color: \"rgba(255, 255, 255, 0.8)\",\n    labelColor: \"rgba(255,255,255,0.36)\",\n    position: {\n      left: 20,\n      top: 150,\n    },\n  },\n\n  updateTime: {\n    fontSize: 10,\n    color: \"rgba(255,255,255,0.3)\",\n    textAlign: \"start\",\n    textBaseline: \"bottom\",\n    position: {\n      left: 20,\n      bottom: 17,\n    },\n  },\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { mergeDeepRight } from \"ramda\";\nimport { PosterPainter } from \"./services/painter/painter\";\nimport { type DrawOptions } from \"./services/painter/basePaint\";\nimport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nimport { SDKError } from \"@orderly.network/types\";\n\n/**\n * Generates a poster image based on position information. You can set the size, background color, font color, font size, and content position of the poster.\n * @example\n * ```tsx\n * const { ref, toDataURL, toBlob, download, copy } = usePoster({\n *   backgroundColor: \"#0b8c70\",\n *   backgroundImg: \"/images/poster_bg.png\",\n *   color: \"rgba(255, 255, 255, 0.98)\",\n *   profitColor: \"rgb(0,181,159)\",\n *   // ...\n * });\n * ```\n */\nexport const usePoster = (\n  /**\n   * The options to draw the poster\n   */\n  data: DrawOptions,\n  options?: {\n    /**\n     * The ratio of the poster\n     */\n    ratio?: number;\n  }\n) => {\n  const [error, setError] = useState<Error | null>(null);\n  const [canCopy, setCanCopy] = useState<boolean>(\n    () => typeof navigator.clipboard !== \"undefined\"\n  );\n\n  const painterRef = useRef<PosterPainter | null>(null);\n\n  const [target, setTarget] = useState<HTMLCanvasElement | null>(null);\n\n  useEffect(() => {\n    // Create the painter instance\n    if (target) {\n      if (!painterRef.current) {\n        painterRef.current = new PosterPainter(target, {\n          ratio: options?.ratio || 1,\n          ...options,\n        });\n      }\n\n      painterRef.current.draw(\n        mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n          { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n          data\n        )\n      );\n    }\n  }, [target, data]);\n\n  // useEffect(() => {\n  //   if (painterRef.current) {\n  //     painterRef.current.draw(\n  //       mergeDeepRight<Partial<DrawOptions>, DrawOptions>(\n  //         { layout: DefaultLayoutConfig, fontFamily: \"Manrope\" },\n  //         data\n  //       )\n  //     );\n  //   }\n  // }, [data]);\n\n  const toDataURL = (type?: string, encoderOptions?: number) => {\n    if (!target) {\n      throw new SDKError(\"The ref must be a canvas element\");\n    }\n    return target.toDataURL(type, encoderOptions);\n  };\n\n  /**\n   * Converts the poster to a blob\n   */\n  const toBlob = useCallback(\n    (type?: string, encoderOptions?: number): Promise<Blob | null> => {\n      return new Promise<Blob | null>((resolve) => {\n        if (!target) {\n          resolve(null);\n          return;\n        }\n        target.toBlob(resolve, type, encoderOptions);\n      });\n    },\n    [target]\n  );\n\n  const ref = (ref: HTMLCanvasElement | null) => {\n    if (!ref) return;\n    if (ref.tagName.toUpperCase() !== \"CANVAS\") {\n      setError(new SDKError(\"The ref must be a canvas element\"));\n      return;\n    }\n    setTarget(ref);\n  };\n\n  const download = useCallback(\n    (filename: string, type: string = \"image/png\", encoderOptions?: number) => {\n      if (!target) {\n        throw new SDKError(\"The ref must be a canvas element\");\n      }\n      const img = new Image();\n      img.src = target.toDataURL(type, encoderOptions);\n      const link = document.createElement(\"a\");\n      link.href = img.src;\n      link.download = filename;\n      link.click();\n    },\n    [target]\n  );\n\n  const copy = useCallback(() => {\n    if (!target) {\n      throw new SDKError(\"The ref must be a canvas element\");\n    }\n    // copy image to clipboard\n    return new Promise<void>((resolve, reject) => {\n      if (!navigator.clipboard) {\n        reject(new SDKError(\"Clipboard API is not supported\"));\n        return;\n      }\n      target.toBlob((blob) => {\n        if (!blob) {\n          reject(new SDKError(\"Failed to create blob\"));\n          return;\n        }\n        return navigator.clipboard\n          .write([new ClipboardItem({ [blob.type]: blob })])\n          .then(resolve, reject);\n      });\n    });\n  }, [target]);\n\n  return {\n    error,\n    /**\n     * The ref to the canvas element, you should pass this ref to the canvas element\n     */\n    ref,\n    /**\n     * Converts the poster to a data URL\n     */\n    toDataURL,\n    /**\n     * Converts the poster to a blob\n     */\n    toBlob,\n    /**\n     * Downloads the poster as an image\n     */\n    download,\n    /**\n     * Browser if supports copy image to clipboard\n     */\n    canCopy,\n    copy,\n  } as const;\n};\n","export enum TWType {\n  normal = \"normal\",\n  mm = \"mm\",\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { TWType } from \"./types\";\nimport { useQuery } from \"../useQuery\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport type EpochInfoItem = {\n  epoch_id: number;\n  start_time: number;\n  end_time: number;\n  // power_fees_paid_major: number;\n  // power_fees_paid_alts: number;\n  // power_staked_major: number;\n  // power_staked_alts: number;\n  epoch_token: string;\n  max_reward_amount: number;\n  // k_constant_major: number;\n  // k_constant_alts: number;\n};\n\nexport type EpochInfoType = [\n  data: EpochInfoItem[] | undefined,\n  {\n    isLoading: boolean;\n    curEpochInfo: EpochInfoItem | undefined;\n    isNotStared: boolean;\n    refresh: () => void;\n  }\n];\n\nexport const useEpochInfo = (type: TWType): EpochInfoType => {\n  // const [data, setData] = useState<EpochInfoItem[] | undefined>(undefined);\n  const [curEpochInfo, setCurEpochInfo] = useState<EpochInfoItem | undefined>(\n    undefined\n  );\n\n  const path =\n    type === TWType.normal\n      ? \"/v1/public/trading_rewards/epoch_info\"\n      : \"/v1/public/market_making_rewards/epoch_info\";\n  const {\n    data: epochInfo,\n    error,\n    isLoading,\n    mutate: refresh,\n  } = useQuery(path, {\n    formatter: (res) => {\n      if (typeof res === \"object\" && \"rows\" in res! && \"current_epoch\" in res) {\n        const { rows, current_epoch } = res;\n        if (Array.isArray(rows)) {\n          const list: EpochInfoItem[] = rows.map(\n            (e: any) => e as EpochInfoItem\n          );\n          list.sort((a, b) => b.end_time - a.end_time);\n          const curEpochIndex = list?.findIndex(\n            (item: any) => item.epoch_id === current_epoch\n          );\n\n          const epochOne = list.find((item) => item.epoch_id === 1);\n\n          if (epochOne && epochOne?.start_time > getTimestamp()) {\n            // not start\n            setCurEpochInfo(epochOne);\n          } else {\n            setCurEpochInfo(\n              curEpochIndex !== -1 ? list?.[curEpochIndex] : undefined\n            );\n          }\n\n          return list;\n        }\n      }\n      return [];\n    },\n  });\n\n  const isNotStared= useMemo(() => {\n    // if (curEpochInfo) {\n    //   return curEpochInfo?.start_time > Date.now();\n    // }\n    // return true;\n\n    const epochOne = epochInfo?.find((item) => item.epoch_id === 1);\n    if (epochOne) {\n      return epochOne.start_time > getTimestamp();\n    }\n    return true;\n  }, [epochInfo]);\n\n  return [epochInfo, { isLoading, curEpochInfo, isNotStared, refresh }];\n};\n","\nimport { useEffect, useMemo, useState } from \"react\";\nimport { TWType } from \"./types\";\nimport { useAccount } from \"../useAccount\";\nimport { useWalletConnector } from \"../walletConnectorContext\";\nimport { useQuery } from \"../useQuery\";\nimport { useAllBrokers } from \"./useAllBrokers\";\n\nexport type CurrentEpochEstimateRow = {\n  broker_id: string;\n  est_r_account: number;\n  /// front end added\n  broker_name: string;\n};\n\nexport type CurrentEpochEstimate = {\n  est_r_wallet: string;\n  est_stake_boost?: number;\n  est_avg_stake?: number;\n  est_trading_volume: number;\n  rows: CurrentEpochEstimateRow[];\n};\n\nexport const useCurEpochEstimate = (type: TWType) => {\n  const [data, setData] = useState<CurrentEpochEstimate | undefined>(undefined);\n  // const { address, brokers, isNotSupportChain } = useAppContext();\n  const { account } = useAccount();\n\n  const brokers = useAllBrokers();\n\n  /// TODO: use right value\n  const isNotSupportChain = false;\n\n  const address = account.address;\n\n\n\n  const path =\n  type === TWType.normal\n    ? `/v1/public/trading_rewards/current_epoch_estimate?address=${address}`\n    : `/v1/public/market_making_rewards/current_epoch_estimate?address=${address}`;\n  const { data: estimateData } = useQuery<CurrentEpochEstimate | undefined>(address !== undefined ? path : '', {\n    formatter: (res: any) => {\n      const data = {\n        ...res,\n        rows:\n          res.rows?.map((item: any) => ({\n            ...item,\n            broker_name: item.broker_id,\n          })) || [],\n        est_trading_volume: res?.est_maker_volume || res?.est_trading_volume,\n      };\n      return data;\n    }\n  });\n  \n\n\n  const reuslt = useMemo(() => {\n    if (estimateData) {\n      const newData = { ...estimateData };\n      newData.rows = newData.rows?.map((item: any) => ({\n        ...item,\n        broker_name: brokers[item.broker_id] || item.broker_id,\n      }));\n\n      return newData;\n    }\n    return data;\n  }, [estimateData, brokers]);\n\n  return [reuslt] as const;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useAllBrokers } from \"./useAllBrokers\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n// import { assert } from \"ethers\";\n\nexport type AccountRewardsHistoryRow = {\n  broker_id: string;\n  wallet_epoch_avg_staked?: number;\n  trader_score_major?: number;\n  trader_score_alts?: number;\n  epoch_token?: string;\n  reward_status?: string;\n  r_major?: number;\n  r_alts?: number;\n  r_account?: number;\n  broker_name?: string;\n};\n\nexport type AccountRewardsHistory = {\n  epoch_id: number;\n  broker: AccountRewardsHistoryRow[];\n};\n\nexport const useAccountRewardsHistory = (address?: string) => {\n  const [brokers] = useAllBrokers();\n  const { data } = usePrivateQuery<AccountRewardsHistory[] | undefined>(\n    `/v1/public/trading_rewards/account_rewards_history?address=${\n      address ?? \"\"\n    }`,\n    {\n      revalidateOnFocus: false,\n      formatter: (res) => {\n        const data = res?.rows?.map((e: any) => {\n          e.broker = e.broker.map((item: any) => ({\n            ...item,\n            broker_name: item?.broker_id,\n          }));\n          return {\n            epoch_id: e.epoch_id,\n            broker: e.broker,\n          };\n        });\n\n        return data;\n      },\n    }\n  );\n\n  const result = useMemo(() => {\n    if (data && brokers) {\n      const newData = [...data];\n      newData.forEach((data) => {\n        const list = data.broker;\n        for (let i = 0; i < list.length; i++) {\n          const broker = list[i];\n\n          const name = brokers[broker.broker_id];\n          list[i].broker_name = name || list[i].broker_name;\n        }\n      });\n      return newData;\n    }\n    return data;\n  }, [data, brokers]);\n\n  return { data: result };\n};\n","[\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"target\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"AddressEmptyCode\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"AddressInsufficientBalance\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"implementation\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC1967InvalidImplementation\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ERC1967NonPayable\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"allowance\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"needed\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ERC20InsufficientAllowance\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"balance\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"needed\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ERC20InsufficientBalance\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"approver\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC20InvalidApprover\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"receiver\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC20InvalidReceiver\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC20InvalidSender\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC20InvalidSpender\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"EnforcedPause\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ExpectedPause\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"FailedInnerCall\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidDelegate\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidEndpointCall\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidInitialization\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidLocalDecimals\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"options\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"InvalidOptions\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"LzTokenUnavailable\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"eid\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"NoPeer\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"msgValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NotEnoughNative\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"NotInitializing\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"addr\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OnlyEndpoint\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"sender\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"OnlyPeer\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"OnlySelf\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnableInvalidOwner\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnableUnauthorizedAccount\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"token\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SafeERC20FailedOperation\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"result\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"SimulationResult\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amountLD\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"minAmountLD\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SlippageExceeded\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UUPSUnauthorizedCallContext\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"slot\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UUPSUnsupportedProxiableUUID\",\n    \"type\": \"error\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"eid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"uint16\",\n            \"name\": \"msgType\",\n            \"type\": \"uint16\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"options\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"indexed\": false,\n        \"internalType\": \"struct EnforcedOptionParam[]\",\n        \"name\": \"_enforcedOptions\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"name\": \"EnforcedOptionSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint64\",\n        \"name\": \"version\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"name\": \"Initialized\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"inspector\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MsgInspectorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"guid\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint32\",\n        \"name\": \"srcEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"toAddress\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountReceivedLD\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OFTReceived\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"guid\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint32\",\n        \"name\": \"dstEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"fromAddress\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountSentLD\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountReceivedLD\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OFTSent\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Paused\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint32\",\n        \"name\": \"eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"peer\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"PeerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"preCrimeAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"PreCrimeSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Unpaused\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"implementation\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Upgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"SEND\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"SEND_AND_CALL\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UPGRADE_INTERFACE_VERSION\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"srcEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"sender\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          }\n        ],\n        \"internalType\": \"struct Origin\",\n        \"name\": \"origin\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"allowInitializePath\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"approvalRequired\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"pure\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_srcEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_sender\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"_nonce\",\n        \"type\": \"uint64\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_payloadHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"burnInboundNonce\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"srcEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"sender\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          }\n        ],\n        \"internalType\": \"struct Origin\",\n        \"name\": \"_origin\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_guid\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_message\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"clearInboundNonce\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_msgType\",\n        \"type\": \"uint16\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_extraOptions\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"combineOptions\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"decimalConversionRate\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint8\",\n        \"name\": \"\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"endpoint\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ILayerZeroEndpointV2\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"msgType\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"enforcedOptions\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"enforcedOption\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_lzEndpoint\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_delegate\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"srcEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"sender\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          }\n        ],\n        \"internalType\": \"struct Origin\",\n        \"name\": \"\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"\",\n        \"type\": \"bytes\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_sender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"isComposeMsgSender\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_peer\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"isPeer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"srcEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"sender\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          }\n        ],\n        \"internalType\": \"struct Origin\",\n        \"name\": \"_origin\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_guid\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_message\",\n        \"type\": \"bytes\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_executor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_extraData\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"lzReceive\",\n    \"outputs\": [],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint32\",\n                \"name\": \"srcEid\",\n                \"type\": \"uint32\"\n              },\n              {\n                \"internalType\": \"bytes32\",\n                \"name\": \"sender\",\n                \"type\": \"bytes32\"\n              },\n              {\n                \"internalType\": \"uint64\",\n                \"name\": \"nonce\",\n                \"type\": \"uint64\"\n              }\n            ],\n            \"internalType\": \"struct Origin\",\n            \"name\": \"origin\",\n            \"type\": \"tuple\"\n          },\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"dstEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"receiver\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"guid\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"value\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"executor\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"message\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"extraData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct InboundPacket[]\",\n        \"name\": \"_packets\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"name\": \"lzReceiveAndRevert\",\n    \"outputs\": [],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"srcEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"sender\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          }\n        ],\n        \"internalType\": \"struct Origin\",\n        \"name\": \"_origin\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_guid\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_message\",\n        \"type\": \"bytes\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_executor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_extraData\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"lzReceiveSimulate\",\n    \"outputs\": [],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"maxReceivedNonce\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"msgInspector\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_srcEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_sender\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"nextNonce\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_srcEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_sender\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"_nonce\",\n        \"type\": \"uint64\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_payloadHash\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"nilifyInboundNonce\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"oApp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"oAppVersion\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"senderVersion\",\n        \"type\": \"uint64\"\n      },\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"receiverVersion\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"pure\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"oftVersion\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes4\",\n        \"name\": \"interfaceId\",\n        \"type\": \"bytes4\"\n      },\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"version\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"stateMutability\": \"pure\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"orderedNonce\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"pause\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"paused\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"eid\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"peers\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"peer\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"preCrime\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"proxiableUUID\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"dstEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"to\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"minAmountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"extraOptions\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"composeMsg\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"oftCmd\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct SendParam\",\n        \"name\": \"_sendParam\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"quoteOFT\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"minAmountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"maxAmountLD\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct OFTLimit\",\n        \"name\": \"oftLimit\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"feeAmountLD\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"string\",\n            \"name\": \"description\",\n            \"type\": \"string\"\n          }\n        ],\n        \"internalType\": \"struct OFTFeeDetail[]\",\n        \"name\": \"oftFeeDetails\",\n        \"type\": \"tuple[]\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountSentLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountReceivedLD\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct OFTReceipt\",\n        \"name\": \"oftReceipt\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"dstEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"to\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"minAmountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"extraOptions\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"composeMsg\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"oftCmd\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct SendParam\",\n        \"name\": \"_sendParam\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"_payInLzToken\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"name\": \"quoteSend\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"nativeFee\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"lzTokenFee\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct MessagingFee\",\n        \"name\": \"msgFee\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"dstEid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"to\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"minAmountLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"extraOptions\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"composeMsg\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"oftCmd\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct SendParam\",\n        \"name\": \"_sendParam\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"nativeFee\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"lzTokenFee\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct MessagingFee\",\n        \"name\": \"_fee\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_refundAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"send\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"bytes32\",\n            \"name\": \"guid\",\n            \"type\": \"bytes32\"\n          },\n          {\n            \"internalType\": \"uint64\",\n            \"name\": \"nonce\",\n            \"type\": \"uint64\"\n          },\n          {\n            \"components\": [\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"nativeFee\",\n                \"type\": \"uint256\"\n              },\n              {\n                \"internalType\": \"uint256\",\n                \"name\": \"lzTokenFee\",\n                \"type\": \"uint256\"\n              }\n            ],\n            \"internalType\": \"struct MessagingFee\",\n            \"name\": \"fee\",\n            \"type\": \"tuple\"\n          }\n        ],\n        \"internalType\": \"struct MessagingReceipt\",\n        \"name\": \"msgReceipt\",\n        \"type\": \"tuple\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountSentLD\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amountReceivedLD\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct OFTReceipt\",\n        \"name\": \"oftReceipt\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_delegate\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setDelegate\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint32\",\n            \"name\": \"eid\",\n            \"type\": \"uint32\"\n          },\n          {\n            \"internalType\": \"uint16\",\n            \"name\": \"msgType\",\n            \"type\": \"uint16\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"options\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct EnforcedOptionParam[]\",\n        \"name\": \"_enforcedOptions\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"name\": \"setEnforcedOptions\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_msgInspector\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setMsgInspector\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"_orderedNonce\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"name\": \"setOrderedNonce\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_eid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_peer\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"setPeer\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_preCrime\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setPreCrime\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"sharedDecimals\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint8\",\n        \"name\": \"\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_srcEid\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_sender\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint64\",\n        \"name\": \"_nonce\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"name\": \"skipInboundNonce\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"token\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"unpause\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newImplementation\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"data\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"upgradeToAndCall\",\n    \"outputs\": [],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]","[\n  { \"type\": \"constructor\", \"inputs\": [], \"stateMutability\": \"nonpayable\" },\n  { \"type\": \"receive\", \"stateMutability\": \"payable\" },\n  {\n    \"type\": \"function\",\n    \"name\": \"DEFAULT_ADMIN_ROLE\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"UPGRADE_INTERFACE_VERSION\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"string\", \"internalType\": \"string\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"_msgPayload\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"_msgReceipt\",\n    \"inputs\": [],\n    \"outputs\": [\n      { \"name\": \"guid\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"nonce\", \"type\": \"uint64\", \"internalType\": \"uint64\" },\n      {\n        \"name\": \"fee\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct MessagingFee\",\n        \"components\": [\n          { \"name\": \"nativeFee\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n          { \"name\": \"lzTokenFee\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n        ]\n      }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"_oftReceipt\",\n    \"inputs\": [],\n    \"outputs\": [\n      { \"name\": \"amountSentLD\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"amountReceivedLD\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"_options\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"chainId2Eid\",\n    \"inputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint32\", \"internalType\": \"uint32\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"chainedEventId\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"claimReward\",\n    \"inputs\": [\n      { \"name\": \"distributionId\", \"type\": \"uint32\", \"internalType\": \"uint32\" },\n      { \"name\": \"cumulativeAmount\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"merkleProof\", \"type\": \"bytes32[]\", \"internalType\": \"bytes32[]\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"defaultOftGas\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint128\", \"internalType\": \"uint128\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"eid2ChainId\",\n    \"inputs\": [{ \"name\": \"\", \"type\": \"uint32\", \"internalType\": \"uint32\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getLzSendReceipt\",\n    \"inputs\": [],\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct MessagingReceipt\",\n        \"components\": [\n          { \"name\": \"guid\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n          { \"name\": \"nonce\", \"type\": \"uint64\", \"internalType\": \"uint64\" },\n          {\n            \"name\": \"fee\",\n            \"type\": \"tuple\",\n            \"internalType\": \"struct MessagingFee\",\n            \"components\": [\n              { \"name\": \"nativeFee\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n              { \"name\": \"lzTokenFee\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"\",\n        \"type\": \"tuple\",\n        \"internalType\": \"struct OFTReceipt\",\n        \"components\": [\n          { \"name\": \"amountSentLD\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n          { \"name\": \"amountReceivedLD\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n        ]\n      },\n      { \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n      { \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n    ],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"getRoleAdmin\",\n    \"inputs\": [{ \"name\": \"role\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"grantRole\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"hasRole\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"initialize\",\n    \"inputs\": [\n      { \"name\": \"_oft\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"_usdc\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"_owner\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"ledgerAddr\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"ledgerChainId\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"lzCompose\",\n    \"inputs\": [\n      { \"name\": \"from\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"_message\", \"type\": \"bytes\", \"internalType\": \"bytes\" },\n      { \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"lzEndpoint\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"myChainId\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"orderTokenOft\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"stateMutability\": \"view\"\n  },\n  { \"type\": \"function\", \"name\": \"pause\", \"inputs\": [], \"outputs\": [], \"stateMutability\": \"nonpayable\" },\n  {\n    \"type\": \"function\",\n    \"name\": \"paused\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"payloadType2BackwardFee\",\n    \"inputs\": [{ \"name\": \"\", \"type\": \"uint8\", \"internalType\": \"uint8\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"payloadType2DstGas\",\n    \"inputs\": [{ \"name\": \"\", \"type\": \"uint8\", \"internalType\": \"uint8\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint128\", \"internalType\": \"uint128\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"proxiableUUID\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"quoteClaimReward\",\n    \"inputs\": [\n      { \"name\": \"distributionId\", \"type\": \"uint32\", \"internalType\": \"uint32\" },\n      { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"cumulativeAmount\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"merkleProof\", \"type\": \"bytes32[]\", \"internalType\": \"bytes32[]\" }\n    ],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"quoteSendUserRequest\",\n    \"inputs\": [\n      { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"user\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"payloadType\", \"type\": \"uint8\", \"internalType\": \"uint8\" }\n    ],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"quoteStakeOrder\",\n    \"inputs\": [\n      { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"sender\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"renounceRole\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"callerConfirmation\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"revokeRole\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" },\n      { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"sendUserRequest\",\n    \"inputs\": [\n      { \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"payloadType\", \"type\": \"uint8\", \"internalType\": \"uint8\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setChainId2Eid\",\n    \"inputs\": [\n      { \"name\": \"chainId\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"eid\", \"type\": \"uint32\", \"internalType\": \"uint32\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setDefaultOftGas\",\n    \"inputs\": [{ \"name\": \"_defaultOftGas\", \"type\": \"uint128\", \"internalType\": \"uint128\" }],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setLedgerInfo\",\n    \"inputs\": [\n      { \"name\": \"_ledgerChainId\", \"type\": \"uint256\", \"internalType\": \"uint256\" },\n      { \"name\": \"_ledgerAddr\", \"type\": \"address\", \"internalType\": \"address\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setLzEndpoint\",\n    \"inputs\": [{ \"name\": \"_lzEndpoint\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setMyChainId\",\n    \"inputs\": [{ \"name\": \"_myChainId\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setOrderTokenOft\",\n    \"inputs\": [{ \"name\": \"_orderTokenOft\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setPayloadType2BackwardFee\",\n    \"inputs\": [\n      { \"name\": \"payloadType\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n      { \"name\": \"backwardFee\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"setPayloadType2DstGas\",\n    \"inputs\": [\n      { \"name\": \"payloadType\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n      { \"name\": \"dstGas\", \"type\": \"uint128\", \"internalType\": \"uint128\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"stakeOrder\",\n    \"inputs\": [{ \"name\": \"amount\", \"type\": \"uint256\", \"internalType\": \"uint256\" }],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"supportsInterface\",\n    \"inputs\": [{ \"name\": \"interfaceId\", \"type\": \"bytes4\", \"internalType\": \"bytes4\" }],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"bool\", \"internalType\": \"bool\" }],\n    \"stateMutability\": \"view\"\n  },\n  { \"type\": \"function\", \"name\": \"unpause\", \"inputs\": [], \"outputs\": [], \"stateMutability\": \"nonpayable\" },\n  {\n    \"type\": \"function\",\n    \"name\": \"upgradeToAndCall\",\n    \"inputs\": [\n      { \"name\": \"newImplementation\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"data\", \"type\": \"bytes\", \"internalType\": \"bytes\" }\n    ],\n    \"outputs\": [],\n    \"stateMutability\": \"payable\"\n  },\n  {\n    \"type\": \"function\",\n    \"name\": \"usdcAddr\",\n    \"inputs\": [],\n    \"outputs\": [{ \"name\": \"\", \"type\": \"address\", \"internalType\": \"address\" }],\n    \"stateMutability\": \"view\"\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ClaimRewardTokenTransferred\",\n    \"inputs\": [\n      { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"amount\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ClaimUsdcRevenueTransferred\",\n    \"inputs\": [\n      { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"amount\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"ClaimVestingRequestTransferred\",\n    \"inputs\": [\n      { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"amount\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Initialized\",\n    \"inputs\": [{ \"name\": \"version\", \"type\": \"uint64\", \"indexed\": false, \"internalType\": \"uint64\" }],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Paused\",\n    \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"indexed\": false, \"internalType\": \"address\" }],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"RoleAdminChanged\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"indexed\": true, \"internalType\": \"bytes32\" },\n      { \"name\": \"previousAdminRole\", \"type\": \"bytes32\", \"indexed\": true, \"internalType\": \"bytes32\" },\n      { \"name\": \"newAdminRole\", \"type\": \"bytes32\", \"indexed\": true, \"internalType\": \"bytes32\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"RoleGranted\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"indexed\": true, \"internalType\": \"bytes32\" },\n      { \"name\": \"account\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"sender\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"RoleRevoked\",\n    \"inputs\": [\n      { \"name\": \"role\", \"type\": \"bytes32\", \"indexed\": true, \"internalType\": \"bytes32\" },\n      { \"name\": \"account\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"sender\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }\n    ],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Unpaused\",\n    \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"indexed\": false, \"internalType\": \"address\" }],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"Upgraded\",\n    \"inputs\": [{ \"name\": \"implementation\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" }],\n    \"anonymous\": false\n  },\n  {\n    \"type\": \"event\",\n    \"name\": \"WithdrawOrderTokenTransferred\",\n    \"inputs\": [\n      { \"name\": \"user\", \"type\": \"address\", \"indexed\": true, \"internalType\": \"address\" },\n      { \"name\": \"amount\", \"type\": \"uint256\", \"indexed\": false, \"internalType\": \"uint256\" }\n    ],\n    \"anonymous\": false\n  },\n  { \"type\": \"error\", \"name\": \"AccessControlBadConfirmation\", \"inputs\": [] },\n  {\n    \"type\": \"error\",\n    \"name\": \"AccessControlUnauthorizedAccount\",\n    \"inputs\": [\n      { \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" },\n      { \"name\": \"neededRole\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }\n    ]\n  },\n  { \"type\": \"error\", \"name\": \"AddressEmptyCode\", \"inputs\": [{ \"name\": \"target\", \"type\": \"address\", \"internalType\": \"address\" }] },\n  { \"type\": \"error\", \"name\": \"AddressInsufficientBalance\", \"inputs\": [{ \"name\": \"account\", \"type\": \"address\", \"internalType\": \"address\" }] },\n  {\n    \"type\": \"error\",\n    \"name\": \"ERC1967InvalidImplementation\",\n    \"inputs\": [{ \"name\": \"implementation\", \"type\": \"address\", \"internalType\": \"address\" }]\n  },\n  { \"type\": \"error\", \"name\": \"ERC1967NonPayable\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"EnforcedPause\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"ExpectedPause\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"FailedInnerCall\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"InvalidInitialization\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"InvalidOptionType\", \"inputs\": [{ \"name\": \"optionType\", \"type\": \"uint16\", \"internalType\": \"uint16\" }] },\n  { \"type\": \"error\", \"name\": \"NotInitializing\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"ReentrancyGuardReentrantCall\", \"inputs\": [] },\n  {\n    \"type\": \"error\",\n    \"name\": \"SafeCastOverflowedUintDowncast\",\n    \"inputs\": [\n      { \"name\": \"bits\", \"type\": \"uint8\", \"internalType\": \"uint8\" },\n      { \"name\": \"value\", \"type\": \"uint256\", \"internalType\": \"uint256\" }\n    ]\n  },\n  { \"type\": \"error\", \"name\": \"SafeERC20FailedOperation\", \"inputs\": [{ \"name\": \"token\", \"type\": \"address\", \"internalType\": \"address\" }] },\n  { \"type\": \"error\", \"name\": \"UUPSUnauthorizedCallContext\", \"inputs\": [] },\n  { \"type\": \"error\", \"name\": \"UUPSUnsupportedProxiableUUID\", \"inputs\": [{ \"name\": \"slot\", \"type\": \"bytes32\", \"internalType\": \"bytes32\" }] }\n]","[\n  {\n    \"inputs\": [],\n    \"name\": \"AccessControlBadConfirmation\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"neededRole\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"AccessControlUnauthorizedAccount\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"target\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"AddressEmptyCode\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"AddressInsufficientBalance\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"AmountIsGreaterThanCollectedValor\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"AmountIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"BatchIsNotCreatedYet\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"BatchIsNotFinished\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"BatchValorToUsdcRateIsNotFixed\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"CannotUpdateRoot\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEsorderDeposited\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEsorderRequested\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DepositNotEnough\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"DistributionAlreadyExists\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"DistributionNotFound\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"implementation\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ERC1967InvalidImplementation\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ERC1967NonPayable\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"EnforcedPause\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ExpectedPause\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"FailedInnerCall\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidInitialization\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"InvalidMerkleProof\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"NoActiveMerkleRoot\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"NoPendingUnstakeRequest\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"NotInitializing\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NothingToClaim\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ProposedMerkleRootIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"RedemptionAmountIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ReentrancyGuardReentrantCall\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"token\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"SafeERC20FailedOperation\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"token\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"StakingBalanceInsufficient\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"StartTimestampIsInThePast\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ThisMerkleRootIsAlreadyProposed\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"TokenIsNotSupportedForDistribution\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"TooEarlyUsdcNetFeeRevenueUpdate\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UUPSUnauthorizedCallContext\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"slot\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"UUPSUnsupportedProxiableUUID\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UnlockTimeNotPassedYet\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UnsupportedPayloadType\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UnsupportedToken\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_requestId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"UserDontHaveVestingRequest\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ValorPerSecondExceedsMaxValue\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VestingAmountIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VestingLinearPeriodIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VestingLockPeriodIsZero\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VestingLockPeriodNotPassed\",\n    \"type\": \"error\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VestingPeriodIsOutOfRange\",\n    \"type\": \"error\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint16\",\n        \"name\": \"batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"BatchPreparedToClaim\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint16\",\n        \"name\": \"batchId\",\n        \"type\": \"uint16\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fixedValorToUsdcRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"BatchValorToUsdcRateIsFixed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"timestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"usdcNetFeeRevenue\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalUsdcInTreasure\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalValorAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"valorToUsdcRateScaled\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"DailyUsdcNetFeeRevenueUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"eventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint32\",\n        \"name\": \"distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"token\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes\",\n        \"name\": \"ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"DistributionCreated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"EsOrderUnstake\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint64\",\n        \"name\": \"version\",\n        \"type\": \"uint64\"\n      }\n    ],\n    \"name\": \"Initialized\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalUnstakedAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"unlockTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OrderUnstakeAmount\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"pendingOrderAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OrderUnstakeCancelled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OrderUnstakeRequested\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"OrderWithdrawn\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Paused\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint32\",\n        \"name\": \"distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"token\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"RewardsClaimed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"previousAdminRole\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"newAdminRole\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"RoleAdminChanged\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RoleGranted\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RoleRevoked\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"eventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint32\",\n        \"name\": \"distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes\",\n        \"name\": \"ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"RootProposed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"eventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint32\",\n        \"name\": \"distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes32\",\n        \"name\": \"merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"bytes\",\n        \"name\": \"ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"RootUpdated\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainedEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"staker\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"token\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"Staked\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Unpaused\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"implementation\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Upgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"usdcAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"UsdcRevenueClaimed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint16\",\n        \"name\": \"batchId\",\n        \"type\": \"uint16\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"valorAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ValorRedeemed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"requestId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEsorderStakedBack\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"VestingCanceled\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"requestId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEsorderBurned\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountOrderVested\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"vestedPeriod\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"VestingClaimed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainEventId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"chainId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"user\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"requestId\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEsorderRequested\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"unlockTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"VestingRequested\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"DEFAULT_ADMIN_ROLE\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"ROOT_UPDATER_ROLE\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"TREASURE_UPDATER_ROLE\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"UPGRADE_INTERFACE_VERSION\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VALOR_TO_USDC_RATE_PRECISION\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"VERSION\",\n    \"outputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"stateMutability\": \"pure\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"accValorPerShareScaled\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"batchPreparedToClaim\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"batches\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"claimable\",\n        \"type\": \"bool\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemedValorAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"fixedValorToUsdcRateScaled\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_requestId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"calculateVestingOrderAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"canUpdateRoot\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"collectedValor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"_token\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"createDistribution\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_usdcNetFeeRevenue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"dailyUsdcNetFeeRevenue\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"fixBatchValorToUsdcRate\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"getBatchChainedValorAmount\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"chainId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct Revenue.ChainedAmount[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"getBatchInfo\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"batchStartTime\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"batchEndTime\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"claimable\",\n        \"type\": \"bool\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemedValorAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"fixedValorToUsdcRateScaled\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getClaimed\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"getCurrentBatchId\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"getDistribution\",\n    \"outputs\": [\n      {\n        \"internalType\": \"enum LedgerToken\",\n        \"name\": \"token\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getOrderAvailableToWithdraw\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"orderAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"getProposedRoot\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"name\": \"getRoleAdmin\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getStakingInfo\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"orderBalance\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"esOrderBalance\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      }\n    ],\n    \"name\": \"getUsdcAmountForBatch\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"chainId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"amount\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct Revenue.ChainedAmount[]\",\n        \"name\": \"chainedUsdcAmount\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint16\",\n        \"name\": \"_batchId\",\n        \"type\": \"uint16\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_chainId\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"getUserRedeemedValorAmountForBatchAndChain\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getUserValor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"getUserVestingRequests\",\n    \"outputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"requestId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"esOrderAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"unlockTimestamp\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct Vesting.VestingRequest[]\",\n        \"name\": \"\",\n        \"type\": \"tuple[]\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"grantRole\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"hasPendingRoot\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"hasRole\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_occAdaptor\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_orderCollector\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract IOFT\",\n        \"name\": \"_orderTokenOft\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_valorPerSecond\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_maximumValorEmission\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"isDistributionRecordBased\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"lastUsdcNetFeeRevenueUpdateTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"lastValorUpdateTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"srcChainId\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"enum LedgerToken\",\n            \"name\": \"token\",\n            \"type\": \"uint8\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"tokenAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"sender\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint8\",\n            \"name\": \"payloadType\",\n            \"type\": \"uint8\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"payload\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct OCCVaultMessage\",\n        \"name\": \"message\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"ledgerRecvFromVault\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"maximumValorEmission\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"occAdaptor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"orderCollector\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"orderTokenOft\",\n    \"outputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"pause\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"paused\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      },\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"_merkleRoot\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_startTimestamp\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"_ipfsCid\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"proposeRoot\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"proxiableUUID\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"\",\n        \"type\": \"bytes32\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"callerConfirmation\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"renounceRole\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes32\",\n        \"name\": \"role\",\n        \"type\": \"bytes32\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"revokeRole\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_occAdaptor\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setOccAdaptor\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_orderCollector\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setOrderCollector\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IOFT\",\n        \"name\": \"_orderTokenOft\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setOrderTokenOft\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_valorPerSecond\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"setValorPerSecond\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"srcChainIdToEventId\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"startTimestamp\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"bytes4\",\n        \"name\": \"interfaceId\",\n        \"type\": \"bytes4\"\n      }\n    ],\n    \"name\": \"supportsInterface\",\n    \"outputs\": [\n      {\n        \"internalType\": \"bool\",\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalStakedAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalUsdcInTreasure\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalValorAmount\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"totalValorEmitted\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"unpause\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"unstakeLockPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"uint32\",\n        \"name\": \"_distributionId\",\n        \"type\": \"uint32\"\n      }\n    ],\n    \"name\": \"updateRoot\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"updateValorVars\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"newImplementation\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"bytes\",\n        \"name\": \"data\",\n        \"type\": \"bytes\"\n      }\n    ],\n    \"name\": \"upgradeToAndCall\",\n    \"outputs\": [],\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"userPendingUnstake\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"balanceOrder\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"unlockTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_user\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"userTotalStakingBalance\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"valorPerSecond\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"valorToUsdcRateScaled\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"vestingLinearPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"vestingLockPeriod\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\nexport enum ENVType {\n  prod = \"prod\",\n  staging = \"staging\",\n  qa = \"qa\",\n  dev = \"dev\",\n}\n\n/**\n * env is determined by networkId and env\n * | networkId | env     | retrurn  |\n * |-----------|---------|----------|\n * | mainnet   | noset   | prod     |\n * | mainnet   | prod    | prod     |\n * | mainnet   | staging | prod     |\n * | mainnet   | qa      | prod     |\n * | mainnet   | dev     | prod     |\n * | testnet   | noset   | staging  |\n * | testnet   | prod    | staging  |\n * | testnet   | staging | staging  |\n * | testnet   | qa      | qa       |\n * | testnet   | dev     | dev      |\n * if env is not set, return staging\n * \n * @returns {ENVType} \n */\nexport const useGetEnv = (): ENVType => {\n  const { configStore } = useContext(OrderlyContext);\n  const env = configStore.get(\"env\") as ENVType;\n  const networkId = configStore.get(\"networkId\");\n  if (networkId === \"mainnet\") {\n    return ENVType.prod;\n  }\n  if (networkId === \"testnet\" && env === \"prod\") {\n    return ENVType.staging;\n  }\n  return env ?? ENVType.staging;\n};\n","import orderTokenAbi from './orderTokenAbi.json';\nimport contractABI from \"./proxyLedgerAbi.json\";\nimport omnichainLedgerV1ABI from \"./OmnichainLedgerV1ABI.json\";\nimport { ENVType } from \"../useGetEnv\";\n\nexport const orderlySepolia = \"0x1cB262C876AE47A75Ec354D89766593839681C29\";\nexport const arbitrumSepolia = \"0x13b2d9219e4afb48c085e60a9cfacbc193a61f43\";\n\n\n/**\n * 1. orderlyTokenAdress :\n * ETH L1 :  ORDER Token\n * Other chains : ORDER Token\n * 2. orderlyContract : Ledger Test Address\n * 3. contract : Ledger Proxy\n */\ninterface ContractDataInterface {\n\n    orderTokenAddress: string,\n    orderTokenAddressOnEthereum: string;\n    orderTokenAbi: Object,\n    orderlyContract: string,\n    orderlyContractABI: any,\n    contract: string,\n    contractABI: any,\n    orderlyChainRpcUrl: string;\n}\n\nexport function getOrderlyChainRPC(env: ENVType) {\n    if (env === ENVType.prod) {\n        return \"https://rpc.orderly.network\";\n    }\n    return \"https://testnet-rpc.orderly.org\";\n}\n\nexport const getContractByEnv = (env: ENVType): ContractDataInterface => {\n    const data = {\n        orderTokenAddress: '',\n        orderTokenAddressOnEthereum: '',\n        orderTokenAbi,\n        orderlyContract: orderlySepolia,\n        orderlyContractABI: omnichainLedgerV1ABI,\n        contract: arbitrumSepolia,\n        contractABI: contractABI,\n        orderlyChainRpcUrl: getOrderlyChainRPC(env),\n\n    }\n\n    // only order token address and orderlyContract split dev and qa, other use qa.\n    if (env === 'dev') {\n\n        data.orderTokenAddress = '0xe2eB2df1CA9D90c8501049bAEEEf57f111782903';\n        data.orderTokenAddressOnEthereum = '0x4cdE8A33afbb7f0F80841d9AE3Ada59fA1413F38';\n        data.orderlyContract = '0x741a48F39683c345Ff37A86791537154869C77D4';\n        data.contract = '0x0180107E72FB14a22a776913063b8a4081E9dc94';\n    }\n    if (env === 'qa') {\n        data.orderTokenAddress = '0x562874e9fcb02Ae6164781EcFb4AeAa169E99B18';\n        data.orderTokenAddressOnEthereum = '0x8F7c2c827f0E9248CB5cf81fE732FDa62207F09c';\n        data.orderlyContract = '0x871106E5c5f33F6B743990a0b465B61D6cd64714';\n        data.contract = '0xB20A18d8A53Ea23A5E8da32465De374f942693D7';\n\n    }\n    if (env === 'staging') {\n        data.orderTokenAddress = '0x5f11B4510BC50EfB82Fb55D7839a46e9b621f8C2';\n        data.orderTokenAddressOnEthereum = '0x48465104e96AEE47bdD0E40dD40b1DFE1a66e232';\n        data.orderlyContract = '0xAFEabBA48Aa0D33267a4ADf92a63C3E1A1284AB5';\n        data.contract = '0x912196EB2583A2f0a18FaD632ee5dB65B8C93EEf';\n    }\n    if (env === 'prod') {\n        data.orderTokenAddress = '0x4E200fE2f3eFb977d5fd9c430A41531FB04d97B8';\n        data.orderTokenAddressOnEthereum = '0xABD4C63d2616A5201454168269031355f4764337';\n        data.orderlyContract = '0x7819704B69a38fD63Cc768134b8410dc08B987D0';\n        data.contract = '0xC8A8Ce0Ab010E499ca57477AC031358febCbbF17';\n    }\n\n    return data;\n}","import { Decimal } from \"@orderly.network/utils\";\n\n// input a bigint, return value/(10^18) number\nexport function toOrder(value?: bigint): number | undefined {\n  if (value === null || value === BigInt(0)) {\n    return value === BigInt(0) ? 0 : undefined;\n  }\n\n  const decimalValue = new Decimal(value!.toString()).div(1e18);\n  return Number(decimalValue.toFixed(18));\n}\n\n// input a number | string, return value*(10^18) string\nexport function toUint(value?: number | string): string | undefined {\n  if (typeof value === \"undefined\") return undefined;\n  const decimalValue = new Decimal(value);\n\n  const result = decimalValue.mul(new Decimal(\"1e18\"));\n\n  return result.toFixed(0);\n}\n","// import { ethers } from \"ethers\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { getContractByEnv } from \"./abis/contrast\";\nimport { toOrder } from \"./utils\";\nimport { useGetEnv } from \"./useGetEnv\";\nimport { useAccount } from \"../useAccount\";\n\nexport enum DistributionId {\n  order = 0,\n  esORder = 1,\n  mmOrder = 2,\n  mmEsOrder = 3,\n}\n\nexport const useGetClaimed = (\n  id: DistributionId\n): [\n  number | undefined,\n  {\n    refresh: () => void;\n  }\n] => {\n  const [data, setData] = useState<number | undefined>(0);\n  const { account } = useAccount();\n  // account.wallet?.callOnChain\n  const address = account.address;\n  // const rpc = useRef<string | undefined>(undefined);\n  // const provider = useRef<ethers.AbstractProvider | undefined>(undefined);\n  // const contract = useRef<ethers.Contract | undefined>(undefined);\n  const env = useGetEnv();\n\n  // useEffect(() => {\n  //   const params = getContractByEnv(env);\n  //   rpc.current = params.orderlyChainRpcUrl;\n  //   provider.current = ethers.getDefaultProvider(rpc.current);\n  //   contract.current = new ethers.Contract(\n  //     params.orderlyContract,\n  //     params.orderlyContractABI,\n  //     provider.current\n  //   );\n  // }, []);\n\n  const refresh = useCallback(() => {\n    const params = getContractByEnv(env);\n    if (\n      typeof address === \"undefined\"\n      // ||\n      // typeof rpc.current === \"undefined\" ||\n      // typeof provider.current === \"undefined\" ||\n      // typeof contract.current === \"undefined\"\n    )\n      return;\n\n    console.log(`get claimed(${id})`, [id, address]);\n    account.walletAdapter\n      ?.callOnChain(\n        // @ts-ignore\n        { public_rpc_url: params.orderlyChainRpcUrl },\n        params.orderlyContract,\n        \"getClaimed\",\n        [id, address],\n        {\n          abi: params.orderlyContractABI,\n        }\n      )\n      .catch((error: any) => {\n        // const parsedEthersError = getParsedEthersError(error);\n        // throw parsedEthersError;\n        throw error;\n      })\n      .then((res: any) => {\n        const resOrder = toOrder(res);\n        // const resOrder = toOrder(BigInt(2921867952260000000000));\n        console.log(`new get claimed(${id})`, resOrder);\n        setData(resOrder);\n      })\n      .catch((error: any) => {});\n\n    // contract.current[\"getClaimed\"]\n    //   .apply(null, [id, address])\n    //   .catch((error: any) => {\n    //     const parsedEthersError = getParsedEthersError(error);\n    //     throw parsedEthersError;\n    //   })\n    //   .then((res: any) => {\n    //     const resOrder = toOrder(res);\n    //     // const resOrder = toOrder(BigInt(2921867952260000000000));\n    //     console.log(`get claimed(${id})`, resOrder);\n    //     setData(resOrder);\n    //   })\n    //   .catch((error: any) => {});\n  }, [address, env]);\n\n  useEffect(() => {\n    refresh();\n  }, [env, id, address]);\n\n  return [data, { refresh }];\n};\n","import { TWType } from \"./types\";\nimport { useAccount } from \"../useAccount\";\nimport { useQuery } from \"../useQuery\";\n\nexport type WalletRewardsItem = {\n  epoch_id: number;\n  wallet_epoch_avg_staked: number;\n  epoch_token: string;\n  max_reward_amount: number;\n  reward_status: string;\n  r_wallet: number;\n};\n\nexport type WalletRewards = {\n  wallet_lifetime_trading_rewards_order: string;\n  wallet_lifetime_trading_rewards_escrow: string;\n  wallet_pending_trading_rewards_order: string;\n  wallet_pending_trading_rewards_escrow: string;\n  rows: WalletRewardsItem[];\n};\n\nexport type WalletRewardsHistoryReturns = [\n  WalletRewards | undefined,\n  {\n    refresh: () => void;\n    error?: any;\n  }\n];\n\nexport const useWalletRewardsHistory = (\n  type: TWType\n): WalletRewardsHistoryReturns => {\n  const { account } = useAccount();\n\n  const address = account.address;\n\n  const path =\n    type === TWType.normal\n      ? `/v1/public/trading_rewards/wallet_rewards_history?address=${address}`\n      : `/v1/public/market_making_rewards/group_rewards_history?address=${address}`;\n\n  const {\n    data,\n    mutate: refresh,\n    error,\n  } = useQuery(address !== undefined ? path : \"\", {\n    formatter: (res) => {\n      return {\n        wallet_lifetime_trading_rewards_order:\n          res?.wallet_lifetime_trading_rewards_order ?? 0,\n        wallet_lifetime_trading_rewards_escrow:\n          res?.wallet_lifetime_trading_rewards_escrow ?? 0,\n        wallet_pending_trading_rewards_order:\n          res.wallet_pending_trading_rewards_order ?? 0,\n        wallet_pending_trading_rewards_escrow:\n          res.wallet_pending_trading_rewards_escrow ?? 0,\n        rows: (res?.rows || []).map((item: any) => ({\n          ...item,\n          r_wallet: item?.total_reward || item?.r_wallet,\n        })),\n      } as WalletRewards;\n    },\n  });\n  return [data, { refresh, error }];\n};\n","import { useEffect, useState } from \"react\";\nimport { useQuery } from \"..\";\n\nexport enum EpochStatus {\n  active = \"Active\",\n  paused = \"Paused\",\n  ended = \"Ended\",\n}\nexport type StatusInfo = {\n  epochStatus: EpochStatus;\n  currentEpoch: number | undefined;\n  lastCompletedEpoch: number | undefined;\n};\n\nexport function useTradingRewardsStatus(isMMRewards: boolean): {\n  statusInfo: StatusInfo | undefined;\n} {\n  const path = isMMRewards\n    ? \"/v1/public/market_making_rewards/status\"\n    : \"/v1/public/trading_rewards/status\";\n  const { data: statusInfo } = useQuery<StatusInfo | undefined>(path, {\n    formatter: (res: any) => {\n      const data = {\n        ...res,\n        epochStatus: res.epoch_status as EpochStatus,\n        currentEpoch: res.current_epoch,\n        lastCompletedEpoch: res.last_completed_epoch,\n      };\n      return data;\n    },\n  });\n\n  return {\n    statusInfo,\n  };\n}\n","import { useCallback } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nexport type APIKeyItem = {\n  orderly_key: string;\n  key_status: string;\n  ip_restriction_list: string[];\n  ip_restricion_status: string;\n  expiration: number;\n  tag?: any;\n  scope?: string;\n};\n\nexport enum ScopeType {\n  trade = \"trade\",\n  trading = \"trading\",\n  tradeAndTrading = \"trade,trading\",\n}\n\nexport const useApiKeyManager = (queryParams?: {\n  keyInfo?: {\n    page?: number;\n    size?: number;\n    key_status?: string;\n  };\n}) => {\n  const { account, state, isSubAccount } = useAccount();\n  const { keyInfo } = queryParams || {};\n\n  const keyInfoPrams = getQueryParamsFromObject(keyInfo);\n\n  const { data, mutate, error, isLoading } = usePrivateQuery<APIKeyItem[]>(\n    `/v1/client/key_info${keyInfoPrams.length > 0 ? `?${keyInfoPrams}` : \"\"}`,\n    {\n      formatter: (data) => data?.rows,\n    },\n  );\n\n  const [doIPRestriction] = useMutation(\n    \"/v1/client/set_orderly_key_ip_restriction\",\n    \"POST\",\n  );\n\n  const [doRemoveOrderKey] = useMutation(\n    \"/v1/client/remove_orderly_key\",\n    \"POST\",\n  );\n\n  const [doResetIPRestriction] = useMutation(\n    \"/v1/client/reset_orderly_key_ip_restriction\",\n    \"POST\",\n  );\n\n  /**  ip_restriction_list is [\"192.168.1.1\", \"192.168.1.2\"].join(\",\") */\n  const setIPRestriction = useCallback(\n    (orderly_key: string, ip_restriction_list: string): Promise<any> => {\n      return doIPRestriction({\n        orderly_key,\n        ip_restriction_list,\n      });\n    },\n    [],\n  );\n\n  const removeOrderlyKey = useCallback((orderly_key: string): Promise<any> => {\n    return doRemoveOrderKey({\n      orderly_key,\n    });\n  }, []);\n\n  const generateOrderlyKey = (\n    scope?: ScopeType,\n  ): Promise<{\n    key: string;\n    secretKey: string;\n  }> => {\n    if (isSubAccount) {\n      return account?.createSubAccountApiKey(365, {\n        tag: \"manualCreated\",\n        scope,\n        subAccountId: state.accountId!,\n      });\n    }\n\n    return account?.createApiKey(365, {\n      tag: \"manualCreated\",\n      scope,\n    });\n  };\n\n  const resetOrderlyKeyIPRestriction = (\n    orderlyKey: string,\n    mode: \"ALLOW_ALL_IPS\" | \"DISALLOW_ALL_IPS\",\n  ) => {\n    return doResetIPRestriction({\n      orderly_key: orderlyKey,\n      reset_mode: mode,\n    });\n  };\n  return [\n    data,\n    {\n      refresh: mutate,\n      error,\n      isLoading,\n      generateOrderlyKey,\n      setIPRestriction,\n      removeOrderlyKey,\n      resetOrderlyKeyIPRestriction,\n    },\n  ] as const;\n};\n\nfunction getQueryParamsFromObject(obj?: Record<string, any>): string {\n  if (typeof obj === \"undefined\") return \"\";\n  const queryParams = new URLSearchParams();\n\n  for (const [key, value] of Object.entries(obj)) {\n    if (value !== undefined) {\n      if (Array.isArray(value)) {\n        value.forEach((item) => {\n          queryParams.append(key, item.toString());\n        });\n      } else {\n        queryParams.set(key, value.toString());\n      }\n    }\n  }\n\n  return queryParams.toString();\n}\n","import { account } from \"@orderly.network/perp\";\nimport {\n  MarginMode,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\ntype IsolatedPendingOrder = account.IsolatedPendingOrder;\n\nexport const DEFAULT_USDC_BORROW_LIMIT = 50_000;\n\nexport class USDCBorrowLimitExceededError extends Error {\n  readonly projectedBorrow: number;\n  readonly borrowLimit: number;\n\n  constructor(projectedBorrow: number, borrowLimit: number) {\n    super(\"Projected USDC borrow limit exceeded\");\n    this.name = \"USDCBorrowLimitExceededError\";\n    this.projectedBorrow = projectedBorrow;\n    this.borrowLimit = borrowLimit;\n  }\n}\n\n/**\n * The backend returns `negative_usdc_threshold` as a positive number (e.g. 50000).\n * Missing, non-finite, or signed values fall back to a normalized positive limit\n * so the submission guard always compares against a concrete number.\n */\nexport const normalizeUSDCBorrowLimit = (\n  value: number | null | undefined,\n): number => {\n  return typeof value === \"number\" && Number.isFinite(value)\n    ? Math.abs(value)\n    : DEFAULT_USDC_BORROW_LIMIT;\n};\n\nexport type ProjectedUSDCBorrowInputs = {\n  marginMode?: MarginMode;\n  reduceOnly?: boolean;\n  orderSide?: OrderSide;\n  orderQuantity: number;\n  orderNotional: number;\n  leverage: number;\n  markPrice: number;\n  positionQty?: number;\n  pendingLongQty?: number;\n  pendingShortQty?: number;\n  /**\n   * Per-order isolated open orders for the symbol (reduce-only excluded).\n   * When provided, the frozen delta is simulated with the risk-engine\n   * close/open allocation (price + time priority). When omitted,\n   * `pendingLongQty`/`pendingShortQty` are approximated at `markPrice`.\n   */\n  pendingOrders?: IsolatedPendingOrder[];\n  /**\n   * Per-child entries of the submitted order (scaled children). Defaults to a\n   * single entry derived from `orderQuantity`/`orderNotional`.\n   */\n  newOrderEntries?: Array<{ quantity: number; referencePrice: number }>;\n  usdcHolding: number;\n  usdcPendingShort?: number;\n  usdcIsolatedOrderFrozen?: number;\n  totalUnsettledPnL?: number;\n};\n\nexport type GeneratedOrderForBorrowProjection = Partial<OrderlyOrder> & {\n  orders?: Partial<OrderlyOrder>[];\n  price?: string | number;\n  quantity?: string | number;\n  type?: OrderType;\n};\n\nexport const aggregateOrderQuantityAndNotional = (\n  orders: Array<{ quantity: number; referencePrice: number }>,\n): {\n  orderQuantity: number;\n  orderNotional: number;\n  orders: Array<{ quantity: number; referencePrice: number }>;\n} | null => {\n  if (orders.length === 0) {\n    return null;\n  }\n\n  let orderQuantity = new Decimal(0);\n  let orderNotional = new Decimal(0);\n\n  for (const order of orders) {\n    if (\n      !Number.isFinite(order.quantity) ||\n      order.quantity <= 0 ||\n      !Number.isFinite(order.referencePrice) ||\n      order.referencePrice <= 0\n    ) {\n      return null;\n    }\n    orderQuantity = orderQuantity.add(order.quantity);\n    orderNotional = orderNotional.add(\n      new Decimal(order.quantity).mul(order.referencePrice),\n    );\n  }\n\n  return {\n    orderQuantity: orderQuantity.toNumber(),\n    orderNotional: orderNotional.toNumber(),\n    orders: orders.map((order) => ({ ...order })),\n  };\n};\n\nexport const getOrderQuantityAndNotional = (inputs: {\n  generatedOrder: GeneratedOrderForBorrowProjection;\n  formattedOrder: Partial<OrderlyOrder>;\n  marginMode: MarginMode;\n  getReferencePrice: (order: Partial<OrderlyOrder>) => number | null;\n}): {\n  orderQuantity: number;\n  orderNotional: number;\n  orders: Array<{ quantity: number; referencePrice: number }>;\n} | null => {\n  const { generatedOrder, formattedOrder, marginMode, getReferencePrice } =\n    inputs;\n\n  if (formattedOrder.order_type === OrderType.SCALED) {\n    if (\n      !Array.isArray(generatedOrder.orders) ||\n      generatedOrder.orders.length === 0\n    ) {\n      return null;\n    }\n\n    return aggregateOrderQuantityAndNotional(\n      generatedOrder.orders.map((childOrder) => ({\n        quantity: Number(childOrder.order_quantity),\n        referencePrice: getReferencePrice(childOrder) ?? NaN,\n      })),\n    );\n  }\n\n  const normalizedOrder: Partial<OrderlyOrder> = {\n    ...formattedOrder,\n    ...generatedOrder,\n    order_type: formattedOrder.order_type,\n    order_type_ext: formattedOrder.order_type_ext,\n    order_price:\n      generatedOrder.order_price ??\n      (generatedOrder.price === undefined\n        ? undefined\n        : String(generatedOrder.price)) ??\n      formattedOrder.order_price,\n    order_quantity:\n      generatedOrder.order_quantity ??\n      (generatedOrder.quantity === undefined\n        ? undefined\n        : String(generatedOrder.quantity)) ??\n      formattedOrder.order_quantity,\n    slippage: formattedOrder.slippage,\n    margin_mode: marginMode,\n  };\n  const referencePrice = getReferencePrice(normalizedOrder);\n  const orderQuantity = Number(normalizedOrder.order_quantity);\n\n  if (\n    !Number.isFinite(orderQuantity) ||\n    orderQuantity <= 0 ||\n    !referencePrice ||\n    !Number.isFinite(referencePrice)\n  ) {\n    return null;\n  }\n\n  return aggregateOrderQuantityAndNotional([\n    { quantity: orderQuantity, referencePrice },\n  ]);\n};\n\nexport const calculateProjectedUSDCBorrow = (\n  inputs: ProjectedUSDCBorrowInputs,\n): number | null => {\n  const {\n    marginMode,\n    reduceOnly,\n    orderSide,\n    orderQuantity,\n    orderNotional,\n    leverage,\n    markPrice,\n    positionQty = 0,\n    pendingLongQty = 0,\n    pendingShortQty = 0,\n    pendingOrders,\n    newOrderEntries,\n    usdcHolding,\n    usdcPendingShort = 0,\n    usdcIsolatedOrderFrozen = 0,\n    totalUnsettledPnL = 0,\n  } = inputs;\n\n  if (marginMode !== MarginMode.ISOLATED || reduceOnly) {\n    return 0;\n  }\n\n  const numericInputs = [\n    orderQuantity,\n    orderNotional,\n    leverage,\n    positionQty,\n    pendingLongQty,\n    pendingShortQty,\n    usdcHolding,\n    usdcPendingShort,\n    usdcIsolatedOrderFrozen,\n    totalUnsettledPnL,\n  ];\n\n  if (\n    !orderSide ||\n    numericInputs.some((value) => !Number.isFinite(value)) ||\n    orderQuantity <= 0 ||\n    orderNotional <= 0 ||\n    leverage <= 0\n  ) {\n    return null;\n  }\n\n  const isReverseOrder =\n    (orderSide === OrderSide.BUY && positionQty < 0) ||\n    (orderSide === OrderSide.SELL && positionQty > 0);\n\n  // Per-order data takes precedence. Without it, approximate both sides of\n  // the aggregate pending quantity at mark price; the mark price is only\n  // load-bearing for reverse-side closing allocation.\n  let effectivePendingOrders: IsolatedPendingOrder[];\n  if (pendingOrders !== undefined) {\n    effectivePendingOrders = pendingOrders;\n  } else {\n    const reversePendingQty =\n      positionQty > 0 ? pendingShortQty : pendingLongQty;\n    if (\n      isReverseOrder &&\n      reversePendingQty > 0 &&\n      !(Number.isFinite(markPrice) && markPrice > 0)\n    ) {\n      return null;\n    }\n\n    effectivePendingOrders = [];\n    if (Number.isFinite(markPrice) && markPrice > 0) {\n      if (pendingLongQty > 0) {\n        effectivePendingOrders.push({\n          side: OrderSide.BUY,\n          referencePrice: markPrice,\n          quantity: pendingLongQty,\n        });\n      }\n      if (pendingShortQty > 0) {\n        effectivePendingOrders.push({\n          side: OrderSide.SELL,\n          referencePrice: markPrice,\n          quantity: pendingShortQty,\n        });\n      }\n    }\n  }\n\n  const newOrderEntriesResolved =\n    newOrderEntries !== undefined && newOrderEntries.length > 0\n      ? newOrderEntries\n      : [\n          {\n            quantity: orderQuantity,\n            referencePrice: orderNotional / orderQuantity,\n          },\n        ];\n\n  // The risk engine prices closing priority (BUY high→low, SELL low→high,\n  // earlier order first) and only freezes the opening remainder, including\n  // the reallocation this order causes among existing pending orders.\n  const additionalFrozen = account.additionalIsolatedOrderFrozenByOrders({\n    positionQty,\n    newOrders: newOrderEntriesResolved.map((entry) => ({\n      ...entry,\n      side: orderSide,\n      createdTime: Date.now(),\n    })),\n    pendingOrders: effectivePendingOrders,\n    leverage,\n  });\n\n  // Orders that add no frozen margin (pure closing, no reallocation) must not\n  // be blocked by the existing negative USDC balance.\n  if (additionalFrozen.lte(0)) {\n    return 0;\n  }\n\n  const effectiveUSDCBalance = new Decimal(usdcHolding)\n    .add(usdcPendingShort)\n    .add(totalUnsettledPnL)\n    .sub(Math.abs(usdcIsolatedOrderFrozen));\n  const projectedBorrow = effectiveUSDCBalance.sub(additionalFrozen).negated();\n\n  return projectedBorrow.gt(0) ? projectedBorrow.toNumber() : 0;\n};\n\nexport const assertUSDCBorrowWithinLimit = (\n  projectedBorrow: number | null,\n  borrowLimit: number,\n) => {\n  if (projectedBorrow !== null && projectedBorrow > borrowLimit) {\n    throw new USDCBorrowLimitExceededError(projectedBorrow, borrowLimit);\n  }\n};\n","import { useCallback, useEffect, useState, useMemo } from \"react\";\nimport { compose, head } from \"ramda\";\nimport {\n  type API,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n  MarginMode,\n} from \"@orderly.network/types\";\nimport { priceToROI } from \"../../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nimport { OrderCreator } from \"../../services/orderCreator/interface\";\nimport {\n  baseInputHandle,\n  getCalculateHandler,\n} from \"../../utils/orderEntryHelper\";\nimport { hasTPSL } from \"./helper\";\nimport { type FullOrderState } from \"./orderEntry.store\";\n\nconst initialOrderState = {\n  order_price: \"\",\n  order_quantity: \"\",\n  trigger_price: \"\",\n  tp_trigger_price: \"\",\n  sl_trigger_price: \"\",\n  total: \"\",\n  symbol: \"\",\n  side: OrderSide.BUY,\n  order_type: OrderType.LIMIT,\n  margin_mode: MarginMode.CROSS,\n};\n\nconst normalizeInitialOrder = (\n  order?: Partial<FullOrderState>,\n): Omit<Partial<FullOrderState>, \"symbol\"> | undefined => {\n  if (!order) {\n    return undefined;\n  }\n\n  const rest = { ...order };\n  delete rest.symbol;\n  return rest;\n};\n\nconst useOrderEntryNextInternal = (\n  symbol: string,\n  options: {\n    /**\n     * initial order state, default is buy limit order\n     *\n     */\n    initialOrder?: Omit<Partial<FullOrderState>, \"symbol\">;\n    symbolInfo?: API.SymbolExt;\n    symbolLeverage?: number;\n  } = {},\n) => {\n  const { symbolInfo, symbolLeverage } = options;\n  const initialOrder = normalizeInitialOrder(options.initialOrder);\n\n  // Use local state instead of global zustand store to avoid state pollution\n  // between different instances (e.g., OrderEntry form and TPSL edit modal)\n  const [orderEntity, setOrderEntity] = useState<FullOrderState>(\n    () =>\n      ({\n        ...initialOrderState,\n        ...initialOrder,\n        symbol,\n      }) as FullOrderState,\n  );\n\n  // Local actions that work with local state\n  const actions = useMemo(\n    () => ({\n      initOrder: (\n        sym: string,\n        opts?: {\n          side?: OrderSide;\n          order_type?: OrderType;\n          margin_mode?: MarginMode;\n        },\n      ) => {\n        setOrderEntity({\n          ...initialOrderState,\n          symbol: sym,\n          side: opts?.side ?? OrderSide.BUY,\n          order_type: opts?.order_type ?? OrderType.LIMIT,\n          margin_mode: opts?.margin_mode ?? MarginMode.CROSS,\n        } as FullOrderState);\n      },\n      updateOrder: (order: Partial<FullOrderState>) => {\n        setOrderEntity((prev) => ({ ...prev, ...order, symbol }));\n      },\n      updateOrderByKey: <K extends keyof FullOrderState>(\n        key: K,\n        value: FullOrderState[K],\n      ) => {\n        setOrderEntity((prev) => ({\n          ...prev,\n          [key]: key === \"symbol\" ? symbol : value,\n          symbol,\n        }));\n      },\n      resetOrder: (_order?: Partial<FullOrderState>) => {\n        setOrderEntity((prev) => ({\n          ...prev,\n          order_price: \"\",\n          order_quantity: \"\",\n          trigger_price: \"\",\n          total: \"\",\n          tp_trigger_price: \"\",\n          tp_pnl: \"\",\n          tp_offset: \"\",\n          tp_offset_percentage: \"\",\n          tp_offset_from_mark: \"\",\n          tp_offset_percentage_from_mark: \"\",\n          sl_trigger_price: \"\",\n          sl_pnl: \"\",\n          sl_offset: \"\",\n          sl_offset_percentage: \"\",\n          sl_offset_from_mark: \"\",\n          sl_offset_percentage_from_mark: \"\",\n        }));\n      },\n      hasTP_SL: () => {\n        const order = orderEntity;\n        return (\n          typeof order.tp_trigger_price !== \"undefined\" ||\n          typeof order.sl_trigger_price !== \"undefined\"\n        );\n      },\n    }),\n    [orderEntity, symbol],\n  );\n\n  // Initialize order when symbol changes\n  useEffect(() => {\n    actions.initOrder(symbol, initialOrder);\n    if (initialOrder) {\n      actions.updateOrder({\n        ...initialOrder,\n        symbol,\n      });\n    }\n  }, [symbol]);\n\n  // console.log(\"orderEntity\", orderEntity);\n\n  const calculate = useCallback(\n    (\n      values: Partial<FullOrderState>,\n      fieldName: keyof FullOrderState,\n      value: any,\n      markPrice: number,\n      config: API.SymbolExt,\n    ): Partial<FullOrderState> => {\n      // console.log(\"calculate\", values, fieldName, value, options);\n      const fieldHandler = getCalculateHandler(fieldName);\n\n      const newValues = compose<any, any, any, Partial<FullOrderState>>(\n        head,\n        // orderEntityFormatHandle(baseDP, quoteDP),\n        fieldHandler,\n        baseInputHandle,\n      )([values, fieldName, value, markPrice, config]);\n\n      // if fieldName is quantity/price,recalculate the tp/sl\n\n      return newValues as Partial<FullOrderState>;\n    },\n    [],\n  );\n\n  const setValue = (\n    key: keyof FullOrderState,\n    value: any,\n    additional?: {\n      markPrice: number;\n    },\n  ) => {\n    if (!symbolInfo) {\n      actions.updateOrderByKey(key, value);\n      console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n      return;\n    }\n\n    /** Use local state directly to avoid stale closure. */\n    const currentEntry = orderEntity;\n    const { markPrice } = additional ?? { markPrice: 0 };\n\n    let newValues = calculate(\n      { ...currentEntry },\n      key,\n      value,\n      markPrice,\n      symbolInfo,\n    );\n\n    /// if the order type is market or stop market, recalculate the total use mark price\n    if (key === \"order_type\") {\n      if (value === OrderType.MARKET || value === OrderType.STOP_MARKET) {\n        newValues = calculate(\n          newValues,\n          \"order_price\",\n          markPrice,\n          markPrice,\n          symbolInfo,\n        );\n      }\n    }\n\n    if (\n      (key === \"order_quantity\" || key === \"order_price\") &&\n      hasTPSL(newValues)\n    ) {\n      newValues = calculateTPSL(key, newValues, markPrice, symbolInfo);\n    }\n\n    const { tp_ROI, sl_ROI } = priceToROI({\n      values: newValues,\n      symbolLeverage,\n      markPrice,\n    });\n    if (tp_ROI) {\n      newValues.tp_ROI = tp_ROI;\n    }\n    if (sl_ROI) {\n      newValues.sl_ROI = sl_ROI;\n    }\n\n    actions.updateOrder(newValues);\n\n    return newValues;\n  };\n\n  const calculateTPSL = (\n    key: string,\n    newValues: Partial<FullOrderState>,\n    markPrice: number,\n    symbolInfo: API.SymbolExt,\n  ) => {\n    if (key === \"order_price\") {\n      if (typeof newValues.tp_pnl !== \"undefined\") {\n        newValues = calculate(\n          newValues,\n          \"tp_pnl\",\n          newValues.tp_pnl,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (typeof newValues.sl_pnl !== \"undefined\") {\n        newValues = calculate(\n          newValues,\n          \"sl_pnl\",\n          newValues.sl_pnl,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.tp_offset_from_mark !== undefined &&\n        newValues.tp_offset_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"tp_offset_from_mark\",\n          newValues.tp_offset_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.tp_offset_percentage_from_mark !== undefined &&\n        newValues.tp_offset_percentage_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"tp_offset_percentage_from_mark\",\n          newValues.tp_offset_percentage_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.sl_offset_from_mark !== undefined &&\n        newValues.sl_offset_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"sl_offset_from_mark\",\n          newValues.sl_offset_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.sl_offset_percentage_from_mark !== undefined &&\n        newValues.sl_offset_percentage_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"sl_offset_percentage_from_mark\",\n          newValues.sl_offset_percentage_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n    } else {\n      if (typeof newValues.tp_trigger_price !== \"undefined\") {\n        newValues = calculate(\n          newValues,\n          \"tp_trigger_price\",\n          newValues.tp_trigger_price,\n          markPrice,\n          symbolInfo,\n        );\n      }\n\n      if (typeof newValues.sl_trigger_price !== \"undefined\") {\n        newValues = calculate(\n          newValues,\n          \"sl_trigger_price\",\n          newValues.sl_trigger_price,\n          markPrice,\n          symbolInfo,\n        );\n      }\n\n      // Re-derive trigger from mark-based offsets when qty changes (same as trigger recompute path).\n      if (\n        newValues.tp_offset_from_mark !== undefined &&\n        newValues.tp_offset_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"tp_offset_from_mark\",\n          newValues.tp_offset_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.tp_offset_percentage_from_mark !== undefined &&\n        newValues.tp_offset_percentage_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"tp_offset_percentage_from_mark\",\n          newValues.tp_offset_percentage_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.sl_offset_from_mark !== undefined &&\n        newValues.sl_offset_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"sl_offset_from_mark\",\n          newValues.sl_offset_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n      if (\n        newValues.sl_offset_percentage_from_mark !== undefined &&\n        newValues.sl_offset_percentage_from_mark !== \"\"\n      ) {\n        newValues = calculate(\n          newValues,\n          \"sl_offset_percentage_from_mark\",\n          newValues.sl_offset_percentage_from_mark!,\n          markPrice,\n          symbolInfo,\n        );\n      }\n    }\n\n    return newValues;\n  };\n\n  const setValues = (\n    values: Partial<FullOrderState>,\n    additional?: {\n      markPrice: number;\n    },\n  ) => {\n    if (!symbolInfo) {\n      actions.updateOrder(values);\n      console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n      return;\n    }\n\n    /** Use local state directly to avoid stale closure. */\n    let newValues: Partial<FullOrderState> = { ...orderEntity };\n\n    Object.keys(values).forEach((key) => {\n      newValues = calculate(\n        newValues,\n        key as keyof FullOrderState,\n        values[key as keyof FullOrderState],\n        additional?.markPrice ?? 0,\n        symbolInfo!,\n      );\n    });\n\n    actions.updateOrder(newValues);\n\n    return newValues;\n  };\n\n  /**\n   * Raw merge setter for externally computed TPSL bundles.\n   *\n   * IMPORTANT: This intentionally skips `calculate()` to avoid overwriting user/advanced computed\n   * fields (e.g. `sl_trigger_price`) via chained recomputation from other derived inputs.\n   */\n  const setValuesRaw = (values: Partial<FullOrderState>) => {\n    if (!symbolInfo) {\n      actions.updateOrder(values);\n      // Raw merge path still updates store, but derived calculations are skipped when `symbolInfo` is missing.\n      console.warn(\n        \"[ORDERLY]:symbolInfo missing; skipping derived order calculations\",\n      );\n      return;\n    }\n\n    /** Use local state directly to avoid stale closure. */\n    const newValues: Partial<FullOrderState> = {\n      ...orderEntity,\n      ...values,\n    };\n\n    actions.updateOrder(newValues);\n\n    return newValues;\n  };\n\n  const onMarkPriceUpdated = useCallback(\n    (markPrice: number, baseOn: string[] = []) => {\n      if (!options.symbolInfo) return;\n      /** Use local state directly to avoid stale closure. */\n      let newValues: Partial<FullOrderState> = { ...orderEntity };\n\n      if (baseOn.length === 0) {\n        newValues = calculate(\n          { ...orderEntity },\n          \"order_price\",\n          markPrice,\n          markPrice,\n          options.symbolInfo!,\n        );\n      } else {\n        baseOn.forEach((key) => {\n          newValues = calculate(\n            { ...newValues },\n            key as keyof FullOrderState,\n            orderEntity[key as keyof FullOrderState],\n            markPrice,\n            options.symbolInfo!,\n          );\n        });\n      }\n\n      if (hasTPSL(newValues)) {\n        const { tp_ROI, sl_ROI } = priceToROI({\n          values: newValues,\n          symbolLeverage,\n          markPrice,\n        });\n        if (tp_ROI) {\n          newValues.tp_ROI = tp_ROI;\n        }\n        if (sl_ROI) {\n          newValues.sl_ROI = sl_ROI;\n        }\n      }\n\n      actions.updateOrder(newValues);\n    },\n    [actions, calculate, options.symbolInfo, symbolLeverage, orderEntity],\n  );\n\n  const validate = (\n    order: Partial<OrderlyOrder>,\n    creator: OrderCreator<any>,\n    options: {\n      maxQty: number;\n      markPrice: number;\n      estSlippage?: number | null;\n      askAndBid?: number[];\n    },\n  ) => {\n    return creator?.validate(order, {\n      ...options,\n      symbol: symbolInfo!,\n    });\n  };\n\n  const generateOrder = (\n    creator: OrderCreator<any>,\n    options: {\n      maxQty: number;\n      markPrice: number;\n      estSlippage?: number | null;\n      askAndBid?: number[];\n    },\n  ) => {\n    const order = creator.create(\n      {\n        ...orderEntity,\n        symbol,\n      },\n      {\n        ...options,\n        symbol: symbolInfo!,\n      },\n    );\n\n    return order;\n  };\n\n  const submitOrder = useCallback(() => {\n    // const order = OrderFactory.create(values.type);\n    // order.submit(values);\n  }, [orderEntity]);\n\n  const resetOrder = (order?: Partial<OrderlyOrder>) => {\n    actions.resetOrder(order);\n  };\n\n  return {\n    formattedOrder: orderEntity,\n    setValue,\n    setValues,\n    setValuesRaw,\n    submit: submitOrder,\n    reset: resetOrder,\n    generateOrder,\n    validate,\n    onMarkPriceChange: onMarkPriceUpdated,\n  } as const;\n};\n\nexport { useOrderEntryNextInternal };\n","import { useEffect, useRef } from \"react\";\nimport { useGetRwaSymbolInfo } from \"../../orderly/orderlyHooks\";\n\nexport const useRwaLeverageSync = (\n  symbol: string,\n  refreshSymbolLeverages: () => Promise<unknown> | unknown,\n) => {\n  const { isRwa, open: rwaOpen } = useGetRwaSymbolInfo(symbol);\n  const lastRwaOpenRef = useRef<{\n    symbol?: string;\n    open?: boolean;\n  }>({});\n\n  useEffect(() => {\n    const previous = lastRwaOpenRef.current;\n\n    if (!isRwa || typeof rwaOpen !== \"boolean\") {\n      lastRwaOpenRef.current = { symbol };\n      return;\n    }\n\n    if (previous.symbol !== symbol) {\n      lastRwaOpenRef.current = { symbol, open: rwaOpen };\n      return;\n    }\n\n    if (typeof previous.open === \"boolean\" && previous.open !== rwaOpen) {\n      Promise.resolve(refreshSymbolLeverages()).catch(() => undefined);\n    }\n\n    lastRwaOpenRef.current = { symbol, open: rwaOpen };\n  }, [isRwa, refreshSymbolLeverages, rwaOpen, symbol]);\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { produce } from \"immer\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport {\n  SDKError,\n  API,\n  OrderlyOrder,\n  OrderStatus,\n  OrderType,\n  OrderLevel,\n  TrackerEventName,\n  OrderSide,\n  EMPTY_OBJECT,\n  MarginMode,\n} from \"@orderly.network/types\";\nimport { Decimal, getBBOType, zero } from \"@orderly.network/utils\";\nimport { useAccountInfo, useAppStore } from \"../../orderly/appStore\";\nimport {\n  useCollateral,\n  useFundingRatesStore,\n  useMaxQty,\n  useSymbolLeverageMap,\n  useSymbolsInfo,\n} from \"../../orderly/orderlyHooks\";\nimport { useMarkPriceActions } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport { useOrderStream } from \"../../orderly/useOrderStream/useOrderStream\";\nimport {\n  usePositions,\n  usePositionStore,\n} from \"../../orderly/usePositionStream/usePosition.store\";\nimport { useOrderlyContext } from \"../../orderlyContext\";\nimport { useSymbolStore } from \"../../provider/store/symbolStore\";\nimport {\n  OrderValidationItem,\n  OrderValidationResult,\n} from \"../../services/orderCreator/interface\";\nimport { useMemoizedFn } from \"../../shared/useMemoizedFn\";\nimport { useConfig } from \"../../useConfig\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { useMutation } from \"../../useMutation\";\nimport { useTrack } from \"../../useTrack\";\nimport { resolveIsolatedPendingOrders } from \"../../utils/order/isolatedPendingOrders\";\nimport { getOrderReferencePriceFromOrder } from \"../../utils/order/orderPrice\";\nimport { getScaledOrderSkew } from \"../../utils/order/scaledOrder\";\nimport {\n  calcEstLeverage,\n  calcEstLiqPrice,\n  getCreateOrderUrl,\n  getOrderCreator,\n  tpslFields,\n  hasTPSL,\n  isBBOOrder,\n  appendOrderMetadata,\n} from \"./helper\";\nimport type { FullOrderState } from \"./orderEntry.store\";\nimport {\n  assertUSDCBorrowWithinLimit,\n  calculateProjectedUSDCBorrow,\n  getOrderQuantityAndNotional,\n  normalizeUSDCBorrowLimit,\n  type GeneratedOrderForBorrowProjection,\n} from \"./usdcBorrowLimit\";\nimport { useOrderEntryNextInternal } from \"./useOrderEntry.internal\";\nimport { useRwaLeverageSync } from \"./useRwaLeverageSync\";\n\ntype OrderEntryParameters = Parameters<typeof useOrderEntryNextInternal>;\ntype Options = Omit<OrderEntryParameters[\"1\"], \"symbolInfo\">;\n\nexport type SubmitOrderOptions = {\n  resetOnSuccess?: boolean;\n  /**\n   * Server-configured USDC borrow limit (`negative_usdc_threshold`). When\n   * omitted or unavailable (loading/failed request), the guard falls back to\n   * DEFAULT_USDC_BORROW_LIMIT (50,000) instead of being skipped.\n   */\n  usdcBorrowLimit?: number;\n};\n\nexport type OrderEntryReturn = {\n  submit: (options?: SubmitOrderOptions) => Promise<{\n    success: boolean;\n    data: Record<string, any>;\n    timestamp: number;\n  }>;\n  reset: () => void;\n  resetErrors: () => void;\n  resetMetaState: () => void;\n  formattedOrder: Partial<FullOrderState>;\n  maxQty: number;\n  maxQtys: {\n    maxBuy: number;\n    maxSell: number;\n  };\n  /**\n   * The estimated liquidation price.\n   */\n  estLiqPrice: number | null;\n  /**\n   * Current position quantity for the symbol (signed: positive=Long, negative=Short).\n   */\n  currentPosition: number;\n  /**\n   * The estimated liquidation price distance.\n   */\n  estLiqPriceDistance: number | null;\n  /**\n   * The estimated leverage after order creation.\n   */\n  estLeverage: number | null;\n  estSlippage: number | null;\n  helper: {\n    /**\n     * @deprecated Use `validate` instead.\n     */\n    validator: () => Promise<OrderlyOrder>;\n    /**\n     * Function to validate the order.\n     * @returns {Promise<OrderValidationResult | null>} The validation result.\n     */\n    validate: (otherErrors?: OrderValidationResult) => Promise<OrderlyOrder>;\n    getProjectedUSDCBorrow: (order: Partial<OrderlyOrder>) => number | null;\n  };\n  freeCollateral: number;\n  /**\n   * set a single value to the order data;\n   * @param key\n   * @param value\n   * @returns\n   */\n  setValue: (\n    key: keyof FullOrderState,\n    value: any,\n    options?: {\n      shouldUpdateLastChangedField?: boolean;\n    },\n  ) => void;\n  setValues: (values: Partial<FullOrderState>) => void;\n  /**\n   * Raw merge setter for externally computed bundles (e.g. Advanced TPSL).\n   *\n   * Unlike `setValues`, this intentionally skips `calculate()` to avoid overwriting computed TPSL fields.\n   */\n  setValuesRaw: (values: Partial<FullOrderState>) => void;\n  symbolInfo: API.SymbolExt;\n  /**\n   * Meta state including validation and submission status.\n   */\n  metaState: {\n    dirty: { [K in keyof OrderlyOrder]?: boolean };\n    submitted: boolean;\n    validated: boolean;\n    errors: OrderValidationResult | null;\n  };\n  /**\n   * Indicates if a mutation (order creation) is in progress.\n   */\n  isMutating: boolean;\n\n  markPrice?: number;\n  symbolLeverage?: number;\n};\n\n/**\n * Custom hook for managing order entry in the Orderly application.\n *\n * @param {string} symbol - The symbol for which the order is being created. This parameter is required.\n *\n * @param {Options} options - Additional options for configuring the order entry.\n *\n * @returns {OrderEntryReturn} An object containing various actions and state related to order entry.\n *\n * @throws {Error} Throws an error if the symbol is not provided or is not a string.\n *\n * @example\n * ```typescript\n * const {\n *   submit,\n *   formattedOrder, //\n *   setValue,\n *   setValues,\n *   symbolInfo,\n *   metaState,\n *   isMutating,\n *  // maxQty, freeCollateral ... same as v1\n * } = useOrderEntry('BTC_USDC_PERP', options);\n *\n * // update the order type\n * setValue('order_type', OrderType.LIMIT);\n * // update the order price\n * setValue('order_price', '70000');\n * // update the order quantity\n * setValue('order_quantity', 1);\n *\n * // how to set TP/SL\n * setValue('tp_trigger_price', '71000'); // directly set TP trigger price\n * // or set the tp pnl, the TP trigger price will be calculated based on the current order price\n * // setValue('tp_pnl', '300'); // you can also set tp_offset or tp_offset_percentage, same as the usage of useTPSL hook;\n * // SL is similar to TP setting\n * setValue('sl_price', '69000');\n *\n * // Submit the order data to the backend, and reset the hook state after the order is successfully created.\n * // Note: If the order data is invalid, an error will be thrown.\n * // If you want to retain the current order data after a successful order creation,\n * // you can pass {resetOnSuccess: false} to `submit` function to prevent the hook from automatically resetting the order status.\n * // Of course, you can also call `reset()` to manually reset the order status and use `resetMetaState()` to clear the error state.\n * await submit();\n * ```\n */\nconst useOrderEntry = (\n  symbol: string,\n  options: Options = {},\n): OrderEntryReturn => {\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n  const ee = useEventEmitter();\n  const { track } = useTrack();\n  const apiBaseUrl = useConfig(\"apiBaseUrl\");\n  const fetchSymbols = useSymbolStore((state) => state.fetchData);\n\n  const [meta, setMeta] = useState<{\n    dirty: { [K in keyof OrderlyOrder]?: boolean };\n    submitted: boolean;\n    validated: boolean;\n    errors: OrderValidationResult | null;\n  }>({\n    dirty: {},\n    submitted: false,\n    validated: false,\n    errors: null,\n  });\n\n  const askAndBid = useRef<number[][]>([[]]); // [[ask0, bid0],...,[ask4,bid4]]\n  const lastChangedField = useRef<keyof FullOrderState | undefined>();\n  const lastOrderTypeExt = useRef<OrderType>();\n  const lastLevel = useRef<OrderLevel>();\n  const fundingRates = useFundingRatesStore();\n\n  const calculateTPSL_baseOn = useRef<{ tp: string; sl: string }>({\n    tp: \"\",\n    sl: \"\",\n  });\n\n  const actions = useMarkPriceActions();\n  const symbolConfig = useSymbolsInfo();\n  const accountInfo = useAccountInfo();\n  const positions = usePositions();\n  // formattedOrder will be available from useOrderEntryNextInternal below\n  const effectiveMarginMode =\n    (options as OrderEntryParameters[1])?.initialOrder?.margin_mode ??\n    MarginMode.CROSS;\n  const { getSymbolLeverage, refresh: refreshSymbolLeverages } =\n    useSymbolLeverageMap();\n  const symbolLeverage = getSymbolLeverage(symbol, effectiveMarginMode);\n  useRwaLeverageSync(symbol, refreshSymbolLeverages);\n\n  const symbolInfo: API.SymbolExt = symbolConfig[symbol]();\n  const markPrice = actions.getMarkPriceBySymbol(symbol);\n\n  const { orderMetadata } = useOrderlyContext();\n\n  const {\n    formattedOrder,\n    setValue: setValueInternal,\n    setValues: setValuesInternal,\n    setValuesRaw: setValuesRawInternal,\n    validate,\n    generateOrder,\n    reset,\n    // submit,\n    ...orderEntryActions\n  } = useOrderEntryNextInternal(symbol, {\n    ...options,\n    symbolInfo,\n    symbolLeverage,\n  });\n\n  const [estSlippage, setEstSlippage] = useState<number | null>(null);\n  const [bestAskBidSnapshot, setBestAskBidSnapshot] = useState<number[]>([]);\n\n  const [doCreateOrder, { isMutating }] = useMutation<OrderlyOrder, any>(\n    getCreateOrderUrl(formattedOrder),\n  );\n\n  const bestAskBid = bestAskBidSnapshot;\n\n  const getReferencePriceForOrder = (\n    order: Partial<OrderlyOrder>,\n  ): number | null => {\n    if (!order.order_type || !order.side) {\n      return null;\n    }\n    const isIsolated =\n      (order.margin_mode ?? effectiveMarginMode) === MarginMode.ISOLATED;\n\n    // ISOLATED MARKET orders are priced from mark price +/- price_range to\n    // match the backend freezing reference price\n    // (ReferencePriceServiceImpl), not from the Ask1/Bid1 touch. CROSS keeps\n    // the legacy Ask1/Bid1 reference.\n    const referencePrice = getOrderReferencePriceFromOrder(\n      order,\n      bestAskBid,\n      isIsolated\n        ? {\n            markPrice,\n            priceRange: symbolInfo.price_range,\n            pricePrecision: symbolInfo.quote_dp,\n          }\n        : undefined,\n    );\n\n    const slippage = Number(order.slippage);\n    if (\n      !isIsolated ||\n      order.side !== OrderSide.BUY ||\n      order.order_type !== OrderType.MARKET ||\n      !referencePrice ||\n      !Number.isFinite(slippage) ||\n      slippage <= 0\n    ) {\n      return referencePrice;\n    }\n\n    // Backend clamps the MARKET BUY reference against midPrice * (1 +\n    // slippage): keep the cheaper of (mark + range) and mid * (1 + slippage).\n    if (!(bestAskBid[0] > 0 && bestAskBid[1] > 0)) {\n      // Without a mid price the range price is already the conservative\n      // upper bound for a BUY.\n      return referencePrice;\n    }\n\n    const midPrice = new Decimal(bestAskBid[0]).add(bestAskBid[1]).div(2);\n    const slippagePrice = midPrice.mul(\n      new Decimal(1).add(new Decimal(slippage).div(100)),\n    );\n\n    return slippagePrice.lessThan(referencePrice)\n      ? slippagePrice.toNumber()\n      : referencePrice;\n  };\n\n  const getReferencePriceForSide = (side: OrderSide): number | null => {\n    // Max Qty is BBO-driven and keeps its original mark-price fallback until\n    // both sides of the orderbook snapshot are available. Borrow projection\n    // calls getReferencePriceForOrder directly so priced LIMIT/SCALED orders\n    // can still use their submitted prices without an unconditional BBO gate.\n    if (bestAskBid.length < 2) {\n      return null;\n    }\n    return getReferencePriceForOrder({ ...formattedOrder, side });\n  };\n\n  // Reference price for the new order, kept in sync with how the backend\n  // risk engine prices orders (mark price +/- price_range for ISOLATED\n  // MARKET, otherwise BBO / submitted prices), so the displayed max qty\n  // matches what the backend will actually accept.\n  const buyReferencePriceFromOrder = getReferencePriceForSide(OrderSide.BUY);\n  const sellReferencePriceFromOrder = getReferencePriceForSide(OrderSide.SELL);\n\n  const maxBuyQtyValue = useMaxQty(symbol, OrderSide.BUY, {\n    reduceOnly: formattedOrder.reduce_only,\n    marginMode: effectiveMarginMode,\n    currentOrderReferencePrice:\n      buyReferencePriceFromOrder && buyReferencePriceFromOrder > 0\n        ? buyReferencePriceFromOrder\n        : undefined,\n  });\n  const maxSellQtyValue = useMaxQty(symbol, OrderSide.SELL, {\n    reduceOnly: formattedOrder.reduce_only,\n    marginMode: effectiveMarginMode,\n    currentOrderReferencePrice:\n      sellReferencePriceFromOrder && sellReferencePriceFromOrder > 0\n        ? sellReferencePriceFromOrder\n        : undefined,\n  });\n  const maxQtyValue =\n    formattedOrder.side === OrderSide.BUY ? maxBuyQtyValue : maxSellQtyValue;\n\n  // @ts-ignore\n  const maxQty = options.maxQty ?? maxQtyValue;\n  const maxQtys = useMemo(\n    () => ({\n      maxBuy:\n        formattedOrder.side === OrderSide.BUY\n          ? // @ts-ignore\n            (options.maxQty ?? maxBuyQtyValue)\n          : maxBuyQtyValue,\n      maxSell:\n        formattedOrder.side === OrderSide.SELL\n          ? // @ts-ignore\n            (options.maxQty ?? maxSellQtyValue)\n          : maxSellQtyValue,\n    }),\n    [\n      formattedOrder.side,\n      maxBuyQtyValue,\n      maxSellQtyValue,\n      // @ts-ignore\n      options.maxQty,\n    ],\n  );\n\n  const updateOrderPrice = () => {\n    const order_type = formattedOrder.order_type;\n    const order_type_ext =\n      formattedOrder.order_type_ext ?? lastOrderTypeExt.current;\n    const level = formattedOrder.level ?? lastLevel.current;\n\n    const isBBO = isBBOOrder({ order_type, order_type_ext });\n\n    if (!isBBO || level === undefined) {\n      return;\n    }\n\n    lastOrderTypeExt.current = order_type_ext;\n    lastLevel.current = level;\n\n    const index = order_type_ext === OrderType.ASK ? 0 : 1;\n    const price = askAndBid.current?.[level!]?.[index];\n    if (price) {\n      setValue(\"order_price\", price, {\n        shouldUpdateLastChangedField: false,\n      });\n    }\n  };\n\n  // update the order price by order book\n  const updateOrderPriceByOrderBook = () => {\n    const { order_type, order_type_ext } = formattedOrder;\n\n    const isBBO = isBBOOrder({ order_type, order_type_ext });\n\n    // only update the order price when last changed field is not total and the order type is bbo\n    if (lastChangedField.current !== \"total\" && isBBO) {\n      updateOrderPrice();\n    }\n  };\n\n  const updateEstSlippage = (orderBook: any) => {\n    if (\n      formattedOrder.order_type !== OrderType.MARKET ||\n      !formattedOrder.order_quantity\n    ) {\n      setEstSlippage(null);\n      return;\n    }\n    const { order_quantity, side } = formattedOrder;\n\n    // const avgExecutionPrice = orderBook;\n    let avgExecutionPrice: Decimal | undefined;\n    let book: any;\n    const filledBorders: number[][] = [];\n    let orderQuantity = new Decimal(order_quantity);\n\n    if (side === OrderSide.BUY) {\n      book = [...orderBook.asks].reverse();\n    } else {\n      book = orderBook.bids;\n    }\n\n    for (let i = 0; i < book.length; i++) {\n      // console.log(book[i]);\n      // const price = book[i][0];\n      // const quantity = book[i][2];\n      // if (quantity >= order_quantity) {\n      //   avgExecutionPrice = price;\n      //   break;\n      // }\n      const price = book[i][0];\n      const quantity = book[i][1];\n      if (isNaN(price) || isNaN(quantity)) {\n        continue;\n      }\n      if (orderQuantity.gt(quantity)) {\n        orderQuantity = orderQuantity.minus(quantity);\n        filledBorders.push([price, quantity]);\n      } else {\n        filledBorders.push([price, orderQuantity.toNumber()]);\n        break;\n      }\n    }\n\n    if (filledBorders.length > 0) {\n      const sumPrice = filledBorders.reduce((acc, curr) => {\n        return acc.plus(new Decimal(curr[0]).mul(curr[1]));\n      }, zero);\n\n      avgExecutionPrice = sumPrice.div(order_quantity);\n    }\n\n    const bestPrice = book[0][0];\n    if (avgExecutionPrice && bestPrice) {\n      const estSlippage = avgExecutionPrice\n        .minus(bestPrice)\n        .abs()\n        .div(bestPrice)\n        .toNumber();\n      setEstSlippage(estSlippage);\n    }\n  };\n\n  useEffect(() => {\n    // when BBO type change, it will change order price\n    updateOrderPrice();\n  }, [formattedOrder.order_type_ext, formattedOrder.level]);\n\n  useEffect(() => {\n    askAndBid.current = [[]];\n    setBestAskBidSnapshot([]);\n  }, [symbol]);\n\n  const onOrderBookUpdate = useDebouncedCallback((data: any) => {\n    const parsedData = [\n      [data.asks?.[data.asks.length - 1]?.[0], data.bids?.[0]?.[0]],\n      [data.asks?.[data.asks.length - 2]?.[0], data.bids?.[1]?.[0]],\n      [data.asks?.[data.asks.length - 3]?.[0], data.bids?.[2]?.[0]],\n      [data.asks?.[data.asks.length - 4]?.[0], data.bids?.[3]?.[0]],\n      [data.asks?.[data.asks.length - 5]?.[0], data.bids?.[4]?.[0]],\n    ];\n    askAndBid.current = parsedData;\n    const nextBestAskBid = parsedData[0] || [];\n    setBestAskBidSnapshot((prev) =>\n      prev[0] === nextBestAskBid[0] && prev[1] === nextBestAskBid[1]\n        ? prev\n        : nextBestAskBid,\n    );\n    updateOrderPriceByOrderBook();\n    updateEstSlippage(data);\n  }, 200);\n\n  /**\n   * TODO: remove this when orderBook calc is moved to the calculation service\n   */\n  useEffect(() => {\n    ee.on(\"orderbook:update\", onOrderBookUpdate);\n\n    return () => {\n      ee.off(\"orderbook:update\", onOrderBookUpdate);\n    };\n  }, []);\n\n  useEffect(() => {\n    // Skip if formattedOrder.symbol doesn't match current symbol (stale state from previous symbol)\n    if (formattedOrder.symbol !== symbol) {\n      return;\n    }\n\n    if (\n      (formattedOrder.order_type === OrderType.MARKET ||\n        formattedOrder.order_type === OrderType.STOP_MARKET) &&\n      markPrice\n    ) {\n      const baseOn = new Set<string>();\n      if (lastChangedField.current) {\n        baseOn.add(lastChangedField.current);\n      }\n      if (calculateTPSL_baseOn.current.tp) {\n        baseOn.add(calculateTPSL_baseOn.current.tp);\n      }\n      if (calculateTPSL_baseOn.current.sl) {\n        baseOn.add(calculateTPSL_baseOn.current.sl);\n      }\n      orderEntryActions.onMarkPriceChange(markPrice, Array.from(baseOn));\n    }\n  }, [markPrice, formattedOrder.order_type, formattedOrder.symbol, symbol]);\n\n  const prepareData = useCallback(() => {\n    return {\n      markPrice: actions.getMarkPriceBySymbol(symbol),\n      maxQty,\n      estSlippage,\n      askAndBid: askAndBid.current?.[0] || [],\n    };\n  }, [maxQty, symbol, estSlippage]);\n\n  const interactiveValidate = (order: Partial<OrderlyOrder>) => {\n    validateFunc(order).then((errors) => {\n      const keys = Object.keys(errors);\n      if (keys.length > 0) {\n        setMeta(\n          produce((draft) => {\n            draft.errors = errors;\n          }),\n        );\n      } else {\n        setMeta(\n          produce((draft) => {\n            draft.errors = null;\n          }),\n        );\n      }\n    });\n  };\n\n  const canSetTPSLPrice = (\n    key: keyof OrderlyOrder,\n    value: any,\n    orderType: OrderType,\n  ) => {\n    if (\n      tpslFields.includes(key) &&\n      value !== \"\" &&\n      value !== undefined &&\n      value !== null &&\n      orderType !== OrderType.LIMIT &&\n      orderType !== OrderType.MARKET\n    ) {\n      console.warn(\"Only limit order can be set tp/sl\");\n      return false;\n    }\n\n    return true;\n  };\n\n  const setValue = (\n    key: keyof FullOrderState,\n    value: any,\n    options?: {\n      shouldUpdateLastChangedField?: boolean;\n      shouldUpdateDirty?: boolean;\n    },\n  ) => {\n    const { shouldUpdateLastChangedField = true, shouldUpdateDirty = true } =\n      options || {};\n    if (!canSetTPSLPrice(key, value, formattedOrder.order_type)) {\n      return;\n    }\n    // fieldDirty.current[key] = true;\n    if (shouldUpdateDirty) {\n      setMeta(\n        produce((draft) => {\n          draft.dirty[key] = true;\n        }),\n      );\n    }\n\n    const values = setValueInternal(key, value, prepareData());\n\n    if (values) {\n      interactiveValidate(values);\n    }\n\n    if (shouldUpdateLastChangedField) {\n      if (key.startsWith(\"tp_\")) {\n        calculateTPSL_baseOn.current.tp = key;\n      } else if (key.startsWith(\"sl_\")) {\n        calculateTPSL_baseOn.current.sl = key;\n      }\n\n      lastChangedField.current = key;\n    }\n  };\n\n  const setValues = (values: Partial<FullOrderState>) => {\n    if (\n      !Object.keys(values).every((key) =>\n        canSetTPSLPrice(\n          key as keyof FullOrderState,\n          values[key as keyof FullOrderState],\n          formattedOrder.order_type,\n        ),\n      )\n    ) {\n      return;\n    }\n\n    const newValues = setValuesInternal(values, prepareData());\n\n    if (newValues) {\n      interactiveValidate(newValues);\n    }\n  };\n\n  const setValuesRaw = (values: Partial<FullOrderState>) => {\n    if (\n      !Object.keys(values).every((key) =>\n        canSetTPSLPrice(\n          key as keyof FullOrderState,\n          values[key as keyof FullOrderState],\n          formattedOrder.order_type,\n        ),\n      )\n    ) {\n      return;\n    }\n\n    const newValues = setValuesRawInternal(values);\n    if (newValues) {\n      interactiveValidate(newValues);\n    }\n  };\n\n  async function validateFunc(order: Partial<OrderlyOrder>) {\n    const creator = getOrderCreator(order);\n\n    return validate(order, creator, prepareData());\n  }\n\n  /**\n   * Validate the order\n   * TODO: confirm validate result return order\n   */\n  const validateOrder = (\n    otherErrors?: OrderValidationResult,\n  ): Promise<OrderlyOrder> => {\n    return new Promise<OrderlyOrder>(async (resolve, reject) => {\n      const creator = getOrderCreator(formattedOrder);\n      let errors = await validate(formattedOrder, creator, prepareData());\n      if (otherErrors) {\n        errors = {\n          ...errors,\n          ...otherErrors,\n        };\n      }\n      const keys = Object.keys(errors);\n      if (keys.length > 0) {\n        // setErrors(errors);\n        setMeta(\n          produce((draft) => {\n            draft.errors = errors;\n          }),\n        );\n        if (!meta.validated) {\n          // setMeta((prev) => ({ ...prev, validated: true }));\n          setMeta(\n            produce((draft) => {\n              draft.validated = true;\n            }),\n          );\n        }\n        reject(errors);\n      }\n      // create order\n      const order = generateOrder(creator, prepareData());\n      resolve(order);\n    });\n  };\n\n  const { freeCollateral, totalCollateral } = useCollateral();\n\n  const currentPositionData = useMemo(() => {\n    const rows = positions ?? [];\n    const marginMode = formattedOrder.margin_mode ?? effectiveMarginMode;\n    return Array.isArray(rows)\n      ? rows.find(\n          (position) =>\n            position.symbol === symbol &&\n            (position.margin_mode ?? MarginMode.CROSS) === marginMode,\n        )\n      : undefined;\n  }, [positions, symbol, formattedOrder.margin_mode, effectiveMarginMode]);\n  const currentPosition = currentPositionData?.position_qty ?? 0;\n\n  // Per-order pending data for the risk-engine frozen simulation. `null`\n  // means the stream has not loaded yet and the borrow projection falls back\n  // to the aggregate pending quantities on the position.\n  const [symbolOpenOrders] = useOrderStream({\n    symbol,\n    status: OrderStatus.INCOMPLETE,\n    size: 100,\n  });\n\n  const getProjectedUSDCBorrow = useMemoizedFn(\n    (generatedOrder: Partial<OrderlyOrder>): number | null => {\n      const order = generatedOrder as GeneratedOrderForBorrowProjection;\n      const marginMode =\n        order.margin_mode ?? formattedOrder.margin_mode ?? effectiveMarginMode;\n      const reduceOnly = order.reduce_only ?? formattedOrder.reduce_only;\n\n      if (marginMode !== MarginMode.ISOLATED || reduceOnly) {\n        return 0;\n      }\n\n      const portfolio = useAppStore.getState().portfolio;\n      if (!portfolio.holding) {\n        return null;\n      }\n\n      const positionRows = usePositionStore.getState().positions.all.rows ?? [];\n      const position = positionRows.find(\n        (item) =>\n          item.symbol === symbol &&\n          (item.margin_mode ?? MarginMode.CROSS) === marginMode,\n      );\n      const usdcHolding = portfolio.holding.find(\n        (item) => item.token === \"USDC\",\n      );\n      if (!usdcHolding) {\n        return null;\n      }\n\n      const orderValues = getOrderQuantityAndNotional({\n        generatedOrder: order,\n        formattedOrder,\n        marginMode,\n        getReferencePrice: getReferencePriceForOrder,\n      });\n\n      if (!orderValues) {\n        return null;\n      }\n\n      const markPrice = Number(actions.getMarkPriceBySymbol(symbol));\n      const pendingOrders = resolveIsolatedPendingOrders(symbolOpenOrders, {\n        symbol,\n        fallbackPrice: markPrice > 0 ? markPrice : 0,\n        pendingLongQty: position?.pending_long_qty ?? 0,\n        pendingShortQty: position?.pending_short_qty ?? 0,\n      });\n\n      const leverage = symbolLeverage ?? position?.leverage;\n      return calculateProjectedUSDCBorrow({\n        marginMode,\n        reduceOnly,\n        orderSide: order.side ?? formattedOrder.side,\n        orderQuantity: orderValues.orderQuantity,\n        orderNotional: orderValues.orderNotional,\n        newOrderEntries: orderValues.orders,\n        leverage: Number(leverage),\n        markPrice,\n        positionQty: position?.position_qty ?? 0,\n        pendingLongQty: position?.pending_long_qty ?? 0,\n        pendingShortQty: position?.pending_short_qty ?? 0,\n        pendingOrders,\n        usdcHolding: usdcHolding.holding,\n        usdcPendingShort: usdcHolding.pending_short,\n        usdcIsolatedOrderFrozen: usdcHolding.isolated_order_frozen,\n        totalUnsettledPnL: portfolio.unsettledPnL,\n      });\n    },\n  );\n\n  // TODO: move to the calculation service\n  const estLiqPrice = useMemo(() => {\n    const markPrice = actions.getMarkPriceBySymbol(symbol);\n    if (!markPrice || !accountInfo || !symbolInfo) {\n      return null;\n    }\n\n    const sumUnitaryFunding = fundingRates[symbol]?.sum_unitary_funding ?? 0;\n\n    const estLiqPrice = calcEstLiqPrice(formattedOrder, askAndBid.current[0], {\n      markPrice,\n      totalCollateral,\n      futures_taker_fee_rate: accountInfo.futures_taker_fee_rate,\n      imr_factor: accountInfo.imr_factor?.[symbol] ?? 0,\n      symbol,\n      positions,\n      symbolInfo,\n      sumUnitaryFunding,\n      symbolLeverage: symbolLeverage,\n    });\n\n    return estLiqPrice;\n  }, [\n    formattedOrder,\n    accountInfo,\n    positions,\n    totalCollateral,\n    symbol,\n    maxQty,\n    symbolInfo,\n    fundingRates,\n    symbolLeverage,\n  ]);\n\n  const estLiqPriceDistance = useMemo(() => {\n    if (!estLiqPrice) {\n      return null;\n    }\n    return new Decimal(estLiqPrice)\n      .minus(markPrice)\n      .abs()\n      .div(markPrice)\n      .toNumber();\n  }, [estLiqPrice, markPrice]);\n\n  const estLeverage = useMemo(() => {\n    if (!symbolInfo) {\n      return null;\n    }\n\n    const orderQuantity = Number(formattedOrder.order_quantity);\n\n    if (orderQuantity === 0 || orderQuantity > maxQty) {\n      return null;\n    }\n\n    return calcEstLeverage(formattedOrder, askAndBid.current[0], {\n      totalCollateral,\n      positions,\n      symbol,\n      symbolInfo,\n    });\n  }, [\n    formattedOrder,\n    accountInfo,\n    positions,\n    totalCollateral,\n    symbol,\n    maxQty,\n    symbolInfo,\n  ]);\n\n  const resetErrors = () => {\n    setMeta(\n      produce((draft) => {\n        draft.errors = null;\n      }),\n    );\n  };\n\n  const resetMetaState = () => {\n    setMeta(\n      produce((draft) => {\n        draft.errors = null;\n        draft.submitted = false;\n        draft.validated = false;\n        draft.dirty = {};\n      }),\n    );\n  };\n\n  const submitOrder = async (options?: SubmitOrderOptions) => {\n    /**\n     * validate order\n     */\n    const creator = getOrderCreator(formattedOrder);\n    const errors = await validate(formattedOrder, creator, prepareData());\n    const { resetOnSuccess = true, usdcBorrowLimit } = options || {};\n    // setMeta((prev) => ({ ...prev, submitted: true, validated: true }));\n    setMeta(\n      produce((draft) => {\n        draft.submitted = true;\n        draft.validated = true;\n      }),\n    );\n    if (Object.keys(errors).length > 0) {\n      setMeta(\n        produce((draft) => {\n          draft.errors = errors;\n        }),\n      );\n      throw new SDKError(\"Order validation failed\");\n    }\n\n    const order = generateOrder(creator, prepareData());\n\n    // The guard always compares against a concrete limit: an omitted or\n    // unavailable threshold falls back to DEFAULT_USDC_BORROW_LIMIT.\n    const borrowLimit = normalizeUSDCBorrowLimit(usdcBorrowLimit);\n    assertUSDCBorrowWithinLimit(getProjectedUSDCBorrow(order), borrowLimit);\n\n    const isScaledOrder = order.order_type === OrderType.SCALED;\n\n    const params = isScaledOrder\n      ? {\n          orders: appendOrderMetadata(order.orders, orderMetadata),\n        }\n      : appendOrderMetadata(order, orderMetadata);\n\n    const result = await doCreateOrder(params);\n\n    // If placing a Market/Stop Market order fails, refresh symbol info once\n    // to check whether the symbol has switched to POST_ONLY.\n    if (\n      !result.success &&\n      (order.order_type === OrderType.MARKET ||\n        order.order_type === OrderType.STOP_MARKET)\n    ) {\n      void fetchSymbols(apiBaseUrl);\n    }\n\n    if (result.success) {\n      let trackParams: any = {\n        side: order.side,\n        order_type: order.order_type,\n        tp_sl: hasTPSL(formattedOrder),\n        symbol: order.symbol,\n      };\n\n      if ([OrderType.ASK, OrderType.BID].includes(order.order_type)) {\n        trackParams = {\n          ...trackParams,\n          bbo: true,\n          bbo_setting: getBBOType({\n            type: order.order_type,\n            side: order.side,\n            level: order.level,\n          }),\n        };\n      }\n\n      if (isScaledOrder) {\n        const skew = getScaledOrderSkew({\n          skew: order.skew,\n          distribution_type: order.distribution_type,\n          total_orders: order.total_orders,\n        });\n        trackParams = {\n          ...trackParams,\n          order_type: \"scaled\",\n          distribution_type: order.distribution_type,\n          skew: new Decimal(skew).todp(2).toNumber(),\n          total_orders: order.total_orders,\n        };\n      }\n\n      track(TrackerEventName.placeOrderSuccess, trackParams);\n    }\n\n    if (result.success && resetOnSuccess) {\n      reset();\n      resetMetaState();\n    }\n    return result;\n  };\n\n  // reset error state when order type change\n  useEffect(() => {\n    resetMetaState();\n  }, [formattedOrder.order_type]);\n\n  return {\n    ...orderEntryActions,\n    submit: submitOrder,\n    reset,\n    resetErrors,\n    resetMetaState,\n    formattedOrder,\n    maxQty,\n    maxQtys,\n    estLiqPrice,\n    estLiqPriceDistance,\n    currentPosition,\n    estLeverage,\n    estSlippage,\n    helper: {\n      /**\n       * @deprecated use validate instead\n       */\n      validator: validateOrder,\n      validate: validateOrder,\n      getProjectedUSDCBorrow,\n    },\n    freeCollateral,\n    setValue: useMemoizedFn(setValue),\n    setValues: useMemoizedFn(setValues),\n    setValuesRaw: useMemoizedFn(setValuesRaw),\n    symbolInfo: symbolInfo || EMPTY_OBJECT,\n    metaState: meta,\n    isMutating,\n    markPrice,\n    symbolLeverage,\n  };\n};\n\nexport { useOrderEntry };\n","import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\nimport {\n  MarginMode,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n  RequireKeys,\n} from \"@orderly.network/types\";\n\nexport type FullOrderState = OrderlyOrder;\n\ntype OrderEntryStateEntity = RequireKeys<\n  FullOrderState,\n  \"side\" | \"order_type\" | \"symbol\"\n>;\n\ntype OrderEntryState = {\n  entry: OrderEntryStateEntity;\n  estLeverage: number | null;\n  estLiquidationPrice: number | null;\n  errors: Partial<Record<keyof FullOrderState, string>>;\n};\n\ntype OrderEntryActions = {\n  /** Initializes order state (e.g. when switching symbol). Resets computed values and errors. */\n  initOrder: (\n    symbol: string,\n    options?: {\n      side?: OrderSide;\n      order_type?: OrderType;\n      margin_mode?: MarginMode;\n    },\n  ) => void;\n  updateOrder: (order: Partial<FullOrderState>) => void;\n  updateOrderByKey: <K extends keyof FullOrderState>(\n    key: K,\n    value: FullOrderState[K],\n  ) => void;\n  restoreOrder: (order?: Partial<FullOrderState>) => void;\n  updateOrderComputed: (data: {\n    estLeverage: number | null;\n    estLiquidationPrice: number | null;\n  }) => void;\n  resetOrder: (order?: Partial<FullOrderState>) => void;\n  hasTP_SL: () => boolean;\n};\n\nconst initialOrderState = {\n  order_price: \"\",\n  order_quantity: \"\",\n  trigger_price: \"\",\n  tp_trigger_price: \"\",\n  sl_trigger_price: \"\",\n  total: \"\",\n  symbol: \"\",\n};\n\nexport const useOrderStore = create<\n  OrderEntryState & {\n    actions: OrderEntryActions;\n  }\n>()(\n  immer((set, get) => ({\n    entry: {\n      side: OrderSide.BUY,\n      order_type: OrderType.LIMIT,\n      ...initialOrderState,\n    } as OrderEntryStateEntity,\n    estLeverage: null,\n    estLiquidationPrice: null,\n    errors: {},\n    actions: {\n      initOrder: (\n        symbol: string,\n        options?: {\n          side?: OrderSide;\n          order_type?: OrderType;\n          margin_mode?: MarginMode;\n        },\n      ) => {\n        set((state) => {\n          state.entry = {\n            ...initialOrderState,\n            symbol,\n            side: options?.side ?? OrderSide.BUY,\n            order_type: options?.order_type ?? OrderType.LIMIT,\n            margin_mode: options?.margin_mode ?? MarginMode.CROSS,\n          } as OrderEntryStateEntity;\n          state.estLeverage = null;\n          state.estLiquidationPrice = null;\n          state.errors = {};\n        });\n      },\n      hasTP_SL: () => {\n        const order = get().entry;\n        return (\n          typeof order.tp_trigger_price !== \"undefined\" ||\n          typeof order.sl_trigger_price !== \"undefined\"\n        );\n      },\n      updateOrderComputed: (data: {\n        estLeverage: number | null;\n        estLiquidationPrice: number | null;\n      }) => {\n        set(\n          (state) => {\n            state.estLeverage = data.estLeverage;\n            state.estLiquidationPrice = data.estLiquidationPrice;\n          },\n          false,\n          // \"updateOrderComputed\"\n        );\n      },\n      updateOrder: (order: Partial<FullOrderState>) => {\n        set(\n          (state) => {\n            // state.entry[key as keyof BracketOrderEntry] = value;\n            state.entry = {\n              ...state.entry,\n              ...order,\n            };\n          },\n          false,\n          // \"updateOrder\"\n        );\n      },\n      updateOrderByKey: <K extends keyof FullOrderState>(\n        key: K,\n        value: FullOrderState[K],\n      ) => {\n        set(\n          (state) => {\n            state.entry[key] = value;\n          },\n          false,\n          // \"updateOrderByKey\"\n        );\n      },\n      restoreOrder: (order) => {\n        set(\n          (state) => {\n            state.entry = order as OrderEntryStateEntity;\n          },\n          false,\n          // \"restoreOrder\"\n        );\n      },\n      resetOrder: (_order?: Partial<FullOrderState>) => {\n        set(\n          (state) => {\n            state.entry.order_price = \"\";\n            state.entry.order_quantity = \"\";\n            state.entry.trigger_price = \"\";\n            state.entry.total = \"\";\n            state.entry.tp_trigger_price = \"\";\n            state.entry.tp_pnl = \"\";\n            state.entry.tp_offset = \"\";\n            state.entry.tp_offset_percentage = \"\";\n            state.entry.sl_trigger_price = \"\";\n            state.entry.sl_pnl = \"\";\n            state.entry.sl_offset = \"\";\n            state.entry.sl_offset_percentage = \"\";\n          },\n          true,\n          // \"resetOrder\"\n        );\n      },\n    },\n  })),\n);\n","import { useCallback, useState } from \"react\";\nimport { OrderSide, OrderType, SDKError } from \"@orderly.network/types\";\nimport { isPositionalTPSL } from \"@orderly.network/utils\";\nimport { useMarkPriceBySymbol } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport { useSymbolsInfo } from \"../../orderly/useSymbolsInfo\";\nimport { OrderValidationResult } from \"../../services/orderCreator/interface\";\nimport { validateTPSLChild } from \"../../services/orderCreator/validateTPSLChild\";\nimport { useMemoizedFn } from \"../../shared/useMemoizedFn\";\nimport { getOrderCreator } from \"./helper\";\n\nexport const useOrderEntity = (\n  order: {\n    symbol: string;\n    order_type: OrderType;\n    side: OrderSide;\n    reduce_only?: boolean;\n    [key: string]: any;\n  },\n  options?: {\n    maxQty?: number;\n  },\n) => {\n  const { symbol } = order;\n  const { maxQty } = options || {};\n\n  if (!symbol) {\n    throw new SDKError(\"Symbol is required\");\n  }\n\n  const [errors, setErrors] = useState<OrderValidationResult>({});\n\n  const markPrice = useMarkPriceBySymbol(symbol);\n  const symbolsInfo = useSymbolsInfo();\n\n  const prepareData = useCallback(() => {\n    return {\n      markPrice,\n      maxQty: maxQty || 0,\n      symbol: symbolsInfo[symbol](),\n    };\n  }, [maxQty, markPrice, symbolsInfo, symbol]);\n\n  const validate = useMemoizedFn(async () => {\n    return new Promise<OrderValidationResult | null>(\n      async (resolve, reject) => {\n        if (isPositionalTPSL(order)) {\n          const errors = validateTPSLChild(\n            { ...order, type: order.tpsl_execution_type ?? order.order_type },\n            { trigger_price: order.trigger_price, price: order.order_price },\n            prepareData(),\n          );\n          setErrors(errors);\n          if (Object.keys(errors).length) reject(errors);\n          else resolve(order as any);\n          return;\n        }\n        const creator = getOrderCreator(order);\n        const errors = await creator?.validate(order, prepareData());\n\n        const keys = Object.keys(errors);\n        if (keys.length > 0) {\n          setErrors(errors);\n          reject(errors);\n        } else {\n          setErrors({});\n        }\n        // create order\n        const orderEntity = creator.create(order, prepareData());\n        resolve(orderEntity);\n      },\n    );\n  });\n\n  const clearErrors = useCallback(() => {\n    setErrors({});\n  }, []);\n\n  return {\n    errors,\n    markPrice,\n    symbolsInfo,\n    validate,\n    clearErrors,\n  };\n};\n","import { ReactNode, useEffect, useState } from \"react\";\nimport { API } from \"@orderly.network/types\";\nimport { useLocalStorage } from \"./useLocalStorage\";\nimport { useQuery } from \"./useQuery\";\n\nexport type RestrictedInfoReturns = ReturnType<typeof useRestrictedInfo>;\n\nexport interface RestrictedInfoOptions {\n  enableDefault?: boolean;\n  customRestrictedIps?: string[];\n  customRestrictedRegions?: string[];\n  customUnblockRegions?: string[];\n  content?:\n    | ReactNode\n    | ((data: { ip: string; brokerName: string }) => ReactNode);\n}\n\nconst defaultRestrictedIps: string[] = [];\nconst defaultRestrictedRegions: string[] = [];\n/** default can unblock regions */\nconst defaultUnblockRegions: string[] = [];\n\nexport const useRestrictedInfo = (options?: RestrictedInfoOptions) => {\n  const {\n    enableDefault = false,\n    customRestrictedIps = defaultRestrictedIps,\n    customRestrictedRegions = defaultRestrictedRegions,\n    customUnblockRegions = defaultUnblockRegions,\n    content,\n  } = options || {};\n  const [ip, setIp] = useState<string>(\"\");\n  const [allInvalidAreas, setAllInvalidAreas] = useState<string[]>([]);\n  const [restrictedOpen, setRestrictedOpen] = useState<boolean>(false);\n  const [canUnblock, setCanUnblock] = useState<boolean>(false);\n\n  const [accessRestricted, setAccessRestricted] = useLocalStorage<\n    boolean | undefined\n  >(\"orderly_access_restricted\", undefined);\n\n  const { data: ipInfo } = useQuery<API.IpInfo>(\"/v1/ip_info\", {\n    revalidateOnFocus: false,\n  });\n\n  const { data: restrictedAreas } = useQuery<API.RestrictedAreas>(\n    \"/v1/restricted_areas\",\n    {\n      revalidateOnFocus: false,\n    },\n  );\n\n  useEffect(() => {\n    if (!restrictedAreas || !ipInfo) {\n      return;\n    }\n\n    try {\n      const { invalid_web_country, invalid_web_city } = restrictedAreas;\n\n      const invalidCountries = invalid_web_country\n        ?.toLowerCase()\n        .replace(/\\s+/g, \"\")\n        .split(\",\");\n\n      const invalidCities = invalid_web_city\n        ?.toLowerCase()\n        .replace(/\\s+/g, \"\")\n        .split(\",\");\n\n      const formattedCustomRegions = customRestrictedRegions?.map((item) =>\n        formatRegion(item),\n      );\n\n      const combinedInvalidRegions = [\n        ...formattedCustomRegions,\n        ...(enableDefault ? [...invalidCountries, ...invalidCities] : []),\n      ].filter((item) => !!item);\n\n      const allInvalidAreas = [\n        enableDefault ? invalid_web_country : \"\",\n        enableDefault ? invalid_web_city : \"\",\n        customRestrictedRegions?.join(\", \"),\n      ].filter((item) => !!item);\n\n      const { city, region, ip } = ipInfo;\n\n      const formattedCity = formatRegion(city);\n      const formattedRegion = formatRegion(region);\n\n      const isRestricted =\n        (formattedCity && combinedInvalidRegions.includes(formattedCity)) ||\n        (formattedRegion && combinedInvalidRegions.includes(formattedRegion)) ||\n        (ip && customRestrictedIps.includes(ip));\n\n      let canUnblock = false;\n\n      if (isRestricted) {\n        for (const item of customUnblockRegions) {\n          if (formatRegion(item) === formatRegion(region)) {\n            canUnblock = true;\n          }\n        }\n      }\n\n      const restrictedOpen = canUnblock\n        ? isRestricted && accessRestricted !== false\n        : isRestricted;\n\n      setIp(ip);\n      setAllInvalidAreas(allInvalidAreas);\n      setRestrictedOpen(!!restrictedOpen);\n      setCanUnblock(canUnblock);\n    } catch (error) {\n      console.error(\"useRestrictedInfo error\", error);\n    }\n  }, [\n    ipInfo,\n    restrictedAreas,\n    accessRestricted,\n    enableDefault,\n    // it will lead to infinite re-render when these values change, so we don't need to watch these\n    // customRestrictedIps,\n    // customRestrictedRegions,\n    // customUnblockRegions,\n  ]);\n\n  return {\n    ip,\n    invalidRegions: allInvalidAreas,\n    restrictedOpen,\n    content,\n    canUnblock,\n    accessRestricted,\n    setAccessRestricted,\n  };\n};\n\nfunction formatRegion(region: string) {\n  return region?.replace(/\\s+/g, \"\").toLowerCase();\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n  API,\n  MarginMode,\n  OrderlyOrder,\n  OrderSide,\n  OrderType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../../orderly/useMarkPricesStream\";\nimport { useSymbolsInfo } from \"../../orderly/useSymbolsInfo\";\nimport { useOrderlyContext } from \"../../orderlyContext\";\nimport { useSubAccountMutation } from \"../../subAccount\";\nimport { calculate } from \"../../utils/orderEntryHelper\";\nimport { OrderValidationResult } from \"../useOrderEntry\";\nimport { appendOrderMetadata, getOrderCreator } from \"../useOrderEntry/helper\";\n\ntype PositionCloseOptions = {\n  position: API.PositionExt;\n  order: {\n    type: OrderType;\n    quantity: string;\n    price: string;\n  };\n};\n\nexport const usePositionClose = (options: PositionCloseOptions) => {\n  const { position, order: initialOrder } = options;\n  const { type, quantity, price } = initialOrder;\n  const symbol = position.symbol;\n\n  const [errors, setErrors] = useState<OrderValidationResult | null>(null);\n\n  const symbolsInfo = useSymbolsInfo();\n  const { data: markPrices } = useMarkPricesStream();\n\n  const markPricesRef = useRef(markPrices);\n\n  const { orderMetadata } = useOrderlyContext();\n\n  useEffect(() => {\n    markPricesRef.current = markPrices;\n  }, [markPrices]);\n\n  const [doCreateOrder, { isMutating }] = useSubAccountMutation(\n    \"/v1/order\",\n    \"POST\",\n    {\n      accountId: position.account_id,\n    },\n  );\n\n  const side = position.position_qty > 0 ? OrderSide.SELL : OrderSide.BUY;\n\n  const closeOrderData = useMemo(() => {\n    const data: Partial<OrderlyOrder> = {\n      order_quantity: quantity,\n      symbol,\n      order_type: type,\n      side,\n      reduce_only: true,\n      // Use position's margin_mode or default to CROSS for backward compatibility\n      margin_mode: position.margin_mode || MarginMode.CROSS,\n    };\n\n    if (type === OrderType.LIMIT) {\n      data.order_price = price;\n    }\n\n    return data;\n  }, [symbol, price, type, quantity, position.margin_mode]);\n\n  const maxQty = useMemo(() => {\n    if (!position) {\n      return 0;\n    }\n\n    /**\n     * Reduce-only mode handling:\n     * For long positions (positionQty > 0):\n     * - Buy orders return 0 (cannot increase long position)\n     * - Sell orders return absolute position quantity (can close long position)\n     * For short positions (positionQty < 0):\n     * - Buy orders return absolute position quantity (can close short position)\n     * - Sell orders return 0 (cannot increase short position)\n     */\n    const positionQty = position.position_qty;\n    if (positionQty > 0) {\n      if (side === OrderSide.BUY) {\n        return 0;\n      } else {\n        return Math.abs(positionQty);\n      }\n    }\n\n    if (positionQty < 0) {\n      if (side === OrderSide.BUY) {\n        return Math.abs(positionQty);\n      } else {\n        return 0;\n      }\n    }\n\n    return 0;\n  }, [position, side]);\n\n  /**\n   * validate order\n   */\n  const validate = useCallback(\n    async (data: Partial<OrderlyOrder>) => {\n      const creator = getOrderCreator(data);\n      const errors = await creator.validate(data, {\n        symbol: symbolsInfo[symbol](),\n        maxQty,\n        // use ref to avoid re-render when markPrices change\n        markPrice: markPricesRef.current[symbol],\n      });\n      return errors;\n    },\n    [maxQty, symbol, symbolsInfo],\n  );\n\n  useEffect(() => {\n    validate(closeOrderData).then((errors) => {\n      setErrors(errors);\n    });\n  }, [validate, closeOrderData]);\n\n  const submit = useCallback(async () => {\n    const errors = await validate(closeOrderData);\n\n    if (Object.keys(errors).length > 0) {\n      throw errors;\n    }\n\n    const body = appendOrderMetadata(closeOrderData, orderMetadata);\n\n    return doCreateOrder(body)\n      .then((res) => {\n        if (res.success) {\n          return res;\n        }\n\n        throw res;\n      })\n      .catch((err) => {\n        throw err;\n      });\n  }, [validate, doCreateOrder, closeOrderData, orderMetadata]);\n\n  return {\n    submit,\n    isMutating,\n    side,\n    closeOrderData,\n    errors,\n    calculate,\n  };\n};\n","export const ERROR_MSG_CODES = {\n  SL_PRICE_WARNING: 10001, // sl price warning\n  SL_PRICE_ERROR: 10002, // sl price error\n};\n","import { useMemo, useRef } from \"react\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderValidationResult } from \"../useOrderEntry\";\nimport { ERROR_MSG_CODES } from \"./errorMsgCodes\";\n\ntype TpslPriceParams = {\n  /// default is 0.01\n  warning_threshold?: number;\n  slPrice?: string;\n  liqPrice: number | null;\n  side?: OrderSide;\n  /**\n   * Mark price for the symbol. When set with `side`, liq values that `useGetEstLiqPrice` would\n   * hide (invalid vs mark — e.g. long est. liq above mark) are ignored here too so SL checks do\n   * not run against a number the UI does not show as “Est. liq. price”.\n   */\n  markPrice?: number | null;\n  /** Current position qty (signed: positive=Long, negative=Short). If missing, treated as is_reducing=true, skip liq check. */\n  currentPosition?: number;\n  /** Order quantity (non-negative, sign derived from side). If missing or 0, treated as is_reducing=true, skip liq check. */\n  orderQuantity?: number;\n};\n\n// deep compare function\nconst isEqual = (\n  a: OrderValidationResult | null,\n  b: OrderValidationResult | null,\n): boolean => {\n  if (a === b) return true;\n  if (a === null || b === null) return false;\n  const aItem = a.sl_trigger_price;\n  const bItem = b.sl_trigger_price;\n  if (aItem === bItem) return true;\n  if (aItem === undefined || bItem === undefined) return false;\n  return aItem.type === bItem.type && aItem.message === bItem.message;\n};\n\n/**\n * Calculate the distance ratio between stop loss price and liquidation price\n * @param slPriceDecimal Stop loss price (Decimal)\n * @param liqPriceDecimal Liquidation price (Decimal)\n * @param side Order side\n * @returns Distance ratio: Long is (sl - liq) / liq, Short is (liq - sl) / liq\n */\nfunction calculateDistanceRatio(\n  slPriceDecimal: Decimal,\n  liqPriceDecimal: Decimal,\n  side: OrderSide,\n): Decimal {\n  return side === OrderSide.BUY\n    ? slPriceDecimal.minus(liqPriceDecimal).div(liqPriceDecimal)\n    : liqPriceDecimal.minus(slPriceDecimal).div(liqPriceDecimal);\n}\n\n/**\n * Check and return the corresponding validation result based on distance ratio\n * @param distance_ratio Distance ratio\n * @param warning_threshold Warning threshold\n * @returns Validation result: null (no warning), warning, or error\n */\nfunction checkDistanceAndReturnResult(\n  distance_ratio: Decimal,\n  warning_threshold: number,\n): OrderValidationResult | null {\n  // distance_ratio > warning_threshold → no warning\n  if (distance_ratio.gt(warning_threshold)) {\n    return null;\n  }\n\n  // 0 < distance_ratio <= warning_threshold → warning\n  if (distance_ratio.gt(0) && distance_ratio.lte(warning_threshold)) {\n    return {\n      sl_trigger_price: {\n        type: ERROR_MSG_CODES.SL_PRICE_WARNING,\n        message:\n          \"Stop losses set near the liq. price may not trigger. Note: the liq. price can change with position notional.\",\n      },\n    };\n  }\n\n  // distance_ratio <= 0 → error (invalid, blocks execution)\n  return {\n    sl_trigger_price: {\n      type: ERROR_MSG_CODES.SL_PRICE_ERROR,\n      message: \"Stop loss crosses the liq. price. Please adjust your SL.\",\n    },\n  };\n}\n\nexport const useTpslPriceChecker = (\n  params: TpslPriceParams,\n): OrderValidationResult | null => {\n  const {\n    warning_threshold = 0.01,\n    slPrice,\n    liqPrice,\n    side,\n    markPrice,\n    currentPosition,\n    orderQuantity,\n  } = params;\n\n  // use useRef to store the previous result\n  const prevResultRef = useRef<OrderValidationResult | null>(null);\n\n  /**\n   * Basic validation logic: Check the distance between stop loss price and liquidation price based only on order side\n   * Applicable when position information or order quantity cannot be obtained\n   * @param slPriceDecimal Stop loss price (Decimal)\n   * @param liqPriceDecimal Liquidation price (Decimal)\n   * @returns Validation result: null (passed), warning, or error\n   */\n  function validateSlPriceBasic(\n    slPriceDecimal: Decimal,\n    liqPriceDecimal: Decimal,\n  ): OrderValidationResult | null {\n    if (!side) return null;\n\n    const distance_ratio = calculateDistanceRatio(\n      slPriceDecimal,\n      liqPriceDecimal,\n      side,\n    );\n\n    return checkDistanceAndReturnResult(distance_ratio, warning_threshold);\n  }\n\n  /**\n   * Enhanced validation logic: Consider current position and order quantity to determine if it's a reducing position operation\n   * Skip liquidation price check for reducing position operations, only perform strict validation for increasing position or reverse operations\n   * @param slPriceDecimal Stop loss price (Decimal)\n   * @param liqPriceDecimal Liquidation price (Decimal)\n   * @param currentPosition Current position quantity (signed: positive=Long, negative=Short)\n   * @param orderQuantity Order quantity (non-negative, sign derived from order side)\n   * @returns Validation result: null (passed or check skipped), warning, or error\n   */\n  function validateSlPriceWithPosition(\n    slPriceDecimal: Decimal,\n    liqPriceDecimal: Decimal,\n    currentPosition: number,\n    orderQuantity: number,\n  ): OrderValidationResult | null {\n    if (!side) return null;\n\n    // Cannot compute is_reducing: treat as is_reducing=true, skip liq check and warning\n    const canComputeIsReducing =\n      currentPosition !== undefined &&\n      orderQuantity !== undefined &&\n      orderQuantity > 0;\n    if (!canComputeIsReducing) {\n      return null;\n    }\n\n    // orderQty: signed (Buy=positive, Sell=negative)\n    const orderQty =\n      side === OrderSide.SELL\n        ? -((orderQuantity as number) || 0)\n        : (orderQuantity as number) || 0;\n    const cur = (currentPosition as number) ?? 0;\n    const net = new Decimal(cur).plus(orderQty).toNumber();\n    const is_reducing = new Decimal(Math.abs(net)).lt(Math.abs(cur));\n\n    const posSide = currentPosition > 0 ? OrderSide.BUY : OrderSide.SELL;\n    const isSameSide = posSide === side;\n\n    // is_reducing: skip liq check and warning\n    if (is_reducing && isSameSide) {\n      return null;\n    }\n\n    // Liquidation check: only when !is_reducing\n    // net > 0 (Long): sl <= liq → Error\n    // net < 0 (Short): sl >= liq → Error\n    if (net > 0 && slPriceDecimal.lte(liqPriceDecimal)) {\n      return {\n        sl_trigger_price: {\n          type: ERROR_MSG_CODES.SL_PRICE_ERROR,\n          message: \"Stop loss crosses the liq. price. Please adjust your SL.\",\n        },\n      };\n    }\n    if (net < 0 && slPriceDecimal.gte(liqPriceDecimal)) {\n      return {\n        sl_trigger_price: {\n          type: ERROR_MSG_CODES.SL_PRICE_ERROR,\n          message: \"Stop loss crosses the liq. price. Please adjust your SL.\",\n        },\n      };\n    }\n\n    // Warning: distance_ratio near liq (only when we did liq check and no error)\n    const distance_ratio = calculateDistanceRatio(\n      slPriceDecimal,\n      liqPriceDecimal,\n      side,\n    );\n\n    return checkDistanceAndReturnResult(distance_ratio, warning_threshold);\n  }\n\n  // calculate current result\n  const currentResult = useMemo(() => {\n    if (\n      slPrice === undefined ||\n      liqPrice === undefined ||\n      side === undefined ||\n      liqPrice === null\n    ) {\n      return null;\n    }\n\n    // Align with `useGetEstLiqPrice`: do not validate SL against liq the UI hides as invalid.\n    if (markPrice != null && Number.isFinite(markPrice) && markPrice > 0) {\n      if (side === OrderSide.BUY && liqPrice > markPrice) {\n        return null;\n      }\n      if (side === OrderSide.SELL && liqPrice < markPrice) {\n        return null;\n      }\n    }\n    // Reject non-positive / non-finite liq so we never compare SL against a bogus anchor.\n    if (\n      typeof liqPrice === \"number\" &&\n      (!Number.isFinite(liqPrice) || liqPrice <= 0)\n    ) {\n      return null;\n    }\n\n    // Convert prices to Decimal for precise calculation\n    let slPriceDecimal: Decimal;\n    let liqPriceDecimal: Decimal;\n\n    try {\n      slPriceDecimal = new Decimal(slPrice);\n      liqPriceDecimal = new Decimal(liqPrice);\n    } catch (e) {\n      return null;\n    }\n\n    // Validate that both prices are valid and not zero\n    const slPriceNum = slPriceDecimal.toNumber();\n    const liqPriceNum = liqPriceDecimal.toNumber();\n\n    if (\n      Number.isNaN(slPriceNum) ||\n      Number.isNaN(liqPriceNum) ||\n      !Number.isFinite(slPriceNum) ||\n      !Number.isFinite(liqPriceNum) ||\n      liqPriceDecimal.isZero() ||\n      slPriceDecimal.isZero()\n    ) {\n      return null;\n    }\n\n    if (\n      currentPosition !== undefined &&\n      orderQuantity !== undefined &&\n      orderQuantity > 0\n    ) {\n      // Use enhanced validation when position and order quantity are available\n      return validateSlPriceWithPosition(\n        slPriceDecimal,\n        liqPriceDecimal,\n        currentPosition,\n        orderQuantity,\n      );\n    }\n\n    // Fallback to basic validation when position info is unavailable\n    return validateSlPriceBasic(slPriceDecimal, liqPriceDecimal);\n  }, [\n    slPrice,\n    liqPrice,\n    side,\n    markPrice,\n    warning_threshold,\n    currentPosition,\n    orderQuantity,\n  ]);\n\n  // if the content is the same, return the previous reference; otherwise, update and return the new reference\n  if (isEqual(prevResultRef.current, currentResult)) {\n    return prevResultRef.current;\n  }\n\n  prevResultRef.current = currentResult;\n  return currentResult;\n};\n","import { useMemo } from \"react\";\nimport { MarginMode } from \"@orderly.network/types\";\nimport { usePositionStream } from \"../../orderly/orderlyHooks\";\n\nconst useEstLiqPriceBySymbol = (\n  symbol: string,\n  marginMode: MarginMode,\n): number | undefined => {\n  const [data] = usePositionStream(symbol);\n\n  const position = data?.rows?.find(\n    (row) => row.symbol === symbol && row.margin_mode === marginMode,\n  );\n\n  return useMemo(() => {\n    return position?.est_liq_price ?? undefined;\n  }, [position]);\n};\n\nexport { useEstLiqPriceBySymbol };\n","import { useMemo } from \"react\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { useMarkPrice } from \"../../orderly/useMarkPrice\";\n\nconst useGetEstLiqPrice = (props: {\n  estLiqPrice: number | null;\n  symbol: string;\n  side: OrderSide;\n}) => {\n  const { estLiqPrice, symbol, side } = props;\n\n  const { data: markPrice } = useMarkPrice(symbol);\n\n  return useMemo(() => {\n    if (!estLiqPrice || !markPrice) {\n      return null;\n    }\n\n    // long: if est. liq price is greater than mark price, don't display est. liq price\n    // short: if est. liq price is less than mark price, don't display est. liq price\n    if (side === OrderSide.BUY && estLiqPrice > markPrice) {\n      return null;\n    }\n    if (side === OrderSide.SELL && estLiqPrice < markPrice) {\n      return null;\n    }\n\n    return estLiqPrice;\n  }, [estLiqPrice, markPrice, side]);\n};\n\nexport { useGetEstLiqPrice };\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useQuery } from \"../useQuery\";\nimport { FlagKeys } from \"./flagKeys\";\n\n/**\n * Feature flag item from API response\n */\nexport interface FeatureFlagItem {\n  key: string;\n  description: string;\n}\n\n/**\n * Return type for useFeatureFlag hook\n */\nexport interface UseFeatureFlagReturn {\n  enabled: boolean;\n  data: FeatureFlagItem | undefined;\n}\n\n/**\n * Hook to check if a feature flag is enabled\n *\n * Logic:\n * 1. Hidden by default - returns false when loading\n * 2. In public but not in private, hidden - returns { enabled: false, data: undefined }\n * 3. In both public and private, shown - returns { enabled: true, data: FeatureFlagItem }\n * 4. Not in public, shown - returns { enabled: true, data: undefined }\n *\n * @param key - The feature flag key to check\n * @returns { enabled: boolean, data: FeatureFlagItem | undefined }\n */\nexport const useFeatureFlag = (key: FlagKeys): UseFeatureFlagReturn => {\n  // Always query public API\n  const { data: publicFlags, isLoading: publicLoading } = useQuery<\n    FeatureFlagItem[]\n  >(\"/v1/public/feature_flags\", {});\n\n  // Find the key in public flags\n  const publicFlag = useMemo(() => {\n    if (!publicFlags || publicLoading) {\n      return undefined;\n    }\n    return publicFlags.find((flag) => flag.key === key);\n  }, [publicFlags, publicLoading, key]);\n\n  // Only query private API if key is found in public API\n  const shouldQueryPrivate = useMemo(() => {\n    return publicFlag !== undefined;\n  }, [publicFlag]);\n\n  const { data: privateFlags, isLoading: privateLoading } = usePrivateQuery<\n    FeatureFlagItem[]\n  >(shouldQueryPrivate ? \"/v1/feature_flags\" : null, {});\n\n  // Find the key in private flags\n  const privateFlag = useMemo(() => {\n    if (!shouldQueryPrivate || !privateFlags || privateLoading) {\n      return undefined;\n    }\n    return privateFlags.find((flag) => flag.key === key);\n  }, [shouldQueryPrivate, privateFlags, privateLoading, key]);\n\n  // Return value based on the logic\n  return useMemo(() => {\n    // 1. Hidden by default - return false if still loading\n    if (publicLoading || (shouldQueryPrivate && privateLoading)) {\n      return {\n        enabled: false,\n        data: undefined,\n      };\n    }\n\n    // 4. Not in public, shown\n    if (publicFlag === undefined) {\n      return {\n        enabled: true,\n        data: undefined,\n      };\n    }\n\n    // 2. In public but not in private, hidden\n    if (privateFlag === undefined) {\n      return {\n        enabled: false,\n        data: undefined,\n      };\n    }\n\n    // 3. In both public and private, shown\n    return {\n      enabled: true,\n      data: privateFlag,\n    };\n  }, [\n    publicFlag,\n    privateFlag,\n    publicLoading,\n    shouldQueryPrivate,\n    privateLoading,\n    key,\n  ]);\n};\n","/**\n * Feature flag keys enum\n */\nexport enum FlagKeys {\n  IsolatedMargin = \"isolated-margin\",\n}\n"]}