@orderly.network/hooks 2.0.3 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/useQuery.ts","../src/utils/fetcher.ts","../src/useConfig.ts","../src/orderlyContext.ts","../src/useLazyQuery.ts","../src/useMutation.ts","../src/useAccountInstance.ts","../src/usePrivateQuery.ts","../src/middleware/signatureMiddleware.ts","../src/useAccount.ts","../src/useEventEmitter.ts","../src/usePrivateInfiniteQuery.ts","../src/useBoolean.ts","../src/usePreloadData.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/useNetworkInfo.ts","../src/index.ts","../src/useWS.ts","../src/useKeyStore.ts","../src/useSimpleDI.ts","../src/statusProvider.tsx","../src/useWsStatus.ts","../src/configProvider.tsx","../src/dataProvider.tsx","../src/orderly/usePrivateDataObserver.ts","../src/utils/swr.ts","../src/services/orderMerge/algoOrderMergeHandler.ts","../src/services/orderMerge/baseMergeHandler.ts","../src/utils/ws.ts","../src/services/orderMerge/regularOrderMergeHandler.ts","../src/orderly/appStore.ts","../src/useCalculatorService.ts","../src/orderly/calculator/baseCalculator.ts","../src/orderly/useMarkPrice/useMarkPriceStore.ts","../src/orderly/calculator/markPrice.ts","../src/orderly/calculator/calculatorContext.ts","../src/orderly/calculator/calculatorService.ts","../src/orderly/calculator/shardedScheduler.ts","../src/orderly/calculator/positions.ts","../src/orderly/usePositionStream/usePosition.store.ts","../src/next/apiStatus/apiStatus.store.ts","../src/orderly/calculator/portfolio.ts","../src/utils/parseHolding.ts","../src/utils/createGetter.ts","../src/orderly/useIndexPrice/useIndexPriceStore.ts","../src/orderly/calculator/indexPrice.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useIndexPrice.ts","../src/orderly/useOpenInterest.ts","../src/orderly/useFutures.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/orderbook.service.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useMarket.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkets.ts","../src/orderly/useMarkPricesStream.ts","../src/orderly/useLeverage.ts","../src/orderly/useFundingRate.ts","../src/orderly/useFundingRateHistory.ts","../src/orderly/usePositionStream/usePositionStream.ts","../src/orderly/usePositionStream/utils.ts","../src/orderly/useOrderStream/useOrderStream.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useCollateral.ts","../src/orderly/useMaxQty.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useSettleSubscription.ts","../src/orderly/useSymbolPriceRange.ts","../src/orderly/useTakeProfitAndStopLoss/index.ts","../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts","../src/orderly/useTakeProfitAndStopLoss/tp_slUtils.ts","../src/services/orderCreator/factory.ts","../src/services/orderCreator/baseCreator.ts","../src/utils/createOrder.ts","../src/services/orderCreator/marketOrderCreator.ts","../src/services/orderCreator/limitOrderCreator.ts","../src/services/orderCreator/stopLimitOrderCreator.ts","../src/services/orderCreator/generalCreator.ts","../src/services/orderCreator/stopMarketOrderCreator.ts","../src/services/orderCreator/postOnlyCreator.ts","../src/services/orderCreator/fokCreator.ts","../src/services/orderCreator/iocCreator.ts","../src/services/orderCreator/tpslOrderCreator.ts","../src/services/orderCreator/baseAlgoCreator.ts","../src/services/orderCreator/tpslPositionOrderCreator.ts","../src/services/orderCreator/baseBracketOrderCreator.ts","../src/services/orderCreator/bracketLimitOrderCreator.ts","../src/services/orderCreator/bracketMarketOrderCreator.ts","../src/services/orderCreator/bboOrderCreator.ts","../src/orderly/useSymbolLeverage.ts","../src/orderly/statistics/useAssetHistory.ts","../src/orderly/statistics/useStatisticsDaily.ts","../src/orderly/statistics/useFundingFeeHistory.ts","../src/orderly/statistics/useDistributionHistory.ts","../src/orderly/useMaintenanceStatus.ts","../src/orderly/internal/useWSObserver.ts","../src/orderly/usePublicDataObserver.ts","../src/orderly/useMarket/market.store.ts","../src/dev/proxyConfigStore.ts","../src/extendedConfigStore.ts","../src/trackerProvider.tsx","../src/walletConnectorContext.tsx","../src/deprecated/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/useMediaQuery.ts","../src/usePoster.ts","../src/services/painter/basePaint.ts","../src/services/painter/backgroundPaint.ts","../src/services/painter/dataPaint.ts","../src/services/painter/qrPaint.ts","../src/services/painter/painter.ts","../src/services/painter/layout.config.ts","../src/utils/index.ts","../src/referral/useCommission.ts","../src/referral/swr.ts","../src/referral/useDistribution.ts","../src/referral/useRefereeHistory.ts","../src/referral/useDaily.ts","../src/referral/format.ts","../src/referral/useReferralRebateSummary.ts","../src/referral/useRefereeInfo.ts","../src/referral/useRefereeRebateSummary.ts","../src/referral/useCheckReferralCode.ts","../src/referral/useGetReferralCode.ts","../src/referral/useReferralInfo.tsx","../src/trading-rewards/useEpochInfo.ts","../src/trading-rewards/types.ts","../src/trading-rewards/useAllBrokers.ts","../src/trading-rewards/useCurEpochEstimate.ts","../src/trading-rewards/useAccountRewardHistory.ts","../src/trading-rewards/useGetClaimed.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/useWalletRewardsHistory.ts","../src/apiKeys/useApiKeyManager.ts","../src/next/useOrderEntry/useOrderEntry.internal.ts","../src/next/useOrderEntry/helper.ts","../src/next/useOrderEntry/useOrderStore.ts","../src/next/useOrderEntry/useOrderEntry.ts","../src/next/useOrderEntry/orderEntry.store.ts","../src/next/useOrderEntry/useOrderEntity.ts","../src/useRestrictedAreas.ts"],"names":["init","options","useSWRMutation","useContext","account","fetcher","data","useSWR","SimpleDI","getTimestamp","useConstant","AccountStatusEnum","get","useCallback","useState","useEffect","default","Account","getGlobalObject","createContext","useRef","WsNetworkStatus","useMemo","mutate","lensIndex","over","i","create","immer","positions","zero","unsettlementPnL","calculatorService","Decimal","useSWRSubscription","sortedData","symbol","depth","useAccountInfo","tabs","favorites","type","MarketsType","markets","get8hFunding","get24hChange","est_funding_rate","AlgoOrderRootType","OrderStatus","pathOr","AlgoOrderType","order","SDKError","includes","orders","OrderSide","state","prop","networkId","item","usdc","EnumTrackerKeys","isTestnet","ARBITRUM_MAINNET_CHAINID","ARBITRUM_TESTNET_CHAINID","balance","allowance","quantity","OrderType","values","quote_dp","base_dp","orderUntil","pick","maxPrice","minPrice","scopePrice","TriggerPriceType","oldOrder","omit","getOrderCreator","errors","useDebouncedCallback","AssetHistoryStatusEnum","startDate","endDate","brokerName","holding","jsx","identify","getPrecisionByNumber","getPriceAndQty","symbolOrOrder","unstable_serialize","query","ref","generateKeyFun","path","max","min","TWType","ENVType","DistributionId","compose","head","orderUtils","produce","symbolInfo","useOrderEntry","markPrice","initialOrderState","useOrderStore","allInvalidAreas","city","region","ip"],"mappings":"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","sourcesContent":["\ndeclare 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\"] = \"2.0.3\";\n};\n\nexport default \"2.0.3\";\n","import useSWR, { SWRResponse } from \"swr\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useConfig } from \"./useConfig\";\n\n/**\n * useQuery\n * @description for public api\n * @param query\n * @param options\n */\nexport const useQuery = <T>(\n query: Parameters<typeof useSWR>[\"0\"],\n options?: useQueryOptions<T>\n): SWRResponse<T> => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n const { formatter, ...swrOptions } = options || {};\n\n if (typeof apiBaseUrl === \"undefined\") {\n throw new Error(\"please add OrderlyConfigProvider to your app\");\n }\n\n // @ts-ignore\n return useSWR<T>(\n query,\n (url, init) =>\n fetcher(url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`, init, {\n formatter,\n }),\n swrOptions\n );\n};\n","import { get } from \"@orderly.network/net\";\nimport { type SWRConfiguration } from \"swr\";\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\n// export const onErrorRetry:SWRConfiguration['onErrorRetry'] = (error, key, config, revalidate, { retryCount })=>{\n// // if(error.status === 5)\n// if(retryCount >= 5) return ;\n\n// }\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { ConfigStore, type ConfigKey } from \"@orderly.network/core\";\n\nexport function useConfig(): ConfigStore;\nexport function useConfig<T = string>(key: ConfigKey, defaultValue?: T): T;\n\nexport function useConfig(key?: ConfigKey, defaultValue?: any) {\n const { configStore } = useContext(OrderlyContext);\n\n if (!configStore) {\n throw new Error(\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 { createContext } from \"react\";\n\nimport {\n type ConfigStore,\n type OrderlyKeyStore,\n type getWalletAdapterFunc,\n WalletAdapter\n} from \"@orderly.network/core\";\n\nimport { Chain, NetworkId } from \"@orderly.network/types\";\nimport { Chains } from \"./orderly/useChains\";\n\nexport type filteredChains = {\n mainnet?: Chain[];\n testnet?: Chain[];\n};\n\nexport type chainFilterFunc = (config: ConfigStore) => filteredChains;\n\nexport type chainFilter = filteredChains | chainFilterFunc;\n\nexport interface OrderlyConfigContextState {\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n // getWalletAdapter: getWalletAdapterFunc;\n walletAdapters: WalletAdapter[];\n\n networkId: NetworkId;\n\n /**\n * @hidden\n */\n onlyTestnet?: boolean;\n // extraApis:ExtraAPIs\n filteredChains?: filteredChains | null;\n customChains?: Chains<undefined, undefined>;\n}\n\nexport const OrderlyContext = createContext<OrderlyConfigContextState>({\n // configStore: new MemoryConfigStore(),\n} as OrderlyConfigContextState);\n\nexport const OrderlyProvider = OrderlyContext.Provider;\n","import useSWR from \"swr\";\nimport { fetcher } from \"./utils/fetcher\";\nimport useSWRMutation, {\n type SWRMutationConfiguration,\n SWRMutationResponse,\n} from \"swr/mutation\";\nimport { useConfig } from \"./useConfig\";\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<typeof useSWR>[\"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 Error(\"useQuery is only for public api\");\n // }\n\n if (typeof apiBaseUrl === \"undefined\") {\n throw new Error(\"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(options.arg)\n .map(\n ([key, value]) => `${key}=${encodeURIComponent(value as string)}`\n )\n .join(\"&\");\n url = `${url}?${queryString}`;\n }\n return fetcher(url, init, {\n formatter,\n });\n },\n swrOptions\n );\n};\n","import useSWRMutation, {\n TriggerWithOptionsArgs,\n type SWRMutationConfiguration,\n TriggerWithoutArgs,\n} from \"swr/mutation\";\nimport { mutate } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useConfig } from \"./useConfig\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 let 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 if (typeof params === \"object\" && Object.keys(params).length) {\n let 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 [\n mutation,\n {\n data,\n error,\n reset,\n isMutating,\n },\n ] as const;\n};\n","import useConstant from \"use-constant\";\nimport { Account, SimpleDI } from \"@orderly.network/core\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport const useAccountInstance = (): Account => {\n const { configStore, keyStore, walletAdapters } = useContext(OrderlyContext);\n\n if (!configStore)\n throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n\n if (!keyStore) {\n throw new Error(\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 useSWR, { SWRResponse } from \"swr\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\n/**\n * usePrivateQuery\n * @description for private api\n * @param query\n * @param options\n */\nexport const usePrivateQuery = <T>(\n query: string,\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 // @ts-ignore\n return useSWR<T>(\n () =>\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: (err) => {},\n }\n );\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { SimpleDI, Account, MessageFactor } from \"@orderly.network/core\";\nimport { useConfig } from \"../useConfig\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n let url = Array.isArray(args) ? args[0] : args;\n\n let account = SimpleDI.get<Account>(\"account\");\n let 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 { useCallback, useContext, useEffect, useState } from \"react\";\nimport { AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useEventEmitter } from './useEventEmitter'\nimport { EnumTrackerKeys, AccountStatusEnum } from \"@orderly.network/types\";\n\nexport const useAccount = () => {\n const {\n configStore,\n keyStore,\n // onWalletConnect,\n // onWalletDisconnect,\n // onSetChain,\n } = useContext(OrderlyContext);\n\n if (!configStore)\n throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n\n if (!keyStore) {\n throw new Error(\n \"keyStore is not defined, please use OrderlyProvider and provide keyStore\"\n );\n }\n\n const account = useAccountInstance();\n\n const [state, setState] = useState<AccountState>(account.stateValue);\n const ee = useEventEmitter()\n\n\n const statusChangeHandler = (nextState: AccountState) => {\n if (AccountStatusEnum.Connected === nextState.status) {\n ee.emit(EnumTrackerKeys.WALLET_CONNECT, {\n ...nextState\n })\n }\n setState(() => nextState);\n };\n\n useEffect(() => {\n account.on(\"change:status\", statusChangeHandler);\n\n return () => {\n account.off(\"change:status\", statusChangeHandler);\n };\n }, []);\n\n const createOrderlyKey = useCallback(\n async (remember: boolean) => {\n ee.emit(EnumTrackerKeys.SIGNIN_SUCCESS,{\n ...state,\n ...account\n });\n return account.createOrderlyKey(remember ? 365 : 30);\n },\n [account,state]\n );\n\n const createAccount = useCallback(async () => {\n return account.createAccount();\n }, [account]);\n\n return {\n account,\n state,\n // info: {},\n // login,\n createOrderlyKey,\n createAccount,\n // disconnect,\n // connect,\n // setChain,\n // settlement,\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 useSWRInfinite, {\n type SWRInfiniteKeyLoader,\n type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { get } from \"@orderly.network/net\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nexport const usePrivateInfiniteQuery = <T>(\n getKey: SWRInfiniteKeyLoader,\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 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 { 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","import { useEffect, useMemo, useState } from \"react\";\nimport { useConfig, useQuery, useSWR } from \".\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\n\nexport const usePreLoadData = () => {\n const [timestampOffsetInitialized, setTimestampOffsetInitialized] =\n useState(false);\n const { error: tokenError, data: tokenData } = useQuery(\n \"https://api-evm.orderly.org/v1/public/token\",\n {\n revalidateOnFocus: false,\n }\n );\n\n /// get service timestamp\n /// get local timestamp\n /// calculate delta offset = SD - LD\n /// save to getGlobalObject.__ORDERLY_timestamp_offset\n\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n const { data: systemInfo } = useSWR(\n \"/v1/public/system_info\",\n async (url: any, init: any) => {\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 sd = systemInfo.timestamp;\n const ld = Date.now();\n // @ts-ignore\n const diff = sd - ld;\n if (isNaN(diff)) {\n return;\n }\n (getGlobalObject() as any).__ORDERLY_timestamp_offset = diff;\n setTimestampOffsetInitialized(true);\n }\n }, [systemInfo, timestampOffsetInitialized]);\n\n const isDone = useMemo(() => {\n return !!tokenData && timestampOffsetInitialized;\n }, [timestampOffsetInitialized, tokenData]);\n\n return {\n error: tokenError,\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","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): [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 ? (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","import {\n Chain,\n useChains,\n} from \"./\";\nimport { NetworkId } from \"@orderly.network/types\";\n\nexport type CurrentChain = {\n id: number;\n info?: Chain;\n};\n\nexport const useNetworkInfo = (networkId: NetworkId) => {\n \n const [allChains, {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\n\n\n};\n","// import \"./utils/dev\";\nimport type { Immer } from \"immer\";\n\nexport { default as version } from \"./version\";\n\nexport { useQuery } from \"./useQuery\";\nexport { useLazyQuery } from \"./useLazyQuery\";\nexport { useMutation } from \"./useMutation\";\nexport { usePrivateQuery } from \"./usePrivateQuery\";\nexport { usePrivateInfiniteQuery } from \"./usePrivateInfiniteQuery\";\nexport { useBoolean } from \"./useBoolean\";\n\nexport { useAccount } from \"./useAccount\";\nexport { useAccountInstance } from \"./useAccountInstance\";\n\nexport { usePreLoadData } from \"./usePreloadData\";\n\nexport { useEventEmitter } from \"./useEventEmitter\";\n\nexport { useSessionStorage } from \"./useSessionStorage\";\nexport { useLocalStorage } from \"./useLocalStorage\";\nexport { useNetworkInfo } from \"./useNetworkInfo\";\n\nexport { parseJSON } from \"./utils/json\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\nexport { useKeyStore } from \"./useKeyStore\";\nexport { useSimpleDI } from \"./useSimpleDI\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./statusProvider\";\nexport { useWsStatus, WsNetworkStatus } from \"./useWsStatus\";\nexport type {\n ConfigProviderProps,\n ExclusiveConfigProviderProps,\n} from \"./configProvider\";\nexport { OrderlyConfigProvider } from \"./configProvider\";\nexport { OrderlyTrackerProvider } from \"./trackerProvider\";\nexport { ExtendedConfigStore } from \"./extendedConfigStore\";\n\nexport {\n WalletConnectorContext,\n type ConnectedChain,\n useWalletConnector,\n type WalletState,\n} from \"./walletConnectorContext\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nexport { useOrderEntry as useOrderEntry_deprecated } from \"./deprecated/useOrderEntry\";\nexport type {\n UseOrderEntryMetaState,\n OrderParams,\n} from \"./deprecated/useOrderEntry\";\n\nexport {\n default as useSWR,\n // SWRConfig,\n useSWRConfig,\n type SWRConfiguration,\n unstable_serialize,\n} from \"swr\";\n\nexport * from \"use-debounce\";\n\nexport { useMediaQuery } from \"./useMediaQuery\";\n\nexport { usePoster } from \"./usePoster\";\nexport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nexport type {\n PosterLayoutConfig,\n DrawOptions,\n} from \"./services/painter/basePaint\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nexport { cleanStringStyle } from \"./utils/orderEntryHelper\";\nexport { checkNotional } from \"./utils/createOrder\";\n\nexport * as utils from \"./utils\";\n\nexport type { WalletAdapter } from \"@orderly.network/core\";\n\nexport * from \"./referral\";\n\nexport * from \"./trading-rewards\";\n\nexport * from \"./apiKeys\";\n\n//--------- next hooks-----------\n// export { useOrderEntryNext } from \"./next/useOrderEntry/useOrderEntry\";\nexport * from \"./next/useOrderEntry\";\n\nexport {\n useRestrictedAreas,\n type RestrictedAreasReturns,\n type IRestrictedAreasParams,\n} from \"./useRestrictedAreas\";\n","import { useContext, useRef } from \"react\";\nimport { Account, AccountState, SimpleDI } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { getGlobalObject, getTimestamp } from \"@orderly.network/utils\";\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 (accountId: string) => {\n const signer = account.signer;\n const timestamp = getTimestamp();\n const result = await signer.signText(timestamp.toString());\n\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.stateValue.accountId\n ) {\n websocketClient.openPrivate(account.stateValue.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 nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n } else {\n websocketClient.closePrivate(1000, \"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 { useContext } from \"react\";\n\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 { PropsWithChildren, createContext } from \"react\";\nimport { useWsStatus, type WsNetworkStatus } from \"./useWsStatus\";\n\nexport interface StatusContextState {\n ws?: WsNetworkStatus;\n}\n\nexport const StatusContext = createContext({} as StatusContextState);\n\nexport const StatusProvider: React.FC<PropsWithChildren> = (props) => {\n const wsStatus = useWsStatus();\n\n return (\n <StatusContext.Provider value={{ ws: wsStatus }}>\n {props.children}\n </StatusContext.Provider>\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 console.log(\"status:change\", status);\n\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 () => ws.off(\"websocket:status\", () => {});\n }, []);\n\n return wsStatus;\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport React, { useLayoutEffect, useMemo } from \"react\";\nimport { OrderlyProvider } from \"./orderlyContext\";\nimport {\n ConfigStore,\n // MemoryConfigStore,\n OrderlyKeyStore,\n getWalletAdapterFunc,\n WalletAdapterOptions,\n LocalStorageStore,\n EtherAdapter,\n SimpleDI,\n Account,\n IContract,\n WalletAdapter,\n} from \"@orderly.network/core\";\n\nimport useConstant from \"use-constant\";\nimport { Chain, NetworkId } from \"@orderly.network/types\";\n// import { usePreLoadData } from \"./usePreloadData\";\nimport { DataCenterProvider } from \"./dataProvider\";\nimport { StatusProvider } from \"./statusProvider\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { ProxyConfigStore } from \"./dev/proxyConfigStore\";\nimport type { Chains } from \"./orderly/useChains\";\nimport { DefaultEVMWalletAdapter } from \"@orderly.network/default-evm-adapter\";\nimport { DefaultSolanaWalletAdapter } from \"@orderly.network/default-solana-adapter\";\nimport { EthersProvider } from \"@orderly.network/web3-provider-ethers\";\nimport { ExtendedConfigStore } from \"./extendedConfigStore\";\n// import { useParamsCheck } from \"./useParamsCheck\";\n\ntype filteredChains = {\n mainnet?: Chain[];\n testnet?: Chain[];\n};\n\ntype filterChainsFunc = (config: ConfigStore) => filteredChains;\n\nexport type BaseConfigProviderProps = {\n keyStore?: OrderlyKeyStore;\n contracts?: IContract;\n // getWalletAdapter?: getWalletAdapterFunc;\n walletAdapters?: WalletAdapter[];\n chainFilter?: filteredChains | filterChainsFunc;\n customChains?: Chains<undefined, undefined>;\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 // getWalletAdapter,\n walletAdapters,\n brokerId,\n brokerName,\n networkId,\n contracts,\n chainFilter,\n customChains,\n } = props;\n\n if (!brokerId && typeof configStore === \"undefined\") {\n console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n }\n\n // if (typeof walletAdapters === \"undefined\") {\n // console.error(\n // \"[OrderlyConfigProvider]: walletAdapters is required, please provide at least one wallet adapter, \" +\n // \"you can install the `@orderly.network/default-evm-adapter` or `@orderly.network/default-solana-adapter` package\"\n // );\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({ brokerId, brokerName, networkId })\n );\n }, [configStore, brokerId, brokerName, networkId]);\n\n const innerKeyStore = useMemo<OrderlyKeyStore>(() => {\n return keyStore || new LocalStorageStore(networkId);\n }, [networkId, keyStore]);\n\n // const innerGetWalletAdapter = useConstant<getWalletAdapterFunc>(() => {\n // return (\n // getWalletAdapter ||\n // ((options: WalletAdapterOptions) => new EtherAdapter(options))\n // );\n // });\n\n const innerWalletAdapters = useMemo<WalletAdapter[]>(() => {\n return (\n walletAdapters || [\n new DefaultEVMWalletAdapter(new EthersProvider()),\n new DefaultSolanaWalletAdapter(),\n ]\n );\n }, [walletAdapters]);\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\n return chainFilter;\n }, [props.chainFilter, innerConfigStore]);\n\n if (!account) {\n return null;\n }\n\n return (\n <OrderlyProvider\n value={{\n configStore: innerConfigStore,\n keyStore: innerKeyStore,\n // getWalletAdapter: innerGetWalletAdapter,\n networkId: innerConfigStore.get(\"networkId\") || networkId,\n filteredChains: filteredChains,\n walletAdapters: innerWalletAdapters,\n // apiBaseUrl,\n customChains,\n }}\n >\n <StatusProvider>\n <DataCenterProvider>{props.children}</DataCenterProvider>\n </StatusProvider>\n </OrderlyProvider>\n );\n};\n","import { PropsWithChildren, createContext, useContext, useRef } from \"react\";\nimport { usePrivateDataObserver } from \"./orderly/usePrivateDataObserver\";\nimport { usePreLoadData } from \"./usePreloadData\";\nimport { useWSObserver } from \"./orderly/internal/useWSObserver\";\nimport { useSimpleDI } from \"./useSimpleDI\";\nimport { CalculatorService } from \"./orderly/calculator/calculatorService\";\nimport { useCalculatorService } from \"./useCalculatorService\";\nimport { usePublicDataObserver } from \"./orderly/usePublicDataObserver\";\nexport type getKeyFunction = (index: number, prevData: any) => string | null;\n\ninterface DataCenterContextState {\n // orders\n // positions\n // balances\n //\n registerKeyHandler: (key: string, handler: getKeyFunction) => void;\n unregisterKeyHandler: (key: string) => void;\n}\n\nexport const DataCenterContext = createContext<DataCenterContextState>(\n {} as any\n);\n\nexport const useDataCenterContext = () => useContext(DataCenterContext);\n\nexport const DataCenterProvider = ({ children }: PropsWithChildren) => {\n /**\n * preload the required data for the app\n * hidden view while the required data is not ready\n */\n const { error, done } = usePreLoadData();\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 if (error) {\n return <div>Data load failed</div>;\n }\n\n if (!done) return null;\n\n return (\n <DataCenterContext.Provider\n value={{\n registerKeyHandler: (key, fun) => {\n getKeyHandlerMapRef.current.set(key, fun);\n },\n unregisterKeyHandler: (key) => {\n getKeyHandlerMapRef.current.delete(key);\n },\n }}\n >\n {children}\n </DataCenterContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { mutate } from \"swr\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\nimport { updateOrdersHandler, updateAlgoOrdersHandler } from \"../utils/swr\";\nimport { AlgoOrderMergeHandler } from \"../services/orderMerge/algoOrderMergeHandler\";\nimport { object2underscore } from \"../utils/ws\";\nimport { useLocalStorage } from \"../useLocalStorage\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useAppStore } from \"./appStore\";\nimport { useCalculatorService } from \"../useCalculatorService\";\nimport { CalculatorScope } from \"../types\";\nimport { useApiStatusActions } from \"../next/apiStatus/apiStatus.store\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { usePositionActions } from \"./orderlyHooks\";\nimport { AccountState, EVENT_NAMES } from \"@orderly.network/core\";\n\nexport const usePrivateDataObserver = (options: {\n // onUpdateOrders: (data: any) => void;\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 } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\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 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\n // updateHolding(holding);\n calculatorService.calc(CalculatorScope.PORTFOLIO, { holding });\n }\n },\n }\n );\n\n return () => unsubscribe();\n }, []);\n\n useEffect(() => {\n if (holding) {\n restoreHolding(holding);\n }\n }, [holding]);\n\n const [subOrder, setSubOrder] = useLocalStorage(\n \"orderly_subscribe_order\",\n true\n );\n\n const updateOrders = (\n data: WSMessage.AlgoOrder[] | WSMessage.Order,\n isAlgoOrder: boolean\n ) => {\n const keysMap = options.getKeysMap(\"orders\");\n\n keysMap.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 result = updateAlgoOrdersHandler(\n key,\n data as WSMessage.AlgoOrder[],\n prevData!\n );\n\n return result;\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 });\n };\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n if (subOrder !== true) return;\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 // positions\n useEffect(() => {\n if (!state.accountId) return;\n const key = [\"/v1/positions\", state.accountId];\n const unsubscribe = ws.privateSubscribe(\"position\", {\n onMessage: (data: { positions: WSMessage.Position[] }) => {\n const { positions: nextPostions } = data;\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n const newPostions = {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const itemIndex = nextPostions.findIndex(\n (item) => item.symbol === row.symbol\n );\n\n // const item = nextPostions.find(\n // (item) => item.symbol === row.symbol\n // );\n\n if (itemIndex >= 0) {\n const itemArr = nextPostions.splice(itemIndex, 1);\n\n const item = itemArr[0];\n\n return object2underscore(item);\n }\n\n return row;\n }),\n };\n\n if (nextPostions.length > 0) {\n newPostions.rows = [\n ...newPostions.rows,\n ...nextPostions.map((item) => {\n return object2underscore(item);\n }),\n ];\n }\n\n return newPostions;\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n};\n","import { API } from \"@orderly.network/types\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { is, lensIndex, over, startsWith } from \"ramda\";\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 (args: {\n status?: string;\n symbol?: string;\n side?: string;\n size?: number;\n page?: number;\n dateRange?: {\n from?: Date;\n to?: Date;\n };\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\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 (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/orders?${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 result = mergeHandler.merge(key, message, orders);\n\n return result;\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) return orders;\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 {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n WSMessage,\n} from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\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 Error(\"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 (rootOrder_.algo_type === \"BRACKET\" && rootOrder_.child_orders.length > 0) {\n // @ts-ignore\n const childOrders = this.groupBracketChildOrders([\n ...rootOrder_.child_orders,\n ]);\n rootOrder_.child_orders = [childOrders];\n }\n\n return rootOrder_;\n }\n\n static groupBracketChildOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const innerOrders = [...orders];\n const rootOrderIndex = innerOrders.findIndex(\n (order) =>\n order.algoType !== AlgoOrderType.STOP_LOSS &&\n order.algoType !== AlgoOrderType.TAKE_PROFIT\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"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","import { WSMessage, API, OrderStatus } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\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 (child.algo_status === OrderStatus.FILLED && child.is_activated && !child.updated_time) {\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 ) {\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 // 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 ) {\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 { camelCaseToUnderscoreCase } from \"@orderly.network/utils\";\n\nexport function object2underscore(obj: any) {\n return Object.keys(obj).reduce((acc, key) => {\n acc[camelCaseToUnderscoreCase(key)] = obj[key];\n return acc;\n }, {} as any);\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 { create } from \"zustand\";\nimport { API } from \"@orderly.network/types\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { WSMessage } from \"@orderly.network/types\";\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 totalValue: Decimal | null;\n availableBalance: number;\n unsettledPnL: number;\n totalUnrealizedROI: number;\n};\n\nexport type AppState = {\n accountInfo?: API.AccountInfo;\n // positions: API.PositionExt[];\n symbolsInfo?: Record<string, API.SymbolExt>;\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 // setPositions: (positions: API.PositionExt[]) => void;\n setSymbolsInfo: (symbolsInfo: Record<string, API.SymbolExt>) => 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\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 availableBalance: 0,\n unsettledPnL: 0,\n totalUnrealizedROI: 0,\n },\n appState: {\n positionsLoading: false,\n ordersLoading: false,\n fundingRatesLoading: false,\n ready: false,\n } as AppStatus,\n actions: {\n cleanAll: () => {\n set((state) => {\n state.accountInfo = undefined;\n state.portfolio = {\n totalCollateral: zero,\n totalValue: null,\n freeCollateral: zero,\n availableBalance: 0,\n unsettledPnL: 0,\n totalUnrealizedROI: 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 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 holding.holding = msg[key].holding;\n holding.frozen = msg[key].frozen;\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","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 { 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 { 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 { 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\";\nimport { useMarketStore } from \"../useMarket/market.store\";\nimport { usePositionStore } from \"../usePositionStream/usePosition.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\n portfolio?: Portfolio;\n markPrices?: Record<string, number> | null;\n // positions: API.PositionTPSLExt[];\n // markets: Record<string, API.MarketInfoExt> | null;\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 this.portfolio =\n this.output[\"portfolio\"] ||\n (useAppStore.getState().portfolio as Portfolio);\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 }\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 this.portfolio = 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\";\nimport { PositionCalculator } from \"./positions\";\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 const first = this.calcQueue.shift();\n if (first) {\n // console.log(\"[calcQueue:]\", first.scope);\n const { scope, data, options } = first;\n const ctx = context || 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 if (!options?.skipUpdate) {\n this.scheduler.update(scope, calculators, ctx.outputToValue());\n }\n }\n if (this.calcQueue.length) {\n // requestAnimationFrame(() => this.handleCalcQueue());\n // setTimeout(() => this.handleCalcQueue(ctx), 0);\n this.handleCalcQueue(ctx);\n }\n }\n }\n stop() {\n this.calcQueue = [];\n this.ctx?.clearCache();\n }\n\n private get windowIsVisible() {\n if (typeof document === \"undefined\") return true;\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 private computation<T, R>(\n data: T[],\n processor: ShardProcessor<T, R[]>,\n onComplete: (results: R[]) => void\n ): void {\n let index = 0; // Current starting index of the shard\n const results: R[][] = []; // Used to store the calculation results of each shard\n const estimatedShardSize = Math.min(data.length, 2); // Initial estimated shard size\n // const estimatedShardSize = 1;\n\n // Function to process shards\n function processNextShard(deadline: IdleDeadline) {\n // Dynamic calculation of shard size\n let shardSize = estimatedShardSize;\n\n // If the remaining time is not enough to process the current shard size, reduce the shard size\n while (index + shardSize <= data.length && deadline.timeRemaining() > 0) {\n const shard = data.slice(index, index + shardSize);\n const result = processor(shard);\n results.push(result);\n index += shardSize;\n\n // Dynamic adjustment of shard size\n if (deadline.timeRemaining() < 1) {\n shardSize = Math.max(1, Math.floor(shardSize / 2)); // Reduce shard size\n } else {\n shardSize = Math.min(data.length - index, shardSize * 2); // Increase shard size\n }\n }\n\n if (index < data.length) {\n // There are still unprocessed data shards, request the next idle callback\n safeRequestIdleCallback(processNextShard, {\n timeout: 1000,\n });\n } else {\n onComplete(results.flat());\n }\n }\n\n safeRequestIdleCallback(processNextShard, {\n timeout: 1000,\n });\n }\n}\n\nexport { ShardingScheduler, safeRequestIdleCallback, safeCancelIdleCallback };\n","import { API } from \"@orderly.network/types\";\n\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\n\nimport { account, positions } from \"@orderly.network/perp\";\n\nimport { usePositionStore } from \"../usePositionStream/usePosition.store\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { propOr } from \"ramda\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\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 // 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 ...item,\n mark_price: markPrice[item.symbol] || item.mark_price,\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\n let 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 imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\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 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 };\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 } = portfolio;\n\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: totalCollateral.toNumber(),\n positionQty: item.position_qty,\n positions: rows,\n MMR: item.mmr,\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 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 let 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 { 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 { 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 { API } from \"@orderly.network/types\";\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { account } from \"@orderly.network/perp\";\nimport { pathOr } from \"ramda\";\nimport { parseHolding } from \"../../utils/parseHolding\";\nimport { Portfolio, useAppStore } from \"../appStore\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { MarketCalculatorName } from \"./markPrice\";\n\nexport const PortfolioCalculatorName = \"portfolio\";\nclass PortfolioCalculator extends BaseCalculator<any> {\n name = PortfolioCalculatorName;\n\n calc(scope: CalculatorScope, data: any, ctx: CalculatorCtx) {\n let markPrices, positions;\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.POSITION) {\n // positions = data;\n // } else {\n 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 holding = holding.map((item) => {\n if (data.holding[item.token]) {\n return {\n ...item,\n holding: data.holding[item.token].holding,\n frozen: data.holding[item.token].frozen,\n };\n }\n\n return item;\n });\n }\n\n const accountInfo = ctx.accountInfo;\n const symbolsInfo = ctx.symbolsInfo;\n\n return this.format({\n holding,\n positions,\n markPrices,\n accountInfo,\n symbolsInfo,\n });\n }\n\n private getPortfolio(ctx: CalculatorCtx) {\n return (\n ctx.get<Portfolio>((output) => output[this.name]) ||\n (useAppStore.getState().portfolio as Portfolio)\n );\n }\n\n private format(inputs: {\n holding?: API.Holding[];\n positions: API.PositionsTPSLExt;\n markPrices: Record<string, number> | null;\n accountInfo: API.AccountInfo;\n symbolsInfo: Record<string, API.SymbolExt>;\n }) {\n const { holding, positions, markPrices, accountInfo, symbolsInfo } = inputs;\n\n if (\n !holding ||\n !positions ||\n !Array.isArray(positions.rows) ||\n !markPrices ||\n !accountInfo\n ) {\n return null;\n }\n\n const unsettledPnL = pathOr(0, [\"total_unsettled_pnl\"])(positions);\n const unrealizedPnL = pathOr(0, [\"total_unreal_pnl\"])(positions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n const usdc = holding.find((item) => item.token === \"USDC\");\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettledPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettledPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n const totalInitialMarginWithOrders = account.totalInitialMarginWithQty({\n positions: positions.rows,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: createGetter({ ...symbolsInfo }),\n });\n\n const freeCollateral = account.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\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 };\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 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 });\n }\n }\n}\n\nexport { PortfolioCalculator };\n","import { API } from \"@orderly.network/types\";\n\ntype NonUSDCHolding = {\n holding: number;\n markPrice: number;\n // margin replacement rate, default 0\n discount: number;\n};\n\nexport const parseHolding = (\n holding: API.Holding[],\n markPrices: Record<string, number>\n): [number, NonUSDCHolding[]] => {\n // if (!holding || !markPrices) {\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 nonUSDC.push({\n holding: item.holding,\n markPrice: markPrices[item.token] ?? 0,\n // markPrice: 0,\n discount: 0,\n });\n }\n });\n\n return [USDC_holding, nonUSDC];\n};\n","import { API } from \"@orderly.network/types\";\nimport { isNil } from \"ramda\";\n\ntype objectDepth = 1 | 2;\ntype propertyType<D, K, F> = D extends 1 ? K : F;\n\n// {\n// // [P in K]: (key: P, defaultValue?: T[P]) => T[K][P];\n// [P in K]: (key: P, defaultValue?: T[P]) => T[K][P];\n// }\n\n// type KeyOf<T> = keyof T;\nexport type ValueOf<T> = T[keyof T];\n\n// export function createGetter<T extends Record<string, any>, K extends keyof T>(\nexport function createGetter<\n T extends any,\n K extends string = string,\n Key = keyof T\n>(\n data: Record<string, T> | null | undefined,\n depth: objectDepth = 2\n): (typeof depth extends 1\n ? { [P in K]: (defaultValue?: any) => any }\n : { [P in K]: (key?: Key, defaultValue?: ValueOf<T>) => any }) & {\n isNil: boolean;\n} {\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(\n target: any,\n property: propertyType<typeof depth, keyof T, any>,\n receiver\n ): 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?: Key, defaultValue?: any) => {\n if (key) {\n return getValue((target as any)[property]?.[key], defaultValue);\n } else {\n return getValue(target[property], defaultValue);\n }\n };\n },\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 { 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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, removeTrailingZeros } from \"@orderly.network/utils\";\nimport { max, min } from \"ramda\";\nimport { SDKError } from \"@orderly.network/types\";\nimport orderbooksService from \"./orderbook.service\";\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([\n Number.NaN,\n Number.NaN,\n Number.NaN,\n Number.NaN,\n ] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = removeTrailingZeros(depth)\n .toString()\n .slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\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 : 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\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] =\n asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\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) return update;\n\n data = data.filter(([price]) => !isNaN(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], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\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\nconst INIT_DATA = { asks: [], bids: [] };\n\n/**\n * @name useOrderbookStream\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(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\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 [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n if (typeof tick === \"undefined\") 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 (e) {}\n return [tick];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\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 let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n 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 { asks, bids, prevTs } = wsData;\n orderbooksService.updateOrderbook(\n symbol,\n { asks, bids, ts, prevTs },\n () => (needRequestFullOrderbook = true)\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 const { symbol, asks, bids, ts } = message.data;\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 onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0-4 and bids0-4\n useEffect(() => {\n const updateData = [\n [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 2]?.[0],\n reducedData.bids?.[1]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 3]?.[0],\n reducedData.bids?.[2]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 4]?.[0],\n reducedData.bids?.[3]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 5]?.[0],\n reducedData.bids?.[4]?.[0],\n ],\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.asks?.[reducedData.asks.length - 2]?.[0],\n reducedData.asks?.[reducedData.asks.length - 3]?.[0],\n reducedData.asks?.[reducedData.asks.length - 4]?.[0],\n reducedData.asks?.[reducedData.asks.length - 5]?.[0],\n reducedData.bids?.[0]?.[0],\n reducedData.bids?.[1]?.[0],\n reducedData.bids?.[2]?.[0],\n reducedData.bids?.[3]?.[0],\n reducedData.bids?.[4]?.[0],\n ]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n 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 (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\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 { onDepthChange, depth, allDepths: depths, isLoading, onItemClick },\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useIndexPrice } from \"./useIndexPrice\";\nimport { useOpenInterest } from \"./useOpenInterest\";\nimport { useFutures } from \"./useFutures\";\n\nexport const useTickerStream = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useFuturesForSymbol requires a symbol\");\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 ws = useWS();\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n `${symbol}@ticker`,\n {\n onMessage: (message: any) => {\n if (message.symbol !== symbol) return;\n\n setTicker(message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n //\n // },\n }\n );\n\n return () => {\n setTicker(undefined);\n unsubscribe?.();\n };\n }, [symbol]);\n\n const { data: markPrice } = useMarkPrice(symbol);\n const { data: indexPrice } = useIndexPrice(symbol);\n const { data: openInterest } = useOpenInterest(symbol);\n const { data: futures } = useFutures();\n\n const value = useMemo(() => {\n //\n if (!info) return null;\n if (!ticker || ticker.symbol !== symbol) return info;\n\n const futureIndex = futures?.findIndex(\n (item: any) => item.symbol === symbol\n );\n let _oi = openInterest;\n if (!_oi && futureIndex !== -1 && futures) {\n // @ts-ignore\n _oi = futures[futureIndex].open_interest;\n }\n\n const config: any = {\n ...info,\n mark_price: markPrice,\n index_price: indexPrice,\n open_interest: _oi,\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, futures, openInterest]);\n\n return value as API.MarketInfo & { change?: number; \"24h_change\"?: number };\n};\n","import { useEffect, useState } from \"react\";\nimport { useWS } from \"../useWS\";\n// import useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n const [price, setPrice] = useState(0);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n setPrice(message.price);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n }, [symbol]);\n\n // return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n // const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n // onMessage: (message: any) => {\n // next(null, message.price);\n // },\n // });\n\n // return () => {\n // // console.log(\"_____________________ unsubscribe _________ \", symbol);\n // unsubscribe?.();\n // };\n // });\n\n return { data: price };\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\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 const ws = useWS();\n return useSWRSubscription(`${symbol}@indexprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@indexprice`, {\n onMessage: (message: any) => {\n next(null, message.price);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n });\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useOpenInterest = (symbol: string) => {\n const ws = useWS();\n return useSWRSubscription(`${symbol}@openinterest`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@openinterest`, {\n onMessage: (message: any) => {\n next(null, message.openInterest);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n });\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\n\ninterface MarketInfo {}\n\n// api: /public/futures\nexport const useFutures = () => {\n const { data, isLoading, error } = useQuery<MarketInfo[]>(\n `/v1/public/futures`,\n {\n revalidateOnFocus: false,\n }\n );\n\n const [sortedData, setSortedData] = useState(data);\n\n const ws = useWS();\n\n useEffect(() => {\n // const sub = ws\n // .observe<WSMessage.Ticker>(`tickers`)\n // .subscribe((value: any) => {\n //\n // // setData(value);\n // });\n // return () => {\n // sub.unsubscribe();\n // };\n }, []);\n\n useEffect(() => {\n if (data) {\n const sortedData = data.sort((a, b) => {\n return 0;\n });\n setSortedData(sortedData);\n }\n }, [data]);\n\n const sortBy = useCallback((key: string) => {}, [data]);\n\n const filterBy = useCallback((key: string) => {}, [data]);\n\n return {\n data: sortedData,\n sortBy,\n filterBy,\n isLoading,\n error,\n };\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\nimport { original } from \"immer\";\n\nexport type SymbolInfo = ReturnType<typeof useSymbolsInfo>;\n\nexport const useSymbolsInfo = () => {\n // const { data } = useQuery<Record<string, API.SymbolExt>>(`/v1/public/info`, {\n // focusThrottleInterval: 1000 * 60 * 60 * 24,\n // dedupingInterval: 1000 * 60 * 60 * 24,\n // revalidateOnFocus: false,\n // formatter(data: { rows: API.Symbol[] }) {\n // if (!data?.rows || !data?.rows?.length) {\n // return {};\n // }\n // const obj = Object.create(null);\n\n // for (let index = 0; index < data.rows.length; index++) {\n // const item = data.rows[index];\n // const arr = item.symbol.split(\"_\");\n // const base_dp = getPrecisionByNumber(item.base_tick);\n // const quote_dp = getPrecisionByNumber(item.quote_tick);\n // obj[item.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 // };\n // }\n\n // return obj;\n // },\n // });\n const symbolsInfo = useAppStore((state) => state.symbolsInfo);\n\n return useMemo(\n () => createGetter<API.SymbolExt, string>({ ...symbolsInfo }),\n [symbolsInfo]\n );\n // console.log(\">>>>>symbolsInfo<<<<<<<\", symbolsInfo);\n\n // return createGetter<API.SymbolExt, string>({ ...symbolsInfo });\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 private bufferedOrderBookUpdates: { [symbol: string]: RawOrderBookUpdate[] } = {};\n private rawOrderBook: { [symbol: string]: RawOrderBook } = {};\n\n constructor() {\n }\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(symbol: string, update: RawOrderBookUpdate) {\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) => askMap.set(ask[0], ask[1]));\n rawOrderBook.bids.forEach((bid) => bidMap.set(bid[0], bid[1]));\n\n update.asks.forEach((ask) => (ask[1] === 0 ? askMap.delete(ask[0]) : askMap.set(ask[0], ask[1])));\n update.bids.forEach((bid) => (bid[1] === 0 ? bidMap.delete(bid[0]) : bidMap.set(bid[0], bid[1])));\n\n rawOrderBook.asks = Array.from(askMap.entries()).sort((a, b) => a[0] - b[0]);\n rawOrderBook.bids = Array.from(bidMap.entries()).sort((a, b) => b[0] - a[0]);\n\n rawOrderBook.ts = update.ts;\n }\n private applyBufferedUpdatesToRawOrderBooks(symbol: string) {\n this.bufferedOrderBookUpdates[symbol]?.forEach((update) => this.applyUpdateToRawOrderBook(symbol, update));\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', { crossedAsks: orderbook.asks, 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\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\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\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\n };\n\n updateOrderbook(symbol: string, update: RawOrderBookUpdate, callback: () => void) {\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\n this.pushUpdateToBuffer(symbol, {asks, bids, prevTs, ts})\n if (callback) {\n callback();\n }\n return;\n }\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\n\n\n}\n\nconst orderBookService = OrderbookService.getInstance();\n\nexport default orderBookService;","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nexport const useAccountInfo = () => {\n return usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketStore } from \"./useMarket/market.store\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWS();\n // const brokerId = useConfig(\"brokerId\");\n const { data: futures } = useQuery<WSMessage.Ticker[]>(`/v1/public/futures`, {\n revalidateOnFocus: false,\n });\n\n // const topic = brokerId ? `${brokerId}$tickers` : \"tickers\";\n const topic = \"tickers\";\n\n const { data: tickers } = useSWRSubscription(\"tickers\", (_, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n topic,\n {\n onMessage: (message: any) => {\n // window.debugPrint(message);\n next(null, message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n //\n // },\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 // const value = useMarketStore((state) => state.market);\n\n return { data: value };\n};\n","import { useContext, useMemo, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n NEW_LISTING,\n}\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 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 = [] as Favorite[];\n for (let index = 0; index < curData.length; index++) {\n const favData = curData[index];\n var favTabs = favData.tabs.filter(\n (tab) => tabs.findIndex((item) => tab.id === item.id) !== -1\n );\n if (favTabs.length > 0) {\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 var 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 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 openInterest: new Decimal(open_interest || 0)\n .mul(index_price || 0)\n .toNumber(),\n };\n });\n return list || [];\n }, [symbolsInfo, futures, fundingRates]);\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 const filter =\n type == MarketsType.ALL\n ? marketsList\n : marketsList?.filter((item) => keys.includes(item.symbol));\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 || [],\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\n\nexport const useFundingRates = () => {\n const data = useAppStore((state) => state.fundingRates);\n\n return createGetter<API.FundingRate>({ ...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, useEffect, useId, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { SymbolInfo, useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { MarketStoreKey } from \"./useMarket\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n NEW_LISTING,\n}\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 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};\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\nexport const useMarkets = (type: MarketsType = MarketsType.ALL) => {\n const { data: futures } = useMarketsStream();\n const symbolsInfo = useSymbolsInfo();\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);\n const filterList = filterMarkets({\n markets,\n favorites,\n recent,\n newListing,\n type,\n });\n setMarkets(filterList);\n }, [futures, symbolsInfo, favorites, recent, newListing, type]);\n\n return [markets, store] as const;\n};\n\nconst addFieldToMarkets = (\n futures: WSMessage.Ticker[] | null,\n symbolsInfo: SymbolInfo\n) => {\n return (futures || [])?.map((item: any) => {\n const info = symbolsInfo[item.symbol];\n\n return {\n ...item,\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 } as MarketsItem;\n });\n};\n\nconst 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) {\n curData = markets;\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\nfunction isEmpty(value: any) {\n return value === undefined || value === null;\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\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 { useMarkPriceStore } from \"./useMarkPrice/useMarkPriceStore\";\n\nexport const useMarkPricesStream = () => {\n const data = useMarkPriceStore((state) => state.markPrices);\n\n return { data };\n};\n","import { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { prop } from \"ramda\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useLeverage = (): any => {\n const { data, mutate } = usePrivateQuery(\"/v1/client/info\");\n const [update, { isMutating }] = useMutation(\"/v1/client/leverage\");\n\n const { data: config } = useQuery(\"/v1/public/config\", {\n revalidateOnFocus: false,\n });\n\n const updateLeverage = useCallback((data: { leverage: number }) => {\n return update(data).then((res: any) => {\n if (res.success) {\n return mutate();\n } else {\n throw new Error(res.message);\n }\n // return res\n });\n }, []);\n\n return [\n prop(\"max_leverage\", data as any),\n {\n update: updateLeverage,\n isMutating,\n // config: [1, 2, 3, 4, 5, 10, 15, 20],\n config: config\n ? (config as any)?.available_futures_leverage\n ?.split(\",\")\n .map((item: string) => parseInt(item))\n : [],\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { Decimal, getTimestamp, timeConvertString } from \"@orderly.network/utils\";\n\nexport const useFundingRate = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useFuturesForSymbol requires a symbol\");\n }\n\n const [countDown, setCountDown] = useState(\"00:00:00\");\n\n const { data } = 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) return;\n const { next_funding_time } = data;\n if (!next_funding_time || next_funding_time <= 0) {\n return;\n }\n const timer = setInterval(() => {\n const diff = new Date(next_funding_time).getTime() - getTimestamp();\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 clearInterval(timer);\n };\n }, [data]);\n\n const est_funding_rate = useMemo(() => {\n if (!data) return;\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(4, Decimal.ROUND_DOWN);\n }, [data]);\n\n return {\n ...data,\n est_funding_rate,\n countDown,\n };\n};\n","import { useQuery } from \"../useQuery\";\nimport { API } from \"@orderly.network/types\";\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) return 0;\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 {\n data: historyData,\n isLoading,\n ...rest\n } = useQuery<API.FundingHistory[]>(\"/v1/public/market_info/funding_history\");\n\n return {\n data: historyData ?? [],\n isLoading,\n getPositiveRates: (\n data: API.FundingHistory[],\n period: PeriodKey\n ): Record<string, number> => {\n if (!data?.length) return {};\n return data.reduce((acc, item) => {\n acc[item.symbol] = calculatePositiveRate(item.funding[period], period);\n return acc;\n }, {} as Record<string, number>);\n },\n };\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n type API,\n} from \"@orderly.network/types\";\nimport { pathOr } from \"ramda\";\nimport { POSITION_EMPTY, usePositionStore } from \"./usePosition.store\";\nimport { useCalculatorService } from \"../../useCalculatorService\";\nimport { CalculatorScope } from \"../../types\";\nimport { useAppStore } from \"../appStore\";\nimport { omit } from \"ramda\";\nimport { PositionCalculator } from \"../calculator/positions\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\nimport { useMarkPricesStream, useOrderStream } from \"../orderlyHooks\";\nimport { findPositionTPSLFromOrders, findTPSLFromOrder } from \"./utils\";\n// import { usePosition } from \"./usePosition\";\n\nexport type PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport const usePositionStream = (\n /**\n * If symbol is passed, only the position of that symbol will be returned.\n */\n symbol: string = \"all\",\n options?: SWRConfiguration & {\n calcMode?: PriceMode;\n /**\n * If true, the pending order will be included in the result.\n */\n includedPendingOrder?: boolean;\n }\n) => {\n // const updatePosition = usePosition((state) => state.updatePosition);\n //\n // const symbolInfo = useSymbolsInfo();\n // const {setPositions} = usePositionActions();\n\n const { calcMode } = options || {};\n\n const { includedPendingOrder = false } = options || {};\n\n const positionCalculator = useRef<PositionCalculator | null>(null);\n const calculatorService = useCalculatorService();\n\n // const markPrices = useMarkPricesStream();\n\n // const [tpslOrderPageSize] = useLocalStorage(tpslOrdersPageSizeKey, 10);\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 // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // get TP/SL orders;\n\n // const [tpslOrders] = useOrderStream({\n // status: OrderStatus.INCOMPLETE,\n // includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // });\n //\n\n const { positions: positionStatus } = useApiStatusStore(\n (state) => state.apis\n );\n\n useEffect(() => {\n if (symbol === \"all\") return;\n\n positionCalculator.current = new PositionCalculator(symbol);\n\n calculatorService.register(\n CalculatorScope.POSITION,\n positionCalculator.current\n );\n\n calculatorService.register(\n CalculatorScope.MARK_PRICE,\n positionCalculator.current\n );\n\n calculatorService.register(\n CalculatorScope.INDEX_PRICE,\n positionCalculator.current\n );\n\n return () => {\n calculatorService.unregister(\n CalculatorScope.POSITION,\n positionCalculator.current!\n );\n\n calculatorService.unregister(\n CalculatorScope.MARK_PRICE,\n positionCalculator.current!\n );\n\n calculatorService.unregister(\n CalculatorScope.INDEX_PRICE,\n positionCalculator.current!\n );\n };\n }, [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 // console.log(\"******\", symbol, state.positions);\n\n return [positions.rows, omit([\"rows\"], positions)];\n });\n\n const { totalCollateral, totalValue, totalUnrealizedROI } = useAppStore(\n (state) => state.portfolio\n );\n\n const aggregated = useMemo(() => {\n let data = formattedPositions[1];\n if (!data) return {};\n\n if (calcMode === \"markPrice\") return data;\n\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]);\n\n let rows = formattedPositions[0];\n {\n // rows\n if (!rows) {\n rows = [];\n }\n\n // rows.forEach((item) => {\n // if (item.position_qty > 0) {\n // console.log(markPrices.data[item.symbol], item.mark_price);\n // }\n // });\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 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 // mark_price: item.last_price,\n };\n });\n }\n\n // console.log(\"tpslOrders\", tpslOrders);\n\n if (Array.isArray(tpslOrders) && tpslOrders.length) {\n rows = rows.map((item) => {\n const related_order = findPositionTPSLFromOrders(\n tpslOrders,\n item.symbol\n );\n\n const tp_sl_pricer = !!related_order\n ? findTPSLFromOrder(related_order)\n : undefined;\n\n return {\n ...item,\n tp_trigger_price: tp_sl_pricer?.tp_trigger_price,\n sl_trigger_price: tp_sl_pricer?.sl_trigger_price,\n algo_order: related_order,\n };\n });\n }\n }\n\n const positionInfoGetter = createGetter<\n Omit<API.PositionInfo, \"rows\">,\n keyof Omit<API.PositionInfo, \"rows\">\n >(aggregated, 1);\n\n return [\n {\n rows,\n // rows: formattedPositions[0],\n aggregated: formattedPositions?.[1] ?? {},\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n positionInfoGetter,\n {\n /**\n * @deprecated use `isLoading` instead\n */\n loading: positionStatus.loading,\n isLoading: positionStatus.loading,\n // isValidating,\n // // showSymbol,\n // error,\n // // loadMore: () => {},\n // refresh: refreshPositions,\n },\n ] as const;\n};\n\nexport const pathOr_unsettledPnLPathOr = pathOr(0, [\n 0,\n \"aggregated\",\n \"unsettledPnL\",\n]);\n","import {\n API,\n AlgoOrderEntity,\n AlgoOrderType,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\n\nexport const findTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): Partial<AlgoOrderEntity> | undefined => {\n const order = findPositionTPSLFromOrders(orders, symbol);\n\n // console.log(\"!!!!!\", order);\n\n if (!order) return;\n return findTPSLFromOrder(order);\n};\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 findPositionTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): API.AlgoOrder | undefined => {\n return orders?.find((order) => {\n // console.log(order.symbol, symbol, order.algo_type);\n return (\n order.symbol === symbol &&\n order.algo_type === AlgoOrderRootType.POSITIONAL_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\n // return order;\n};\n","import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\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 /**\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 } = params;\n\n const [includes, setIncludes] = useState<CombineOrderType[]>(params.includes ?? ['ALL'])\n const [excludes, setExcludes] = useState<CombineOrderType[]>(params.excludes ?? []);\n\n const { data: markPrices } = useMarkPricesStream();\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 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?.(\n key,\n generateKeyFun({ status, symbol, side, size, page, dateRange })\n );\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, size, page, dateRange, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size, page, dateRange }),\n {\n initialSize: 1,\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 flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item: any) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\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 }, [ordersResponse.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 order.quantity = order.child_orders[0].quantity;\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 const cancelAlgoOrdersByTypes = (types: AlgoOrderRootType[]) => {\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, { algo_type: type });\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: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllTPSLOrders = useCallback(() => {\n return cancelAlgoOrdersByTypes([\n AlgoOrderRootType.POSITIONAL_TP_SL,\n AlgoOrderRootType.TP_SL,\n ]);\n }, [ordersResponse.data]);\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 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 ordersResponse.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 (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n child_orders: childOrders,\n });\n },\n []\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllTPSLOrders,\n cancelAlgoOrdersByTypes,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\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 { API } from \"@orderly.network/types\";\nimport { useWS } from \"../useWS\";\nimport { useEffect, useState } from \"react\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 Error(\"useTradeStream: symbol is required\");\n }\n\n const [trades, setTrades] = useState<API.Trade[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\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 unsubscript = ws.subscribe(\n {\n id: `${symbol}@trade`,\n event: \"subscribe\",\n topic: `${symbol}@trade`,\n ts: getTimestamp(),\n },\n {\n onMessage: (data: any) => {\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 unsubscript?.();\n };\n }, [symbol]);\n\n return { data: trades, isLoading };\n};\n","import { type API } from \"@orderly.network/types\";\nimport { useAppStore } from \"./appStore\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number | null;\n availableBalance: number;\n unsettledPnL: number;\n\n // positions: API.Position[];\n accountInfo?: API.AccountInfo;\n};\n\n// const positionsPath = pathOr([], [0, \"rows\"]);\n// const totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\nexport const useCollateral = (\n options: {\n /** decimal precision */\n dp: number;\n } = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const {\n totalCollateral,\n totalValue,\n freeCollateral,\n availableBalance,\n unsettledPnL,\n } = useAppStore((state) => state.portfolio);\n const accountInfo = useAppStore((state) => state.accountInfo);\n\n // const positions = usePositionStream(undefined, {\n // includedPendingOrder: true,\n // });\n\n // console.log(\"positions\", positions);\n\n // const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // const symbolInfo = useSymbolsInfo();\n\n // const { data: markPrices } = useMarkPricesStream();\n\n // const { usdc } = useHoldingStream();\n\n // const filterAlgoOrders =\n // orders?.filter((item) => item.algo_order_id === undefined) ?? [];\n\n // const { data: holding } = usePrivateQuery<API.Holding[]>(\n // \"/v1/client/holding\",\n // {\n // formatter: (data) => {\n // return data.holding;\n // },\n // }\n // );\n\n // const [totalCollateral, totalValue] = useMemo(() => {\n // return [\n // pathOr(zero, [0, \"totalCollateral\"], positions),\n // pathOr(zero, [0, \"totalValue\"], positions),\n // ];\n // }, [positions, markPrices]);\n\n // const totalInitialMarginWithOrders = useMemo(() => {\n // if (!accountInfo || !symbolInfo || !markPrices) {\n // return 0;\n // }\n //\n // return account.totalInitialMarginWithQty({\n // positions: positionsPath(positions),\n // markPrices,\n // IMR_Factors: accountInfo.imr_factor,\n // maxLeverage: accountInfo.max_leverage,\n // symbolInfo,\n // });\n // }, [\n // positions,\n // // filterAlgoOrders,\n // markPrices,\n // accountInfo,\n // symbolInfo,\n // ]);\n //\n // const freeCollateral = useMemo(() => {\n // return account.freeCollateral({\n // totalCollateral,\n // totalInitialMarginWithOrders,\n // });\n // }, [totalCollateral, totalInitialMarginWithOrders]);\n //\n // const availableBalance = useMemo(() => {\n // return account.availableBalance({\n // USDCHolding: usdc?.holding ?? 0,\n // unsettlementPnL: pathOr_unsettledPnLPathOr(positions),\n // });\n // }, [usdc?.holding, pathOr_unsettledPnLPathOr(positions)]);\n\n return {\n totalCollateral: totalCollateral.toDecimalPlaces(dp).toNumber(),\n freeCollateral: freeCollateral.toDecimalPlaces(dp).toNumber(),\n totalValue: totalValue?.toDecimalPlaces(dp).toNumber() ?? null,\n availableBalance,\n unsettledPnL,\n\n accountInfo,\n\n // @hidden\n // positions: positionsPath(positions),\n };\n};\n","import { useEffect, useMemo } from \"react\";\nimport { type API, OrderSide, OrderStatus } from \"@orderly.network/types\";\n\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { account } from \"@orderly.network/perp\";\nimport { useCollateral } from \"./useCollateral\";\n\nimport { pathOr } from \"ramda\";\nimport { useOrderStream } from \"./useOrderStream/useOrderStream\";\nimport { usePositions } from \"./usePositionStream/usePosition.store\";\nimport { useAccountInfo } from \"./appStore\";\n\n// const positionsPath = pathOr([], [0, \"rows\"]);\n\n/**\n * @param symbol\n * @param side\n * @param reduceOnly\n * @returns the maximum quantity available for trading in USD\n */\nexport const useMaxQty = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false\n) => {\n // const positionsData = usePositionStream();\n\n const positions = usePositions();\n\n const [orders] = useOrderStream({ status: OrderStatus.NEW, size: 500 });\n\n // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n const accountInfo = useAccountInfo();\n\n const symbolInfo = useSymbolsInfo();\n\n const { totalCollateral } = useCollateral();\n\n const { data: markPrices } = useMarkPricesStream();\n\n // const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n const maxQty = useMemo(() => {\n if (!symbol) return 0;\n\n // const positions = positionsPath(positionsData);\n\n const positionQty = account.getQtyFromPositions(\n positions === null ? [] : positions,\n symbol\n );\n\n if (reduceOnly) {\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 }\n\n if (!markPrices || !markPrices[symbol] || !orders || !accountInfo) return 0;\n\n const getSymbolInfo = symbolInfo[symbol];\n\n const filterAlgoOrders = orders.filter(\n (item) => item.algo_order_id === undefined || item.algo_type === \"BRACKET\"\n );\n\n // current symbol buy order quantity\n const buyOrdersQty = account.getQtyFromOrdersBySide(\n filterAlgoOrders,\n symbol,\n OrderSide.BUY\n );\n // current symbol sell order quantity\n const sellOrdersQty = account.getQtyFromOrdersBySide(\n filterAlgoOrders,\n symbol,\n OrderSide.SELL\n );\n\n const otherPositions = !Array.isArray(positions)\n ? []\n : positions.filter((item: API.Position) => item.symbol !== symbol);\n\n const otherOrders = filterAlgoOrders.filter(\n (item: API.Order) => item.symbol !== symbol\n );\n\n const otherIMs = account.otherIMs({\n orders: otherOrders,\n positions: otherPositions,\n symbolInfo,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n });\n\n return account.maxQty(side, {\n markPrice: markPrices[symbol],\n symbol,\n baseMaxQty: getSymbolInfo(\"base_max\"),\n totalCollateral,\n maxLeverage: accountInfo.max_leverage,\n takerFeeRate: accountInfo.futures_taker_fee_rate,\n baseIMR: getSymbolInfo(\"base_imr\"),\n otherIMs,\n positionQty,\n buyOrdersQty,\n sellOrdersQty,\n IMR_Factor: accountInfo.imr_factor[symbol],\n });\n }, [\n symbol,\n positions,\n reduceOnly,\n markPrices,\n orders,\n accountInfo,\n symbolInfo,\n side,\n totalCollateral,\n ]);\n\n // console.log(\"+++++++++++maxQty++++++++++++++ \", maxQty);\n // return 0;\n\n return Math.max(maxQty, 0) as number;\n};\n","import { useMemo } from \"react\";\nimport { account } from \"@orderly.network/perp\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { zero } from \"@orderly.network/utils\";\nimport { usePositionStore } from \"./usePositionStream/usePosition.store\";\nimport { useAccount } from \"../useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nexport type MarginRatioReturn = {\n // Margin Ratio\n marginRatio: number;\n // Current Leverage\n currentLeverage: number | null;\n // account margin ratio, if user has no position, return null\n mmr: number | null;\n};\n\nexport const useMarginRatio = (): MarginRatioReturn => {\n // const [{ rows, aggregated }] = usePositionStream();\n\n const positions = usePositionStore((state) => state.positions.all);\n\n const { rows } = positions;\n const { notional } = positions;\n const { state } = useAccount();\n\n const { data: markPrices } = useMarkPricesStream();\n //\n // const markPrices = useMarkPrices();\n //\n\n const { totalCollateral } = useCollateral();\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 ?? [],\n });\n }, [rows, markPrices, totalCollateral]);\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 // MMR\n const mmr = useMemo<number | null>(() => {\n if (!rows || rows.length <= 0 || notional == null) return null;\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 return { marginRatio, currentLeverage, mmr };\n};\n","import {\n NetworkId,\n type API,\n Chain as FlatChain,\n} from \"@orderly.network/types\";\nimport { useCallback, useContext, useMemo, useRef } from \"react\";\nimport { SWRConfiguration } from \"swr\";\nimport { useQuery } from \"../useQuery\";\nimport { prop } from \"ramda\";\nimport { isTestnet } from \"@orderly.network/utils\";\nimport { nativeTokenAddress } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\n// testnet only show arb sepolia and solana devnet\nconst TestNetWhiteList = [421614, 901901901, 1516];\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 checkChainSupport: (\n chainId: number | string,\n networkId: NetworkId\n ) => boolean;\n error: any;\n};\n\nexport function useChains(\n networkId?: undefined,\n options?: undefined\n): [Chains<undefined, undefined>, UseChainsReturnObject];\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\nexport function useChains(\n networkId?: NetworkId,\n options: UseChainsOptions = {}\n): [any, any] {\n const { pick: pickField, ...swrOptions } = options;\n const {\n filteredChains: allowedChains,\n configStore,\n customChains,\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 commonSwrOpts = {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n // If false, undefined data gets cached against the key.\n revalidateOnMount: true,\n // dont duplicate a request w/ same key for 1hr\n dedupingInterval: 3_600_000,\n ...swrOptions,\n };\n\n // only prod env return mainnet chains info\n const { data: tokenChainsRes, error: tokenError } = useQuery<API.Chain[]>(\n \"https://api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const { data: testTokenChainsRes } = useQuery<API.Chain[]>(\n \"https://testnet-api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const brokerId = configStore.get(\"brokerId\");\n\n const needFetchFromAPI = options.forceAPI || !customChains;\n\n // only prod env return mainnet chains info\n const { data: chainInfos, error: chainInfoErr } = useQuery(\n needFetchFromAPI\n ? `https://api-evm.orderly.org/v1/public/chain_info${\n brokerId !== \"orderly\" ? `?broker_id=${brokerId}` : \"\"\n }`\n : null,\n { ...commonSwrOpts }\n );\n\n // test chains info\n const { data: testChainInfos } = useQuery(\n needFetchFromAPI\n ? `https://testnet-api-evm.orderly.org/v1/public/chain_info${\n brokerId !== \"orderly\" ? `?broker_id=${brokerId}` : \"\"\n }`\n : null,\n { ...commonSwrOpts }\n );\n\n const chains = useMemo(() => {\n const tokenChains = fillChainsInfo(\n tokenChainsRes,\n filterFun.current,\n chainInfos\n );\n const testTokenChains = fillChainsInfo(\n testTokenChainsRes,\n undefined,\n testChainInfos\n );\n\n let testnetArr = needFetchFromAPI\n ? filterAndUpdateChains(testTokenChains, testChainInfos, undefined, true)\n : customChains?.testnet;\n\n tokenChains?.forEach((item) => {\n const chainId = item.network_infos?.chain_id;\n chainsMap.current.set(chainId, item);\n });\n\n testnetArr.forEach((chain) => {\n chainsMap.current.set(chain.network_infos?.chain_id, chain);\n });\n\n let mainnetArr: API.Chain[] = [];\n\n mainnetArr = filterAndUpdateChains(\n tokenChains,\n chainInfos,\n filterFun.current\n );\n\n mainnetArr = needFetchFromAPI ? mainnetArr : customChains?.mainnet;\n\n mainnetArr.forEach((item) => {\n const chainId = item.network_infos?.chain_id;\n chainsMap.current.set(chainId, item);\n });\n\n mainnetArr = filterByAllowedChains(mainnetArr, allowedChains?.mainnet);\n testnetArr = filterByAllowedChains(\n testnetArr,\n allowedChains?.testnet ??\n (TestNetWhiteList.map((id) => ({ id })) as FlatChain[])\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 ]);\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(\n (item) => item.address === nativeTokenAddress\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 return [\n chains,\n {\n findByChainId,\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\n/** orderly chains array form (/v1/public/token) api */\nexport function fillChainsInfo(\n chains?: API.Chain[],\n filter?: (chain: any) => boolean,\n chainInfos?: any\n) {\n let _chains: API.Chain[] = [];\n\n chains?.forEach((item) => {\n item.chain_details.forEach((chain: any) => {\n const chainId = Number(chain.chain_id);\n const chainInfo = chainInfos?.find(\n (item: any) => item.chain_id == chainId\n );\n\n const _chain: any = {\n network_infos: {\n name: chain.chain_name ?? chainInfo?.name ?? \"--\",\n chain_id: chainId,\n withdrawal_fee: chain.withdrawal_fee,\n cross_chain_withdrawal_fee: chain.cross_chain_withdrawal_fee,\n bridgeless: true,\n },\n token_infos: [\n {\n symbol: item.token,\n address: chain.contract_address,\n decimals: chain.decimals,\n display_name: chain.display_name,\n },\n ],\n };\n\n if (typeof filter === \"function\") {\n if (!filter(_chain)) return;\n }\n\n _chains.push(_chain);\n });\n });\n\n return _chains;\n}\n\n/** filter chains and update network_infos by chain_info api (v1/public/chain_info) */\nexport function filterAndUpdateChains(\n chains: API.Chain[],\n chainInfos: any,\n filter?: (chain: any) => boolean,\n isTestNet?: boolean\n) {\n const filterChains: API.Chain[] = [];\n\n chains.forEach((chain) => {\n let _chain = { ...chain };\n\n const networkInfo = chainInfos?.find(\n (item: any) => item.chain_id == chain.network_infos.chain_id\n );\n\n if (networkInfo) {\n const { name, public_rpc_url, currency_symbol, explorer_base_url } =\n networkInfo;\n _chain.network_infos = {\n ..._chain.network_infos,\n name,\n shortName: name,\n public_rpc_url,\n currency_symbol,\n bridge_enable: true,\n mainnet: !isTestNet,\n explorer_base_url,\n // est_txn_mins: null,\n };\n }\n\n if (typeof filter === \"function\") {\n if (!filter(_chain)) return;\n }\n\n if (networkInfo) {\n filterChains.push(_chain);\n }\n });\n\n return filterChains;\n}\n\n/** if chain is testnet, update testnet network_infos */\nexport function updateTestnetInfo(\n testnetArr: API.Chain[],\n chainId: number,\n chain: API.Chain\n) {\n if (isTestnet(chainId)) {\n const index = testnetArr?.findIndex(\n (item) => item.network_infos.chain_id === chainId\n );\n if (index > -1) {\n testnetArr[index] = chain;\n }\n }\n}\n\nexport function filterByAllowedChains(\n chains: API.Chain[],\n allowedChains?: FlatChain[]\n) {\n if (!allowedChains) {\n return chains;\n }\n\n return chains.filter((chain) =>\n allowedChains.some(\n (allowedChain) =>\n allowedChain.id === parseInt(chain?.network_infos?.chain_id as any)\n )\n );\n}\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API, chainsInfoMap } from \"@orderly.network/types\";\n\nexport const useChain = (token: string) => {\n const { data, isLoading } = useQuery<API.Chain[]>(\"/v1/public/token\");\n\n const chains = useMemo(() => {\n if (!data) return null;\n\n let 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 { useCallback, useMemo, useState } from \"react\";\nimport { useHoldingStream } from \"./useHoldingStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useAccount } from \"../useAccount\";\nimport { useEventEmitter } from '../useEventEmitter'\nimport { useChains } from \"./useChains\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { useConfig } from \"../useConfig\";\nimport { isTestnet } from \"@orderly.network/utils\";\n\nexport type UseWithdrawOptions = { srcChainId?: number };\n\nexport const useWithdraw = (options?: UseWithdrawOptions) => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance, freeCollateral } = useCollateral();\n\n const networkId = useConfig(\"networkId\");\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const ee = useEventEmitter()\n\n // const withdrawQueue = useRef<number[]>([]);\n\n const { usdc } = useHoldingStream();\n\n // useEffect(() => {\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 // const { id } = data;\n\n // if (withdrawQueue.current.includes(id)) {\n // withdrawQueue.current = withdrawQueue.current.filter(\n // (item) => item !== id\n // );\n // ee.emit(\"withdraw:success\", data);\n // }\n // },\n // }\n // );\n\n // return () => unsubscribe();\n // }, []);\n\n const maxAmount = useMemo(() => {\n // if (!usdc || !usdc.holding) return 0;\n\n // if (unsettledPnL >= 0) return usdc?.holding ?? 0;\n\n // return new Decimal(usdc.holding).add(unsettledPnL).toNumber();\n\n return freeCollateral;\n }, [freeCollateral]);\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 isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.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, options?.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\n const withdraw = useCallback(\n (inputs: {\n chainId: number;\n token: string;\n amount: string;\n allowCrossChainWithdraw: boolean;\n }): Promise<any> => {\n return account.assetsManager.withdraw(inputs).then((res: any) => {\n if (res.success) {\n ee.emit(EnumTrackerKeys.WITHDRAW_SUCCESS, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n quantity:inputs.amount,\n });\n // withdrawQueue.current.push(res.data.withdraw_id);\n }\n return res;\n }).catch((err) => {\n ee.emit(EnumTrackerKeys.WITHDRAW_FAILED, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n msg: JSON.stringify(err),\n });\n throw err\n });\n },\n [state, targetChain, state]\n );\n\n\n return {\n dst,\n withdraw,\n isLoading,\n maxAmount,\n availableBalance,\n availableWithdraw,\n unsettledPnL,\n };\n};\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useMemo } from \"react\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 return {\n ...item,\n frozen: token.frozen,\n holding: token.holding,\n };\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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount, } from \"../useAccount\";\nimport {useEventEmitter} from '../useEventEmitter'\nimport {\n AccountStatusEnum,\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n ChainNamespace,\n DEPOSIT_FEE_RATE,\n isNativeTokenChecker,\n MaxUint256,\n NetworkId,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n const ee = useEventEmitter()\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\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 isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n console.log(\"-- chain\", chain, options);\n } else {\n chain = findByChainId(options?.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, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(\n account.assetsManager.getBalanceByAddress(token.address, {\n decimals: token?.decimals,\n })\n );\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (inputs: {\n address?: string;\n vaultAddress?: string;\n decimals?: number;\n }) => {\n const { address, vaultAddress, decimals } = inputs;\n const key = `${address}-${vaultAddress}`;\n console.log(\"--- get allowance\", vaultAddress);\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance({\n address,\n vaultAddress,\n decimals,\n });\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (inputs: {\n address?: string;\n decimals?: number;\n }) => {\n const { address, decimals } = inputs;\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance({\n address,\n decimals,\n });\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (address?: string, decimals?: number) => {\n fetchBalance(address, decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (inputs: {\n address?: string;\n vaultAddress?: string;\n decimals?: number;\n }) => {\n getAllowance(inputs);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n const params = {\n address: options?.address,\n decimals: options?.decimals,\n };\n\n if (account.walletAdapter?.chainNamespace === ChainNamespace.solana) {\n setAllowance(account.walletAdapter.formatUnits(MaxUint256));\n return;\n }\n console.log(\n \"-- dst chainid\",\n dst.chainId,\n options?.srcChainId,\n dst,\n options\n );\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(params);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(params);\n } else {\n getAllowanceByDefaultAddress(params);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n options?.decimals,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const updateAllowanceWhenTxSuccess = useCallback(\n (txHash: string) => {\n return account.walletAdapter\n ?.pollTransactionReceiptWithBackoff(txHash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance({ address: options?.address })\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n },\n [account, options?.address]\n );\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve({\n address: options.address,\n amount,\n })\n .then((res: any) => {\n return updateAllowanceWhenTxSuccess(res.hash);\n }).catch(e => {\n });\n },\n [account, getAllowance, options?.address, dst]\n );\n\n const deposit = useCallback(async () => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const _allowance = await account.assetsManager.getAllowance({\n address: options?.address,\n });\n\n setAllowance(() => _allowance);\n\n if (new Decimal(quantity).greaterThan(_allowance)) {\n throw new Error(\"Insufficient allowance\");\n }\n\n // only support orderly deposit\n console.log(\"-- start deposit\");\n console.log('-- deposit fee', depositFee);\n\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n ee.emit(EnumTrackerKeys.DEPOSIT_SUCCESS, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n quantity,\n });\n updateAllowanceWhenTxSuccess(res.hash);\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n }).catch(e => {\n ee.emit(EnumTrackerKeys.DEPOSIT_FAILED, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos?.name,\n msg: JSON.stringify(e),\n });\n throw e;\n });\n }, [account, fetchBalance, quantity, depositFee, options?.address]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n const time = account.walletAdapter?.chainNamespace === ChainNamespace.solana ? 10000 : 3000;\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n },time);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity || Number(quantity) === 0) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useWalletSubscription = (options?: {\n onMessage?: (data: any) => void;\n}) => {\n const ws = useWS();\n\n return useSWRSubscription(\"wallet\", (_, { 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","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport const useSettleSubscription = (options?: {\n onMessage?: (data: any) => void;\n}) => {\n const ws = useWS();\n\n return useSWRSubscription(\"settle\", (_, { 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","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 { API, 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 isEditing?: boolean;\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 { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, tpslCalculateHelper } from \"./tp_slUtils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\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]?: {\n type: string;\n message: string;\n };\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 }\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) => 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: () => 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: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\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 : \"\",\n // quantity:\n // options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder, { isMutating: isCreateMutating }] =\n useMutation(\"/v1/algo/order\");\n const [doUpdateOrder, { isMutating: isUpdateMutating }] = useMutation(\n \"/v1/algo/order\",\n \"PUT\"\n );\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!isEditing || !options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"[updateOrder:]\", key, value);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : 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:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\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,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"-------->>>>>\", key, value);\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_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\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 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 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 = (): 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 orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\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 compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\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 return doCreateOrder(orderBody);\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 = (orderId: number): 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 order_id: orderId,\n ...updatedOrderEntity,\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 errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ];\n};\n","import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, todpIfNeed, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\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 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 .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (entryPrice === 0) return 0;\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .abs()\n .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\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 \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_DOWN).toNumber();\n }\n\n return decimal.toNumber();\n}\n\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 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\nexport function tpslCalculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number | string;\n qty: number | string;\n orderSide: OrderSide;\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 ) {\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 let qty = Number(key === \"quantity\" ? inputs.value : 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}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n }\n let trigger_price, offset, offset_percentage, pnl;\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 (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [`${keyPrefix}ROI`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\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 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 trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [`${keyPrefix}ROI`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: todpIfNeed(\n trigger_price,\n symbol?.quote_dp ?? 2\n ),\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n // [`${keyPrefix}ROI`]: calcROI({\n // pnl: Number(pnl ?? 0),\n // qty,\n // price: Number(trigger_price!),\n // }),\n };\n}\n","import { OrderType } from \"@orderly.network/types\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\nimport { StopLimitOrderCreator } from \"./stopLimitOrderCreator\";\nimport { OrderCreator } from \"./interface\";\nimport { GeneralOrderCreator } from \"./generalCreator\";\nimport { StopMarketOrderCreator } from \"./stopMarketOrderCreator\";\nimport { PostOnlyOrderCreator } from \"./postOnlyCreator\";\nimport { FOKOrderCreator } from \"./fokCreator\";\nimport { IOCOrderCreator } from \"./iocCreator\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\n\nimport { TPSLOrderCreator } from \"./tpslOrderCreator\";\nimport { TPSLPositionOrderCreator } from \"./tpslPositionOrderCreator\";\nimport { BracketLimitOrderCreator } from \"./bracketLimitOrderCreator\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { BracketMarketOrderCreator } from \"./bracketMarketOrderCreator\";\nimport { BBOOrderCreator } from \"./bboOrderCreator\";\n\nexport class OrderFactory {\n static create(\n type: OrderType | AlgoOrderRootType | string\n ): OrderCreator<any> {\n // console.log(\"type\", type);\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\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 {\n OrderEntity,\n OrderType,\n OrderlyOrder,\n AlgoOrderType,\n ChildOrder,\n AlgoOrderRootType,\n AlgoOrderChildOrders,\n OrderSide,\n} from \"@orderly.network/types\";\nimport {\n OrderCreator,\n OrderFormEntity,\n ValuesDepConfig,\n VerifyResult,\n} from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport abstract class BaseOrderCreator<T> implements OrderCreator<T> {\n abstract create(values: T, config?: ValuesDepConfig): T;\n\n abstract validate(values: T, config: ValuesDepConfig): Promise<VerifyResult>;\n\n abstract orderType: OrderType;\n\n baseOrder(data: OrderlyOrder): 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 > = {\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 };\n\n if (data.visible_quantity === 0) {\n order.visible_quantity = data.visible_quantity;\n }\n\n const bracketOrder = this.parseBracketOrder(data);\n\n if (!bracketOrder) {\n return order;\n }\n\n return {\n ...order,\n algo_type: AlgoOrderRootType.BRACKET,\n\n child_orders: [bracketOrder],\n };\n }\n\n baseValidate(\n values: OrderlyOrder,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n const errors: {\n [P in keyof OrderEntity]?: { type: string; message: string };\n } = {};\n\n const { maxQty, symbol, markPrice } = configs;\n\n // @ts-ignore\n let { order_quantity, total, order_price, reduce_only, order_type } =\n values;\n\n const { min_notional, base_tick, quote_dp, quote_tick, base_dp } = 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 = {\n type: \"required\",\n message: \"Quantity is required\",\n };\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 = {\n type: \"min\",\n message: `Quantity must be greater than ${new Decimal(base_min).todp(\n base_dp\n )}`,\n };\n // errors.order_quantity = `quantity must be greater than ${base_min}`;\n } else if (qty.gt(maxQty)) {\n errors.order_quantity = {\n type: \"max\",\n message: `Quantity must be less than ${new Decimal(maxQty).todp(\n base_dp\n )}`,\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 notionalHintStr = checkNotional({\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 (notionalHintStr !== undefined && !reduce_only) {\n errors.total = {\n type: \"min\",\n message: notionalHintStr,\n };\n }\n\n this.validateBracketOrder(values, configs, errors);\n\n return Promise.resolve(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 parseBracketOrder(data: OrderlyOrder): AlgoOrderChildOrders | null {\n const orders: ChildOrder[] = [];\n\n const side = data.side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n if (!!data.tp_trigger_price) {\n const tp_trigger_price = data.tp_trigger_price;\n\n orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n side: side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: tp_trigger_price,\n symbol: data.symbol,\n reduce_only: true,\n });\n }\n\n if (!!data.sl_trigger_price) {\n const sl_trigger_price = data.sl_trigger_price;\n\n orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n side: side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: sl_trigger_price,\n symbol: data.symbol,\n reduce_only: true,\n });\n }\n\n if (!orders.length) return null;\n\n return {\n symbol: data.symbol,\n algo_type: AlgoOrderRootType.POSITIONAL_TP_SL,\n child_orders: orders,\n };\n }\n\n private validateBracketOrder(\n values: OrderlyOrder,\n config: ValuesDepConfig,\n errors: {\n [P in keyof OrderlyOrder]?: { type: string; message: string };\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 = {\n type: \"max\",\n message: `TP price must be less than ${quote_max}`,\n };\n }\n if (tpPrice.lt(quote_min)) {\n errors.tp_trigger_price = {\n type: \"min\",\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n\n if (side === OrderSide.BUY) {\n if (tpPrice.lte(_orderPrice)) {\n errors.tp_trigger_price = {\n type: \"tpPrice < order_price\",\n message: `TP must be greater than ${_orderPrice}`,\n };\n }\n }\n\n if (side === OrderSide.SELL) {\n if (tpPrice.gte(_orderPrice)) {\n errors.tp_trigger_price = {\n type: \"tpPrice > order_price\",\n message: `TP price must be less than ${_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 = {\n type: \"max\",\n message: `SL price must be less than ${quote_max}`,\n };\n }\n if (slPrice.lt(quote_min)) {\n errors.sl_trigger_price = {\n type: \"min\",\n message: `SL price must be greater than ${quote_min}`,\n };\n }\n\n if (side === OrderSide.BUY) {\n if (slPrice.gte(_orderPrice)) {\n errors.sl_trigger_price = {\n type: \"slPrice > order_price\",\n message: `SL price must be less than ${_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 = {\n type: \"slPrice < order_price\",\n message: `SL price must be greater than ${_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 = {\n // type: \"min\",\n // message: `TP price must be greater than ${_orderPrice}`,\n // };\n // }\n // if (slPrice.gte(_orderPrice)) {\n // errors.sl_trigger_price = {\n // type: \"max\",\n // message: `SL price must be less than ${_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 = {\n // type: \"max\",\n // message: `SL price must be less than ${_orderPrice}`,\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 = {\n // type: \"max\",\n // message: `TP price must be less than ${_orderPrice}`,\n // };\n // }\n\n // if (slPrice.lte(_orderPrice)) {\n\n // }\n // }\n\n return errors;\n }\n}\n","import { Decimal } from \"@orderly.network/utils\";\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 { OrderEntity } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nexport class MarketOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(values: OrderEntity) {\n const data = this.baseOrder(values);\n\n delete data[\"order_price\"];\n delete data[\"total\"];\n delete data[\"trigger_price\"];\n delete data[\"isStopOrder\"];\n\n return {\n ...data,\n };\n }\n validate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, configs);\n }\n}\n","import {\n OrderEntity,\n OrderSide,\n OrderType,\n OrderlyOrder,\n} from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order as orderUntil } from \"@orderly.network/perp\";\nimport { pick } from \"ramda\";\n\nconst { maxPrice, minPrice, scopePrice } = orderUntil;\n\nexport class LimitOrderCreator<\n T extends OrderEntity = OrderlyOrder\n> extends BaseOrderCreator<T> {\n create(values: OrderlyOrder, config?: ValuesDepConfig): T {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n\n this.totalToQuantity(order, config!);\n\n return pick(\n [\n \"symbol\",\n \"order_price\",\n \"order_quantity\",\n \"visible_quantity\",\n \"reduce_only\",\n \"side\",\n \"order_type\",\n \"algo_type\",\n \"child_orders\",\n ],\n order\n );\n\n // return order;\n }\n\n validate(\n values: OrderlyOrder,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, side } = values;\n\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"Price is required\",\n };\n } else {\n const price = new Decimal(order_price);\n const { symbol } = config;\n const { price_range, price_scope, quote_max, quote_min } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n const scopePriceNumber = scopePrice(\n config.markPrice,\n price_scope,\n side\n );\n\n const priceRange =\n side === \"BUY\"\n ? {\n min: scopePriceNumber,\n max: maxPriceNumber,\n }\n : {\n min: minPriceNumber,\n max: scopePriceNumber,\n };\n\n /// if side is 'buy', only check max price,\n /// if side is 'sell', only check min price,\n if (price.gt(quote_max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${quote_max}`,\n };\n } else {\n if (price.gt(priceRange?.max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${new Decimal(\n priceRange.max\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n\n if (price.lt(quote_min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${quote_min}`,\n };\n } else {\n if (price.lt(priceRange?.min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${new Decimal(\n priceRange.min\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n }\n\n // errors = this.validateBracketOrder(values, config, errors);\n\n return errors;\n });\n }\n\n orderType = OrderType.LIMIT;\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderEntity,\n TriggerPriceType,\n OrderlyOrder,\n} from \"@orderly.network/types\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order as orderUntil } from \"@orderly.network/perp\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { pick, values } from \"ramda\";\n\nconst { maxPrice, minPrice, scopePrice: scopePrice } = orderUntil;\n\nexport class StopLimitOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n create(\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\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 \"visible_quantity\",\n ],\n order\n );\n }\n\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, trigger_price, side } = values;\n const { symbol } = config;\n const { price_range, price_scope, quote_max, quote_min } = symbol;\n\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"Price is required\",\n };\n }\n\n // validate trigger price\n if (trigger_price > quote_max) {\n errors.trigger_price = {\n type: \"max\",\n message: `Trigger price must be less than ${quote_max}`,\n };\n } else if (trigger_price < quote_min) {\n errors.trigger_price = {\n type: \"min\",\n message: `Trigger price must be greater than ${quote_min}`,\n };\n } else {\n if (trigger_price && order_price) {\n const price = new Decimal(order_price);\n\n const maxPriceNumber = maxPrice(trigger_price, price_range);\n const minPriceNumber = minPrice(trigger_price, price_range);\n const scropePriceNumbere = scopePrice(\n trigger_price,\n price_scope,\n side\n );\n\n const priceRange =\n side === \"BUY\"\n ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\n }\n : {\n min: minPriceNumber,\n max: scropePriceNumbere,\n };\n\n /// if side is 'buy', only check max price,\n /// if side is 'sell', only check min price,\n if (price.gt(quote_max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${quote_max}`,\n };\n } else {\n if (price.gt(priceRange?.max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${new Decimal(\n priceRange.max\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n\n if (price.lt(quote_min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${quote_min}`,\n };\n } else {\n if (price.lt(priceRange?.min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${new Decimal(\n priceRange.min\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n }\n }\n\n return errors;\n });\n }\n\n orderType: OrderType.STOP_LIMIT = OrderType.STOP_LIMIT;\n}\n","import { OrderEntity } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nexport class GeneralOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(data: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(data),\n order_price: data.order_price,\n order_quantity: data.order_quantity,\n };\n }\n validate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return super.baseValidate(values, configs);\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderEntity,\n OrderType,\n TriggerPriceType,\n} from \"@orderly.network/types\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nimport { pick } from \"ramda\";\nimport { BaseOrderCreator } from \"./baseCreator\";\n\nexport class StopMarketOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n create(\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 // order_price: values.order_price,\n trigger_price: values.trigger_price!,\n algo_type: AlgoOrderRootType.STOP,\n type: OrderType.MARKET,\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 \"visible_quantity\",\n ],\n order\n );\n\n // return order;\n }\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, trigger_price, side } = values;\n const { symbol } = config;\n const { quote_max, quote_min } = symbol;\n\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n // validate trigger price\n if (trigger_price > quote_max) {\n errors.trigger_price = {\n type: \"max\",\n message: `Trigger price must be less than ${quote_max}`,\n };\n } else if (trigger_price < quote_min) {\n errors.trigger_price = {\n type: \"min\",\n message: `Trigger price must be greater than ${quote_min}`,\n };\n }\n\n return errors;\n });\n }\n}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class PostOnlyOrderCreator extends LimitOrderCreator {}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class FOKOrderCreator extends LimitOrderCreator {}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class IOCOrderCreator extends LimitOrderCreator {}\n","import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\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 =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: tp_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: sl_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\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 };\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 newData: AlgoOrderUpdateEntity[] = [];\n\n const needUpdateQty = values.quantity !== oldValue.quantity;\n\n data.child_orders.forEach((order) => {\n // find the old order\n let _order = Object.create(null);\n\n if (needUpdateQty) {\n _order[\"quantity\"] = data.quantity;\n }\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n _order[\"is_activated\"] = false;\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n // _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n _order[\"trigger_price\"] = order.trigger_price;\n }\n\n if (Object.keys(_order).length > 0) {\n _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n newData.push(_order);\n }\n }\n });\n\n if (needUpdateQty && newData.length < 2) {\n // if quantity is changed, need to update all child orders\n const missingOrders = oldValue.child_orders.filter(\n (order) => order.algo_order_id !== newData[0].order_id\n );\n\n if (missingOrders.length) {\n newData.push({\n quantity: Number(data.quantity),\n order_id: missingOrders[0].algo_order_id,\n });\n }\n }\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport {\n OrderCreator,\n OrderFormEntity,\n ValuesDepConfig,\n VerifyResult,\n} from \"./interface\";\n// import { values } from \"ramda\";\n// import { config } from \"@swc/core/spack\";\n// import { maxQty } from \"@orderly.network/perp\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport type AlgoOrderUpdateEntity = {\n trigger_price?: number;\n order_id: number;\n quantity?: number;\n is_activated?: boolean;\n};\n\nexport abstract class BaseAlgoOrderCreator<\n T extends AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n> implements OrderCreator<T>\n{\n abstract create(values: T, config: ValuesDepConfig): T;\n\n /**\n * base validate\n */\n validate(\n values: Partial<T>,\n config: ValuesDepConfig\n ): Promise<{\n [P in keyof T]?: {\n type: string;\n message: string;\n };\n }> {\n const result = Object.create(null);\n return Promise.resolve().then(() => {\n const { tp_trigger_price, sl_trigger_price, side } = values;\n\n const qty = Number(values.quantity);\n const maxQty = config.maxQty;\n const orderType = values.order_type;\n const { quote_max, quote_min, price_scope, quote_dp, base_min, min_notional } =\n config.symbol ?? {};\n \n if (!isNaN(qty) && qty > maxQty) {\n result.quantity = {\n message: `Quantity must be less than ${config.maxQty}`,\n };\n }\n if (!isNaN(qty) && qty < base_min) {\n result.quantity = {\n message: `Quantity must be greater than ${base_min}`,\n };\n }\n\n \n\n // if (!tp_trigger_price) {\n // result.tp_trigger_price = {\n // message: `TP price is required`,\n // };\n // }\n \n // if (!sl_trigger_price) {\n // result.tp_trigger_price = {\n // message: `SL price is required`,\n // };\n // }\n\n if (Number(tp_trigger_price) < 0) {\n result.tp_trigger_price = {\n message: `TP Price must be greater than 0`,\n };\n }\n\n if (Number(sl_trigger_price) < 0) {\n result.sl_trigger_price = {\n message: `SL Price must be greater than 0`,\n };\n }\n\n const mark_price =\n orderType === OrderType.MARKET || orderType == null\n ? config.markPrice\n : values.order_price\n ? Number(values.order_price)\n : undefined;\n\n // const notionalHintStr = checkNotional(mark_price, qty, min_notional);\n\n // console.log(\"check min notional\", notionalHintStr);\n \n\n // if (!!notionalHintStr) {\n // result.total = {\n // type: \"min\",\n // message: notionalHintStr,\n // };\n // }\n\n // there need use position side to validate\n // so if order's side is buy, then position's side is sell\n if (side === OrderSide.BUY && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 - price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (\n !!sl_trigger_price &&\n Number(sl_trigger_price) < slTriggerPriceScope\n ) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) > config.markPrice) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${config.markPrice}`,\n };\n }\n\n if (\n !!tp_trigger_price &&\n Number(tp_trigger_price) <= config.markPrice\n ) {\n result.tp_trigger_price = {\n message: `TP price must be greater than ${config.markPrice}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n\n if (side === OrderSide.SELL && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 + price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (\n !!sl_trigger_price &&\n Number(sl_trigger_price) > slTriggerPriceScope\n ) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < config.markPrice) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${config.markPrice}`,\n };\n }\n\n if (\n !!tp_trigger_price &&\n Number(tp_trigger_price) >= config.markPrice\n ) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${config.markPrice}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n\n return Object.keys(result).length > 0 ? result : null;\n });\n }\n\n abstract get type(): OrderType;\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderType,\n OrderType,\n TriggerPriceType,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { API } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLPositionOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>\n> {\n type = AlgoOrderRootType.POSITIONAL_TP_SL;\n\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: tp_trigger_price,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: sl_trigger_price,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\n\n return {\n algo_type: AlgoOrderRootType.POSITIONAL_TP_SL,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n // reduce_only: true,\n symbol: values.symbol,\n child_orders,\n };\n }\n\n crateUpdateOrder(\n values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n /**\n * The old value of the order\n */\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 const newData: {\n trigger_price?: number;\n order_id: number;\n is_activated?: boolean;\n }[] = [];\n data.child_orders.forEach((order) => {\n // find the old order\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n newData.push({\n is_activated: false,\n order_id: Number(oldOrder.algo_order_id),\n });\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n newData.push({\n trigger_price: order.trigger_price as number,\n order_id: Number(oldOrder.algo_order_id),\n });\n }\n }\n });\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderSide,\n} from \"@orderly.network/types\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\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<VerifyResult> {\n const result = Object.create(null);\n await Promise.resolve();\n const { tp_trigger_price, sl_trigger_price, side } = values;\n const qty = Number(values.quantity);\n const maxQty = config.maxQty;\n const type = values.order_type;\n const { quote_max, quote_min, price_scope, quote_dp } = config.symbol ?? {};\n\n const mark_price =\n type === OrderType.MARKET\n ? config.markPrice\n : values.order_price\n ? Number(values.order_price)\n : undefined;\n\n if (!isNaN(qty) && qty > maxQty) {\n result.quantity = {\n message: `Quantity must be less than ${config.maxQty}`,\n };\n }\n if (Number(tp_trigger_price) < 0) {\n result.tp_trigger_price = {\n message: `TP Price must be greater than 0`,\n };\n }\n if (Number(sl_trigger_price) < 0) {\n result.sl_trigger_price = {\n message: `SL Price must be greater than 0`,\n };\n }\n // there need use position side to validate\n // so if order's side is buy, then position's side is sell\n if (side === OrderSide.BUY && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 - price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (!!sl_trigger_price && Number(sl_trigger_price) < slTriggerPriceScope) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) <= mark_price) {\n result.tp_trigger_price = {\n message: `TP price must be greater than ${mark_price}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n if (side === OrderSide.SELL && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 + price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (!!sl_trigger_price && Number(sl_trigger_price) > slTriggerPriceScope) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) >= mark_price) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${mark_price}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n","import { OrderEntity, OrderType, OrderlyOrder } from \"@orderly.network/types\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { BracketOrder } from \"@orderly.network/types\";\n\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\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<VerifyResult> {\n const value = await super.validate(values, config);\n\n const bracketData = await bracketOrderValidator(values as any, config);\n\n console.log(\"bracket limit order creator\", value, bracketData);\n\n return { ...value, ...bracketData };\n }\n}\n","import { OrderlyOrder, OrderType } from \"@orderly.network/types\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\n\nexport class BracketMarketOrderCreator extends MarketOrderCreator {\n orderType = OrderType.MARKET;\n create(values: OrderlyOrder) {\n const order = super.create(values);\n return {\n ...order,\n quantity: order.order_quantity,\n type: order.order_type,\n price: order.order_price,\n };\n }\n\n \n async validate(\n values: OrderlyOrder,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\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}\n","import { OrderEntity, OrderlyOrder } from \"@orderly.network/types\";\nimport { pick } from \"ramda\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport class BBOOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(values: OrderEntity) {\n const order = {\n ...this.baseOrder(values),\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 \"level\",\n ],\n order\n );\n }\n\n async validate(\n values: OrderlyOrder,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, configs).then((errors) => {\n delete errors[\"total\"];\n\n let { order_quantity, order_price, reduce_only, level } = values;\n\n const { symbol } = configs;\n\n const { min_notional, base_tick, quote_dp, quote_tick, base_dp } =\n symbol || {};\n\n const notionalHintStr = checkNotional({\n base_tick,\n quote_tick,\n price: order_price,\n qty: order_quantity,\n min_notional,\n quote_dp,\n base_dp,\n });\n\n if (notionalHintStr !== undefined && !reduce_only) {\n errors.total = {\n type: \"min\",\n message: notionalHintStr,\n };\n }\n\n // if (level === undefined || level === null) {\n // errors.level = {\n // type: \"required\",\n // message: \"Level is required\",\n // };\n // }\n\n return errors;\n });\n }\n}\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useAccountInfo } from \"./useAccountInfo\";\n\nexport const useSymbolLeverage = (symbol: string) : number | \"-\" => {\n const { data: info } = useAccountInfo();\n\n const maxAccountLeverage = info?.max_leverage;\n\n const res = useQuery<any>(`/v1/public/info/${symbol}`, {\n dedupingInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n errorRetryCount: 2,\n errorRetryInterval: 200,\n });\n\n const maxSymbolLeverage = useMemo(() => {\n const base = res?.data?.base_imr;\n if (base) return 1 / base;\n }, [res]);\n\n const maxLeverage = useMemo(() => {\n if (!maxAccountLeverage || !maxSymbolLeverage) {\n return \"-\";\n }\n\n return Math.min(maxAccountLeverage, maxSymbolLeverage);\n }, [maxAccountLeverage, maxSymbolLeverage]);\n\n return maxLeverage;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SWRInfiniteResponse } from \"swr/infinite\";\nimport { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { useEffect } from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport enum AssetHistoryStatusEnum {\n NEW = \"new\",\n CONFIRM = \"confirm\",\n PROCESSING = \"processing\",\n COMPLETED = \"completed\",\n PENDDING = \"pendding\",\n PENDING_REBALANCE = \"pending_rebalance\",\n}\n\nconst useAssetsHistory = (options: {\n // token?: string;\n side?: string;\n // status?: AssetHistoryStatusEnum;\n startTime?: string;\n endTime?: string;\n page?: number;\n pageSize?: number;\n}) => {\n const { page = 1, pageSize = 10 } = options;\n const ee = useEventEmitter();\n\n const getKey = () => {\n // if (previousPageData && !previousPageData.length) return null;\n const searchParams = new URLSearchParams();\n\n searchParams.set(\"page\", page.toString());\n searchParams.set(\"size\", pageSize.toString());\n\n // if (options.token) searchParams.set(\"token\", options.token);\n if (options.side && options.side !== \"All\")\n searchParams.set(\"side\", options.side);\n // if (options.status) searchParams.set(\"status\", options.status);\n if (options.startTime) searchParams.set(\"start_t\", options.startTime);\n if (options.endTime) searchParams.set(\"end_t\", options.endTime);\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 const updateList = useDebouncedCallback(\n (data: any) => {\n mutate();\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 [\n data?.rows || [],\n {\n meta: data?.meta,\n isLoading,\n },\n ] as const;\n};\n\nexport { useAssetsHistory };\n","import { API, SDKError } from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { zero } from \"@orderly.network/utils\";\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(\"startDate and endDate 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) => data.rows.reverse(),\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 // (data?.rows as any[]).shift();\n\n return [\n data || [],\n {\n aggregateValue,\n },\n ] as const;\n};\n\nexport type UseStatisticsDailyReturn = ReturnType<typeof useStatisticsDaily>;\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useMemo, useRef } from \"react\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { SWRConfiguration } from \"swr\";\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 let { 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 & {\n annual_rate: number;\n })[]\n | 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 [\n parsedData,\n {\n meta: data?.meta,\n isLoading,\n isValidating,\n },\n ] as const;\n};\n\nexport type UseFundingFeeHistoryReturn = ReturnType<\n typeof useFundingFeeHistory\n>;\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useMemo } from \"react\";\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 let { 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 & {\n annual_rate: number;\n })[]\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 [\n parsedData,\n {\n meta: data?.meta,\n isLoading,\n isValidating,\n },\n ] as const;\n};\n\nexport type UseDistributionHistoryReturn = ReturnType<\n typeof useDistributionHistory\n>;\n","import { useEffect, useRef, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useConfig } from \"../useConfig\";\nimport { useWS } from \"../useWS\";\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nexport function useMaintenanceStatus() {\n // 0 for nothing, 2 for maintenance\n const [status, setStatus] = useState<number>(0);\n const [startTime, setStartTime] = useState<number>();\n const [endTime, setEndTime] = useState<number>();\n const [brokerName, setBrokerName] = useState<string>(\"Orderly network\");\n const { data: systemInfo, mutate } = useQuery<any>(`/v1/public/system_info?source=maintenance`, {\n revalidateOnFocus: false,\n errorRetryCount: 2,\n errorRetryInterval: 200,\n });\n const ws = useWS();\n\n const config = useConfig();\n\n useEffect(() => {\n if (!systemInfo) {\n return;\n }\n\n\n const brokerName = config.get(\"brokerName\");\n if (brokerName) {\n setBrokerName(brokerName);\n }\n // systemInfo.status = 2;\n // systemInfo.scheduled_maintenance = {\n // start_time: new Date(\"2024-08-27\").getTime(),\n // end_time: new Date(\"2024-08-30\").getTime(),\n // };\n console.log(\"--systemInfo\", systemInfo, brokerName);\n if (systemInfo.scheduled_maintenance) {\n setStartTime(systemInfo.scheduled_maintenance.start_time);\n setEndTime(systemInfo.scheduled_maintenance.end_time);\n }\n if (systemInfo.status === 2) {\n setStatus(2);\n }\n }, [systemInfo, config]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(`maintenance_status`, {\n onMessage: (message: any) => {\n setStatus(message.status);\n console.log(\"-- ws maintenance_status\", message);\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 { useEffect } from \"react\";\nimport { useWS } from \"../../useWS\";\n// import { useMarkPriceActions } from \"../useMarkPrice/useMarkPriceStore\";\nimport { Calculator, CalculatorScope } from \"../../types\";\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","import { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\n// import { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\nimport { useMarketStore } from \"./useMarket/market.store\";\n\nconst publicQueryOptions = {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n dedupingInterval: 1000 * 60 * 60 * 24,\n};\n\nexport const usePublicDataObserver = () => {\n const { setSymbolsInfo, setFundingRates } = useAppStore(\n (state) => state.actions\n );\n\n const { updateMarket } = useMarketStore((state) => state.actions);\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 const obj: Record<string, API.SymbolExt> = {};\n\n for (let index = 0; index < data.length; index++) {\n const item = data[index];\n const arr = item.symbol.split(\"_\");\n const base_dp = getPrecisionByNumber(item.base_tick);\n const quote_dp = getPrecisionByNumber(item.quote_tick);\n obj[item.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 };\n }\n setSymbolsInfo(obj);\n },\n });\n\n /**\n * funding rates\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 /**\n * markets info\n */\n useQuery<API.MarketInfo[]>(`/v1/public/futures`, {\n // revalidateOnFocus: false,\n ...publicQueryOptions,\n onSuccess(data: API.MarketInfo[]) {\n if (!data || !data?.length) {\n return [];\n }\n // console.log(data);\n updateMarket(data);\n },\n });\n};\n\nfunction getEstFundingRate(data: API.FundingRate) {\n if (!data) return;\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 { API } from \"@orderly.network/types\";\nimport { produce } from \"immer\";\nimport { create } from \"zustand\";\n\ntype MarketStore = {\n market: API.MarketInfoExt[];\n // marketSymbols: string[];\n marketMap: Record<string, API.MarketInfoExt> | null;\n};\n\ntype MarketActions = {\n updateMarket: (data: API.MarketInfoExt[]) => void;\n updateTicker: (data: API.MarketInfoExt[]) => void;\n};\n\nconst useMarketStore = create<MarketStore & { actions: MarketActions }>(\n (set, get) => ({\n market: [],\n // marketSymbols: [],\n marketMap: null,\n actions: {\n updateMarket: (data) => {\n // const symbols: string[] = [];\n const marketMap: Record<string, API.MarketInfoExt> = {};\n\n data.forEach((item) => {\n // symbols.push(item.symbol);\n marketMap[item.symbol] = item;\n });\n\n set({\n market: data,\n // marketSymbols: symbols,\n marketMap: marketMap,\n });\n },\n updateTicker: (data) => {\n // console.log(\n // \"updateTicker\",\n // data.filter((item) => item.symbol === \"PERP_ETH_USDC\")[0]\n // );\n set(\n produce((state) => {\n state.market = data;\n })\n );\n },\n },\n })\n);\n\nexport { useMarketStore };\n","import { ConfigKey, ConfigStore } from \"@orderly.network/core\";\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 Error(\"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 { ConfigKey, DefaultConfigStore } from \"@orderly.network/core\";\nimport { MarketsStorageKey } from \"./orderly/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 {\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useCallback,\n useRef,\n} from \"react\";\nimport * as amplitude from \"@amplitude/analytics-browser\";\nimport {\n useEventEmitter,\n useGetEnv,\n useConfig,\n ENVType,\n useAccount,\n useNetworkInfo,\n} from \"./\";\nimport {\n EnumTrackerKeys,\n TrackerListenerKeyMap,\n NetworkId,\n} from \"@orderly.network/types\";\n\nconst apiKeyMap = {\n dev: \"4d6b7db0fdd6e9de2b6a270414fd51e0\",\n qa: \"96476b00bc2701360f9b480629ae5263\",\n staging: \"dffc00e003479b86d410c448e00f2304\",\n prod: \"3ab9ae56ed16cc57bc2ac97ffc1098c2\",\n};\n\ninterface TrackerContextState {\n track: (key: string, params: { [key: string]: string }) => void;\n}\n\nexport const TrackerContext = createContext<TrackerContextState>({} as any);\n\nexport const useTrackerContext = () => useContext(TrackerContext);\n\nexport const OrderlyTrackerProvider = ({ children }: PropsWithChildren) => {\n const listenKeys = Object.keys(TrackerListenerKeyMap);\n const ee = useEventEmitter();\n const env = useGetEnv();\n const walletConnectRef = useRef(false);\n const { account, state } = useAccount();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const brokerId = useConfig(\"brokerId\");\n const getChainInfo = useNetworkInfo(networkId);\n console.log(\"env:\", env);\n\n const handleEvent = useCallback(\n (\n key: keyof typeof TrackerListenerKeyMap,\n params: {\n address?: string;\n connectWallet: {\n chainId: number;\n name: string;\n };\n }\n ) => {\n account?.accountId && amplitude.setUserId(account?.accountId);\n\n if (key === EnumTrackerKeys.WALLET_CONNECT) {\n if (walletConnectRef.current) return;\n const info = getChainInfo(\n params?.connectWallet?.chainId as number\n ).info;\n const { address = \"\", connectWallet } = params;\n const identify: { [key: string]: string | undefined } = {\n address,\n broker_id: brokerId,\n sdk_version:\n window?.__ORDERLY_VERSION__?.[\"@orderly.network/net\"] ?? \"\",\n };\n const identifyEvent = new amplitude.Identify();\n Object.keys(identify).map((subKey) => {\n identifyEvent.set(subKey, identify[subKey] as string);\n });\n amplitude.identify(identifyEvent);\n const eventProperties = {\n wallet: connectWallet?.name,\n network: info?.network_infos?.name,\n };\n amplitude.track(TrackerListenerKeyMap[key], eventProperties);\n walletConnectRef.current = true;\n return;\n }\n\n if (key === EnumTrackerKeys.SIGNIN_SUCCESS) {\n const info = getChainInfo(\n params?.connectWallet?.chainId as number\n ).info;\n\n amplitude.track(TrackerListenerKeyMap[key], {\n wallet: params?.connectWallet?.name,\n network: info?.network_infos?.name,\n });\n return;\n }\n amplitude.track(TrackerListenerKeyMap[key], params);\n },\n [account?.accountId, brokerId, state?.connectWallet?.name]\n );\n\n useEffect(() => {\n amplitude.init(apiKeyMap[env], { serverZone: \"EU\" });\n listenKeys.forEach((key) => {\n ee.on(key, (params = {}) => {\n setTimeout(() => {\n handleEvent(key as keyof typeof TrackerListenerKeyMap, params);\n }, 2000);\n });\n });\n return () => {\n listenKeys.forEach((key) => {\n ee.off(key);\n });\n };\n }, [env]);\n\n return (\n <TrackerContext.Provider\n value={{\n track: (key, params) => {\n amplitude.track(key, params);\n },\n }}\n >\n {children}\n </TrackerContext.Provider>\n );\n};\n","import { ChainNamespace } from \"@orderly.network/types\";\nimport type { EIP1193Provider } from \"@web3-onboard/common\";\nimport { createContext, useContext } from \"react\";\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: EIP1193Provider | any;\n accounts: WalletAccount[];\n chains: ConnectedChain[];\n instance?: unknown;\n}\n\nexport interface WalletConnectorContextState {\n connect: (options?: any) => Promise<WalletState[]>;\n disconnect: (options: any) => Promise<any[]>;\n connecting: boolean;\n setChain: (options: { chainId: string | number }) => Promise<any>;\n chains: any[];\n // switchChain: (options: { chainId: string }) => Promise<any>;\n wallet: WalletState;\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, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderlyOrder,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"../orderly/useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"../orderly/useCollateral\";\nimport { useMaxQty } from \"../orderly/useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"../orderly/useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\nimport { usePositions } from \"../orderly/usePositionStream/usePosition.store\";\n// import { VerifyResult } from \"../utils/createOrder\";\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 let preveValue = prev[k];\n let 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 maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\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(\"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(\"orderCreator 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.broker_id,\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 {\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\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 // return [values, input, value, markPrice];\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, config] = inputs;\n\n if (value === \"\") {\n return [{ ...values, total: \"\" }, input, value, markPrice, config];\n }\n\n let quantity = new Decimal(value);\n const quantityDP = quantity.dp();\n\n // check the length for precision and recalculate\n if (quantityDP > config.base_dp) {\n quantity = quantity.toDecimalPlaces(config.base_dp);\n values.order_quantity = quantity.toString();\n }\n\n // if(values.type === OrderType.MARKET) {\n\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, config];\n }\n const price = markPrice;\n values.order_price = \"\";\n values.total = quantity.mul(price).todp(2).toString();\n }\n\n 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(config.quote_dp).toString();\n } else {\n values.total = \"\";\n }\n }\n\n // const totalDP = total.dp();\n // total.todp(Math.min(config.quoteDP, totalDP));\n\n return [\n {\n ...values,\n },\n input,\n value,\n markPrice,\n config,\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\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 // values: newValues,\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_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 return tpslInputHandle;\n\n default:\n return otherInputHandle;\n }\n};\n\n//** format number */\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","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 { 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 // throw new Error(\"The ref must be a canvas element\");\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","import { OrderSide } 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 // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\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 /**\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\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 return this.loadImg(options.backgroundImg!).then((img) => {\n this.img = img;\n this.ctx.drawImage(\n this.img!,\n 0,\n 0,\n this.painter.width * this.painter.ratio,\n this.painter.height * this.painter.ratio\n );\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","import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\nimport { qrPaint } from \"./qrPaint\";\n\nexport class DataPaint extends BasePaint {\n private positionInfoCellWidth = 110;\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\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._ratio(position.left!),\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 left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\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 left = this._ratio(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,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\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 left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(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,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\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 isVertical = (options.data?.position.informations.length ?? 0) === 2;\n\n options.data?.position.informations.forEach((info, index) => {\n // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % 2) * this.positionInfoCellWidth;\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / 2) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\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 });\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._ratio(position.left!)\n : this._ratio(this.painter.width - 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 ? layout.textAlign : \"end\",\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._ratio(position.left!);\n\n if (hasReferral) {\n const metrics = this.drawDomainUrl(options, true);\n // console.log(\"metrics\", metrics);\n left =\n this._ratio(this.painter.width) -\n metrics.width -\n this._ratio(8 + position.left!);\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 ? layout.textAlign : \"end\",\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\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 qrPaint(this.ctx, {\n size: this._ratio(this.QRCODE_SIZE),\n padding: this._ratio(2),\n left: this._ratio(position.left!),\n top: this._ratio(top - this.QRCODE_SIZE),\n data: `${url.toString()}`,\n });\n\n this._drawText(options.data.referral.slogan, {\n left: this._ratio(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 });\n\n this._drawText(\"Referral Code\", {\n left: this._ratio(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 });\n\n this._drawText(options.data.referral.code, {\n left: this._ratio(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 });\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 },\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 } = 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 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","//@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 { 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","export {\n findTPSLFromOrder,\n findTPSLFromOrders,\n findPositionTPSLFromOrders,\n} from \"../orderly/usePositionStream/utils\";\n\nexport { cleanStringStyle } from \"./orderEntryHelper\";\n\nexport { getPositionBySymbol } from \"./swr\";\n\nexport { priceToPnl, calcTPSL_ROI } from \"../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nexport { formatNumber } from \"./orderEntryHelper\";\nexport type { ValueOf } from \"./createGetter\";","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 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) return null;\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 { max, min } from \"ramda\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { formatDate } from \"./format\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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: true,\n });\n\n return {\n data: dailyVolume,\n mutate,\n };\n};\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 { 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 { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport type CheckReferralCodeReturns = {\n isExist?: boolean;\n error: any;\n isLoading: boolean;\n};\n\nexport const useCheckReferralCode = (\n code?: string\n): CheckReferralCodeReturns => {\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 { useCallback, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { useLocalStorage } from \"../useLocalStorage\";\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 {\n data,\n mutate,\n isLoading,\n error,\n } = usePrivateQuery<RefferalAPI.ReferralInfo>(\"/v1/referral/info\", {\n revalidateOnFocus: true,\n });\n\n const isTrader = useMemo(() => {\n if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;\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') return undefined;\n return (data?.referrer_info?.referral_codes?.length || 0) > 0;\n }, [data?.referrer_info]);\n\n\n const [pinCodes] = useLocalStorage<string[]>(\"orderly_referral_codes\", [] as string[]);\n\n const getFirstRefCode = useCallback(() : RefferalAPI.ReferralCode | undefined => {\n\n if (!data?.referrer_info.referral_codes) return undefined;\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\n pinedItems.push({ ...referralCodes[index]});\n referralCodes.splice(index, 1);\n }\n\n }\n\n const newCodes = [...pinedItems, ...referralCodes];\n\n return newCodes?.[0];\n }, [pinCodes, data]);\n \n\n return {\n data,\n isTrader,\n isAffiliate,\n error,\n isLoading,\n getFirstRefCode,\n };\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","export enum TWType {\n normal = \"normal\",\n mm = \"mm\",\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\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 });\n\n return [data] as const;\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","// 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","[\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\nexport const useGetEnv = (): ENVType => {\n const { configStore } = useContext(OrderlyContext);\n const baseUrl =\n configStore.get(\"apiBaseUrl\") || \"https://api-evm.orderly.org\";\n switch (baseUrl) {\n case \"https://testnet-api-evm.orderly.org\":\n return ENVType.staging;\n case \"https://dev-api-iap-v2.orderly.org\":\n return ENVType.dev;\n case \"https://qa-api-evm.orderly.org\":\n return ENVType.qa;\n default:\n return ENVType.prod;\n }\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 { 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 { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { useAccount } from \"../useAccount\";\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 } = 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 return account?.createApiKey(365, {\n tag: \"manualCreated\",\n scope,\n });\n };\n\n\n const resetOrderlyKeyIPRestriction = (orderlyKey: string, mode: \"ALLOW_ALL_IPS\" | \"DISALLOW_ALL_IPS\") => {\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\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}","import {\n type API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\n\nimport { useCallback, useEffect } from \"react\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n} from \"../../utils/orderEntryHelper\";\nimport { compose, head } from \"ramda\";\nimport {\n type FullOrderState,\n // useOrderStore,\n} from \"./orderEntry.store\";\nimport { OrderCreator } from \"../../services/orderCreator/interface\";\nimport { hasTPSL } from \"./helper\";\nimport { calcTPSL_ROI } from \"../../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nimport { useOrderStore } from \"./useOrderStore\";\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 } = {}\n) => {\n // const orderEntity = useOrderEntryFromStore();\n\n const { symbolInfo } = options;\n const initialOrder = {\n side: OrderSide.BUY,\n order_type: OrderType.LIMIT,\n order_price: \"\",\n symbol,\n ...options.initialOrder,\n };\n\n const { actions: orderEntryActions, entry: orderEntity } =\n useOrderStore(initialOrder);\n\n // const orderEntryActions = useOrderStore((state) => state.actions);\n\n const calculate = useCallback(\n (\n values: Partial<FullOrderState>,\n fieldName:\n | \"symbol\"\n | \"order_type\"\n | \"order_type_ext\"\n | \"order_price\"\n | \"order_quantity\"\n | \"order_amount\"\n | \"visible_quantity\"\n | \"side\"\n | \"reduce_only\"\n | \"slippage\"\n | \"order_tag\"\n | \"level\"\n | \"post_only_adjust\"\n | \"total\"\n | \"algo_type\"\n | \"trigger_price_type\"\n | \"trigger_price\"\n | \"child_orders\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"tp_offset_percentage\"\n | \"tp_ROI\"\n | \"tp_trigger_price\"\n | \"sl_pnl\"\n | \"sl_offset\"\n | \"sl_offset_percentage\"\n | \"sl_ROI\"\n | \"sl_trigger_price\"\n | \"quantity\"\n | \"price\"\n | \"type\",\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 let 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 useEffect(() => {\n /// reset the symbol\n orderEntryActions.updateOrderByKey(\"symbol\", symbol);\n }, [orderEntryActions, symbol]);\n\n const setValue = (\n key: keyof FullOrderState,\n value: any,\n additional?: {\n markPrice: number;\n }\n ) => {\n if (!symbolInfo) {\n orderEntryActions.updateOrderByKey(key, value);\n console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n return;\n }\n\n // const values = useOrderStore.getState().entry;\n const { markPrice } = additional ?? { markPrice: 0 };\n\n let newValues = calculate(\n { ...orderEntity },\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 {\n // whether it is necessary to calculate tpsl ROI;\n if (newValues.tp_pnl && newValues.order_quantity) {\n newValues.tp_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.tp_pnl,\n });\n }\n\n if (newValues.sl_pnl && newValues.order_quantity) {\n newValues.sl_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.sl_pnl,\n });\n }\n }\n\n // calculateTPSL(newValues, markPrice);\n\n // console.log(\"newValues++++++\", newValues);\n\n orderEntryActions.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 } 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\n // whether it is necessary to calculate tpsl ROI;\n // if (newValues.tp_pnl && newValues.order_quantity) {\n\n // newValues.tp_ROI = calcTPSL_ROI({\n // qty: newValues.order_quantity,\n // price: newValues.order_price || markPrice,\n // pnl: newValues.tp_pnl,\n // });\n // }\n\n // if (newValues.sl_pnl && newValues.order_quantity) {\n // newValues.sl_ROI = calcTPSL_ROI({\n // qty: newValues.order_quantity,\n // price: newValues.order_price || markPrice,\n // pnl: newValues.sl_pnl,\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 orderEntryActions.updateOrder(values);\n console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n return;\n }\n\n // const prevValues = useOrderStore.getState().entry;\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 // orderEntryActions.updateOrder(newValues);\n });\n\n orderEntryActions.updateOrder(newValues);\n\n return newValues;\n };\n\n const onMarkPriceUpdated = useCallback(\n (markPrice: number, baseOn?: \"total\" | \"order_quantity\") => {\n // console.log(\"******\", baseOn);\n if (!options.symbolInfo) return;\n // const values = useOrderStore.getState().entry;\n let newValues;\n\n if (typeof baseOn === \"undefined\") {\n newValues = calculate(\n { ...orderEntity },\n \"order_price\",\n markPrice,\n markPrice,\n options.symbolInfo\n );\n } else {\n newValues = calculate(\n { ...orderEntity },\n baseOn,\n orderEntity[baseOn],\n markPrice,\n options.symbolInfo\n );\n }\n\n // if (hasTPSL(newValues)) {\n // newValues = calculateTPSL(\n // \"order_price\",\n // newValues,\n // markPrice,\n // options.symbolInfo\n // );\n // }\n\n if (hasTPSL(newValues)) {\n // whether it is necessary to calculate tpsl ROI;\n if (newValues.tp_pnl && newValues.order_quantity) {\n newValues.tp_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.tp_pnl,\n });\n }\n\n if (newValues.sl_pnl && newValues.order_quantity) {\n newValues.sl_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.sl_pnl,\n });\n }\n }\n\n orderEntryActions.updateOrder(newValues);\n },\n [calculate, options.symbolInfo, orderEntity, orderEntryActions]\n );\n\n const validate = (\n order: Partial<OrderlyOrder>,\n creator: OrderCreator<any>,\n options: { maxQty: number; markPrice: number }\n ) => {\n const { markPrice, maxQty } = options;\n\n return creator?.validate(order, {\n symbol: symbolInfo!,\n maxQty,\n markPrice,\n });\n };\n\n const generateOrder = (\n creator: OrderCreator<any>,\n options: { maxQty: number; markPrice: number }\n ) => {\n const order = creator.create(orderEntity, {\n ...options,\n symbol: symbolInfo!,\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 orderEntryActions.resetOrder(order);\n };\n\n return {\n formattedOrder: orderEntity,\n setValue,\n setValues,\n submit: submitOrder,\n reset: resetOrder,\n generateOrder,\n validate,\n onMarkPriceChange: onMarkPriceUpdated,\n } as const;\n};\n\nexport { useOrderEntryNextInternal };\n","import {\n AlgoOrderRootType,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\n\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\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.CLOSE_POSITION ||\n (order.algo_type && order.algo_type === AlgoOrderRootType.BRACKET) ||\n isBracketOrder(order);\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] as (keyof OrderlyOrder)[];\n\nexport const isBracketOrder = (order: Partial<OrderlyOrder>): boolean => {\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 symbolOrOrder: Partial<OrderlyOrder>,\n askAndBid: number[]\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 (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 (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[0];\n } else {\n price = askAndBid[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid[0]) {\n price = askAndBid[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid[1]) {\n price = askAndBid[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 } as const;\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 baseIMR: number;\n baseMMR: number;\n totalCollateral: number;\n markPrice: number;\n positions: any;\n }\n) => {\n const result = getPriceAndQty(order, 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 baseIMR,\n baseMMR,\n imr_factor,\n markPrice,\n totalCollateral,\n futures_taker_fee_rate,\n positions,\n } = inputs;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(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: imr_factor,\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\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 }\n) => {\n const result = getPriceAndQty(order, askAndBid);\n const { totalCollateral, positions, symbol } = inputs;\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","import { useState } from \"react\";\nimport { produce } from \"immer\";\nimport { OrderlyOrder, RequireKeys } from \"@orderly.network/types\";\n\nexport type FullOrderState = OrderlyOrder;\n\ntype OrderEntryStateEntity = RequireKeys<\n FullOrderState,\n \"side\" | \"order_type\" | \"symbol\"\n>;\n\nconst initialOrderState = {\n order_price: \"\",\n order_quantity: \"\",\n trigger_price: \"\",\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n tp_pnl: \"\",\n sl_pnl: \"\",\n tp_offset_percentage: \"\",\n sl_offset_percentage: \"\",\n tp_offset: \"\",\n sl_offset: \"\",\n total: \"\",\n // symbol: \"\",\n};\n\nexport const useOrderStore = (initialOrder: OrderEntryStateEntity) => {\n const [entry, setEntry] = useState<OrderEntryStateEntity>(initialOrder);\n const [estLeverage, setEstLeverage] = useState<number | null>(null);\n const [estLiquidationPrice, setEstLiquidationPrice] = useState<number | null>(\n null\n );\n const [errors, setErrors] = useState<\n Partial<Record<keyof FullOrderState, string>>\n >({});\n\n const updateOrder = (order: Partial<FullOrderState>) => {\n // setEntry((prev) => ({ ...prev, ...order }));\n setEntry(\n produce((draft) => {\n return { ...draft, ...order };\n })\n // (prev) => ({ ...prev, ...order })\n );\n };\n\n const updateOrderByKey = <K extends keyof FullOrderState>(\n key: K,\n value: FullOrderState[K]\n ) => {\n setEntry(\n produce((draft) => {\n draft[key] = value;\n })\n );\n };\n\n const restoreOrder = (order?: Partial<FullOrderState>) => {\n setEntry(produce((draft) => order as OrderEntryStateEntity));\n };\n\n const updateOrderComputed = (data: {\n estLeverage: number | null;\n estLiquidationPrice: number | null;\n }) => {\n setEstLeverage(data.estLeverage);\n setEstLiquidationPrice(data.estLiquidationPrice);\n };\n\n const resetOrder = (order?: Partial<FullOrderState>) => {\n setEntry(\n produce((draft) => ({\n ...draft,\n ...(order ?? initialOrderState),\n }))\n );\n };\n\n const hasTP_SL = () => {\n return (\n typeof entry.tp_trigger_price !== \"undefined\" ||\n typeof entry.sl_trigger_price !== \"undefined\"\n );\n };\n\n return {\n entry,\n estLeverage,\n estLiquidationPrice,\n errors,\n actions: {\n updateOrder,\n updateOrderByKey,\n restoreOrder,\n updateOrderComputed,\n resetOrder,\n hasTP_SL,\n },\n };\n};\n","import {\n useCollateral,\n useMaxQty,\n useSymbolsInfo,\n} from \"../../orderly/orderlyHooks\";\nimport { useOrderEntryNextInternal } from \"./useOrderEntry.internal\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMarkPriceActions } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport type { FullOrderState } from \"./orderEntry.store\";\nimport {\n SDKError,\n API,\n OrderlyOrder,\n OrderType,\n OrderLevel,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { VerifyResult } from \"../../services/orderCreator/interface\";\nimport { useMutation } from \"../../useMutation\";\nimport {\n calcEstLeverage,\n calcEstLiqPrice,\n getCreateOrderUrl,\n getOrderCreator,\n tpslFields,\n hasTPSL\n} from \"./helper\";\nimport { produce } from \"immer\";\nimport { useAccountInfo } from \"../../orderly/appStore\";\nimport { usePositions } from \"../../orderly/usePositionStream/usePosition.store\";\n\ntype OrderEntryParameters = Parameters<typeof useOrderEntryNextInternal>;\ntype Options = Omit<OrderEntryParameters[\"1\"], \"symbolInfo\">;\n\ntype OrderEntryReturn = {\n submit: (options?: { resetOnSuccess?: boolean }) => 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 /**\n * The estimated liquidation price.\n */\n estLiqPrice: number | null;\n /**\n * The estimated leverage after order creation.\n */\n estLeverage: number | null;\n helper: {\n /**\n * @deprecated Use `validate` instead.\n */\n validator: () => Promise<VerifyResult | null>;\n /**\n * Function to validate the order.\n * @returns {Promise<VerifyResult | null>} The validation result.\n */\n validate: () => Promise<VerifyResult | 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 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: VerifyResult | null;\n };\n /**\n * Indicates if a mutation (order creation) is in progress.\n */\n isMutating: boolean;\n\n markPrice: number | undefined;\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 and must be a string\");\n }\n\n const ee = useEventEmitter();\n\n const [meta, setMeta] = useState<{\n dirty: { [K in keyof OrderlyOrder]?: boolean };\n submitted: boolean;\n validated: boolean;\n errors: VerifyResult | 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\n // const [errors, setErrors] = useState<VerifyResult | null>(null);\n\n const actions = useMarkPriceActions();\n const symbolConfig = useSymbolsInfo();\n const accountInfo = useAccountInfo();\n const positions = usePositions();\n\n const symbolInfo: API.SymbolExt = symbolConfig[symbol]();\n const markPrice = actions.getMarkPriceBySymbol(symbol);\n\n const {\n formattedOrder,\n setValue: setValueInternal,\n setValues: setValuesInternal,\n validate,\n generateOrder,\n reset,\n // submit,\n ...orderEntryActions\n } = useOrderEntryNextInternal(symbol, {\n ...options,\n symbolInfo,\n });\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderlyOrder, any>(\n getCreateOrderUrl(formattedOrder)\n );\n\n const maxQty = useMaxQty(\n symbol,\n formattedOrder.side,\n formattedOrder.reduce_only\n );\n\n const updateOrderPrice = () => {\n const order_type_ext =\n formattedOrder.order_type_ext ?? lastOrderTypeExt.current;\n const level = formattedOrder.level ?? lastLevel.current;\n\n if (\n ![OrderType.ASK, OrderType.BID].includes(order_type_ext!) ||\n level === undefined\n ) {\n return;\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 && !isNaN(price)) {\n setValue(\"order_price\", price, {\n shouldUpdateLastChangedField: false,\n });\n }\n // console.log(\"updateOrderPrice\", askAndBid.current, price);\n };\n\n const updateOrderPriceByOrderBook = () => {\n const { order_type, order_type_ext, order_quantity } = formattedOrder;\n // const hasQty = order_quantity && Number(order_quantity) !== 0;\n const isBBO =\n order_type === OrderType.LIMIT &&\n [OrderType.ASK, OrderType.BID].includes(order_type_ext!);\n\n if (lastChangedField.current !== \"total\" && isBBO) {\n updateOrderPrice();\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 const onOrderBookUpdate = useDebouncedCallback((data: number[][]) => {\n askAndBid.current = data;\n updateOrderPriceByOrderBook();\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 // console.log(\"markPrice\", markPrice);\n\n if (\n (formattedOrder.order_type === OrderType.MARKET ||\n formattedOrder.order_type === OrderType.STOP_MARKET) &&\n markPrice\n ) {\n orderEntryActions.onMarkPriceChange(\n markPrice,\n lastChangedField.current as any\n );\n }\n }, [markPrice, formattedOrder.order_type]);\n\n const prepareData = useCallback(() => {\n return {\n markPrice: actions.getMarkPriceBySymbol(symbol),\n maxQty,\n };\n }, [maxQty, symbol]);\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 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 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 */\n const validateOrder = (): Promise<VerifyResult | null> => {\n return new Promise<VerifyResult | null>(async (resolve, reject) => {\n const creator = getOrderCreator(formattedOrder);\n\n const errors = await validate(formattedOrder, creator, prepareData());\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 estLiqPrice = useMemo(() => {\n const markPrice = actions.getMarkPriceBySymbol(symbol);\n if (!markPrice || !accountInfo) return null;\n\n return calcEstLiqPrice(formattedOrder, askAndBid.current[0], {\n baseIMR: symbolInfo?.base_imr,\n baseMMR: symbolInfo?.base_mmr,\n markPrice,\n totalCollateral,\n futures_taker_fee_rate: accountInfo.futures_taker_fee_rate,\n imr_factor: accountInfo.imr_factor[symbol],\n symbol,\n positions,\n });\n }, [formattedOrder, accountInfo, positions, totalCollateral, symbol]);\n\n const estLeverage = useMemo(() => {\n return calcEstLeverage(formattedOrder, askAndBid.current[0], {\n totalCollateral,\n positions,\n symbol,\n });\n }, [formattedOrder, accountInfo, positions, totalCollateral, symbol]);\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?: { resetOnSuccess?: boolean }) => {\n /**\n * validate order\n */\n const creator = getOrderCreator(formattedOrder);\n const errors = await validate(formattedOrder, creator, prepareData());\n const { resetOnSuccess = true } = 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 Error(\"Order validation failed\");\n }\n\n const order = generateOrder(creator, prepareData());\n\n const result = await doCreateOrder(order);\n\n if (result.success) {\n ee.emit(EnumTrackerKeys.PLACEORDER_SUCCESS, {\n side: order.side,\n order_type: order.order_type,\n tp_sl: hasTPSL(formattedOrder),\n reduce_only: !!order.reduce_only,\n });\n }\n\n if (result.success && resetOnSuccess) {\n reset();\n resetMetaState();\n }\n return result;\n // return submit();\n };\n\n return {\n ...orderEntryActions,\n submit: submitOrder,\n reset,\n resetErrors,\n resetMetaState,\n formattedOrder,\n maxQty,\n estLiqPrice,\n estLeverage,\n helper: {\n /**\n * @deprecated use validate instead\n */\n validator: validateOrder,\n validate: validateOrder,\n },\n freeCollateral,\n setValue,\n setValues,\n symbolInfo: symbolInfo || {},\n metaState: meta,\n isMutating,\n markPrice,\n };\n};\n\nexport { useOrderEntry };\n","import {\n OrderlyOrder,\n OrderSide,\n OrderType,\n RequireKeys,\n} from \"@orderly.network/types\";\nimport { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\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 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 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\nexport const useOrderEntryFromStore = () =>\n useOrderStore((state) => state.entry);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { VerifyResult } from \"../../services/orderCreator/interface\";\nimport { getOrderCreator } from \"./helper\";\nimport { useMarkPriceActions } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport { OrderSide, SDKError } from \"@orderly.network/types\";\nimport { useMaxQty } from \"../../orderly/useMaxQty\";\nimport { useSymbolsInfo } from \"../../orderly/useSymbolsInfo\";\nimport { useThrottledCallback } from \"use-debounce\";\n\nexport const useOrderEntity = (\n order: {\n symbol: string;\n side: OrderSide;\n reduce_only?: boolean;\n [key: string]: any;\n },\n options?: {\n maxQty?: number;\n }\n) => {\n if (!order.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n const [errors, setErrors] =\n useState<\n Partial<Record<keyof typeof order, { type: string; message: string }>>\n >();\n\n const maxQty = useMaxQty(order.symbol, order.side, order.reduce_only);\n const finalMaxQty = options?.maxQty ?? maxQty;\n\n const actions = useMarkPriceActions();\n const markPrice = actions.getMarkPriceBySymbol(order.symbol);\n const prepareData = useCallback(() => {\n return {\n markPrice: actions.getMarkPriceBySymbol(order.symbol),\n maxQty: finalMaxQty,\n };\n }, [finalMaxQty, order.symbol, order]);\n\n const symbolInfo = useSymbolsInfo();\n\n const validate = () => {\n return new Promise<VerifyResult | null>(async (resolve, reject) => {\n const creator = getOrderCreator(order);\n const _symbol = symbolInfo[order.symbol]();\n\n const errors = await creator?.validate(order, {\n symbol: _symbol,\n maxQty: finalMaxQty,\n markPrice,\n });\n const keys = Object.keys(errors);\n if (keys.length > 0) {\n setErrors(errors);\n\n reject(errors);\n } else {\n setErrors({});\n }\n // create order\n const orderEntity = creator.create(order, {\n ...prepareData(),\n symbol: _symbol,\n });\n resolve(orderEntity);\n });\n };\n\n const autoCheck = useThrottledCallback(\n () => {\n validate().then(\n () => {},\n (reject) => {}\n );\n },\n 50,\n {}\n );\n\n useEffect(() => {\n autoCheck();\n }, [order.order_price, order.order_quantity, order.trigger_price]);\n\n return {\n validate,\n errors,\n markPrice,\n symbolInfo,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useConfig } from \"./\";\n\nexport type RestrictedAreasReturns = {\n ip?: string;\n invalidRegions?: string[];\n restrictedAreasOpen?: boolean;\n contact?: {\n url?: string;\n text?: string;\n };\n};\n\ninterface ApiResponse<T> {\n success: boolean;\n data: T;\n}\n\ninterface RestrictedAreasData {\n invalid_web_country: string;\n invalid_web_city: string;\n}\n\ninterface IpInfoData {\n ip: string;\n city: string;\n region: string;\n checked: boolean;\n}\n\nexport interface IRestrictedAreasParams {\n enableDefault?: boolean;\n customRestrictedIps?: string[];\n customRestrictedRegions?: string[];\n contact?: { url?: string; text?: string };\n}\n\nexport const useRestrictedAreas = (\n params: IRestrictedAreasParams\n): RestrictedAreasReturns => {\n const {\n enableDefault = false,\n customRestrictedIps = [],\n customRestrictedRegions = [],\n contact = {},\n } = params;\n const apiBaseUrl: string = useConfig(\"apiBaseUrl\") as string;\n const [invalidWebCity, setInvalidWebCity] = useState<string[]>([]);\n const [invalidWebCountry, setInvalidWebCountry] = useState<string[]>([]);\n const [invalidRegions, setInvalidRegions] = useState<string[]>([]);\n const [allInvalidAreas, setAllInvalidAreas] = useState<string[]>([]);\n const [city, setCity] = useState<string>(\"\");\n const [region, setRegion] = useState<string>(\"\");\n const [ip, setIp] = useState<string>(\"\");\n const [restrictedAreasOpen, setRestrictedAreasOpen] =\n useState<boolean>(false);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const areaRes = await fetch(`${apiBaseUrl}/v1/restricted_areas`);\n const areaResdata: ApiResponse<RestrictedAreasData> =\n await areaRes.json();\n\n const ipRes = await fetch(`${apiBaseUrl}/v1/ip_info`);\n const ipData: ApiResponse<IpInfoData> = await ipRes.json();\n if (areaResdata.success && ipData.success) {\n // invalid regions\n const invalidCountries = areaResdata?.data?.invalid_web_country?.toLocaleLowerCase()\n ?.replace(/\\s+/g, \"\")\n .split(\",\");\n const invalidCities = areaResdata?.data?.invalid_web_city?.toLocaleLowerCase()\n ?.replace(/\\s+/g, \"\")\n .split(\",\");\n const combinedInvalidRegions = (\n enableDefault ? invalidCities.concat(invalidCountries) : []\n ).concat(\n customRestrictedRegions?.map((item) =>\n item?.replace(/\\s+/g, \"\")?.toLocaleLowerCase()\n )\n );\n const allInvalidAreas = [\n enableDefault ? areaResdata?.data?.invalid_web_country : \"\",\n enableDefault ? areaResdata?.data?.invalid_web_city : \"\",\n customRestrictedRegions?.join(\", \"),\n ].filter((item) => !!item)\n \n\n setInvalidWebCity(invalidCities);\n setInvalidWebCountry(invalidCountries);\n setInvalidRegions(combinedInvalidRegions);\n setAllInvalidAreas(allInvalidAreas)\n\n // user's current location\n const { city, region, ip } = ipData.data;\n setCity(city);\n setRegion(region);\n setIp(ip);\n if (\n combinedInvalidRegions.includes(\n ipData?.data?.city?.replace(/\\s+/g, \"\").toLocaleLowerCase()\n ) ||\n combinedInvalidRegions.includes(\n ipData?.data?.region?.replace(/\\s+/g, \"\").toLocaleLowerCase()\n ) ||\n customRestrictedIps.includes(ipData?.data?.ip)\n ) {\n setRestrictedAreasOpen(true);\n }\n }\n } catch (error) {\n console.error(\"API regions Error\", error);\n }\n };\n\n fetchData();\n }, [apiBaseUrl]);\n\n return {\n ip,\n invalidRegions: allInvalidAreas,\n restrictedAreasOpen,\n contact,\n };\n};\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/useQuery.ts","../src/utils/fetcher.ts","../src/useConfig.ts","../src/orderlyContext.ts","../src/useLazyQuery.ts","../src/useMutation.ts","../src/useAccountInstance.ts","../src/usePrivateQuery.ts","../src/middleware/signatureMiddleware.ts","../src/useAccount.ts","../src/useEventEmitter.ts","../src/usePrivateInfiniteQuery.ts","../src/useBoolean.ts","../src/usePreloadData.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/useNetworkInfo.ts","../src/index.ts","../src/useWS.ts","../src/useKeyStore.ts","../src/useSimpleDI.ts","../src/statusProvider.tsx","../src/useWsStatus.ts","../src/configProvider.tsx","../src/dataProvider.tsx","../src/orderly/usePrivateDataObserver.ts","../src/utils/swr.ts","../src/services/orderMerge/algoOrderMergeHandler.ts","../src/services/orderMerge/baseMergeHandler.ts","../src/utils/ws.ts","../src/services/orderMerge/regularOrderMergeHandler.ts","../src/orderly/appStore.ts","../src/useCalculatorService.ts","../src/orderly/calculator/baseCalculator.ts","../src/orderly/useMarkPrice/useMarkPriceStore.ts","../src/orderly/calculator/markPrice.ts","../src/orderly/calculator/calculatorContext.ts","../src/orderly/calculator/calculatorService.ts","../src/orderly/calculator/shardedScheduler.ts","../src/orderly/calculator/positions.ts","../src/orderly/usePositionStream/usePosition.store.ts","../src/next/apiStatus/apiStatus.store.ts","../src/orderly/calculator/portfolio.ts","../src/utils/parseHolding.ts","../src/utils/createGetter.ts","../src/orderly/useIndexPrice/useIndexPriceStore.ts","../src/orderly/calculator/indexPrice.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useIndexPrice.ts","../src/orderly/useOpenInterest.ts","../src/orderly/useFutures.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/orderbook.service.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useMarket.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkets.ts","../src/orderly/useMarkPricesStream.ts","../src/orderly/useLeverage.ts","../src/orderly/useFundingRate.ts","../src/orderly/useFundingRateHistory.ts","../src/orderly/usePositionStream/usePositionStream.ts","../src/orderly/usePositionStream/utils.ts","../src/orderly/useOrderStream/useOrderStream.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useCollateral.ts","../src/orderly/useMaxQty.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useSettleSubscription.ts","../src/orderly/useSymbolPriceRange.ts","../src/orderly/useTakeProfitAndStopLoss/index.ts","../src/orderly/useTakeProfitAndStopLoss/useTPSL.ts","../src/orderly/useTakeProfitAndStopLoss/tp_slUtils.ts","../src/services/orderCreator/factory.ts","../src/services/orderCreator/baseCreator.ts","../src/utils/createOrder.ts","../src/services/orderCreator/marketOrderCreator.ts","../src/services/orderCreator/limitOrderCreator.ts","../src/services/orderCreator/stopLimitOrderCreator.ts","../src/services/orderCreator/generalCreator.ts","../src/services/orderCreator/stopMarketOrderCreator.ts","../src/services/orderCreator/postOnlyCreator.ts","../src/services/orderCreator/fokCreator.ts","../src/services/orderCreator/iocCreator.ts","../src/services/orderCreator/tpslOrderCreator.ts","../src/services/orderCreator/baseAlgoCreator.ts","../src/services/orderCreator/tpslPositionOrderCreator.ts","../src/services/orderCreator/baseBracketOrderCreator.ts","../src/services/orderCreator/bracketLimitOrderCreator.ts","../src/services/orderCreator/bracketMarketOrderCreator.ts","../src/services/orderCreator/bboOrderCreator.ts","../src/orderly/useSymbolLeverage.ts","../src/orderly/statistics/useAssetHistory.ts","../src/orderly/statistics/useStatisticsDaily.ts","../src/orderly/statistics/useFundingFeeHistory.ts","../src/orderly/statistics/useDistributionHistory.ts","../src/orderly/useMaintenanceStatus.ts","../src/orderly/useStorageLedgerAddress.ts","../src/orderly/internal/useWSObserver.ts","../src/orderly/usePublicDataObserver.ts","../src/orderly/useMarket/market.store.ts","../src/dev/proxyConfigStore.ts","../src/extendedConfigStore.ts","../src/trackerProvider.tsx","../src/walletConnectorContext.tsx","../src/deprecated/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/useMediaQuery.ts","../src/usePoster.ts","../src/services/painter/basePaint.ts","../src/services/painter/backgroundPaint.ts","../src/services/painter/dataPaint.ts","../src/services/painter/qrPaint.ts","../src/services/painter/painter.ts","../src/services/painter/layout.config.ts","../src/utils/index.ts","../src/referral/useCommission.ts","../src/referral/swr.ts","../src/referral/useDistribution.ts","../src/referral/useRefereeHistory.ts","../src/referral/useDaily.ts","../src/referral/format.ts","../src/referral/useReferralRebateSummary.ts","../src/referral/useRefereeInfo.ts","../src/referral/useRefereeRebateSummary.ts","../src/referral/useCheckReferralCode.ts","../src/referral/useGetReferralCode.ts","../src/referral/useReferralInfo.tsx","../src/trading-rewards/useEpochInfo.ts","../src/trading-rewards/types.ts","../src/trading-rewards/useAllBrokers.ts","../src/trading-rewards/useCurEpochEstimate.ts","../src/trading-rewards/useAccountRewardHistory.ts","../src/trading-rewards/useGetClaimed.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/useWalletRewardsHistory.ts","../src/apiKeys/useApiKeyManager.ts","../src/next/useOrderEntry/useOrderEntry.internal.ts","../src/next/useOrderEntry/helper.ts","../src/next/useOrderEntry/useOrderStore.ts","../src/next/useOrderEntry/useOrderEntry.ts","../src/next/useOrderEntry/orderEntry.store.ts","../src/next/useOrderEntry/useOrderEntity.ts","../src/useRestrictedAreas.ts"],"names":["init","options","useSWRMutation","useContext","account","fetcher","data","useSWR","SimpleDI","getTimestamp","useConstant","AccountStatusEnum","get","useCallback","useState","useEffect","default","Account","getGlobalObject","createContext","useRef","WsNetworkStatus","useMemo","mutate","lensIndex","over","i","create","immer","positions","zero","unsettlementPnL","calculatorService","Decimal","useSWRSubscription","sortedData","symbol","depth","useAccountInfo","tabs","favorites","type","MarketsType","markets","get8hFunding","get24hChange","est_funding_rate","AlgoOrderRootType","OrderStatus","pathOr","AlgoOrderType","order","SDKError","includes","orders","OrderSide","state","prop","networkId","item","usdc","EnumTrackerKeys","isTestnet","ARBITRUM_MAINNET_CHAINID","ARBITRUM_TESTNET_CHAINID","balance","allowance","quantity","OrderType","values","quote_dp","base_dp","orderUntil","pick","maxPrice","minPrice","scopePrice","TriggerPriceType","oldOrder","omit","getOrderCreator","errors","useDebouncedCallback","AssetHistoryStatusEnum","startDate","endDate","brokerName","holding","jsx","identify","getPrecisionByNumber","getPriceAndQty","symbolOrOrder","unstable_serialize","query","ref","generateKeyFun","path","max","min","TWType","ENVType","DistributionId","compose","head","orderUtils","produce","symbolInfo","useOrderEntry","markPrice","initialOrderState","useOrderStore","allInvalidAreas","city","region","ip"],"mappings":"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","sourcesContent":["\ndeclare 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\"] = \"2.0.4\";\n};\n\nexport default \"2.0.4\";\n","import useSWR, { SWRResponse } from \"swr\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useConfig } from \"./useConfig\";\n\n/**\n * useQuery\n * @description for public api\n * @param query\n * @param options\n */\nexport const useQuery = <T>(\n query: Parameters<typeof useSWR>[\"0\"],\n options?: useQueryOptions<T>\n): SWRResponse<T> => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n const { formatter, ...swrOptions } = options || {};\n\n if (typeof apiBaseUrl === \"undefined\") {\n throw new Error(\"please add OrderlyConfigProvider to your app\");\n }\n\n // @ts-ignore\n return useSWR<T>(\n query,\n (url, init) =>\n fetcher(url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`, init, {\n formatter,\n }),\n swrOptions\n );\n};\n","import { get } from \"@orderly.network/net\";\nimport { type SWRConfiguration } from \"swr\";\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\n// export const onErrorRetry:SWRConfiguration['onErrorRetry'] = (error, key, config, revalidate, { retryCount })=>{\n// // if(error.status === 5)\n// if(retryCount >= 5) return ;\n\n// }\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { ConfigStore, type ConfigKey } from \"@orderly.network/core\";\n\nexport function useConfig(): ConfigStore;\nexport function useConfig<T = string>(key: ConfigKey, defaultValue?: T): T;\n\nexport function useConfig(key?: ConfigKey, defaultValue?: any) {\n const { configStore } = useContext(OrderlyContext);\n\n if (!configStore) {\n throw new Error(\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 { createContext } from \"react\";\n\nimport {\n type ConfigStore,\n type OrderlyKeyStore,\n type getWalletAdapterFunc,\n WalletAdapter\n} from \"@orderly.network/core\";\n\nimport { Chain, NetworkId } from \"@orderly.network/types\";\nimport { Chains } from \"./orderly/useChains\";\n\nexport type filteredChains = {\n mainnet?: Chain[];\n testnet?: Chain[];\n};\n\nexport type chainFilterFunc = (config: ConfigStore) => filteredChains;\n\nexport type chainFilter = filteredChains | chainFilterFunc;\n\nexport interface OrderlyConfigContextState {\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n // getWalletAdapter: getWalletAdapterFunc;\n walletAdapters: WalletAdapter[];\n\n networkId: NetworkId;\n\n /**\n * @hidden\n */\n onlyTestnet?: boolean;\n // extraApis:ExtraAPIs\n filteredChains?: filteredChains | null;\n customChains?: Chains<undefined, undefined>;\n}\n\nexport const OrderlyContext = createContext<OrderlyConfigContextState>({\n // configStore: new MemoryConfigStore(),\n} as OrderlyConfigContextState);\n\nexport const OrderlyProvider = OrderlyContext.Provider;\n","import useSWR from \"swr\";\nimport { fetcher } from \"./utils/fetcher\";\nimport useSWRMutation, {\n type SWRMutationConfiguration,\n SWRMutationResponse,\n} from \"swr/mutation\";\nimport { useConfig } from \"./useConfig\";\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<typeof useSWR>[\"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 Error(\"useQuery is only for public api\");\n // }\n\n if (typeof apiBaseUrl === \"undefined\") {\n throw new Error(\"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(options.arg)\n .map(\n ([key, value]) => `${key}=${encodeURIComponent(value as string)}`\n )\n .join(\"&\");\n url = `${url}?${queryString}`;\n }\n return fetcher(url, init, {\n formatter,\n });\n },\n swrOptions\n );\n};\n","import useSWRMutation, {\n TriggerWithOptionsArgs,\n type SWRMutationConfiguration,\n TriggerWithoutArgs,\n} from \"swr/mutation\";\nimport { mutate } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useConfig } from \"./useConfig\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 let 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 if (typeof params === \"object\" && Object.keys(params).length) {\n let 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 [\n mutation,\n {\n data,\n error,\n reset,\n isMutating,\n },\n ] as const;\n};\n","import useConstant from \"use-constant\";\nimport { Account, SimpleDI } from \"@orderly.network/core\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport const useAccountInstance = (): Account => {\n const { configStore, keyStore, walletAdapters } = useContext(OrderlyContext);\n\n if (!configStore)\n throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n\n if (!keyStore) {\n throw new Error(\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 useSWR, { SWRResponse } from \"swr\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\n/**\n * usePrivateQuery\n * @description for private api\n * @param query\n * @param options\n */\nexport const usePrivateQuery = <T>(\n query: string,\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 // @ts-ignore\n return useSWR<T>(\n () =>\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: (err) => {},\n }\n );\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { SimpleDI, Account, MessageFactor } from \"@orderly.network/core\";\nimport { useConfig } from \"../useConfig\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n let url = Array.isArray(args) ? args[0] : args;\n\n let account = SimpleDI.get<Account>(\"account\");\n let 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 { useCallback, useContext, useEffect, useState } from \"react\";\nimport { AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { useEventEmitter } from './useEventEmitter'\nimport { EnumTrackerKeys, AccountStatusEnum } from \"@orderly.network/types\";\n\nexport const useAccount = () => {\n const {\n configStore,\n keyStore,\n // onWalletConnect,\n // onWalletDisconnect,\n // onSetChain,\n } = useContext(OrderlyContext);\n\n if (!configStore)\n throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n\n if (!keyStore) {\n throw new Error(\n \"keyStore is not defined, please use OrderlyProvider and provide keyStore\"\n );\n }\n\n const account = useAccountInstance();\n\n const [state, setState] = useState<AccountState>(account.stateValue);\n const ee = useEventEmitter()\n\n\n const statusChangeHandler = (nextState: AccountState) => {\n if (AccountStatusEnum.Connected === nextState.status) {\n ee.emit(EnumTrackerKeys.WALLET_CONNECT, {\n ...nextState\n })\n }\n setState(() => nextState);\n };\n\n useEffect(() => {\n account.on(\"change:status\", statusChangeHandler);\n\n return () => {\n account.off(\"change:status\", statusChangeHandler);\n };\n }, []);\n\n const createOrderlyKey = useCallback(\n async (remember: boolean) => {\n ee.emit(EnumTrackerKeys.SIGNIN_SUCCESS,{\n ...state,\n ...account\n });\n return account.createOrderlyKey(remember ? 365 : 30);\n },\n [account,state]\n );\n\n const createAccount = useCallback(async () => {\n return account.createAccount();\n }, [account]);\n\n return {\n account,\n state,\n // info: {},\n // login,\n createOrderlyKey,\n createAccount,\n // disconnect,\n // connect,\n // setChain,\n // settlement,\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 useSWRInfinite, {\n type SWRInfiniteKeyLoader,\n type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { get } from \"@orderly.network/net\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nexport const usePrivateInfiniteQuery = <T>(\n getKey: SWRInfiniteKeyLoader,\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 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 { 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","import { useEffect, useMemo, useState } from \"react\";\nimport { useConfig, useQuery, useSWR } from \".\";\nimport { getGlobalObject } from \"@orderly.network/utils\";\n\nexport const usePreLoadData = () => {\n const [timestampOffsetInitialized, setTimestampOffsetInitialized] =\n useState(false);\n const { error: tokenError, data: tokenData } = useQuery(\n \"https://api-evm.orderly.org/v1/public/token\",\n {\n revalidateOnFocus: false,\n }\n );\n\n /// get service timestamp\n /// get local timestamp\n /// calculate delta offset = SD - LD\n /// save to getGlobalObject.__ORDERLY_timestamp_offset\n\n const apiBaseUrl = useConfig(\"apiBaseUrl\");\n\n const { data: systemInfo } = useSWR(\n \"/v1/public/system_info\",\n async (url: any, init: any) => {\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 sd = systemInfo.timestamp;\n const ld = Date.now();\n // @ts-ignore\n const diff = sd - ld;\n if (isNaN(diff)) {\n return;\n }\n (getGlobalObject() as any).__ORDERLY_timestamp_offset = diff;\n setTimestampOffsetInitialized(true);\n }\n }, [systemInfo, timestampOffsetInitialized]);\n\n const isDone = useMemo(() => {\n return !!tokenData && timestampOffsetInitialized;\n }, [timestampOffsetInitialized, tokenData]);\n\n return {\n error: tokenError,\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","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): [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 ? (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","import {\n Chain,\n useChains,\n} from \"./\";\nimport { NetworkId } from \"@orderly.network/types\";\n\nexport type CurrentChain = {\n id: number;\n info?: Chain;\n};\n\nexport const useNetworkInfo = (networkId: NetworkId) => {\n \n const [allChains, {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\n\n\n};\n","// import \"./utils/dev\";\nimport type { Immer } from \"immer\";\n\nexport { default as version } from \"./version\";\n\nexport { useQuery } from \"./useQuery\";\nexport { useLazyQuery } from \"./useLazyQuery\";\nexport { useMutation } from \"./useMutation\";\nexport { usePrivateQuery } from \"./usePrivateQuery\";\nexport { usePrivateInfiniteQuery } from \"./usePrivateInfiniteQuery\";\nexport { useBoolean } from \"./useBoolean\";\n\nexport { useAccount } from \"./useAccount\";\nexport { useAccountInstance } from \"./useAccountInstance\";\n\nexport { usePreLoadData } from \"./usePreloadData\";\n\nexport { useEventEmitter } from \"./useEventEmitter\";\n\nexport { useSessionStorage } from \"./useSessionStorage\";\nexport { useLocalStorage } from \"./useLocalStorage\";\nexport { useNetworkInfo } from \"./useNetworkInfo\";\n\nexport { parseJSON } from \"./utils/json\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\nexport { useKeyStore } from \"./useKeyStore\";\nexport { useSimpleDI } from \"./useSimpleDI\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./statusProvider\";\nexport { useWsStatus, WsNetworkStatus } from \"./useWsStatus\";\nexport type {\n ConfigProviderProps,\n ExclusiveConfigProviderProps,\n} from \"./configProvider\";\nexport { OrderlyConfigProvider } from \"./configProvider\";\nexport { OrderlyTrackerProvider } from \"./trackerProvider\";\nexport { ExtendedConfigStore } from \"./extendedConfigStore\";\n\nexport {\n WalletConnectorContext,\n type ConnectedChain,\n useWalletConnector,\n type WalletState,\n} from \"./walletConnectorContext\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nexport { useOrderEntry as useOrderEntry_deprecated } from \"./deprecated/useOrderEntry\";\nexport type {\n UseOrderEntryMetaState,\n OrderParams,\n} from \"./deprecated/useOrderEntry\";\n\nexport {\n default as useSWR,\n // SWRConfig,\n useSWRConfig,\n type SWRConfiguration,\n unstable_serialize,\n} from \"swr\";\n\nexport * from \"use-debounce\";\n\nexport { useMediaQuery } from \"./useMediaQuery\";\n\nexport { usePoster } from \"./usePoster\";\nexport { DefaultLayoutConfig } from \"./services/painter/layout.config\";\nexport type {\n PosterLayoutConfig,\n DrawOptions,\n} from \"./services/painter/basePaint\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nexport { cleanStringStyle } from \"./utils/orderEntryHelper\";\nexport { checkNotional } from \"./utils/createOrder\";\n\nexport * as utils from \"./utils\";\n\nexport type { WalletAdapter } from \"@orderly.network/core\";\n\nexport * from \"./referral\";\n\nexport * from \"./trading-rewards\";\n\nexport * from \"./apiKeys\";\n\n//--------- next hooks-----------\n// export { useOrderEntryNext } from \"./next/useOrderEntry/useOrderEntry\";\nexport * from \"./next/useOrderEntry\";\n\nexport {\n useRestrictedAreas,\n type RestrictedAreasReturns,\n type IRestrictedAreasParams,\n} from \"./useRestrictedAreas\";\n","import { useContext, useRef } from \"react\";\nimport { Account, AccountState, SimpleDI } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { getGlobalObject, getTimestamp } from \"@orderly.network/utils\";\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 (accountId: string) => {\n const signer = account.signer;\n const timestamp = getTimestamp();\n const result = await signer.signText(timestamp.toString());\n\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.stateValue.accountId\n ) {\n websocketClient.openPrivate(account.stateValue.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 nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n } else {\n websocketClient.closePrivate(1000, \"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 { useContext } from \"react\";\n\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 { PropsWithChildren, createContext } from \"react\";\nimport { useWsStatus, type WsNetworkStatus } from \"./useWsStatus\";\n\nexport interface StatusContextState {\n ws?: WsNetworkStatus;\n}\n\nexport const StatusContext = createContext({} as StatusContextState);\n\nexport const StatusProvider: React.FC<PropsWithChildren> = (props) => {\n const wsStatus = useWsStatus();\n\n return (\n <StatusContext.Provider value={{ ws: wsStatus }}>\n {props.children}\n </StatusContext.Provider>\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 console.log(\"status:change\", status);\n\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 () => ws.off(\"websocket:status\", () => {});\n }, []);\n\n return wsStatus;\n}\n","import type { FC, PropsWithChildren } from \"react\";\nimport React, { useLayoutEffect, useMemo } from \"react\";\nimport { OrderlyProvider } from \"./orderlyContext\";\nimport {\n ConfigStore,\n // MemoryConfigStore,\n OrderlyKeyStore,\n getWalletAdapterFunc,\n WalletAdapterOptions,\n LocalStorageStore,\n EtherAdapter,\n SimpleDI,\n Account,\n IContract,\n WalletAdapter,\n} from \"@orderly.network/core\";\n\nimport useConstant from \"use-constant\";\nimport { Chain, NetworkId } from \"@orderly.network/types\";\n// import { usePreLoadData } from \"./usePreloadData\";\nimport { DataCenterProvider } from \"./dataProvider\";\nimport { StatusProvider } from \"./statusProvider\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { ProxyConfigStore } from \"./dev/proxyConfigStore\";\nimport type { Chains } from \"./orderly/useChains\";\nimport { DefaultEVMWalletAdapter } from \"@orderly.network/default-evm-adapter\";\nimport { DefaultSolanaWalletAdapter } from \"@orderly.network/default-solana-adapter\";\nimport { EthersProvider } from \"@orderly.network/web3-provider-ethers\";\nimport { ExtendedConfigStore } from \"./extendedConfigStore\";\n// import { useParamsCheck } from \"./useParamsCheck\";\n\ntype filteredChains = {\n mainnet?: Chain[];\n testnet?: Chain[];\n};\n\ntype filterChainsFunc = (config: ConfigStore) => filteredChains;\n\nexport type BaseConfigProviderProps = {\n keyStore?: OrderlyKeyStore;\n contracts?: IContract;\n // getWalletAdapter?: getWalletAdapterFunc;\n walletAdapters?: WalletAdapter[];\n chainFilter?: filteredChains | filterChainsFunc;\n customChains?: Chains<undefined, undefined>;\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 // getWalletAdapter,\n walletAdapters,\n brokerId,\n brokerName,\n networkId,\n contracts,\n chainFilter,\n customChains,\n } = props;\n\n if (!brokerId && typeof configStore === \"undefined\") {\n console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n }\n\n // if (typeof walletAdapters === \"undefined\") {\n // console.error(\n // \"[OrderlyConfigProvider]: walletAdapters is required, please provide at least one wallet adapter, \" +\n // \"you can install the `@orderly.network/default-evm-adapter` or `@orderly.network/default-solana-adapter` package\"\n // );\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({ brokerId, brokerName, networkId })\n );\n }, [configStore, brokerId, brokerName, networkId]);\n\n const innerKeyStore = useMemo<OrderlyKeyStore>(() => {\n return keyStore || new LocalStorageStore(networkId);\n }, [networkId, keyStore]);\n\n // const innerGetWalletAdapter = useConstant<getWalletAdapterFunc>(() => {\n // return (\n // getWalletAdapter ||\n // ((options: WalletAdapterOptions) => new EtherAdapter(options))\n // );\n // });\n\n const innerWalletAdapters = useMemo<WalletAdapter[]>(() => {\n return (\n walletAdapters || [\n new DefaultEVMWalletAdapter(new EthersProvider()),\n new DefaultSolanaWalletAdapter(),\n ]\n );\n }, [walletAdapters]);\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\n return chainFilter;\n }, [props.chainFilter, innerConfigStore]);\n\n if (!account) {\n return null;\n }\n\n return (\n <OrderlyProvider\n value={{\n configStore: innerConfigStore,\n keyStore: innerKeyStore,\n // getWalletAdapter: innerGetWalletAdapter,\n networkId: innerConfigStore.get(\"networkId\") || networkId,\n filteredChains: filteredChains,\n walletAdapters: innerWalletAdapters,\n // apiBaseUrl,\n customChains,\n }}\n >\n <StatusProvider>\n <DataCenterProvider>{props.children}</DataCenterProvider>\n </StatusProvider>\n </OrderlyProvider>\n );\n};\n","import { PropsWithChildren, createContext, useContext, useRef } from \"react\";\nimport { usePrivateDataObserver } from \"./orderly/usePrivateDataObserver\";\nimport { usePreLoadData } from \"./usePreloadData\";\nimport { useWSObserver } from \"./orderly/internal/useWSObserver\";\nimport { useSimpleDI } from \"./useSimpleDI\";\nimport { CalculatorService } from \"./orderly/calculator/calculatorService\";\nimport { useCalculatorService } from \"./useCalculatorService\";\nimport { usePublicDataObserver } from \"./orderly/usePublicDataObserver\";\nexport type getKeyFunction = (index: number, prevData: any) => string | null;\n\ninterface DataCenterContextState {\n // orders\n // positions\n // balances\n //\n registerKeyHandler: (key: string, handler: getKeyFunction) => void;\n unregisterKeyHandler: (key: string) => void;\n}\n\nexport const DataCenterContext = createContext<DataCenterContextState>(\n {} as any\n);\n\nexport const useDataCenterContext = () => useContext(DataCenterContext);\n\nexport const DataCenterProvider = ({ children }: PropsWithChildren) => {\n /**\n * preload the required data for the app\n * hidden view while the required data is not ready\n */\n const { error, done } = usePreLoadData();\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 if (error) {\n return <div>Data load failed</div>;\n }\n\n if (!done) return null;\n\n return (\n <DataCenterContext.Provider\n value={{\n registerKeyHandler: (key, fun) => {\n getKeyHandlerMapRef.current.set(key, fun);\n },\n unregisterKeyHandler: (key) => {\n getKeyHandlerMapRef.current.delete(key);\n },\n }}\n >\n {children}\n </DataCenterContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { mutate } from \"swr\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\nimport { updateOrdersHandler, updateAlgoOrdersHandler } from \"../utils/swr\";\nimport { AlgoOrderMergeHandler } from \"../services/orderMerge/algoOrderMergeHandler\";\nimport { object2underscore } from \"../utils/ws\";\nimport { useLocalStorage } from \"../useLocalStorage\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useAppStore } from \"./appStore\";\nimport { useCalculatorService } from \"../useCalculatorService\";\nimport { CalculatorScope } from \"../types\";\nimport { useApiStatusActions } from \"../next/apiStatus/apiStatus.store\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { usePositionActions } from \"./orderlyHooks\";\nimport { AccountState, EVENT_NAMES } from \"@orderly.network/core\";\n\nexport const usePrivateDataObserver = (options: {\n // onUpdateOrders: (data: any) => void;\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 } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\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 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\n // updateHolding(holding);\n calculatorService.calc(CalculatorScope.PORTFOLIO, { holding });\n }\n },\n }\n );\n\n return () => unsubscribe();\n }, []);\n\n useEffect(() => {\n if (holding) {\n restoreHolding(holding);\n }\n }, [holding]);\n\n const [subOrder, setSubOrder] = useLocalStorage(\n \"orderly_subscribe_order\",\n true\n );\n\n const updateOrders = (\n data: WSMessage.AlgoOrder[] | WSMessage.Order,\n isAlgoOrder: boolean\n ) => {\n const keysMap = options.getKeysMap(\"orders\");\n\n keysMap.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 result = updateAlgoOrdersHandler(\n key,\n data as WSMessage.AlgoOrder[],\n prevData!\n );\n\n return result;\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 });\n };\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n if (subOrder !== true) return;\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 // positions\n useEffect(() => {\n if (!state.accountId) return;\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: any) => {\n const itemIndex = nextPositions.findIndex(\n (item) => item.symbol === row.symbol\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 if (item.averageOpenPrice === 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((item) => {\n return object2underscore(item);\n }),\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 { API } from \"@orderly.network/types\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { is, lensIndex, over, startsWith } from \"ramda\";\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 (args: {\n status?: string;\n symbol?: string;\n side?: string;\n size?: number;\n page?: number;\n dateRange?: {\n from?: Date;\n to?: Date;\n };\n }) =>\n (pageIndex: number, previousPageData: any): string | null => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\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 (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/orders?${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 result = mergeHandler.merge(key, message, orders);\n\n return result;\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) return orders;\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 {\n AlgoOrderRootType,\n AlgoOrderType,\n API,\n WSMessage,\n} from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\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 Error(\"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 (rootOrder_.algo_type === \"BRACKET\" && rootOrder_.child_orders.length > 0) {\n // @ts-ignore\n const childOrders = this.groupBracketChildOrders([\n ...rootOrder_.child_orders,\n ]);\n rootOrder_.child_orders = [childOrders];\n }\n\n return rootOrder_;\n }\n\n static groupBracketChildOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const innerOrders = [...orders];\n const rootOrderIndex = innerOrders.findIndex(\n (order) =>\n order.algoType !== AlgoOrderType.STOP_LOSS &&\n order.algoType !== AlgoOrderType.TAKE_PROFIT\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"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","import { WSMessage, API, OrderStatus } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\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 (child.algo_status === OrderStatus.FILLED && child.is_activated && !child.updated_time) {\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 ) {\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 // 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 ) {\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 { camelCaseToUnderscoreCase } from \"@orderly.network/utils\";\n\nexport function object2underscore(obj: any) {\n return Object.keys(obj).reduce((acc, key) => {\n acc[camelCaseToUnderscoreCase(key)] = obj[key];\n return acc;\n }, {} as any);\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 { create } from \"zustand\";\nimport { API } from \"@orderly.network/types\";\nimport { immer } from \"zustand/middleware/immer\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { WSMessage } from \"@orderly.network/types\";\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 totalValue: Decimal | null;\n availableBalance: number;\n unsettledPnL: number;\n totalUnrealizedROI: number;\n};\n\nexport type AppState = {\n accountInfo?: API.AccountInfo;\n // positions: API.PositionExt[];\n symbolsInfo?: Record<string, API.SymbolExt>;\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 // setPositions: (positions: API.PositionExt[]) => void;\n setSymbolsInfo: (symbolsInfo: Record<string, API.SymbolExt>) => 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\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 availableBalance: 0,\n unsettledPnL: 0,\n totalUnrealizedROI: 0,\n },\n appState: {\n positionsLoading: false,\n ordersLoading: false,\n fundingRatesLoading: false,\n ready: false,\n } as AppStatus,\n actions: {\n cleanAll: () => {\n set((state) => {\n state.accountInfo = undefined;\n state.portfolio = {\n totalCollateral: zero,\n totalValue: null,\n freeCollateral: zero,\n availableBalance: 0,\n unsettledPnL: 0,\n totalUnrealizedROI: 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 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 holding.holding = msg[key].holding;\n holding.frozen = msg[key].frozen;\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","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 { 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 { 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 { 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\";\nimport { useMarketStore } from \"../useMarket/market.store\";\nimport { usePositionStore } from \"../usePositionStream/usePosition.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\n portfolio?: Portfolio;\n markPrices?: Record<string, number> | null;\n // positions: API.PositionTPSLExt[];\n // markets: Record<string, API.MarketInfoExt> | null;\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 this.portfolio =\n this.output[\"portfolio\"] ||\n (useAppStore.getState().portfolio as Portfolio);\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 }\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 this.portfolio = 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\";\nimport { PositionCalculator } from \"./positions\";\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 const first = this.calcQueue.shift();\n if (first) {\n // console.log(\"[calcQueue:]\", first.scope);\n const { scope, data, options } = first;\n const ctx = context || 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 if (!options?.skipUpdate) {\n this.scheduler.update(scope, calculators, ctx.outputToValue());\n }\n }\n if (this.calcQueue.length) {\n // requestAnimationFrame(() => this.handleCalcQueue());\n // setTimeout(() => this.handleCalcQueue(ctx), 0);\n this.handleCalcQueue(ctx);\n }\n }\n }\n stop() {\n this.calcQueue = [];\n this.ctx?.clearCache();\n }\n\n private get windowIsVisible() {\n if (typeof document === \"undefined\") return true;\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 private computation<T, R>(\n data: T[],\n processor: ShardProcessor<T, R[]>,\n onComplete: (results: R[]) => void\n ): void {\n let index = 0; // Current starting index of the shard\n const results: R[][] = []; // Used to store the calculation results of each shard\n const estimatedShardSize = Math.min(data.length, 2); // Initial estimated shard size\n // const estimatedShardSize = 1;\n\n // Function to process shards\n function processNextShard(deadline: IdleDeadline) {\n // Dynamic calculation of shard size\n let shardSize = estimatedShardSize;\n\n // If the remaining time is not enough to process the current shard size, reduce the shard size\n while (index + shardSize <= data.length && deadline.timeRemaining() > 0) {\n const shard = data.slice(index, index + shardSize);\n const result = processor(shard);\n results.push(result);\n index += shardSize;\n\n // Dynamic adjustment of shard size\n if (deadline.timeRemaining() < 1) {\n shardSize = Math.max(1, Math.floor(shardSize / 2)); // Reduce shard size\n } else {\n shardSize = Math.min(data.length - index, shardSize * 2); // Increase shard size\n }\n }\n\n if (index < data.length) {\n // There are still unprocessed data shards, request the next idle callback\n safeRequestIdleCallback(processNextShard, {\n timeout: 1000,\n });\n } else {\n onComplete(results.flat());\n }\n }\n\n safeRequestIdleCallback(processNextShard, {\n timeout: 1000,\n });\n }\n}\n\nexport { ShardingScheduler, safeRequestIdleCallback, safeCancelIdleCallback };\n","import { API } from \"@orderly.network/types\";\n\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\n\nimport { account, positions } from \"@orderly.network/perp\";\n\nimport { usePositionStore } from \"../usePositionStream/usePosition.store\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { propOr } from \"ramda\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\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 // 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 ...item,\n mark_price: markPrice[item.symbol] || item.mark_price,\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\n let 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 imr = account.IMR({\n maxLeverage: accountInfo.max_leverage,\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 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 };\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 } = portfolio;\n\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: totalCollateral.toNumber(),\n positionQty: item.position_qty,\n positions: rows,\n MMR: item.mmr,\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 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 let 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 { 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 { 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 { API } from \"@orderly.network/types\";\nimport { CalculatorCtx, CalculatorScope } from \"../../types\";\nimport { BaseCalculator } from \"./baseCalculator\";\nimport { account } from \"@orderly.network/perp\";\nimport { pathOr } from \"ramda\";\nimport { parseHolding } from \"../../utils/parseHolding\";\nimport { Portfolio, useAppStore } from \"../appStore\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport { MarketCalculatorName } from \"./markPrice\";\n\nexport const PortfolioCalculatorName = \"portfolio\";\nclass PortfolioCalculator extends BaseCalculator<any> {\n name = PortfolioCalculatorName;\n\n calc(scope: CalculatorScope, data: any, ctx: CalculatorCtx) {\n let markPrices, positions;\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.POSITION) {\n // positions = data;\n // } else {\n 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 holding = holding.map((item) => {\n if (data.holding[item.token]) {\n return {\n ...item,\n holding: data.holding[item.token].holding,\n frozen: data.holding[item.token].frozen,\n };\n }\n\n return item;\n });\n }\n\n const accountInfo = ctx.accountInfo;\n const symbolsInfo = ctx.symbolsInfo;\n\n return this.format({\n holding,\n positions,\n markPrices,\n accountInfo,\n symbolsInfo,\n });\n }\n\n private getPortfolio(ctx: CalculatorCtx) {\n return (\n ctx.get<Portfolio>((output) => output[this.name]) ||\n (useAppStore.getState().portfolio as Portfolio)\n );\n }\n\n private format(inputs: {\n holding?: API.Holding[];\n positions: API.PositionsTPSLExt;\n markPrices: Record<string, number> | null;\n accountInfo: API.AccountInfo;\n symbolsInfo: Record<string, API.SymbolExt>;\n }) {\n const { holding, positions, markPrices, accountInfo, symbolsInfo } = inputs;\n\n if (\n !holding ||\n !positions ||\n !Array.isArray(positions.rows) ||\n !markPrices ||\n !accountInfo\n ) {\n return null;\n }\n\n const unsettledPnL = pathOr(0, [\"total_unsettled_pnl\"])(positions);\n const unrealizedPnL = pathOr(0, [\"total_unreal_pnl\"])(positions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n const usdc = holding.find((item) => item.token === \"USDC\");\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettledPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettledPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n const totalInitialMarginWithOrders = account.totalInitialMarginWithQty({\n positions: positions.rows,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo: createGetter({ ...symbolsInfo }),\n });\n\n const freeCollateral = account.freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\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 };\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 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 });\n }\n }\n}\n\nexport { PortfolioCalculator };\n","import { API } from \"@orderly.network/types\";\n\ntype NonUSDCHolding = {\n holding: number;\n markPrice: number;\n // margin replacement rate, default 0\n discount: number;\n};\n\nexport const parseHolding = (\n holding: API.Holding[],\n markPrices: Record<string, number>\n): [number, NonUSDCHolding[]] => {\n // if (!holding || !markPrices) {\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 nonUSDC.push({\n holding: item.holding,\n markPrice: markPrices[item.token] ?? 0,\n // markPrice: 0,\n discount: 0,\n });\n }\n });\n\n return [USDC_holding, nonUSDC];\n};\n","import { API } from \"@orderly.network/types\";\nimport { isNil } from \"ramda\";\n\ntype objectDepth = 1 | 2;\ntype propertyType<D, K, F> = D extends 1 ? K : F;\n\n// {\n// // [P in K]: (key: P, defaultValue?: T[P]) => T[K][P];\n// [P in K]: (key: P, defaultValue?: T[P]) => T[K][P];\n// }\n\n// type KeyOf<T> = keyof T;\nexport type ValueOf<T> = T[keyof T];\n\n// export function createGetter<T extends Record<string, any>, K extends keyof T>(\nexport function createGetter<\n T extends any,\n K extends string = string,\n Key = keyof T\n>(\n data: Record<string, T> | null | undefined,\n depth: objectDepth = 2\n): (typeof depth extends 1\n ? { [P in K]: (defaultValue?: any) => any }\n : { [P in K]: (key?: Key, defaultValue?: ValueOf<T>) => any }) & {\n isNil: boolean;\n} {\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(\n target: any,\n property: propertyType<typeof depth, keyof T, any>,\n receiver\n ): 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?: Key, defaultValue?: any) => {\n if (key) {\n return getValue((target as any)[property]?.[key], defaultValue);\n } else {\n return getValue(target[property], defaultValue);\n }\n };\n },\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 { 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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, removeTrailingZeros } from \"@orderly.network/utils\";\nimport { max, min } from \"ramda\";\nimport { SDKError } from \"@orderly.network/types\";\nimport orderbooksService from \"./orderbook.service\";\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([\n Number.NaN,\n Number.NaN,\n Number.NaN,\n Number.NaN,\n ] as OrderBookItem);\n\nconst asksSortFn = (a: OrderBookItem, b: OrderBookItem) => a[0] - b[0];\n\nconst bidsSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\n// const commonSortFn = (a: OrderBookItem, b: OrderBookItem) => b[0] - a[0];\n\nconst reduceItems = (\n depth: number | undefined,\n level: number,\n data: OrderBookItem[],\n asks = false\n) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n let newData = [...data];\n const result: OrderBookItem[] = [];\n\n //\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n if (depth < 1 && depth > 0 && priceKey.toString().indexOf(\".\") !== -1) {\n const priceStr = price.toString();\n const index = priceStr.indexOf(\".\");\n const decimal = priceStr.slice(index + 1);\n const decimalDepth = removeTrailingZeros(depth)\n .toString()\n .slice(2).length;\n const decimalStr = decimal.slice(0, min(decimal.length, decimalDepth));\n priceKey = new Decimal(\n priceStr.slice(0, index) + \".\" + decimalStr\n ).toNumber();\n }\n\n // console.log(`reduce items price: ${price}, priceKey: ${priceKey}, depth: ${depth}, resetPriceKey: ${price.toString === priceKey.toString}`);\n // console.log(`ask: ${asks} reduce items price: ${priceKey}`);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n const newAmount = new Decimal(quantity * price)\n .add(result.length > 0 ? result[result.length - 1][3] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity, newAmount]);\n // if the total is greater than the level, break\n // TODO:\n // if (i + 1 >= level) {\n // break;\n // }\n }\n\n return result;\n};\n\n/**\n * @name reduceOrderbook\n * @param depth\n * @param level\n * @param data\n */\nexport const reduceOrderbook = (\n depth: number | undefined,\n level: number,\n padding: boolean,\n data: OrderbookData\n): OrderbookData => {\n let asks = reduceItems(depth, level, data.asks, true);\n\n let bids = reduceItems(depth, level, data.bids);\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 : 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\n if (askPrice <= bidPrice) {\n // console.log(\"xxxxxxxxxxx reset ask list begin\", [...asks], { ...asks[0] });\n asks.shift();\n let logStr = \"\";\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n const quantity = asks[index][1] + askQty;\n asks[index][1] = quantity;\n asks[index][2] = quantity;\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] = Math.ceil(quantity) * asks[index][0];\n } else {\n // asks[index][3] += newAmount;\n // FIXME: fix this code later\n asks[index][3] =\n asks[index][0] * asks[index][1] + asks[index - 1][3];\n }\n logStr += `index: ${index} ${asks[index]}\\n`;\n }\n // console.log(\"xxxxxxxxxxx reset ask list end\", logStr);\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) return update;\n\n data = data.filter(([price]) => !isNaN(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], index) => p === price);\n //\n if (index === -1) {\n if (quantity === 0) continue;\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\nconst INIT_DATA = { asks: [], bids: [] };\n\n/**\n * @name useOrderbookStream\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(\"useOrderbookStream requires a symbol\");\n }\n\n const level = options?.level ?? 10;\n const padding = options?.padding ?? true;\n\n const [requestData, setRequestData] = useState<OrderbookData | null>(null);\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 [depth, setDepth] = useState<number | undefined>();\n\n // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n if (typeof tick === \"undefined\") 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 (e) {}\n return [tick];\n }, [config(\"quote_tick\")]);\n\n useEffect(() => {\n setDepth(config(\"quote_tick\"));\n }, [config(\"quote_tick\")]);\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 let orderBookUpdateSub: any;\n let fullOrderBookUpdateSub: any;\n 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 { asks, bids, prevTs } = wsData;\n orderbooksService.updateOrderbook(\n symbol,\n { asks, bids, ts, prevTs },\n () => (needRequestFullOrderbook = true)\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 const { symbol, asks, bids, ts } = message.data;\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 onDepthChange = useCallback((depth: number) => {\n //\n setDepth(() => depth);\n }, []);\n\n const reducedData = reduceOrderbook(depth, level, padding, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0-4 and bids0-4\n useEffect(() => {\n const updateData = [\n [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.bids?.[0]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 2]?.[0],\n reducedData.bids?.[1]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 3]?.[0],\n reducedData.bids?.[2]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 4]?.[0],\n reducedData.bids?.[3]?.[0],\n ],\n [\n reducedData.asks?.[reducedData.asks.length - 5]?.[0],\n reducedData.bids?.[4]?.[0],\n ],\n ];\n eventEmitter.emit(\"orderbook:update\", updateData);\n }, [\n reducedData.asks?.[reducedData.asks.length - 1]?.[0],\n reducedData.asks?.[reducedData.asks.length - 2]?.[0],\n reducedData.asks?.[reducedData.asks.length - 3]?.[0],\n reducedData.asks?.[reducedData.asks.length - 4]?.[0],\n reducedData.asks?.[reducedData.asks.length - 5]?.[0],\n reducedData.bids?.[0]?.[0],\n reducedData.bids?.[1]?.[0],\n reducedData.bids?.[2]?.[0],\n reducedData.bids?.[3]?.[0],\n reducedData.bids?.[4]?.[0],\n ]);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n 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 (isNaN(asksFrist) || isNaN(bidsFirst) || !ticker) return 0;\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 { onDepthChange, depth, allDepths: depths, isLoading, onItemClick },\n ];\n};\n\nexport type useOrderbookStreamReturn = ReturnType<typeof useOrderbookStream>;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useIndexPrice } from \"./useIndexPrice\";\nimport { useOpenInterest } from \"./useOpenInterest\";\nimport { useFutures } from \"./useFutures\";\n\nexport const useTickerStream = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useFuturesForSymbol requires a symbol\");\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 ws = useWS();\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n `${symbol}@ticker`,\n {\n onMessage: (message: any) => {\n if (message.symbol !== symbol) return;\n\n setTicker(message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n //\n // },\n }\n );\n\n return () => {\n setTicker(undefined);\n unsubscribe?.();\n };\n }, [symbol]);\n\n const { data: markPrice } = useMarkPrice(symbol);\n const { data: indexPrice } = useIndexPrice(symbol);\n const { data: openInterest } = useOpenInterest(symbol);\n const { data: futures } = useFutures();\n\n const value = useMemo(() => {\n //\n if (!info) return null;\n if (!ticker || ticker.symbol !== symbol) return info;\n\n const futureIndex = futures?.findIndex(\n (item: any) => item.symbol === symbol\n );\n let _oi = openInterest;\n if (!_oi && futureIndex !== -1 && futures) {\n // @ts-ignore\n _oi = futures[futureIndex].open_interest;\n }\n\n const config: any = {\n ...info,\n mark_price: markPrice,\n index_price: indexPrice,\n open_interest: _oi,\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, futures, openInterest]);\n\n return value as API.MarketInfo & { change?: number; \"24h_change\"?: number };\n};\n","import { useEffect, useState } from \"react\";\nimport { useWS } from \"../useWS\";\n// import useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n const [price, setPrice] = useState(0);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n setPrice(message.price);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n }, [symbol]);\n\n // return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n // const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n // onMessage: (message: any) => {\n // next(null, message.price);\n // },\n // });\n\n // return () => {\n // // console.log(\"_____________________ unsubscribe _________ \", symbol);\n // unsubscribe?.();\n // };\n // });\n\n return { data: price };\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\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 const ws = useWS();\n return useSWRSubscription(`${symbol}@indexprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@indexprice`, {\n onMessage: (message: any) => {\n next(null, message.price);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n });\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useOpenInterest = (symbol: string) => {\n const ws = useWS();\n return useSWRSubscription(`${symbol}@openinterest`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@openinterest`, {\n onMessage: (message: any) => {\n next(null, message.openInterest);\n },\n });\n\n return () => {\n unsubscribe?.();\n };\n });\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\n\ninterface MarketInfo {}\n\n// api: /public/futures\nexport const useFutures = () => {\n const { data, isLoading, error } = useQuery<MarketInfo[]>(\n `/v1/public/futures`,\n {\n revalidateOnFocus: false,\n }\n );\n\n const [sortedData, setSortedData] = useState(data);\n\n const ws = useWS();\n\n useEffect(() => {\n // const sub = ws\n // .observe<WSMessage.Ticker>(`tickers`)\n // .subscribe((value: any) => {\n //\n // // setData(value);\n // });\n // return () => {\n // sub.unsubscribe();\n // };\n }, []);\n\n useEffect(() => {\n if (data) {\n const sortedData = data.sort((a, b) => {\n return 0;\n });\n setSortedData(sortedData);\n }\n }, [data]);\n\n const sortBy = useCallback((key: string) => {}, [data]);\n\n const filterBy = useCallback((key: string) => {}, [data]);\n\n return {\n data: sortedData,\n sortBy,\n filterBy,\n isLoading,\n error,\n };\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\nimport { original } from \"immer\";\n\nexport type SymbolInfo = ReturnType<typeof useSymbolsInfo>;\n\nexport const useSymbolsInfo = () => {\n // const { data } = useQuery<Record<string, API.SymbolExt>>(`/v1/public/info`, {\n // focusThrottleInterval: 1000 * 60 * 60 * 24,\n // dedupingInterval: 1000 * 60 * 60 * 24,\n // revalidateOnFocus: false,\n // formatter(data: { rows: API.Symbol[] }) {\n // if (!data?.rows || !data?.rows?.length) {\n // return {};\n // }\n // const obj = Object.create(null);\n\n // for (let index = 0; index < data.rows.length; index++) {\n // const item = data.rows[index];\n // const arr = item.symbol.split(\"_\");\n // const base_dp = getPrecisionByNumber(item.base_tick);\n // const quote_dp = getPrecisionByNumber(item.quote_tick);\n // obj[item.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 // };\n // }\n\n // return obj;\n // },\n // });\n const symbolsInfo = useAppStore((state) => state.symbolsInfo);\n\n return useMemo(\n () => createGetter<API.SymbolExt, string>({ ...symbolsInfo }),\n [symbolsInfo]\n );\n // console.log(\">>>>>symbolsInfo<<<<<<<\", symbolsInfo);\n\n // return createGetter<API.SymbolExt, string>({ ...symbolsInfo });\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 private bufferedOrderBookUpdates: { [symbol: string]: RawOrderBookUpdate[] } = {};\n private rawOrderBook: { [symbol: string]: RawOrderBook } = {};\n\n constructor() {\n }\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(symbol: string, update: RawOrderBookUpdate) {\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) => askMap.set(ask[0], ask[1]));\n rawOrderBook.bids.forEach((bid) => bidMap.set(bid[0], bid[1]));\n\n update.asks.forEach((ask) => (ask[1] === 0 ? askMap.delete(ask[0]) : askMap.set(ask[0], ask[1])));\n update.bids.forEach((bid) => (bid[1] === 0 ? bidMap.delete(bid[0]) : bidMap.set(bid[0], bid[1])));\n\n rawOrderBook.asks = Array.from(askMap.entries()).sort((a, b) => a[0] - b[0]);\n rawOrderBook.bids = Array.from(bidMap.entries()).sort((a, b) => b[0] - a[0]);\n\n rawOrderBook.ts = update.ts;\n }\n private applyBufferedUpdatesToRawOrderBooks(symbol: string) {\n this.bufferedOrderBookUpdates[symbol]?.forEach((update) => this.applyUpdateToRawOrderBook(symbol, update));\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', { crossedAsks: orderbook.asks, 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\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\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\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\n };\n\n updateOrderbook(symbol: string, update: RawOrderBookUpdate, callback: () => void) {\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\n this.pushUpdateToBuffer(symbol, {asks, bids, prevTs, ts})\n if (callback) {\n callback();\n }\n return;\n }\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\n\n\n}\n\nconst orderBookService = OrderbookService.getInstance();\n\nexport default orderBookService;","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nexport const useAccountInfo = () => {\n return usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n};\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useMarketStore } from \"./useMarket/market.store\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWS();\n // const brokerId = useConfig(\"brokerId\");\n const { data: futures } = useQuery<WSMessage.Ticker[]>(`/v1/public/futures`, {\n revalidateOnFocus: false,\n });\n\n // const topic = brokerId ? `${brokerId}$tickers` : \"tickers\";\n const topic = \"tickers\";\n\n const { data: tickers } = useSWRSubscription(\"tickers\", (_, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n topic,\n {\n onMessage: (message: any) => {\n // window.debugPrint(message);\n next(null, message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n //\n // },\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 // const value = useMarketStore((state) => state.market);\n\n return { data: value };\n};\n","import { useContext, useMemo, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n NEW_LISTING,\n}\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 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 = [] as Favorite[];\n for (let index = 0; index < curData.length; index++) {\n const favData = curData[index];\n var favTabs = favData.tabs.filter(\n (tab) => tabs.findIndex((item) => tab.id === item.id) !== -1\n );\n if (favTabs.length > 0) {\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 var 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 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 openInterest: new Decimal(open_interest || 0)\n .mul(index_price || 0)\n .toNumber(),\n };\n });\n return list || [];\n }, [symbolsInfo, futures, fundingRates]);\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 const filter =\n type == MarketsType.ALL\n ? marketsList\n : marketsList?.filter((item) => keys.includes(item.symbol));\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 || [],\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getTimestamp } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\n\nexport const useFundingRates = () => {\n const data = useAppStore((state) => state.fundingRates);\n\n return createGetter<API.FundingRate>({ ...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, useEffect, useId, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API, WSMessage } from \"@orderly.network/types\";\nimport { SymbolInfo, useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { MarketStoreKey } from \"./useMarket\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n NEW_LISTING,\n}\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 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};\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\nexport const useMarkets = (type: MarketsType = MarketsType.ALL) => {\n const { data: futures } = useMarketsStream();\n const symbolsInfo = useSymbolsInfo();\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);\n const filterList = filterMarkets({\n markets,\n favorites,\n recent,\n newListing,\n type,\n });\n setMarkets(filterList);\n }, [futures, symbolsInfo, favorites, recent, newListing, type]);\n\n return [markets, store] as const;\n};\n\nconst addFieldToMarkets = (\n futures: WSMessage.Ticker[] | null,\n symbolsInfo: SymbolInfo\n) => {\n return (futures || [])?.map((item: any) => {\n const info = symbolsInfo[item.symbol];\n\n return {\n ...item,\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 } as MarketsItem;\n });\n};\n\nconst 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) {\n curData = markets;\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\nfunction isEmpty(value: any) {\n return value === undefined || value === null;\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\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 { useMarkPriceStore } from \"./useMarkPrice/useMarkPriceStore\";\n\nexport const useMarkPricesStream = () => {\n const data = useMarkPriceStore((state) => state.markPrices);\n\n return { data };\n};\n","import { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { prop } from \"ramda\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useLeverage = (): any => {\n const { data, mutate } = usePrivateQuery(\"/v1/client/info\");\n const [update, { isMutating }] = useMutation(\"/v1/client/leverage\");\n\n const { data: config } = useQuery(\"/v1/public/config\", {\n revalidateOnFocus: false,\n });\n\n const updateLeverage = useCallback((data: { leverage: number }) => {\n return update(data).then((res: any) => {\n if (res.success) {\n return mutate();\n } else {\n throw new Error(res.message);\n }\n // return res\n });\n }, []);\n\n return [\n prop(\"max_leverage\", data as any),\n {\n update: updateLeverage,\n isMutating,\n // config: [1, 2, 3, 4, 5, 10, 15, 20],\n config: config\n ? (config as any)?.available_futures_leverage\n ?.split(\",\")\n .map((item: string) => parseInt(item))\n : [],\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport {\n Decimal,\n getTimestamp,\n timeConvertString,\n} from \"@orderly.network/utils\";\n\nexport const useFundingRate = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useFuturesForSymbol requires a symbol\");\n }\n\n const [countDown, setCountDown] = useState(\"00:00:00\");\n\n const { data } = 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) return;\n const { next_funding_time } = data;\n if (!next_funding_time || next_funding_time <= 0) {\n return;\n }\n const timer = setInterval(() => {\n const diff = new Date(next_funding_time).getTime() - getTimestamp();\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 clearInterval(timer as unknown as number);\n };\n }, [data]);\n\n const est_funding_rate = useMemo(() => {\n if (!data) return;\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 { useQuery } from \"../useQuery\";\nimport { API } from \"@orderly.network/types\";\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) return 0;\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 {\n data: historyData,\n isLoading,\n ...rest\n } = useQuery<API.FundingHistory[]>(\"/v1/public/market_info/funding_history\");\n\n return {\n data: historyData ?? [],\n isLoading,\n getPositiveRates: (\n data: API.FundingHistory[],\n period: PeriodKey\n ): Record<string, number> => {\n if (!data?.length) return {};\n return data.reduce((acc, item) => {\n acc[item.symbol] = calculatePositiveRate(item.funding[period], period);\n return acc;\n }, {} as Record<string, number>);\n },\n };\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../../utils/createGetter\";\nimport {\n AlgoOrderRootType,\n OrderStatus,\n type API,\n} from \"@orderly.network/types\";\nimport { pathOr } from \"ramda\";\nimport { POSITION_EMPTY, usePositionStore } from \"./usePosition.store\";\nimport { useCalculatorService } from \"../../useCalculatorService\";\nimport { CalculatorScope } from \"../../types\";\nimport { useAppStore } from \"../appStore\";\nimport { omit } from \"ramda\";\nimport { PositionCalculator } from \"../calculator/positions\";\nimport { useApiStatusStore } from \"../../next/apiStatus/apiStatus.store\";\nimport { useMarkPricesStream, useOrderStream } from \"../orderlyHooks\";\nimport { findPositionTPSLFromOrders, findTPSLFromOrder } from \"./utils\";\n// import { usePosition } from \"./usePosition\";\n\nexport type PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport const usePositionStream = (\n /**\n * If symbol is passed, only the position of that symbol will be returned.\n */\n symbol: string = \"all\",\n options?: SWRConfiguration & {\n calcMode?: PriceMode;\n /**\n * If true, the pending order will be included in the result.\n */\n includedPendingOrder?: boolean;\n }\n) => {\n // const updatePosition = usePosition((state) => state.updatePosition);\n //\n // const symbolInfo = useSymbolsInfo();\n // const {setPositions} = usePositionActions();\n\n const { calcMode } = options || {};\n\n const { includedPendingOrder = false } = options || {};\n\n const positionCalculator = useRef<PositionCalculator | null>(null);\n const calculatorService = useCalculatorService();\n\n // const markPrices = useMarkPricesStream();\n\n // const [tpslOrderPageSize] = useLocalStorage(tpslOrdersPageSizeKey, 10);\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 // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // get TP/SL orders;\n\n // const [tpslOrders] = useOrderStream({\n // status: OrderStatus.INCOMPLETE,\n // includes: [AlgoOrderRootType.POSITIONAL_TP_SL, AlgoOrderRootType.TP_SL],\n // });\n //\n\n const { positions: positionStatus } = useApiStatusStore(\n (state) => state.apis\n );\n\n useEffect(() => {\n if (symbol === \"all\") return;\n\n positionCalculator.current = new PositionCalculator(symbol);\n\n calculatorService.register(\n CalculatorScope.POSITION,\n positionCalculator.current\n );\n\n calculatorService.register(\n CalculatorScope.MARK_PRICE,\n positionCalculator.current\n );\n\n calculatorService.register(\n CalculatorScope.INDEX_PRICE,\n positionCalculator.current\n );\n\n return () => {\n calculatorService.unregister(\n CalculatorScope.POSITION,\n positionCalculator.current!\n );\n\n calculatorService.unregister(\n CalculatorScope.MARK_PRICE,\n positionCalculator.current!\n );\n\n calculatorService.unregister(\n CalculatorScope.INDEX_PRICE,\n positionCalculator.current!\n );\n };\n }, [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 // console.log(\"******\", symbol, state.positions);\n\n return [positions.rows, omit([\"rows\"], positions)];\n });\n\n const { totalCollateral, totalValue, totalUnrealizedROI } = useAppStore(\n (state) => state.portfolio\n );\n\n const aggregated = useMemo(() => {\n let data = formattedPositions[1];\n if (!data) return {};\n\n if (calcMode === \"markPrice\") return data;\n\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]);\n\n let rows = formattedPositions[0];\n {\n // rows\n if (!rows) {\n rows = [];\n }\n\n // rows.forEach((item) => {\n // if (item.position_qty > 0) {\n // console.log(markPrices.data[item.symbol], item.mark_price);\n // }\n // });\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 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 // mark_price: item.last_price,\n };\n });\n }\n\n // console.log(\"tpslOrders\", tpslOrders);\n\n if (Array.isArray(tpslOrders) && tpslOrders.length) {\n rows = rows.map((item) => {\n const related_order = findPositionTPSLFromOrders(\n tpslOrders,\n item.symbol\n );\n\n const tp_sl_pricer = !!related_order\n ? findTPSLFromOrder(related_order)\n : undefined;\n\n return {\n ...item,\n tp_trigger_price: tp_sl_pricer?.tp_trigger_price,\n sl_trigger_price: tp_sl_pricer?.sl_trigger_price,\n algo_order: related_order,\n };\n });\n }\n }\n\n const positionInfoGetter = createGetter<\n Omit<API.PositionInfo, \"rows\">,\n keyof Omit<API.PositionInfo, \"rows\">\n >(aggregated, 1);\n\n return [\n {\n rows,\n // rows: formattedPositions[0],\n aggregated: formattedPositions?.[1] ?? {},\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n positionInfoGetter,\n {\n /**\n * @deprecated use `isLoading` instead\n */\n loading: positionStatus.loading,\n isLoading: positionStatus.loading,\n // isValidating,\n // // showSymbol,\n // error,\n // // loadMore: () => {},\n // refresh: refreshPositions,\n },\n ] as const;\n};\n\nexport const pathOr_unsettledPnLPathOr = pathOr(0, [\n 0,\n \"aggregated\",\n \"unsettledPnL\",\n]);\n","import {\n API,\n AlgoOrderEntity,\n AlgoOrderType,\n AlgoOrderRootType,\n OrderStatus,\n} from \"@orderly.network/types\";\n\nexport const findTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): Partial<AlgoOrderEntity> | undefined => {\n const order = findPositionTPSLFromOrders(orders, symbol);\n\n // console.log(\"!!!!!\", order);\n\n if (!order) return;\n return findTPSLFromOrder(order);\n};\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 findPositionTPSLFromOrders = (\n orders: API.AlgoOrder[],\n symbol: string\n): API.AlgoOrder | undefined => {\n return orders?.find((order) => {\n // console.log(order.symbol, symbol, order.algo_type);\n return (\n order.symbol === symbol &&\n order.algo_type === AlgoOrderRootType.POSITIONAL_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\n // return order;\n};\n","import { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"../useMarkPricesStream\";\nimport { useMutation } from \"../../useMutation\";\nimport version from \"../../version\";\nimport { useDataCenterContext } from \"../../dataProvider\";\nimport { generateKeyFun } from \"../../utils/swr\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { SDKError } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\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 /**\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 } = params;\n\n const [includes, setIncludes] = useState<CombineOrderType[]>(params.includes ?? ['ALL'])\n const [excludes, setExcludes] = useState<CombineOrderType[]>(params.excludes ?? []);\n\n const { data: markPrices } = useMarkPricesStream();\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 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?.(\n key,\n generateKeyFun({ status, symbol, side, size, page, dateRange })\n );\n\n return () => {\n if (!options?.stopOnUnmount) return;\n\n unregisterKeyHandler(key);\n };\n }, [status, symbol, side, size, page, dateRange, options?.keeplive]);\n\n const ordersResponse = usePrivateInfiniteQuery(\n generateKeyFun({ status, symbol, side, size, page, dateRange }),\n {\n initialSize: 1,\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 flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n let orders = ordersResponse.data?.map((item: any) => item.rows)?.flat();\n\n // return ordersResponse.data?.map((item) => item.rows)?.flat();\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 }, [ordersResponse.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 order.quantity = order.child_orders[0].quantity;\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 const cancelAlgoOrdersByTypes = (types: AlgoOrderRootType[]) => {\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, { algo_type: type });\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: \"STOP\" }),\n ]);\n }, [ordersResponse.data]);\n\n const cancelAllTPSLOrders = useCallback(() => {\n return cancelAlgoOrdersByTypes([\n AlgoOrderRootType.POSITIONAL_TP_SL,\n AlgoOrderRootType.TP_SL,\n ]);\n }, [ordersResponse.data]);\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 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 ordersResponse.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 (\n /**\n * the root algo order id\n */\n orderId: number,\n childOrders: API.AlgoOrder[\"child_orders\"]\n ) => {\n if (!Array.isArray(childOrders)) {\n throw new SDKError(\"children orders is required\");\n }\n return doUpdateAlgoOrder({\n order_id: orderId,\n child_orders: childOrders,\n });\n },\n []\n );\n\n const meta = useMemo(() => {\n // @ts-ignore\n return ordersResponse.data?.[0]?.meta;\n }, [ordersResponse.data?.[0]]);\n\n return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n cancelAllTPSLOrders,\n cancelAlgoOrdersByTypes,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\n cancelTPSLChildOrder,\n updateTPSLOrder,\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 { API } from \"@orderly.network/types\";\nimport { useWS } from \"../useWS\";\nimport { useEffect, useState } from \"react\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 Error(\"useTradeStream: symbol is required\");\n }\n\n const [trades, setTrades] = useState<API.Trade[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(false);\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 unsubscript = ws.subscribe(\n {\n id: `${symbol}@trade`,\n event: \"subscribe\",\n topic: `${symbol}@trade`,\n ts: getTimestamp(),\n },\n {\n onMessage: (data: any) => {\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 unsubscript?.();\n };\n }, [symbol]);\n\n return { data: trades, isLoading };\n};\n","import { type API } from \"@orderly.network/types\";\nimport { useAppStore } from \"./appStore\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number | null;\n availableBalance: number;\n unsettledPnL: number;\n\n // positions: API.Position[];\n accountInfo?: API.AccountInfo;\n};\n\n// const positionsPath = pathOr([], [0, \"rows\"]);\n// const totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\nexport const useCollateral = (\n options: {\n /** decimal precision */\n dp: number;\n } = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const {\n totalCollateral,\n totalValue,\n freeCollateral,\n availableBalance,\n unsettledPnL,\n } = useAppStore((state) => state.portfolio);\n const accountInfo = useAppStore((state) => state.accountInfo);\n\n // const positions = usePositionStream(undefined, {\n // includedPendingOrder: true,\n // });\n\n // console.log(\"positions\", positions);\n\n // const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // const symbolInfo = useSymbolsInfo();\n\n // const { data: markPrices } = useMarkPricesStream();\n\n // const { usdc } = useHoldingStream();\n\n // const filterAlgoOrders =\n // orders?.filter((item) => item.algo_order_id === undefined) ?? [];\n\n // const { data: holding } = usePrivateQuery<API.Holding[]>(\n // \"/v1/client/holding\",\n // {\n // formatter: (data) => {\n // return data.holding;\n // },\n // }\n // );\n\n // const [totalCollateral, totalValue] = useMemo(() => {\n // return [\n // pathOr(zero, [0, \"totalCollateral\"], positions),\n // pathOr(zero, [0, \"totalValue\"], positions),\n // ];\n // }, [positions, markPrices]);\n\n // const totalInitialMarginWithOrders = useMemo(() => {\n // if (!accountInfo || !symbolInfo || !markPrices) {\n // return 0;\n // }\n //\n // return account.totalInitialMarginWithQty({\n // positions: positionsPath(positions),\n // markPrices,\n // IMR_Factors: accountInfo.imr_factor,\n // maxLeverage: accountInfo.max_leverage,\n // symbolInfo,\n // });\n // }, [\n // positions,\n // // filterAlgoOrders,\n // markPrices,\n // accountInfo,\n // symbolInfo,\n // ]);\n //\n // const freeCollateral = useMemo(() => {\n // return account.freeCollateral({\n // totalCollateral,\n // totalInitialMarginWithOrders,\n // });\n // }, [totalCollateral, totalInitialMarginWithOrders]);\n //\n // const availableBalance = useMemo(() => {\n // return account.availableBalance({\n // USDCHolding: usdc?.holding ?? 0,\n // unsettlementPnL: pathOr_unsettledPnLPathOr(positions),\n // });\n // }, [usdc?.holding, pathOr_unsettledPnLPathOr(positions)]);\n\n return {\n totalCollateral: totalCollateral.toDecimalPlaces(dp).toNumber(),\n freeCollateral: freeCollateral.toDecimalPlaces(dp).toNumber(),\n totalValue: totalValue?.toDecimalPlaces(dp).toNumber() ?? null,\n availableBalance,\n unsettledPnL,\n\n accountInfo,\n\n // @hidden\n // positions: positionsPath(positions),\n };\n};\n","import { useEffect, useMemo } from \"react\";\nimport { type API, OrderSide, OrderStatus } from \"@orderly.network/types\";\n\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { account } from \"@orderly.network/perp\";\nimport { useCollateral } from \"./useCollateral\";\n\nimport { pathOr } from \"ramda\";\nimport { useOrderStream } from \"./useOrderStream/useOrderStream\";\nimport { usePositions } from \"./usePositionStream/usePosition.store\";\nimport { useAccountInfo } from \"./appStore\";\n\n// const positionsPath = pathOr([], [0, \"rows\"]);\n\n/**\n * @param symbol\n * @param side\n * @param reduceOnly\n * @returns the maximum quantity available for trading in USD\n */\nexport const useMaxQty = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false\n) => {\n // const positionsData = usePositionStream();\n\n const positions = usePositions();\n\n const [orders] = useOrderStream({ status: OrderStatus.NEW, size: 500 });\n\n // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n const accountInfo = useAccountInfo();\n\n const symbolInfo = useSymbolsInfo();\n\n const { totalCollateral } = useCollateral();\n\n const { data: markPrices } = useMarkPricesStream();\n\n // const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n const maxQty = useMemo(() => {\n if (!symbol) return 0;\n\n // const positions = positionsPath(positionsData);\n\n const positionQty = account.getQtyFromPositions(\n positions === null ? [] : positions,\n symbol\n );\n\n if (reduceOnly) {\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 }\n\n if (!markPrices || !markPrices[symbol] || !orders || !accountInfo) return 0;\n\n const getSymbolInfo = symbolInfo[symbol];\n\n const filterAlgoOrders = orders.filter(\n (item) => item.algo_order_id === undefined || item.algo_type === \"BRACKET\"\n );\n\n // current symbol buy order quantity\n const buyOrdersQty = account.getQtyFromOrdersBySide(\n filterAlgoOrders,\n symbol,\n OrderSide.BUY\n );\n // current symbol sell order quantity\n const sellOrdersQty = account.getQtyFromOrdersBySide(\n filterAlgoOrders,\n symbol,\n OrderSide.SELL\n );\n\n const otherPositions = !Array.isArray(positions)\n ? []\n : positions.filter((item: API.Position) => item.symbol !== symbol);\n\n const otherOrders = filterAlgoOrders.filter(\n (item: API.Order) => item.symbol !== symbol\n );\n\n const otherIMs = account.otherIMs({\n orders: otherOrders,\n positions: otherPositions,\n symbolInfo,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n });\n\n return account.maxQty(side, {\n markPrice: markPrices[symbol],\n symbol,\n baseMaxQty: getSymbolInfo(\"base_max\"),\n totalCollateral,\n maxLeverage: accountInfo.max_leverage,\n takerFeeRate: accountInfo.futures_taker_fee_rate,\n baseIMR: getSymbolInfo(\"base_imr\"),\n otherIMs,\n positionQty,\n buyOrdersQty,\n sellOrdersQty,\n IMR_Factor: accountInfo.imr_factor[symbol],\n });\n }, [\n symbol,\n positions,\n reduceOnly,\n markPrices,\n orders,\n accountInfo,\n symbolInfo,\n side,\n totalCollateral,\n ]);\n\n // console.log(\"+++++++++++maxQty++++++++++++++ \", maxQty);\n // return 0;\n\n return Math.max(maxQty, 0) as number;\n};\n","import { useMemo } from \"react\";\nimport { account } from \"@orderly.network/perp\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { zero } from \"@orderly.network/utils\";\nimport { usePositionStore } from \"./usePositionStream/usePosition.store\";\nimport { useAccount } from \"../useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nexport type MarginRatioReturn = {\n // Margin Ratio\n marginRatio: number;\n // Current Leverage\n currentLeverage: number | null;\n // account margin ratio, if user has no position, return null\n mmr: number | null;\n};\n\nexport const useMarginRatio = (): MarginRatioReturn => {\n // const [{ rows, aggregated }] = usePositionStream();\n\n const positions = usePositionStore((state) => state.positions.all);\n\n const { rows } = positions;\n const { notional } = positions;\n const { state } = useAccount();\n\n const { data: markPrices } = useMarkPricesStream();\n //\n // const markPrices = useMarkPrices();\n //\n\n const { totalCollateral } = useCollateral();\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 ?? [],\n });\n }, [rows, markPrices, totalCollateral]);\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 // MMR\n const mmr = useMemo<number | null>(() => {\n if (!rows || rows.length <= 0 || notional == null) return null;\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 return { marginRatio, currentLeverage, mmr };\n};\n","import {\n NetworkId,\n type API,\n Chain as FlatChain,\n} from \"@orderly.network/types\";\nimport { useCallback, useContext, useMemo, useRef } from \"react\";\nimport { SWRConfiguration } from \"swr\";\nimport { useQuery } from \"../useQuery\";\nimport { prop } from \"ramda\";\nimport { isTestnet } from \"@orderly.network/utils\";\nimport { nativeTokenAddress } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\n// testnet only show arb sepolia and solana devnet\nconst TestNetWhiteList = [421614, 901901901];\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 checkChainSupport: (\n chainId: number | string,\n networkId: NetworkId\n ) => boolean;\n error: any;\n};\n\nexport function useChains(\n networkId?: undefined,\n options?: undefined\n): [Chains<undefined, undefined>, UseChainsReturnObject];\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\nexport function useChains(\n networkId?: NetworkId,\n options: UseChainsOptions = {}\n): [any, any] {\n const { pick: pickField, ...swrOptions } = options;\n const {\n filteredChains: allowedChains,\n configStore,\n customChains,\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 commonSwrOpts = {\n revalidateIfStale: false,\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n // If false, undefined data gets cached against the key.\n revalidateOnMount: true,\n // dont duplicate a request w/ same key for 1hr\n dedupingInterval: 3_600_000,\n ...swrOptions,\n };\n\n // only prod env return mainnet chains info\n const { data: tokenChainsRes, error: tokenError } = useQuery<API.Chain[]>(\n \"https://api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const { data: testTokenChainsRes } = useQuery<API.Chain[]>(\n \"https://testnet-api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const brokerId = configStore.get(\"brokerId\");\n\n const needFetchFromAPI = options.forceAPI || !customChains;\n\n // only prod env return mainnet chains info\n const { data: chainInfos, error: chainInfoErr } = useQuery(\n needFetchFromAPI\n ? `https://api-evm.orderly.org/v1/public/chain_info${\n brokerId !== \"orderly\" ? `?broker_id=${brokerId}` : \"\"\n }`\n : null,\n { ...commonSwrOpts }\n );\n\n // test chains info\n const { data: testChainInfos } = useQuery(\n needFetchFromAPI\n ? `https://testnet-api-evm.orderly.org/v1/public/chain_info${\n brokerId !== \"orderly\" ? `?broker_id=${brokerId}` : \"\"\n }`\n : null,\n { ...commonSwrOpts }\n );\n\n const chains = useMemo(() => {\n const tokenChains = fillChainsInfo(\n tokenChainsRes,\n filterFun.current,\n chainInfos\n );\n const testTokenChains = fillChainsInfo(\n testTokenChainsRes,\n undefined,\n testChainInfos\n );\n\n let testnetArr = needFetchFromAPI\n ? filterAndUpdateChains(testTokenChains, testChainInfos, undefined, true)\n : customChains?.testnet;\n\n tokenChains?.forEach((item) => {\n const chainId = item.network_infos?.chain_id;\n chainsMap.current.set(chainId, item);\n });\n\n testnetArr.forEach((chain) => {\n chainsMap.current.set(chain.network_infos?.chain_id, chain);\n });\n\n let mainnetArr: API.Chain[] = [];\n\n mainnetArr = filterAndUpdateChains(\n tokenChains,\n chainInfos,\n filterFun.current\n );\n\n mainnetArr = needFetchFromAPI ? mainnetArr : customChains?.mainnet;\n\n mainnetArr.forEach((item) => {\n const chainId = item.network_infos?.chain_id;\n chainsMap.current.set(chainId, item);\n });\n\n mainnetArr = filterByAllowedChains(mainnetArr, allowedChains?.mainnet);\n testnetArr = filterByAllowedChains(\n testnetArr,\n allowedChains?.testnet ??\n (TestNetWhiteList.map((id) => ({ id })) as FlatChain[])\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 ]);\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(\n (item) => item.address === nativeTokenAddress\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 return [\n chains,\n {\n findByChainId,\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\n/** orderly chains array form (/v1/public/token) api */\nexport function fillChainsInfo(\n chains?: API.Chain[],\n filter?: (chain: any) => boolean,\n chainInfos?: any\n) {\n let _chains: API.Chain[] = [];\n\n chains?.forEach((item) => {\n item.chain_details.forEach((chain: any) => {\n const chainId = Number(chain.chain_id);\n const chainInfo = chainInfos?.find(\n (item: any) => item.chain_id == chainId\n );\n\n const _chain: any = {\n network_infos: {\n name: chain.chain_name ?? chainInfo?.name ?? \"--\",\n chain_id: chainId,\n withdrawal_fee: chain.withdrawal_fee,\n cross_chain_withdrawal_fee: chain.cross_chain_withdrawal_fee,\n bridgeless: true,\n },\n token_infos: [\n {\n symbol: item.token,\n address: chain.contract_address,\n decimals: chain.decimals,\n display_name: chain.display_name,\n },\n ],\n };\n\n if (typeof filter === \"function\") {\n if (!filter(_chain)) return;\n }\n\n _chains.push(_chain);\n });\n });\n\n return _chains;\n}\n\n/** filter chains and update network_infos by chain_info api (v1/public/chain_info) */\nexport function filterAndUpdateChains(\n chains: API.Chain[],\n chainInfos: any,\n filter?: (chain: any) => boolean,\n isTestNet?: boolean\n) {\n const filterChains: API.Chain[] = [];\n\n chains.forEach((chain) => {\n let _chain = { ...chain };\n\n const networkInfo = chainInfos?.find(\n (item: any) => item.chain_id == chain.network_infos.chain_id\n );\n\n if (networkInfo) {\n const { name, public_rpc_url, currency_symbol, explorer_base_url } =\n networkInfo;\n _chain.network_infos = {\n ..._chain.network_infos,\n name,\n shortName: name,\n public_rpc_url,\n currency_symbol,\n bridge_enable: true,\n mainnet: !isTestNet,\n explorer_base_url,\n // est_txn_mins: null,\n };\n }\n\n if (typeof filter === \"function\") {\n if (!filter(_chain)) return;\n }\n\n if (networkInfo) {\n filterChains.push(_chain);\n }\n });\n\n return filterChains;\n}\n\n/** if chain is testnet, update testnet network_infos */\nexport function updateTestnetInfo(\n testnetArr: API.Chain[],\n chainId: number,\n chain: API.Chain\n) {\n if (isTestnet(chainId)) {\n const index = testnetArr?.findIndex(\n (item) => item.network_infos.chain_id === chainId\n );\n if (index > -1) {\n testnetArr[index] = chain;\n }\n }\n}\n\nexport function filterByAllowedChains(\n chains: API.Chain[],\n allowedChains?: FlatChain[]\n) {\n if (!allowedChains) {\n return chains;\n }\n\n return chains.filter((chain) =>\n allowedChains.some(\n (allowedChain) =>\n allowedChain.id === parseInt(chain?.network_infos?.chain_id as any)\n )\n );\n}\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API, chainsInfoMap } from \"@orderly.network/types\";\n\nexport const useChain = (token: string) => {\n const { data, isLoading } = useQuery<API.Chain[]>(\"/v1/public/token\");\n\n const chains = useMemo(() => {\n if (!data) return null;\n\n let 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 { useCallback, useMemo, useState } from \"react\";\nimport { useHoldingStream } from \"./useHoldingStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useAccount } from \"../useAccount\";\nimport { useEventEmitter } from '../useEventEmitter'\nimport { useChains } from \"./useChains\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { useConfig } from \"../useConfig\";\nimport { isTestnet } from \"@orderly.network/utils\";\n\nexport type UseWithdrawOptions = { srcChainId?: number };\n\nexport const useWithdraw = (options?: UseWithdrawOptions) => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance, freeCollateral } = useCollateral();\n\n const networkId = useConfig(\"networkId\");\n\n const [_, { findByChainId }] = useChains(undefined);\n\n const ee = useEventEmitter()\n\n // const withdrawQueue = useRef<number[]>([]);\n\n const { usdc } = useHoldingStream();\n\n // useEffect(() => {\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 // const { id } = data;\n\n // if (withdrawQueue.current.includes(id)) {\n // withdrawQueue.current = withdrawQueue.current.filter(\n // (item) => item !== id\n // );\n // ee.emit(\"withdraw:success\", data);\n // }\n // },\n // }\n // );\n\n // return () => unsubscribe();\n // }, []);\n\n const maxAmount = useMemo(() => {\n // if (!usdc || !usdc.holding) return 0;\n\n // if (unsettledPnL >= 0) return usdc?.holding ?? 0;\n\n // return new Decimal(usdc.holding).add(unsettledPnL).toNumber();\n\n return freeCollateral;\n }, [freeCollateral]);\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 isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n } else {\n chain = findByChainId(options?.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, options?.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\n const withdraw = useCallback(\n (inputs: {\n chainId: number;\n token: string;\n amount: string;\n allowCrossChainWithdraw: boolean;\n }): Promise<any> => {\n return account.assetsManager.withdraw(inputs).then((res: any) => {\n if (res.success) {\n ee.emit(EnumTrackerKeys.WITHDRAW_SUCCESS, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n quantity:inputs.amount,\n });\n // withdrawQueue.current.push(res.data.withdraw_id);\n }\n return res;\n }).catch((err) => {\n ee.emit(EnumTrackerKeys.WITHDRAW_FAILED, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n msg: JSON.stringify(err),\n });\n throw err\n });\n },\n [state, targetChain, state]\n );\n\n\n return {\n dst,\n withdraw,\n isLoading,\n maxAmount,\n availableBalance,\n availableWithdraw,\n unsettledPnL,\n };\n};\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useMemo } from \"react\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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 return {\n ...item,\n frozen: token.frozen,\n holding: token.holding,\n };\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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useAccount, } from \"../useAccount\";\nimport {useEventEmitter} from '../useEventEmitter'\nimport {\n AccountStatusEnum,\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n ChainNamespace,\n DEPOSIT_FEE_RATE,\n isNativeTokenChecker,\n MaxUint256,\n NetworkId,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { Decimal, isTestnet } from \"@orderly.network/utils\";\nimport { useChains } from \"./useChains\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n const ee = useEventEmitter()\n const [_, { findByChainId }] = useChains(undefined);\n\n const [quantity, setQuantity] = useState<string>(\"\");\n const [depositFee, setDepositFee] = useState<bigint>(0n);\n const [depositFeeRevalidating, setDepositFeeRevalidating] = useState(false);\n\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n const prevAddress = useRef<string | undefined>();\n const getBalanceListener = useRef<ReturnType<typeof setTimeout>>();\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 isTestnet(options?.srcChainId!)\n ? options?.srcChainId!\n : ARBITRUM_TESTNET_CHAINID\n ) as API.Chain;\n console.log(\"-- chain\", chain, options);\n } else {\n chain = findByChainId(options?.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, options?.srcChainId]);\n\n const dst = useMemo(() => {\n if (!targetChain) {\n throw new Error(\"dst chain not found\");\n }\n\n const USDC = targetChain?.token_infos.find(\n (token: API.TokenInfo) => token.symbol === \"USDC\"\n );\n\n return {\n symbol: \"USDC\",\n address: USDC?.address,\n decimals: USDC?.decimals,\n chainId: targetChain.network_infos.chain_id,\n network: targetChain.network_infos.shortName,\n };\n }, [targetChain]);\n\n const isNativeToken = useMemo(\n () => isNativeTokenChecker(options?.address || \"\"),\n [options?.address]\n );\n\n const fetchBalanceHandler = useCallback(\n async (address: string, decimals?: number) => {\n let balance: string;\n\n if (!!address && isNativeTokenChecker(address)) {\n balance = await account.assetsManager.getNativeBalance({\n decimals,\n });\n } else {\n balance = await account.assetsManager.getBalance(address, { decimals });\n }\n\n return balance;\n },\n []\n );\n\n const fetchBalance = useCallback(\n async (\n // token contract address\n address?: string,\n // format decimals\n decimals?: number\n ) => {\n if (!address) return;\n\n try {\n // if (balanceRevalidating) return;\n const balance = await fetchBalanceHandler(address, decimals);\n\n setBalance(() => balance);\n } catch (e) {\n console.warn(\"----- refresh balance error -----\", e);\n\n setBalance(() => \"0\");\n }\n },\n [state]\n );\n\n const fetchBalances = useCallback(async (tokens: API.TokenInfo[]) => {\n const tasks = [];\n\n for (const token of tokens) {\n // native token skip\n if (isNativeTokenChecker(token.address)) {\n continue;\n }\n tasks.push(\n account.assetsManager.getBalanceByAddress(token.address, {\n decimals: token?.decimals,\n })\n );\n }\n\n const balances = await Promise.all(tasks);\n\n // const balances = await account.assetsManager.getBalances(tokens);\n // setBalance(() => balances);\n }, []);\n\n const getAllowance = async (inputs: {\n address?: string;\n vaultAddress?: string;\n decimals?: number;\n }) => {\n const { address, vaultAddress, decimals } = inputs;\n const key = `${address}-${vaultAddress}`;\n console.log(\"--- get allowance\", vaultAddress);\n\n if (prevAddress.current === key) return;\n\n if (!address || !vaultAddress) return;\n if (address && isNativeTokenChecker(address)) return;\n // if (allowanceRevalidating) return;\n // setAllowanceRevalidating(true);\n\n prevAddress.current = key;\n\n const allowance = await account.assetsManager.getAllowance({\n address,\n vaultAddress,\n decimals,\n });\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (inputs: {\n address?: string;\n decimals?: number;\n }) => {\n const { address, decimals } = inputs;\n if (prevAddress.current === address) return;\n\n if (!address || isNativeTokenChecker(address)) return;\n\n prevAddress.current = address;\n\n const allowance = await account.assetsManager.getAllowance({\n address,\n decimals,\n });\n setAllowance(() => allowance);\n };\n\n const queryBalance = useDebouncedCallback(\n (address?: string, decimals?: number) => {\n fetchBalance(address, decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (inputs: {\n address?: string;\n vaultAddress?: string;\n decimals?: number;\n }) => {\n getAllowance(inputs);\n },\n 100\n );\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.Connected) return;\n setBalanceRevalidating(true);\n // fetchBalance(options?.address, options?.decimals).finally(() => {\n // setBalanceRevalidating(false);\n // });\n\n queryBalance(options?.address, options?.decimals);\n\n const params = {\n address: options?.address,\n decimals: options?.decimals,\n };\n\n if (account.walletAdapter?.chainNamespace === ChainNamespace.solana) {\n setAllowance(account.walletAdapter.formatUnits(MaxUint256));\n return;\n }\n console.log(\n \"-- dst chainid\",\n dst.chainId,\n options?.srcChainId,\n dst,\n options\n );\n if (dst.chainId !== options?.srcChainId) {\n queryAllowance(params);\n } else {\n if (dst.symbol !== options?.srcToken) {\n queryAllowance(params);\n } else {\n getAllowanceByDefaultAddress(params);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.srcChainId,\n options?.srcToken,\n options?.decimals,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const updateAllowanceWhenTxSuccess = useCallback(\n (txHash: string) => {\n return account.walletAdapter\n ?.pollTransactionReceiptWithBackoff(txHash)\n .then((receipt) => {\n if (receipt.status === 1) {\n account.assetsManager\n .getAllowance({ address: options?.address })\n .then((allowance) => {\n setAllowance(() => allowance);\n });\n }\n });\n },\n [account, options?.address]\n );\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n return account.assetsManager\n .approve({\n address: options.address,\n amount,\n })\n .then((res: any) => {\n return updateAllowanceWhenTxSuccess(res.hash);\n }).catch(e => {\n });\n },\n [account, getAllowance, options?.address, dst]\n );\n\n const deposit = useCallback(async () => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const _allowance = await account.assetsManager.getAllowance({\n address: options?.address,\n });\n\n setAllowance(() => _allowance);\n\n if (new Decimal(quantity).greaterThan(_allowance)) {\n throw new Error(\"Insufficient allowance\");\n }\n\n // only support orderly deposit\n console.log(\"-- start deposit\");\n console.log('-- deposit fee', depositFee);\n\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n ee.emit(EnumTrackerKeys.DEPOSIT_SUCCESS, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos.name,\n quantity,\n });\n updateAllowanceWhenTxSuccess(res.hash);\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n }).catch(e => {\n ee.emit(EnumTrackerKeys.DEPOSIT_FAILED, {\n wallet:state?.connectWallet?.name,\n network:targetChain?.network_infos?.name,\n msg: JSON.stringify(e),\n });\n throw e;\n });\n }, [account, fetchBalance, quantity, depositFee, options?.address]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n const time = account.walletAdapter?.chainNamespace === ChainNamespace.solana ? 10000 : 3000;\n getBalanceListener.current = setTimeout(async () => {\n try {\n const balance = await fetchBalanceHandler(\n options?.address!,\n options?.decimals\n );\n\n setBalance(balance);\n loopGetBalance();\n } catch (err) {\n console.log(\"fetchBalanceHandler error\", err);\n }\n },time);\n };\n\n const getDepositFee = useCallback(\n async (quantity: string) => {\n return account.assetsManager.getDepositFee(\n quantity,\n targetChain?.network_infos\n );\n },\n [account, targetChain]\n );\n\n const enquiryDepositFee = useCallback(() => {\n if (isNaN(Number(quantity)) || !quantity || Number(quantity) === 0) {\n setDepositFee(0n);\n setDepositFeeRevalidating(false);\n return;\n }\n\n setDepositFeeRevalidating(true);\n\n getDepositFee(quantity)\n .then((res: bigint = 0n) => {\n const fee = BigInt(\n new Decimal(res.toString())\n .mul(DEPOSIT_FEE_RATE)\n .toFixed(0, Decimal.ROUND_UP)\n .toString()\n );\n\n setDepositFee(fee);\n console.log(\"getDepositFee\", fee);\n })\n .catch((error) => {\n console.error(\"getDepositFee\", error);\n })\n .finally(() => {\n setDepositFeeRevalidating(false);\n });\n }, [quantity]);\n\n useEffect(() => {\n enquiryDepositFee();\n }, [quantity]);\n\n useEffect(() => {\n if (!options?.address) {\n return;\n }\n\n loopGetBalance();\n\n return () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\n };\n\n // account.walletClient.on(\n // // {\n // // address: options?.address,\n // // },\n // \"block\",\n // (log: any, event: any) => {\n // console.log(\"account.walletClient.on\", log, event);\n // }\n // );\n }, [options?.address, options?.decimals]);\n\n return {\n /** orderly support chain dst */\n dst,\n balance,\n allowance,\n isNativeToken,\n balanceRevalidating,\n allowanceRevalidating,\n /** input quantiy */\n quantity,\n /** orderly deposit fee, unit: wei */\n depositFee,\n /** enquiring depositFee status on chain */\n depositFeeRevalidating,\n approve,\n deposit,\n fetchBalances,\n fetchBalance: fetchBalanceHandler,\n /** set input quantity */\n setQuantity,\n };\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useWalletSubscription = (options?: {\n onMessage?: (data: any) => void;\n}) => {\n const ws = useWS();\n\n return useSWRSubscription(\"wallet\", (_, { 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","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\nimport { getTimestamp } from \"@orderly.network/utils\";\n\nexport const useSettleSubscription = (options?: {\n onMessage?: (data: any) => void;\n}) => {\n const ws = useWS();\n\n return useSWRSubscription(\"settle\", (_, { 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","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 { API, 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 isEditing?: boolean;\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 { useEffect, useState } from \"react\";\n\nimport {\n API,\n AlgoOrderEntity,\n OrderSide,\n SDKError,\n} from \"@orderly.network/types\";\nimport { UpdateOrderKey, tpslCalculateHelper } from \"./tp_slUtils\";\nimport { useMutation } from \"../../useMutation\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { TPSLPositionOrderCreator } from \"../../services/orderCreator/tpslPositionOrderCreator\";\nimport { findTPSLFromOrder } from \"../usePositionStream/utils\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { useMarkPrice } from \"../useMarkPrice\";\nimport { omit } from \"ramda\";\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]?: {\n type: string;\n message: string;\n };\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 }\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) => 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: () => 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: () => Promise<\n AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\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 : \"\",\n // quantity:\n // options?.defaultOrder?.quantity || Math.abs(position.position_qty),\n algo_type: options?.defaultOrder?.algo_type as AlgoOrderRootType,\n });\n\n const symbolInfo = useSymbolsInfo()[position.symbol!]();\n const { data: markPrice } = useMarkPrice(order.symbol!);\n\n const [doCreateOrder, { isMutating: isCreateMutating }] =\n useMutation(\"/v1/algo/order\");\n const [doUpdateOrder, { isMutating: isUpdateMutating }] = useMutation(\n \"/v1/algo/order\",\n \"PUT\"\n );\n const [doDeleteOrder] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [errors, setErrors] = useState<ValidateError | null>(null);\n\n useEffect(() => {\n if (!isEditing || !options?.defaultOrder) return;\n const trigger_prices = findTPSLFromOrder(options.defaultOrder!);\n if (trigger_prices.tp_trigger_price) {\n setOrderValue(\"tp_trigger_price\", trigger_prices.tp_trigger_price, {\n ignoreValidate: true,\n });\n }\n if (trigger_prices.sl_trigger_price) {\n setOrderValue(\"sl_trigger_price\", trigger_prices.sl_trigger_price, {\n ignoreValidate: true,\n });\n }\n }, []);\n\n const _setOrderValue = (\n key: string,\n value: number | string,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"[updateOrder:]\", key, value);\n\n setOrder((prev) => {\n const side = position.position_qty! > 0 ? OrderSide.BUY : 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:\n side === OrderSide.BUY\n ? Number(prev.quantity)!\n : -Number(prev.quantity)!,\n orderSide: side,\n },\n {\n symbol: symbolInfo,\n }\n );\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,\n options?: {\n ignoreValidate?: boolean;\n }\n ) => {\n // console.log(\"-------->>>>>\", key, value);\n if (key === \"quantity\") {\n setOrder((prev) => ({ ...prev, quantity: value }));\n\n if (typeof order.sl_trigger_price !== \"undefined\") {\n _setOrderValue(\"sl_trigger_price\", order.sl_trigger_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\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 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 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 = (): 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 orderCreator\n .validate(\n order as AlgoOrderEntity<AlgoOrderRootType.TP_SL>,\n valueConfig\n )\n .then((errors) => {\n console.log(\"errors::\", errors);\n\n if (errors) {\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 compare = (): boolean => {\n const quantityNum = Number(order.quantity);\n if (isNaN(quantityNum)) return false;\n return quantityNum === Math.abs(Number(position.position_qty));\n };\n\n const getOrderCreator = () => {\n // if the order is existed, and the order type is POSITIONAL_TP_SL, always return POSITIONAL_TP_SL\n // else use qty to determine the order type\n if (options?.defaultOrder?.algo_type === AlgoOrderRootType.TP_SL) {\n return OrderFactory.create(AlgoOrderRootType.TP_SL);\n }\n return OrderFactory.create(\n compare() ? AlgoOrderRootType.POSITIONAL_TP_SL : AlgoOrderRootType.TP_SL\n );\n };\n\n const submit = async () => {\n const defaultOrder = options?.defaultOrder;\n const orderId = defaultOrder?.algo_order_id;\n const algoType = defaultOrder?.algo_type;\n\n // if algo_order_id is not existed, create new order\n if (!orderId) {\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = POSITION_TP_SL\n if (algoType === AlgoOrderRootType.POSITIONAL_TP_SL) {\n // if order.qty = position.qty, update order\n if (compare()) {\n return updateOrder(orderId!);\n }\n // if order.qty != position.qty, create new tp/sl order\n return createOrder();\n }\n\n // if algo_order_id is existed and algoType = TP_SL, delete order and create new order\n\n return updateOrder(orderId!);\n };\n\n const createOrder = () => {\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 return doCreateOrder(orderBody);\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 = (orderId: number): 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 order_id: orderId,\n ...updatedOrderEntity,\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 errors,\n isCreateMutating,\n isUpdateMutating,\n },\n ];\n};\n","import { API, OrderSide, PositionSide } from \"@orderly.network/types\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { Decimal, todpIfNeed, zero } from \"@orderly.network/utils\";\n\nexport type UpdateOrderKey =\n | \"tp_trigger_price\"\n | \"tp_offset_percentage\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"quantity\"\n | \"sl_trigger_price\"\n | \"sl_offset_percentage\"\n | \"sl_pnl\"\n | \"sl_offset\";\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 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 .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n if (orderSide === OrderSide.SELL) {\n if (entryPrice === 0) return 0;\n if (orderType === AlgoOrderType.TAKE_PROFIT) {\n return new Decimal(1)\n .minus(new Decimal(price).div(new Decimal(entryPrice)))\n .abs()\n .toDecimalPlaces(4, Decimal.ROUND_DOWN)\n .toNumber();\n }\n\n return new Decimal(price)\n .div(new Decimal(entryPrice))\n .minus(1)\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 \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_DOWN).toNumber();\n }\n\n return decimal.toNumber();\n}\n\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 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\nexport function tpslCalculateHelper(\n key: string,\n inputs: {\n key: string;\n value: string | number;\n entryPrice: number | string;\n qty: number | string;\n orderSide: OrderSide;\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 ) {\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 let qty = Number(key === \"quantity\" ? inputs.value : 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}offset`]: \"\",\n // [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [key]: inputs.value,\n };\n }\n let trigger_price, offset, offset_percentage, pnl;\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 (inputs.value === \"\") {\n return {\n [`${keyPrefix}trigger_price`]: trigger_price,\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [`${keyPrefix}ROI`]: \"\",\n };\n }\n break;\n }\n\n case \"tp_pnl\":\n case \"sl_pnl\": {\n pnl = inputs.value;\n trigger_price = pnlToPrice({\n qty,\n pnl: Number(inputs.value),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n\n case \"tp_offset\":\n case \"sl_offset\": {\n offset = inputs.value;\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 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 trigger_price = offsetPercentageToPrice({\n qty,\n percentage: Number(`${inputs.value}`.replace(/\\.0{0,2}$/, \"\")),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n });\n break;\n }\n }\n\n if (!trigger_price)\n return {\n [`${keyPrefix}trigger_price`]: \"\",\n [`${keyPrefix}offset`]: \"\",\n [`${keyPrefix}offset_percentage`]: \"\",\n [`${keyPrefix}pnl`]: \"\",\n [`${keyPrefix}ROI`]: \"\",\n [key]: inputs.value,\n };\n\n return {\n [`${keyPrefix}trigger_price`]: todpIfNeed(\n trigger_price,\n symbol?.quote_dp ?? 2\n ),\n [`${keyPrefix}offset`]:\n offset ??\n priceToOffset(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n [`${keyPrefix}offset_percentage`]:\n offset_percentage ??\n priceToOffsetPercentage({\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n }),\n [`${keyPrefix}pnl`]:\n pnl ??\n priceToPnl(\n {\n qty,\n price: Number(trigger_price!),\n entryPrice,\n orderSide: inputs.orderSide,\n orderType,\n },\n options\n ),\n // [`${keyPrefix}ROI`]: calcROI({\n // pnl: Number(pnl ?? 0),\n // qty,\n // price: Number(trigger_price!),\n // }),\n };\n}\n","import { OrderType } from \"@orderly.network/types\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\nimport { StopLimitOrderCreator } from \"./stopLimitOrderCreator\";\nimport { OrderCreator } from \"./interface\";\nimport { GeneralOrderCreator } from \"./generalCreator\";\nimport { StopMarketOrderCreator } from \"./stopMarketOrderCreator\";\nimport { PostOnlyOrderCreator } from \"./postOnlyCreator\";\nimport { FOKOrderCreator } from \"./fokCreator\";\nimport { IOCOrderCreator } from \"./iocCreator\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\n\nimport { TPSLOrderCreator } from \"./tpslOrderCreator\";\nimport { TPSLPositionOrderCreator } from \"./tpslPositionOrderCreator\";\nimport { BracketLimitOrderCreator } from \"./bracketLimitOrderCreator\";\nimport { OrderlyOrder } from \"@orderly.network/types\";\nimport { BracketMarketOrderCreator } from \"./bracketMarketOrderCreator\";\nimport { BBOOrderCreator } from \"./bboOrderCreator\";\n\nexport class OrderFactory {\n static create(\n type: OrderType | AlgoOrderRootType | string\n ): OrderCreator<any> {\n // console.log(\"type\", type);\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\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 {\n OrderEntity,\n OrderType,\n OrderlyOrder,\n AlgoOrderType,\n ChildOrder,\n AlgoOrderRootType,\n AlgoOrderChildOrders,\n OrderSide,\n} from \"@orderly.network/types\";\nimport {\n OrderCreator,\n OrderFormEntity,\n ValuesDepConfig,\n VerifyResult,\n} from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport abstract class BaseOrderCreator<T> implements OrderCreator<T> {\n abstract create(values: T, config?: ValuesDepConfig): T;\n\n abstract validate(values: T, config: ValuesDepConfig): Promise<VerifyResult>;\n\n abstract orderType: OrderType;\n\n baseOrder(data: OrderlyOrder): 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 > = {\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 };\n\n if (data.visible_quantity === 0) {\n order.visible_quantity = data.visible_quantity;\n }\n\n const bracketOrder = this.parseBracketOrder(data);\n\n if (!bracketOrder) {\n return order;\n }\n\n return {\n ...order,\n algo_type: AlgoOrderRootType.BRACKET,\n\n child_orders: [bracketOrder],\n };\n }\n\n baseValidate(\n values: OrderlyOrder,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n const errors: {\n [P in keyof OrderEntity]?: { type: string; message: string };\n } = {};\n\n const { maxQty, symbol, markPrice } = configs;\n\n // @ts-ignore\n let { order_quantity, total, order_price, reduce_only, order_type } =\n values;\n\n const { min_notional, base_tick, quote_dp, quote_tick, base_dp } = 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 = {\n type: \"required\",\n message: \"Quantity is required\",\n };\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 = {\n type: \"min\",\n message: `Quantity must be greater than ${new Decimal(base_min).todp(\n base_dp\n )}`,\n };\n // errors.order_quantity = `quantity must be greater than ${base_min}`;\n } else if (qty.gt(maxQty)) {\n errors.order_quantity = {\n type: \"max\",\n message: `Quantity must be less than ${new Decimal(maxQty).todp(\n base_dp\n )}`,\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 notionalHintStr = checkNotional({\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 (notionalHintStr !== undefined && !reduce_only) {\n errors.total = {\n type: \"min\",\n message: notionalHintStr,\n };\n }\n\n this.validateBracketOrder(values, configs, errors);\n\n return Promise.resolve(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 parseBracketOrder(data: OrderlyOrder): AlgoOrderChildOrders | null {\n const orders: ChildOrder[] = [];\n\n const side = data.side === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n if (!!data.tp_trigger_price) {\n const tp_trigger_price = data.tp_trigger_price;\n\n orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n side: side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: tp_trigger_price,\n symbol: data.symbol,\n reduce_only: true,\n });\n }\n\n if (!!data.sl_trigger_price) {\n const sl_trigger_price = data.sl_trigger_price;\n\n orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n side: side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: sl_trigger_price,\n symbol: data.symbol,\n reduce_only: true,\n });\n }\n\n if (!orders.length) return null;\n\n return {\n symbol: data.symbol,\n algo_type: AlgoOrderRootType.POSITIONAL_TP_SL,\n child_orders: orders,\n };\n }\n\n private validateBracketOrder(\n values: OrderlyOrder,\n config: ValuesDepConfig,\n errors: {\n [P in keyof OrderlyOrder]?: { type: string; message: string };\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 = {\n type: \"max\",\n message: `TP price must be less than ${quote_max}`,\n };\n }\n if (tpPrice.lt(quote_min)) {\n errors.tp_trigger_price = {\n type: \"min\",\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n\n if (side === OrderSide.BUY) {\n if (tpPrice.lte(_orderPrice)) {\n errors.tp_trigger_price = {\n type: \"tpPrice < order_price\",\n message: `TP must be greater than ${_orderPrice}`,\n };\n }\n }\n\n if (side === OrderSide.SELL) {\n if (tpPrice.gte(_orderPrice)) {\n errors.tp_trigger_price = {\n type: \"tpPrice > order_price\",\n message: `TP price must be less than ${_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 = {\n type: \"max\",\n message: `SL price must be less than ${quote_max}`,\n };\n }\n if (slPrice.lt(quote_min)) {\n errors.sl_trigger_price = {\n type: \"min\",\n message: `SL price must be greater than ${quote_min}`,\n };\n }\n\n if (side === OrderSide.BUY) {\n if (slPrice.gte(_orderPrice)) {\n errors.sl_trigger_price = {\n type: \"slPrice > order_price\",\n message: `SL price must be less than ${_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 = {\n type: \"slPrice < order_price\",\n message: `SL price must be greater than ${_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 = {\n // type: \"min\",\n // message: `TP price must be greater than ${_orderPrice}`,\n // };\n // }\n // if (slPrice.gte(_orderPrice)) {\n // errors.sl_trigger_price = {\n // type: \"max\",\n // message: `SL price must be less than ${_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 = {\n // type: \"max\",\n // message: `SL price must be less than ${_orderPrice}`,\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 = {\n // type: \"max\",\n // message: `TP price must be less than ${_orderPrice}`,\n // };\n // }\n\n // if (slPrice.lte(_orderPrice)) {\n\n // }\n // }\n\n return errors;\n }\n}\n","import { Decimal } from \"@orderly.network/utils\";\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 { OrderEntity } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nexport class MarketOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(values: OrderEntity) {\n const data = this.baseOrder(values);\n\n delete data[\"order_price\"];\n delete data[\"total\"];\n delete data[\"trigger_price\"];\n delete data[\"isStopOrder\"];\n\n return {\n ...data,\n };\n }\n validate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, configs);\n }\n}\n","import {\n OrderEntity,\n OrderSide,\n OrderType,\n OrderlyOrder,\n} from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order as orderUntil } from \"@orderly.network/perp\";\nimport { pick } from \"ramda\";\n\nconst { maxPrice, minPrice, scopePrice } = orderUntil;\n\nexport class LimitOrderCreator<\n T extends OrderEntity = OrderlyOrder\n> extends BaseOrderCreator<T> {\n create(values: OrderlyOrder, config?: ValuesDepConfig): T {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n\n this.totalToQuantity(order, config!);\n\n return pick(\n [\n \"symbol\",\n \"order_price\",\n \"order_quantity\",\n \"visible_quantity\",\n \"reduce_only\",\n \"side\",\n \"order_type\",\n \"algo_type\",\n \"child_orders\",\n ],\n order\n );\n\n // return order;\n }\n\n validate(\n values: OrderlyOrder,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, side } = values;\n\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"Price is required\",\n };\n } else {\n const price = new Decimal(order_price);\n const { symbol } = config;\n const { price_range, price_scope, quote_max, quote_min } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n const scopePriceNumber = scopePrice(\n config.markPrice,\n price_scope,\n side\n );\n\n const priceRange =\n side === \"BUY\"\n ? {\n min: scopePriceNumber,\n max: maxPriceNumber,\n }\n : {\n min: minPriceNumber,\n max: scopePriceNumber,\n };\n\n /// if side is 'buy', only check max price,\n /// if side is 'sell', only check min price,\n if (price.gt(quote_max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${quote_max}`,\n };\n } else {\n if (price.gt(priceRange?.max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${new Decimal(\n priceRange.max\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n\n if (price.lt(quote_min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${quote_min}`,\n };\n } else {\n if (price.lt(priceRange?.min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${new Decimal(\n priceRange.min\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n }\n\n // errors = this.validateBracketOrder(values, config, errors);\n\n return errors;\n });\n }\n\n orderType = OrderType.LIMIT;\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderEntity,\n TriggerPriceType,\n OrderlyOrder,\n} from \"@orderly.network/types\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order as orderUntil } from \"@orderly.network/perp\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderType } from \"@orderly.network/types\";\nimport { pick, values } from \"ramda\";\n\nconst { maxPrice, minPrice, scopePrice: scopePrice } = orderUntil;\n\nexport class StopLimitOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n create(\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\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 \"visible_quantity\",\n ],\n order\n );\n }\n\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, trigger_price, side } = values;\n const { symbol } = config;\n const { price_range, price_scope, quote_max, quote_min } = symbol;\n\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"Price is required\",\n };\n }\n\n // validate trigger price\n if (trigger_price > quote_max) {\n errors.trigger_price = {\n type: \"max\",\n message: `Trigger price must be less than ${quote_max}`,\n };\n } else if (trigger_price < quote_min) {\n errors.trigger_price = {\n type: \"min\",\n message: `Trigger price must be greater than ${quote_min}`,\n };\n } else {\n if (trigger_price && order_price) {\n const price = new Decimal(order_price);\n\n const maxPriceNumber = maxPrice(trigger_price, price_range);\n const minPriceNumber = minPrice(trigger_price, price_range);\n const scropePriceNumbere = scopePrice(\n trigger_price,\n price_scope,\n side\n );\n\n const priceRange =\n side === \"BUY\"\n ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\n }\n : {\n min: minPriceNumber,\n max: scropePriceNumbere,\n };\n\n /// if side is 'buy', only check max price,\n /// if side is 'sell', only check min price,\n if (price.gt(quote_max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${quote_max}`,\n };\n } else {\n if (price.gt(priceRange?.max)) {\n errors.order_price = {\n type: \"max\",\n message: `Price must be less than ${new Decimal(\n priceRange.max\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n\n if (price.lt(quote_min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${quote_min}`,\n };\n } else {\n if (price.lt(priceRange?.min)) {\n errors.order_price = {\n type: \"min\",\n message: `Price must be greater than ${new Decimal(\n priceRange.min\n ).todp(symbol.quote_dp)}`,\n };\n }\n }\n }\n }\n\n return errors;\n });\n }\n\n orderType: OrderType.STOP_LIMIT = OrderType.STOP_LIMIT;\n}\n","import { OrderEntity } from \"@orderly.network/types\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nexport class GeneralOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(data: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(data),\n order_price: data.order_price,\n order_quantity: data.order_quantity,\n };\n }\n validate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return super.baseValidate(values, configs);\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderEntity,\n OrderType,\n TriggerPriceType,\n} from \"@orderly.network/types\";\nimport { OrderFormEntity, ValuesDepConfig, VerifyResult } from \"./interface\";\n\nimport { pick } from \"ramda\";\nimport { BaseOrderCreator } from \"./baseCreator\";\n\nexport class StopMarketOrderCreator extends BaseOrderCreator<AlgoOrderEntity> {\n create(\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 // order_price: values.order_price,\n trigger_price: values.trigger_price!,\n algo_type: AlgoOrderRootType.STOP,\n type: OrderType.MARKET,\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 \"visible_quantity\",\n ],\n order\n );\n\n // return order;\n }\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n // @ts-ignore\n const { order_price, trigger_price, side } = values;\n const { symbol } = config;\n const { quote_max, quote_min } = symbol;\n\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n // validate trigger price\n if (trigger_price > quote_max) {\n errors.trigger_price = {\n type: \"max\",\n message: `Trigger price must be less than ${quote_max}`,\n };\n } else if (trigger_price < quote_min) {\n errors.trigger_price = {\n type: \"min\",\n message: `Trigger price must be greater than ${quote_min}`,\n };\n }\n\n return errors;\n });\n }\n}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class PostOnlyOrderCreator extends LimitOrderCreator {}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class FOKOrderCreator extends LimitOrderCreator {}\n","import { LimitOrderCreator } from \"./limitOrderCreator\";\n\nexport class IOCOrderCreator extends LimitOrderCreator {}\n","import { AlgoOrderEntity, OrderType, API } from \"@orderly.network/types\";\nimport { TriggerPriceType } from \"@orderly.network/types\";\nimport { AlgoOrderType } from \"@orderly.network/types\";\nimport { AlgoOrderRootType } from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\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 =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: tp_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.MARKET,\n trigger_price: sl_trigger_price,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\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 };\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 newData: AlgoOrderUpdateEntity[] = [];\n\n const needUpdateQty = values.quantity !== oldValue.quantity;\n\n data.child_orders.forEach((order) => {\n // find the old order\n let _order = Object.create(null);\n\n if (needUpdateQty) {\n _order[\"quantity\"] = data.quantity;\n }\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n _order[\"is_activated\"] = false;\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n // _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n _order[\"trigger_price\"] = order.trigger_price;\n }\n\n if (Object.keys(_order).length > 0) {\n _order[\"order_id\"] = Number(oldOrder.algo_order_id);\n newData.push(_order);\n }\n }\n });\n\n if (needUpdateQty && newData.length < 2) {\n // if quantity is changed, need to update all child orders\n const missingOrders = oldValue.child_orders.filter(\n (order) => order.algo_order_id !== newData[0].order_id\n );\n\n if (missingOrders.length) {\n newData.push({\n quantity: Number(data.quantity),\n order_id: missingOrders[0].algo_order_id,\n });\n }\n }\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport {\n OrderCreator,\n OrderFormEntity,\n ValuesDepConfig,\n VerifyResult,\n} from \"./interface\";\n// import { values } from \"ramda\";\n// import { config } from \"@swc/core/spack\";\n// import { maxQty } from \"@orderly.network/perp\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport type AlgoOrderUpdateEntity = {\n trigger_price?: number;\n order_id: number;\n quantity?: number;\n is_activated?: boolean;\n};\n\nexport abstract class BaseAlgoOrderCreator<\n T extends AlgoOrderEntity<\n AlgoOrderRootType.POSITIONAL_TP_SL | AlgoOrderRootType.TP_SL\n >\n> implements OrderCreator<T>\n{\n abstract create(values: T, config: ValuesDepConfig): T;\n\n /**\n * base validate\n */\n validate(\n values: Partial<T>,\n config: ValuesDepConfig\n ): Promise<{\n [P in keyof T]?: {\n type: string;\n message: string;\n };\n }> {\n const result = Object.create(null);\n return Promise.resolve().then(() => {\n const { tp_trigger_price, sl_trigger_price, side } = values;\n\n const qty = Number(values.quantity);\n const maxQty = config.maxQty;\n const orderType = values.order_type;\n const { quote_max, quote_min, price_scope, quote_dp, base_min, min_notional } =\n config.symbol ?? {};\n \n if (!isNaN(qty) && qty > maxQty) {\n result.quantity = {\n message: `Quantity must be less than ${config.maxQty}`,\n };\n }\n if (!isNaN(qty) && qty < base_min) {\n result.quantity = {\n message: `Quantity must be greater than ${base_min}`,\n };\n }\n\n \n\n // if (!tp_trigger_price) {\n // result.tp_trigger_price = {\n // message: `TP price is required`,\n // };\n // }\n \n // if (!sl_trigger_price) {\n // result.tp_trigger_price = {\n // message: `SL price is required`,\n // };\n // }\n\n if (Number(tp_trigger_price) < 0) {\n result.tp_trigger_price = {\n message: `TP Price must be greater than 0`,\n };\n }\n\n if (Number(sl_trigger_price) < 0) {\n result.sl_trigger_price = {\n message: `SL Price must be greater than 0`,\n };\n }\n\n const mark_price =\n orderType === OrderType.MARKET || orderType == null\n ? config.markPrice\n : values.order_price\n ? Number(values.order_price)\n : undefined;\n\n // const notionalHintStr = checkNotional(mark_price, qty, min_notional);\n\n // console.log(\"check min notional\", notionalHintStr);\n \n\n // if (!!notionalHintStr) {\n // result.total = {\n // type: \"min\",\n // message: notionalHintStr,\n // };\n // }\n\n // there need use position side to validate\n // so if order's side is buy, then position's side is sell\n if (side === OrderSide.BUY && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 - price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (\n !!sl_trigger_price &&\n Number(sl_trigger_price) < slTriggerPriceScope\n ) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) > config.markPrice) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${config.markPrice}`,\n };\n }\n\n if (\n !!tp_trigger_price &&\n Number(tp_trigger_price) <= config.markPrice\n ) {\n result.tp_trigger_price = {\n message: `TP price must be greater than ${config.markPrice}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n\n if (side === OrderSide.SELL && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 + price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (\n !!sl_trigger_price &&\n Number(sl_trigger_price) > slTriggerPriceScope\n ) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < config.markPrice) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${config.markPrice}`,\n };\n }\n\n if (\n !!tp_trigger_price &&\n Number(tp_trigger_price) >= config.markPrice\n ) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${config.markPrice}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n\n return Object.keys(result).length > 0 ? result : null;\n });\n }\n\n abstract get type(): OrderType;\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderType,\n OrderType,\n TriggerPriceType,\n AlgoOrderRootType,\n} from \"@orderly.network/types\";\nimport { OrderSide } from \"@orderly.network/types\";\nimport { API } from \"@orderly.network/types\";\nimport { AlgoOrderUpdateEntity, BaseAlgoOrderCreator } from \"./baseAlgoCreator\";\nimport { ValuesDepConfig } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport class TPSLPositionOrderCreator extends BaseAlgoOrderCreator<\n AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>\n> {\n type = AlgoOrderRootType.POSITIONAL_TP_SL;\n\n create(\n values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n config: ValuesDepConfig\n ) {\n const side =\n values.side! === OrderSide.BUY ? OrderSide.SELL : OrderSide.BUY;\n\n const child_orders = [];\n\n if (typeof values.tp_trigger_price !== \"undefined\") {\n const tp_trigger_price = !!values.tp_trigger_price\n ? new Decimal(values.tp_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.tp_trigger_price;\n\n child_orders.push({\n algo_type: AlgoOrderType.TAKE_PROFIT,\n reduce_only: true,\n side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: tp_trigger_price,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n symbol: values.symbol,\n is_activated: !!values.tp_trigger_price,\n });\n }\n\n if (typeof values.sl_trigger_price !== \"undefined\") {\n const sl_trigger_price = !!values.sl_trigger_price\n ? new Decimal(values.sl_trigger_price)\n .todp(config.symbol.quote_dp)\n .toNumber()\n : values.sl_trigger_price;\n child_orders.push({\n algo_type: AlgoOrderType.STOP_LOSS,\n reduce_only: true,\n side,\n type: OrderType.CLOSE_POSITION,\n trigger_price: sl_trigger_price,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n symbol: values.symbol,\n is_activated: !!values.sl_trigger_price,\n });\n }\n\n return {\n algo_type: AlgoOrderRootType.POSITIONAL_TP_SL,\n trigger_price_type: TriggerPriceType.MARK_PRICE,\n // reduce_only: true,\n symbol: values.symbol,\n child_orders,\n };\n }\n\n crateUpdateOrder(\n values: AlgoOrderEntity<AlgoOrderRootType.POSITIONAL_TP_SL>,\n /**\n * The old value of the order\n */\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 const newData: {\n trigger_price?: number;\n order_id: number;\n is_activated?: boolean;\n }[] = [];\n data.child_orders.forEach((order) => {\n // find the old order\n\n const oldOrder = oldValue.child_orders?.find(\n (oldOrder) => oldOrder.algo_type === order.algo_type\n );\n\n if (oldOrder) {\n if (!order.is_activated) {\n newData.push({\n is_activated: false,\n order_id: Number(oldOrder.algo_order_id),\n });\n } else if (oldOrder.trigger_price !== order.trigger_price) {\n newData.push({\n trigger_price: order.trigger_price as number,\n order_id: Number(oldOrder.algo_order_id),\n });\n }\n }\n });\n\n return [\n {\n child_orders: newData,\n },\n data,\n ];\n }\n}\n","import {\n AlgoOrderEntity,\n AlgoOrderRootType,\n OrderSide,\n} from \"@orderly.network/types\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { OrderType } from \"@orderly.network/types\";\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<VerifyResult> {\n const result = Object.create(null);\n await Promise.resolve();\n const { tp_trigger_price, sl_trigger_price, side } = values;\n const qty = Number(values.quantity);\n const maxQty = config.maxQty;\n const type = values.order_type;\n const { quote_max, quote_min, price_scope, quote_dp } = config.symbol ?? {};\n\n const mark_price =\n type === OrderType.MARKET\n ? config.markPrice\n : values.order_price\n ? Number(values.order_price)\n : undefined;\n\n if (!isNaN(qty) && qty > maxQty) {\n result.quantity = {\n message: `Quantity must be less than ${config.maxQty}`,\n };\n }\n if (Number(tp_trigger_price) < 0) {\n result.tp_trigger_price = {\n message: `TP Price must be greater than 0`,\n };\n }\n if (Number(sl_trigger_price) < 0) {\n result.sl_trigger_price = {\n message: `SL Price must be greater than 0`,\n };\n }\n // there need use position side to validate\n // so if order's side is buy, then position's side is sell\n if (side === OrderSide.BUY && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 - price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (!!sl_trigger_price && Number(sl_trigger_price) < slTriggerPriceScope) {\n result.sl_trigger_price = {\n message: `SL price must be greater than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) <= mark_price) {\n result.tp_trigger_price = {\n message: `TP price must be greater than ${mark_price}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n if (side === OrderSide.SELL && mark_price) {\n const slTriggerPriceScope = new Decimal(mark_price * (1 + price_scope))\n .toDecimalPlaces(quote_dp, Decimal.ROUND_DOWN)\n .toNumber();\n if (!!sl_trigger_price && Number(sl_trigger_price) > slTriggerPriceScope) {\n result.sl_trigger_price = {\n message: `SL price must be less than ${slTriggerPriceScope}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) >= mark_price) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${mark_price}`,\n };\n }\n\n if (!!tp_trigger_price && Number(tp_trigger_price) > quote_max) {\n result.tp_trigger_price = {\n message: `TP price must be less than ${quote_max}`,\n };\n }\n\n if (!!sl_trigger_price && Number(sl_trigger_price) < quote_min) {\n result.sl_trigger_price = {\n message: `TP price must be greater than ${quote_min}`,\n };\n }\n }\n return Object.keys(result).length > 0 ? result : null;\n}\n","import { OrderEntity, OrderType, OrderlyOrder } from \"@orderly.network/types\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { BracketOrder } from \"@orderly.network/types\";\n\nimport { LimitOrderCreator } from \"./limitOrderCreator\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\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<VerifyResult> {\n const value = await super.validate(values, config);\n\n const bracketData = await bracketOrderValidator(values as any, config);\n\n console.log(\"bracket limit order creator\", value, bracketData);\n\n return { ...value, ...bracketData };\n }\n}\n","import { OrderlyOrder, OrderType } from \"@orderly.network/types\";\nimport { MarketOrderCreator } from \"./marketOrderCreator\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { bracketOrderValidator } from \"./baseBracketOrderCreator\";\n\nexport class BracketMarketOrderCreator extends MarketOrderCreator {\n orderType = OrderType.MARKET;\n create(values: OrderlyOrder) {\n const order = super.create(values);\n return {\n ...order,\n quantity: order.order_quantity,\n type: order.order_type,\n price: order.order_price,\n };\n }\n\n \n async validate(\n values: OrderlyOrder,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\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}\n","import { OrderEntity, OrderlyOrder } from \"@orderly.network/types\";\nimport { pick } from \"ramda\";\nimport { BaseOrderCreator } from \"./baseCreator\";\nimport { ValuesDepConfig, VerifyResult } from \"./interface\";\nimport { checkNotional } from \"../../utils/createOrder\";\n\nexport class BBOOrderCreator extends BaseOrderCreator<OrderEntity> {\n create(values: OrderEntity) {\n const order = {\n ...this.baseOrder(values),\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 \"level\",\n ],\n order\n );\n }\n\n async validate(\n values: OrderlyOrder,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, configs).then((errors) => {\n delete errors[\"total\"];\n\n let { order_quantity, order_price, reduce_only, level } = values;\n\n const { symbol } = configs;\n\n const { min_notional, base_tick, quote_dp, quote_tick, base_dp } =\n symbol || {};\n\n const notionalHintStr = checkNotional({\n base_tick,\n quote_tick,\n price: order_price,\n qty: order_quantity,\n min_notional,\n quote_dp,\n base_dp,\n });\n\n if (notionalHintStr !== undefined && !reduce_only) {\n errors.total = {\n type: \"min\",\n message: notionalHintStr,\n };\n }\n\n // if (level === undefined || level === null) {\n // errors.level = {\n // type: \"required\",\n // message: \"Level is required\",\n // };\n // }\n\n return errors;\n });\n }\n}\n","import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useAccountInfo } from \"./useAccountInfo\";\n\nexport const useSymbolLeverage = (symbol: string) : number | \"-\" => {\n const { data: info } = useAccountInfo();\n\n const maxAccountLeverage = info?.max_leverage;\n\n const res = useQuery<any>(`/v1/public/info/${symbol}`, {\n dedupingInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n errorRetryCount: 2,\n errorRetryInterval: 200,\n });\n\n const maxSymbolLeverage = useMemo(() => {\n const base = res?.data?.base_imr;\n if (base) return 1 / base;\n }, [res]);\n\n const maxLeverage = useMemo(() => {\n if (!maxAccountLeverage || !maxSymbolLeverage) {\n return \"-\";\n }\n\n return Math.min(maxAccountLeverage, maxSymbolLeverage);\n }, [maxAccountLeverage, maxSymbolLeverage]);\n\n return maxLeverage;\n};\n","import { API } from \"@orderly.network/types\";\nimport { SWRInfiniteResponse } from \"swr/infinite\";\nimport { usePrivateInfiniteQuery } from \"../../usePrivateInfiniteQuery\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { useEffect } from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport enum AssetHistoryStatusEnum {\n NEW = \"new\",\n CONFIRM = \"confirm\",\n PROCESSING = \"processing\",\n COMPLETED = \"completed\",\n PENDDING = \"pendding\",\n PENDING_REBALANCE = \"pending_rebalance\",\n}\n\nconst useAssetsHistory = (options: {\n // token?: string;\n side?: string;\n // status?: AssetHistoryStatusEnum;\n startTime?: string;\n endTime?: string;\n page?: number;\n pageSize?: number;\n}) => {\n const { page = 1, pageSize = 10 } = options;\n const ee = useEventEmitter();\n\n const getKey = () => {\n // if (previousPageData && !previousPageData.length) return null;\n const searchParams = new URLSearchParams();\n\n searchParams.set(\"page\", page.toString());\n searchParams.set(\"size\", pageSize.toString());\n\n // if (options.token) searchParams.set(\"token\", options.token);\n if (options.side && options.side !== \"All\")\n searchParams.set(\"side\", options.side);\n // if (options.status) searchParams.set(\"status\", options.status);\n if (options.startTime) searchParams.set(\"start_t\", options.startTime);\n if (options.endTime) searchParams.set(\"end_t\", options.endTime);\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 const updateList = useDebouncedCallback(\n (data: any) => {\n mutate();\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 [\n data?.rows || [],\n {\n meta: data?.meta,\n isLoading,\n },\n ] as const;\n};\n\nexport { useAssetsHistory };\n","import { API, SDKError } from \"@orderly.network/types\";\nimport { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { zero } from \"@orderly.network/utils\";\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(\"startDate and endDate 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) => data.rows.reverse(),\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 // (data?.rows as any[]).shift();\n\n return [\n data || [],\n {\n aggregateValue,\n },\n ] as const;\n};\n\nexport type UseStatisticsDailyReturn = ReturnType<typeof useStatisticsDaily>;\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useMemo, useRef } from \"react\";\nimport { useSymbolsInfo } from \"../useSymbolsInfo\";\nimport { SWRConfiguration } from \"swr\";\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 let { 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 & {\n annual_rate: number;\n })[]\n | 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 [\n parsedData,\n {\n meta: data?.meta,\n isLoading,\n isValidating,\n },\n ] as const;\n};\n\nexport type UseFundingFeeHistoryReturn = ReturnType<\n typeof useFundingFeeHistory\n>;\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../../usePrivateQuery\";\nimport { useMemo } from \"react\";\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 let { 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 & {\n annual_rate: number;\n })[]\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 [\n parsedData,\n {\n meta: data?.meta,\n isLoading,\n isValidating,\n },\n ] as const;\n};\n\nexport type UseDistributionHistoryReturn = ReturnType<\n typeof useDistributionHistory\n>;\n","import { useEffect, useRef, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { useConfig } from \"../useConfig\";\nimport { useWS } from \"../useWS\";\n\nconst oneDay = 1000 * 60 * 60 * 24;\n\nexport function useMaintenanceStatus() {\n // 0 for nothing, 2 for maintenance\n const [status, setStatus] = useState<number>(0);\n const [startTime, setStartTime] = useState<number>();\n const [endTime, setEndTime] = useState<number>();\n const [brokerName, setBrokerName] = useState<string>(\"Orderly network\");\n const { data: systemInfo, mutate } = useQuery<any>(`/v1/public/system_info?source=maintenance`, {\n revalidateOnFocus: false,\n errorRetryCount: 2,\n errorRetryInterval: 200,\n });\n const ws = useWS();\n\n const config = useConfig();\n\n useEffect(() => {\n if (!systemInfo) {\n return;\n }\n\n\n const brokerName = config.get(\"brokerName\");\n if (brokerName) {\n setBrokerName(brokerName);\n }\n // systemInfo.status = 2;\n // systemInfo.scheduled_maintenance = {\n // start_time: new Date(\"2024-08-27\").getTime(),\n // end_time: new Date(\"2024-08-30\").getTime(),\n // };\n console.log(\"--systemInfo\", systemInfo, brokerName);\n if (systemInfo.scheduled_maintenance) {\n setStartTime(systemInfo.scheduled_maintenance.start_time);\n setEndTime(systemInfo.scheduled_maintenance.end_time);\n }\n if (systemInfo.status === 2) {\n setStatus(2);\n }\n }, [systemInfo, config]);\n\n useEffect(() => {\n const unsubscribe = ws.subscribe(`maintenance_status`, {\n onMessage: (message: any) => {\n setStatus(message.status);\n console.log(\"-- ws maintenance_status\", message);\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 { LedgerWalletKey } from \"@orderly.network/types\";\nimport { useLocalStorage } from \"../useLocalStorage\";\n\nexport const useStorageLedgerAddress = () => {\n const [ledgerWallet, setLedgerWallet] = useLocalStorage<string[]>(LedgerWalletKey, [] as string[]);\n\n const setLedgerAddress = (address:string) => {\n if (!ledgerWallet.includes(address)) {\n const arr = [...ledgerWallet, address];\n setLedgerWallet(arr);\n }\n }\n\n return {\n setLedgerAddress,\n ledgerWallet,\n }\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"../../useWS\";\n// import { useMarkPriceActions } from \"../useMarkPrice/useMarkPriceStore\";\nimport { Calculator, CalculatorScope } from \"../../types\";\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","import { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\n// import { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useAppStore } from \"./appStore\";\nimport { useMarketStore } from \"./useMarket/market.store\";\n\nconst publicQueryOptions = {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n dedupingInterval: 1000 * 60 * 60 * 24,\n};\n\nexport const usePublicDataObserver = () => {\n const { setSymbolsInfo, setFundingRates } = useAppStore(\n (state) => state.actions\n );\n\n const { updateMarket } = useMarketStore((state) => state.actions);\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 const obj: Record<string, API.SymbolExt> = {};\n\n for (let index = 0; index < data.length; index++) {\n const item = data[index];\n const arr = item.symbol.split(\"_\");\n const base_dp = getPrecisionByNumber(item.base_tick);\n const quote_dp = getPrecisionByNumber(item.quote_tick);\n obj[item.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 };\n }\n setSymbolsInfo(obj);\n },\n });\n\n /**\n * funding rates\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 /**\n * markets info\n */\n useQuery<API.MarketInfo[]>(`/v1/public/futures`, {\n // revalidateOnFocus: false,\n ...publicQueryOptions,\n onSuccess(data: API.MarketInfo[]) {\n if (!data || !data?.length) {\n return [];\n }\n // console.log(data);\n updateMarket(data);\n },\n });\n};\n\nfunction getEstFundingRate(data: API.FundingRate) {\n if (!data) return;\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 { API } from \"@orderly.network/types\";\nimport { produce } from \"immer\";\nimport { create } from \"zustand\";\n\ntype MarketStore = {\n market: API.MarketInfoExt[];\n // marketSymbols: string[];\n marketMap: Record<string, API.MarketInfoExt> | null;\n};\n\ntype MarketActions = {\n updateMarket: (data: API.MarketInfoExt[]) => void;\n updateTicker: (data: API.MarketInfoExt[]) => void;\n};\n\nconst useMarketStore = create<MarketStore & { actions: MarketActions }>(\n (set, get) => ({\n market: [],\n // marketSymbols: [],\n marketMap: null,\n actions: {\n updateMarket: (data) => {\n // const symbols: string[] = [];\n const marketMap: Record<string, API.MarketInfoExt> = {};\n\n data.forEach((item) => {\n // symbols.push(item.symbol);\n marketMap[item.symbol] = item;\n });\n\n set({\n market: data,\n // marketSymbols: symbols,\n marketMap: marketMap,\n });\n },\n updateTicker: (data) => {\n // console.log(\n // \"updateTicker\",\n // data.filter((item) => item.symbol === \"PERP_ETH_USDC\")[0]\n // );\n set(\n produce((state) => {\n state.market = data;\n })\n );\n },\n },\n })\n);\n\nexport { useMarketStore };\n","import { ConfigKey, ConfigStore } from \"@orderly.network/core\";\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 Error(\"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 { ConfigKey, DefaultConfigStore } from \"@orderly.network/core\";\nimport { MarketsStorageKey } from \"./orderly/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 {\n PropsWithChildren,\n createContext,\n useContext,\n useEffect,\n useCallback,\n useRef,\n} from \"react\";\nimport * as amplitude from \"@amplitude/analytics-browser\";\nimport {\n useEventEmitter,\n useGetEnv,\n useConfig,\n ENVType,\n useAccount,\n useNetworkInfo,\n} from \"./\";\nimport {\n EnumTrackerKeys,\n TrackerListenerKeyMap,\n NetworkId,\n} from \"@orderly.network/types\";\n\nconst apiKeyMap = {\n dev: \"4d6b7db0fdd6e9de2b6a270414fd51e0\",\n qa: \"96476b00bc2701360f9b480629ae5263\",\n staging: \"dffc00e003479b86d410c448e00f2304\",\n prod: \"3ab9ae56ed16cc57bc2ac97ffc1098c2\",\n};\n\ninterface TrackerContextState {\n track: (key: string, params: { [key: string]: string }) => void;\n}\n\nexport const TrackerContext = createContext<TrackerContextState>({} as any);\n\nexport const useTrackerContext = () => useContext(TrackerContext);\n\nexport const OrderlyTrackerProvider = ({ children }: PropsWithChildren) => {\n const listenKeys = Object.keys(TrackerListenerKeyMap);\n const ee = useEventEmitter();\n const env = useGetEnv();\n const walletConnectRef = useRef(false);\n const { account, state } = useAccount();\n const networkId = useConfig(\"networkId\") as NetworkId;\n const brokerId = useConfig(\"brokerId\");\n const getChainInfo = useNetworkInfo(networkId);\n\n const handleEvent = useCallback(\n (\n key: keyof typeof TrackerListenerKeyMap,\n params: {\n address?: string;\n connectWallet: {\n chainId: number;\n name: string;\n };\n }\n ) => {\n account?.accountId && amplitude.setUserId(account?.accountId);\n\n if (key === EnumTrackerKeys.WALLET_CONNECT) {\n if (walletConnectRef.current) return;\n const info = getChainInfo(\n params?.connectWallet?.chainId as number\n ).info;\n const { address = \"\", connectWallet } = params;\n const identify: { [key: string]: string | undefined } = {\n address,\n broker_id: brokerId,\n sdk_version:\n window?.__ORDERLY_VERSION__?.[\"@orderly.network/net\"] ?? \"\",\n };\n const identifyEvent = new amplitude.Identify();\n Object.keys(identify).map((subKey) => {\n identifyEvent.set(subKey, identify[subKey] as string);\n });\n amplitude.identify(identifyEvent);\n const eventProperties = {\n wallet: connectWallet?.name,\n network: info?.network_infos?.name,\n };\n amplitude.track(TrackerListenerKeyMap[key], eventProperties);\n walletConnectRef.current = true;\n return;\n }\n\n if (key === EnumTrackerKeys.SIGNIN_SUCCESS) {\n const info = getChainInfo(\n params?.connectWallet?.chainId as number\n ).info;\n\n amplitude.track(TrackerListenerKeyMap[key], {\n wallet: params?.connectWallet?.name,\n network: info?.network_infos?.name,\n });\n return;\n }\n amplitude.track(TrackerListenerKeyMap[key], params);\n },\n [account?.accountId, brokerId, state?.connectWallet?.name]\n );\n\n useEffect(() => {\n amplitude.init(apiKeyMap[env], { serverZone: \"EU\" });\n listenKeys.forEach((key) => {\n ee.on(key, (params = {}) => {\n setTimeout(() => {\n handleEvent(key as keyof typeof TrackerListenerKeyMap, params);\n }, 2000);\n });\n });\n return () => {\n listenKeys.forEach((key) => {\n ee.off(key);\n });\n };\n }, [env]);\n\n return (\n <TrackerContext.Provider\n value={{\n track: (key, params) => {\n amplitude.track(key, params);\n },\n }}\n >\n {children}\n </TrackerContext.Provider>\n );\n};\n","import { ChainNamespace } from \"@orderly.network/types\";\nimport type { EIP1193Provider } from \"@web3-onboard/common\";\nimport { createContext, useContext } from \"react\";\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: EIP1193Provider | any;\n accounts: WalletAccount[];\n chains: ConnectedChain[];\n instance?: unknown;\n}\n\nexport interface WalletConnectorContextState {\n connect: (options?: any) => Promise<WalletState[]>;\n disconnect: (options: any) => Promise<any[]>;\n connecting: boolean;\n setChain: (options: { chainId: string | number }) => Promise<any>;\n chains: any[];\n // switchChain: (options: { chainId: string }) => Promise<any>;\n wallet: WalletState;\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, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderlyOrder,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"../orderly/useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit, pick } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"../orderly/useCollateral\";\nimport { useMaxQty } from \"../orderly/useMaxQty\";\n// import { availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"../orderly/useMarkPrice\";\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { OrderFactory } from \"../services/orderCreator/factory\";\nimport { usePositions } from \"../orderly/usePositionStream/usePosition.store\";\n// import { VerifyResult } from \"../utils/createOrder\";\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 let preveValue = prev[k];\n let 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 maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\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(\"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(\"orderCreator 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.broker_id,\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 {\n API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\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 // return [values, input, value, markPrice];\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, config] = inputs;\n\n if (value === \"\") {\n return [{ ...values, total: \"\" }, input, value, markPrice, config];\n }\n\n let quantity = new Decimal(value);\n const quantityDP = quantity.dp();\n\n // check the length for precision and recalculate\n if (quantityDP > config.base_dp) {\n quantity = quantity.toDecimalPlaces(config.base_dp);\n values.order_quantity = quantity.toString();\n }\n\n // if(values.type === OrderType.MARKET) {\n\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, config];\n }\n const price = markPrice;\n values.order_price = \"\";\n values.total = quantity.mul(price).todp(2).toString();\n }\n\n 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(config.quote_dp).toString();\n } else {\n values.total = \"\";\n }\n }\n\n // const totalDP = total.dp();\n // total.todp(Math.min(config.quoteDP, totalDP));\n\n return [\n {\n ...values,\n },\n input,\n value,\n markPrice,\n config,\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\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 // values: newValues,\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_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 return tpslInputHandle;\n\n default:\n return otherInputHandle;\n }\n};\n\n//** format number */\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","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 { 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 // throw new Error(\"The ref must be a canvas element\");\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","import { OrderSide } 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 // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\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 /**\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\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 return this.loadImg(options.backgroundImg!).then((img) => {\n this.img = img;\n this.ctx.drawImage(\n this.img!,\n 0,\n 0,\n this.painter.width * this.painter.ratio,\n this.painter.height * this.painter.ratio\n );\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","import { commify } from \"@orderly.network/utils\";\nimport { BasePaint, DrawOptions, layoutInfo } from \"./basePaint\";\nimport { path } from \"ramda\";\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\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._ratio(position.left!),\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 left = this._ratio(position.left!);\n\n let top = layout.position.top! + offsetTop + this.transformTop;\n let prevElementBoundingBox: TextMetrics = {} as TextMetrics;\n\n // draw position side;\n\n if (typeof options.data?.position.side !== \"undefined\") {\n prevElementBoundingBox = this._drawText(options.data.position.side, {\n color:\n options.data?.position.side.toUpperCase() === \"LONG\"\n ? this.DEFAULT_PROFIT_COLOR\n : this.DEFAULT_LOSS_COLOR,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.symbol !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(options.data?.position.symbol!, {\n color: layout.color,\n left: left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n\n if (typeof options.data?.position.leverage !== \"undefined\") {\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n\n if (prevElementBoundingBox.width) {\n prevElementBoundingBox = this._drawText(\"|\", {\n color: \"rgba(255,255,255,0.2)\",\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n });\n }\n left += (prevElementBoundingBox.width ?? 0) + this._ratio(7);\n prevElementBoundingBox = this._drawText(\n `${options.data?.position.leverage}X`,\n {\n color: layout.color,\n left,\n top: this._ratio(top),\n fontSize: this._ratio(fontSize),\n fontFamily: options.fontFamily,\n }\n );\n }\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 left = this._ratio(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,\n top: this._ratio(top),\n\n fontSize: this._ratio(layout.fontSize as number),\n fontWeight: 700,\n fontFamily: options.fontFamily,\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 left += (prevElementBoundingBox.width ?? 0) + this._ratio(8);\n text = `(${text})`;\n } else {\n left = this._ratio(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,\n top: this._ratio(top),\n fontSize,\n fontWeight,\n fontFamily: options.fontFamily,\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 // let cellWidth = this.positionInfoCellWidth;\n let left = position.left! + (index % col) * this.positionInfoCellWidth;\n\n // let top = (position.top as number) + (index / 2) * 38 + this.transformTop;\n let top =\n (position.top as number) +\n Math.floor(index / col) * 38 +\n this.transformTop;\n\n this._drawText(info.title, {\n left: this._ratio(left),\n top: this._ratio(top),\n fontSize: this._ratio(10),\n color: layout.labelColor,\n fontFamily: options.fontFamily,\n });\n\n this._drawText(info.value, {\n left: this._ratio(left),\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 });\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._ratio(position.left!)\n : this._ratio(this.painter.width - 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 ? layout.textAlign : \"end\",\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._ratio(position.left!);\n\n if (hasReferral) {\n const metrics = this.drawDomainUrl(options, true);\n // console.log(\"metrics\", metrics);\n left =\n this._ratio(this.painter.width) -\n metrics.width -\n this._ratio(8 + position.left!);\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 ? layout.textAlign : \"end\",\n fontFamily: options.fontFamily,\n textBaseline: layout.textBaseline,\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 qrPaint(this.ctx, {\n size: this._ratio(this.QRCODE_SIZE),\n padding: this._ratio(2),\n left: this._ratio(position.left!),\n top: this._ratio(top - this.QRCODE_SIZE),\n data: `${url.toString()}`,\n });\n\n this._drawText(options.data.referral.slogan, {\n left: this._ratio(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 });\n\n this._drawText(\"Referral Code\", {\n left: this._ratio(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 });\n\n this._drawText(options.data.referral.code, {\n left: this._ratio(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 });\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 },\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 } = 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 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","//@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 { 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","export {\n findTPSLFromOrder,\n findTPSLFromOrders,\n findPositionTPSLFromOrders,\n} from \"../orderly/usePositionStream/utils\";\n\nexport { cleanStringStyle } from \"./orderEntryHelper\";\n\nexport { getPositionBySymbol } from \"./swr\";\n\nexport { priceToPnl, calcTPSL_ROI } from \"../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nexport { formatNumber } from \"./orderEntryHelper\";\nexport type { ValueOf } from \"./createGetter\";","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 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) return null;\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 { max, min } from \"ramda\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { formatDate } from \"./format\";\nimport { getTimestamp } from \"@orderly.network/utils\";\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: true,\n });\n\n return {\n data: dailyVolume,\n mutate,\n };\n};\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 { 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 { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport type CheckReferralCodeReturns = {\n isExist?: boolean;\n error: any;\n isLoading: boolean;\n};\n\nexport const useCheckReferralCode = (\n code?: string\n): CheckReferralCodeReturns => {\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 { useCallback, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { useLocalStorage } from \"../useLocalStorage\";\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 {\n data,\n mutate,\n isLoading,\n error,\n } = usePrivateQuery<RefferalAPI.ReferralInfo>(\"/v1/referral/info\", {\n revalidateOnFocus: true,\n });\n\n const isTrader = useMemo(() => {\n if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;\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') return undefined;\n return (data?.referrer_info?.referral_codes?.length || 0) > 0;\n }, [data?.referrer_info]);\n\n\n const [pinCodes] = useLocalStorage<string[]>(\"orderly_referral_codes\", [] as string[]);\n\n const getFirstRefCode = useCallback(() : RefferalAPI.ReferralCode | undefined => {\n\n if (!data?.referrer_info.referral_codes) return undefined;\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\n pinedItems.push({ ...referralCodes[index]});\n referralCodes.splice(index, 1);\n }\n\n }\n\n const newCodes = [...pinedItems, ...referralCodes];\n\n return newCodes?.[0];\n }, [pinCodes, data]);\n \n\n return {\n data,\n isTrader,\n isAffiliate,\n error,\n isLoading,\n getFirstRefCode,\n };\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","export enum TWType {\n normal = \"normal\",\n mm = \"mm\",\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\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 });\n\n return [data] as const;\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","// 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","[\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\nexport const useGetEnv = (): ENVType => {\n const { configStore } = useContext(OrderlyContext);\n const baseUrl =\n configStore.get(\"apiBaseUrl\") || \"https://api-evm.orderly.org\";\n switch (baseUrl) {\n case \"https://testnet-api-evm.orderly.org\":\n return ENVType.staging;\n case \"https://dev-api-iap-v2.orderly.org\":\n return ENVType.dev;\n case \"https://qa-api-evm.orderly.org\":\n return ENVType.qa;\n default:\n return ENVType.prod;\n }\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 { 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 { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { useAccount } from \"../useAccount\";\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 } = 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 return account?.createApiKey(365, {\n tag: \"manualCreated\",\n scope,\n });\n };\n\n\n const resetOrderlyKeyIPRestriction = (orderlyKey: string, mode: \"ALLOW_ALL_IPS\" | \"DISALLOW_ALL_IPS\") => {\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\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}","import {\n type API,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\n\nimport { useCallback, useEffect } from \"react\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n} from \"../../utils/orderEntryHelper\";\nimport { compose, head } from \"ramda\";\nimport {\n type FullOrderState,\n // useOrderStore,\n} from \"./orderEntry.store\";\nimport { OrderCreator } from \"../../services/orderCreator/interface\";\nimport { hasTPSL } from \"./helper\";\nimport { calcTPSL_ROI } from \"../../orderly/useTakeProfitAndStopLoss/tp_slUtils\";\nimport { useOrderStore } from \"./useOrderStore\";\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 } = {}\n) => {\n // const orderEntity = useOrderEntryFromStore();\n\n const { symbolInfo } = options;\n const initialOrder = {\n side: OrderSide.BUY,\n order_type: OrderType.LIMIT,\n order_price: \"\",\n symbol,\n ...options.initialOrder,\n };\n\n const { actions: orderEntryActions, entry: orderEntity } =\n useOrderStore(initialOrder);\n\n // const orderEntryActions = useOrderStore((state) => state.actions);\n\n const calculate = useCallback(\n (\n values: Partial<FullOrderState>,\n fieldName:\n | \"symbol\"\n | \"order_type\"\n | \"order_type_ext\"\n | \"order_price\"\n | \"order_quantity\"\n | \"order_amount\"\n | \"visible_quantity\"\n | \"side\"\n | \"reduce_only\"\n | \"slippage\"\n | \"order_tag\"\n | \"level\"\n | \"post_only_adjust\"\n | \"total\"\n | \"algo_type\"\n | \"trigger_price_type\"\n | \"trigger_price\"\n | \"child_orders\"\n | \"tp_pnl\"\n | \"tp_offset\"\n | \"tp_offset_percentage\"\n | \"tp_ROI\"\n | \"tp_trigger_price\"\n | \"sl_pnl\"\n | \"sl_offset\"\n | \"sl_offset_percentage\"\n | \"sl_ROI\"\n | \"sl_trigger_price\"\n | \"quantity\"\n | \"price\"\n | \"type\",\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 let 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 useEffect(() => {\n /// reset the symbol\n orderEntryActions.updateOrderByKey(\"symbol\", symbol);\n }, [orderEntryActions, symbol]);\n\n const setValue = (\n key: keyof FullOrderState,\n value: any,\n additional?: {\n markPrice: number;\n }\n ) => {\n if (!symbolInfo) {\n orderEntryActions.updateOrderByKey(key, value);\n console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n return;\n }\n\n // const values = useOrderStore.getState().entry;\n const { markPrice } = additional ?? { markPrice: 0 };\n\n let newValues = calculate(\n { ...orderEntity },\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 {\n // whether it is necessary to calculate tpsl ROI;\n if (newValues.tp_pnl && newValues.order_quantity) {\n newValues.tp_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.tp_pnl,\n });\n }\n\n if (newValues.sl_pnl && newValues.order_quantity) {\n newValues.sl_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.sl_pnl,\n });\n }\n }\n\n // calculateTPSL(newValues, markPrice);\n\n // console.log(\"newValues++++++\", newValues);\n\n orderEntryActions.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 } 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\n // whether it is necessary to calculate tpsl ROI;\n // if (newValues.tp_pnl && newValues.order_quantity) {\n\n // newValues.tp_ROI = calcTPSL_ROI({\n // qty: newValues.order_quantity,\n // price: newValues.order_price || markPrice,\n // pnl: newValues.tp_pnl,\n // });\n // }\n\n // if (newValues.sl_pnl && newValues.order_quantity) {\n // newValues.sl_ROI = calcTPSL_ROI({\n // qty: newValues.order_quantity,\n // price: newValues.order_price || markPrice,\n // pnl: newValues.sl_pnl,\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 orderEntryActions.updateOrder(values);\n console.warn(\"[ORDERLY]:symbolInfo is required to calculate the order\");\n return;\n }\n\n // const prevValues = useOrderStore.getState().entry;\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 // orderEntryActions.updateOrder(newValues);\n });\n\n orderEntryActions.updateOrder(newValues);\n\n return newValues;\n };\n\n const onMarkPriceUpdated = useCallback(\n (markPrice: number, baseOn?: \"total\" | \"order_quantity\") => {\n // console.log(\"******\", baseOn);\n if (!options.symbolInfo) return;\n // const values = useOrderStore.getState().entry;\n let newValues;\n\n if (typeof baseOn === \"undefined\") {\n newValues = calculate(\n { ...orderEntity },\n \"order_price\",\n markPrice,\n markPrice,\n options.symbolInfo\n );\n } else {\n newValues = calculate(\n { ...orderEntity },\n baseOn,\n orderEntity[baseOn],\n markPrice,\n options.symbolInfo\n );\n }\n\n // if (hasTPSL(newValues)) {\n // newValues = calculateTPSL(\n // \"order_price\",\n // newValues,\n // markPrice,\n // options.symbolInfo\n // );\n // }\n\n if (hasTPSL(newValues)) {\n // whether it is necessary to calculate tpsl ROI;\n if (newValues.tp_pnl && newValues.order_quantity) {\n newValues.tp_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.tp_pnl,\n });\n }\n\n if (newValues.sl_pnl && newValues.order_quantity) {\n newValues.sl_ROI = calcTPSL_ROI({\n qty: newValues.order_quantity,\n price: newValues.order_price || markPrice,\n pnl: newValues.sl_pnl,\n });\n }\n }\n\n orderEntryActions.updateOrder(newValues);\n },\n [calculate, options.symbolInfo, orderEntity, orderEntryActions]\n );\n\n const validate = (\n order: Partial<OrderlyOrder>,\n creator: OrderCreator<any>,\n options: { maxQty: number; markPrice: number }\n ) => {\n const { markPrice, maxQty } = options;\n\n return creator?.validate(order, {\n symbol: symbolInfo!,\n maxQty,\n markPrice,\n });\n };\n\n const generateOrder = (\n creator: OrderCreator<any>,\n options: { maxQty: number; markPrice: number }\n ) => {\n const order = creator.create(orderEntity, {\n ...options,\n symbol: symbolInfo!,\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 orderEntryActions.resetOrder(order);\n };\n\n return {\n formattedOrder: orderEntity,\n setValue,\n setValues,\n submit: submitOrder,\n reset: resetOrder,\n generateOrder,\n validate,\n onMarkPriceChange: onMarkPriceUpdated,\n } as const;\n};\n\nexport { useOrderEntryNextInternal };\n","import {\n AlgoOrderRootType,\n OrderlyOrder,\n OrderSide,\n OrderType,\n} from \"@orderly.network/types\";\n\nimport { order as orderUtils } from \"@orderly.network/perp\";\nimport { OrderFactory } from \"../../services/orderCreator/factory\";\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.CLOSE_POSITION ||\n (order.algo_type && order.algo_type === AlgoOrderRootType.BRACKET) ||\n isBracketOrder(order);\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] as (keyof OrderlyOrder)[];\n\nexport const isBracketOrder = (order: Partial<OrderlyOrder>): boolean => {\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 symbolOrOrder: Partial<OrderlyOrder>,\n askAndBid: number[]\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 (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 (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[0];\n } else {\n price = askAndBid[1];\n }\n } else {\n // LIMIT order\n if (symbolOrOrder.side === OrderSide.BUY) {\n if (orderPrice >= askAndBid[0]) {\n price = askAndBid[0];\n } else {\n price = orderPrice;\n }\n } else {\n if (orderPrice <= askAndBid[1]) {\n price = askAndBid[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 } as const;\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 baseIMR: number;\n baseMMR: number;\n totalCollateral: number;\n markPrice: number;\n positions: any;\n }\n) => {\n const result = getPriceAndQty(order, 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 baseIMR,\n baseMMR,\n imr_factor,\n markPrice,\n totalCollateral,\n futures_taker_fee_rate,\n positions,\n } = inputs;\n\n const orderFee = orderUtils.orderFee({\n qty: quantity,\n price,\n futuresTakeFeeRate: Number(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: imr_factor,\n orderFee,\n newOrder: {\n qty: quantity,\n price,\n symbol,\n },\n });\n\n // console.log(\"********\", liqPrice, markPrice, totalCollateral, result);\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 }\n) => {\n const result = getPriceAndQty(order, askAndBid);\n const { totalCollateral, positions, symbol } = inputs;\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","import { useState } from \"react\";\nimport { produce } from \"immer\";\nimport { OrderlyOrder, RequireKeys } from \"@orderly.network/types\";\n\nexport type FullOrderState = OrderlyOrder;\n\ntype OrderEntryStateEntity = RequireKeys<\n FullOrderState,\n \"side\" | \"order_type\" | \"symbol\"\n>;\n\nconst initialOrderState = {\n order_price: \"\",\n order_quantity: \"\",\n trigger_price: \"\",\n tp_trigger_price: \"\",\n sl_trigger_price: \"\",\n tp_pnl: \"\",\n sl_pnl: \"\",\n tp_offset_percentage: \"\",\n sl_offset_percentage: \"\",\n tp_offset: \"\",\n sl_offset: \"\",\n total: \"\",\n // symbol: \"\",\n};\n\nexport const useOrderStore = (initialOrder: OrderEntryStateEntity) => {\n const [entry, setEntry] = useState<OrderEntryStateEntity>(initialOrder);\n const [estLeverage, setEstLeverage] = useState<number | null>(null);\n const [estLiquidationPrice, setEstLiquidationPrice] = useState<number | null>(\n null\n );\n const [errors, setErrors] = useState<\n Partial<Record<keyof FullOrderState, string>>\n >({});\n\n const updateOrder = (order: Partial<FullOrderState>) => {\n // setEntry((prev) => ({ ...prev, ...order }));\n setEntry(\n produce((draft) => {\n return { ...draft, ...order };\n })\n // (prev) => ({ ...prev, ...order })\n );\n };\n\n const updateOrderByKey = <K extends keyof FullOrderState>(\n key: K,\n value: FullOrderState[K]\n ) => {\n setEntry(\n produce((draft) => {\n draft[key] = value;\n })\n );\n };\n\n const restoreOrder = (order?: Partial<FullOrderState>) => {\n setEntry(produce((draft) => order as OrderEntryStateEntity));\n };\n\n const updateOrderComputed = (data: {\n estLeverage: number | null;\n estLiquidationPrice: number | null;\n }) => {\n setEstLeverage(data.estLeverage);\n setEstLiquidationPrice(data.estLiquidationPrice);\n };\n\n const resetOrder = (order?: Partial<FullOrderState>) => {\n setEntry(\n produce((draft) => ({\n ...draft,\n ...(order ?? initialOrderState),\n }))\n );\n };\n\n const hasTP_SL = () => {\n return (\n typeof entry.tp_trigger_price !== \"undefined\" ||\n typeof entry.sl_trigger_price !== \"undefined\"\n );\n };\n\n return {\n entry,\n estLeverage,\n estLiquidationPrice,\n errors,\n actions: {\n updateOrder,\n updateOrderByKey,\n restoreOrder,\n updateOrderComputed,\n resetOrder,\n hasTP_SL,\n },\n };\n};\n","import {\n useCollateral,\n useMaxQty,\n useSymbolsInfo,\n} from \"../../orderly/orderlyHooks\";\nimport { useOrderEntryNextInternal } from \"./useOrderEntry.internal\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMarkPriceActions } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport type { FullOrderState } from \"./orderEntry.store\";\nimport {\n SDKError,\n API,\n OrderlyOrder,\n OrderType,\n OrderLevel,\n EnumTrackerKeys\n} from \"@orderly.network/types\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../../useEventEmitter\";\nimport { VerifyResult } from \"../../services/orderCreator/interface\";\nimport { useMutation } from \"../../useMutation\";\nimport {\n calcEstLeverage,\n calcEstLiqPrice,\n getCreateOrderUrl,\n getOrderCreator,\n tpslFields,\n hasTPSL\n} from \"./helper\";\nimport { produce } from \"immer\";\nimport { useAccountInfo } from \"../../orderly/appStore\";\nimport { usePositions } from \"../../orderly/usePositionStream/usePosition.store\";\n\ntype OrderEntryParameters = Parameters<typeof useOrderEntryNextInternal>;\ntype Options = Omit<OrderEntryParameters[\"1\"], \"symbolInfo\">;\n\ntype OrderEntryReturn = {\n submit: (options?: { resetOnSuccess?: boolean }) => 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 /**\n * The estimated liquidation price.\n */\n estLiqPrice: number | null;\n /**\n * The estimated leverage after order creation.\n */\n estLeverage: number | null;\n helper: {\n /**\n * @deprecated Use `validate` instead.\n */\n validator: () => Promise<VerifyResult | null>;\n /**\n * Function to validate the order.\n * @returns {Promise<VerifyResult | null>} The validation result.\n */\n validate: () => Promise<VerifyResult | 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 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: VerifyResult | null;\n };\n /**\n * Indicates if a mutation (order creation) is in progress.\n */\n isMutating: boolean;\n\n markPrice: number | undefined;\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 and must be a string\");\n }\n\n const ee = useEventEmitter();\n\n const [meta, setMeta] = useState<{\n dirty: { [K in keyof OrderlyOrder]?: boolean };\n submitted: boolean;\n validated: boolean;\n errors: VerifyResult | 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\n // const [errors, setErrors] = useState<VerifyResult | null>(null);\n\n const actions = useMarkPriceActions();\n const symbolConfig = useSymbolsInfo();\n const accountInfo = useAccountInfo();\n const positions = usePositions();\n\n const symbolInfo: API.SymbolExt = symbolConfig[symbol]();\n const markPrice = actions.getMarkPriceBySymbol(symbol);\n\n const {\n formattedOrder,\n setValue: setValueInternal,\n setValues: setValuesInternal,\n validate,\n generateOrder,\n reset,\n // submit,\n ...orderEntryActions\n } = useOrderEntryNextInternal(symbol, {\n ...options,\n symbolInfo,\n });\n\n const [doCreateOrder, { isMutating }] = useMutation<OrderlyOrder, any>(\n getCreateOrderUrl(formattedOrder)\n );\n\n const maxQty = useMaxQty(\n symbol,\n formattedOrder.side,\n formattedOrder.reduce_only\n );\n\n const updateOrderPrice = () => {\n const order_type_ext =\n formattedOrder.order_type_ext ?? lastOrderTypeExt.current;\n const level = formattedOrder.level ?? lastLevel.current;\n\n if (\n ![OrderType.ASK, OrderType.BID].includes(order_type_ext!) ||\n level === undefined\n ) {\n return;\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 && !isNaN(price)) {\n setValue(\"order_price\", price, {\n shouldUpdateLastChangedField: false,\n });\n }\n // console.log(\"updateOrderPrice\", askAndBid.current, price);\n };\n\n const updateOrderPriceByOrderBook = () => {\n const { order_type, order_type_ext, order_quantity } = formattedOrder;\n // const hasQty = order_quantity && Number(order_quantity) !== 0;\n const isBBO =\n order_type === OrderType.LIMIT &&\n [OrderType.ASK, OrderType.BID].includes(order_type_ext!);\n\n if (lastChangedField.current !== \"total\" && isBBO) {\n updateOrderPrice();\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 const onOrderBookUpdate = useDebouncedCallback((data: number[][]) => {\n askAndBid.current = data;\n updateOrderPriceByOrderBook();\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 // console.log(\"markPrice\", markPrice);\n\n if (\n (formattedOrder.order_type === OrderType.MARKET ||\n formattedOrder.order_type === OrderType.STOP_MARKET) &&\n markPrice\n ) {\n orderEntryActions.onMarkPriceChange(\n markPrice,\n lastChangedField.current as any\n );\n }\n }, [markPrice, formattedOrder.order_type]);\n\n const prepareData = useCallback(() => {\n return {\n markPrice: actions.getMarkPriceBySymbol(symbol),\n maxQty,\n };\n }, [maxQty, symbol]);\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 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 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 */\n const validateOrder = (): Promise<VerifyResult | null> => {\n return new Promise<VerifyResult | null>(async (resolve, reject) => {\n const creator = getOrderCreator(formattedOrder);\n\n const errors = await validate(formattedOrder, creator, prepareData());\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 estLiqPrice = useMemo(() => {\n const markPrice = actions.getMarkPriceBySymbol(symbol);\n if (!markPrice || !accountInfo) return null;\n\n return calcEstLiqPrice(formattedOrder, askAndBid.current[0], {\n baseIMR: symbolInfo?.base_imr,\n baseMMR: symbolInfo?.base_mmr,\n markPrice,\n totalCollateral,\n futures_taker_fee_rate: accountInfo.futures_taker_fee_rate,\n imr_factor: accountInfo.imr_factor[symbol],\n symbol,\n positions,\n });\n }, [formattedOrder, accountInfo, positions, totalCollateral, symbol]);\n\n const estLeverage = useMemo(() => {\n return calcEstLeverage(formattedOrder, askAndBid.current[0], {\n totalCollateral,\n positions,\n symbol,\n });\n }, [formattedOrder, accountInfo, positions, totalCollateral, symbol]);\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?: { resetOnSuccess?: boolean }) => {\n /**\n * validate order\n */\n const creator = getOrderCreator(formattedOrder);\n const errors = await validate(formattedOrder, creator, prepareData());\n const { resetOnSuccess = true } = 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 Error(\"Order validation failed\");\n }\n\n const order = generateOrder(creator, prepareData());\n\n const result = await doCreateOrder(order);\n\n if (result.success) {\n ee.emit(EnumTrackerKeys.PLACEORDER_SUCCESS, {\n side: order.side,\n order_type: order.order_type,\n tp_sl: hasTPSL(formattedOrder),\n reduce_only: !!order.reduce_only,\n });\n }\n\n if (result.success && resetOnSuccess) {\n reset();\n resetMetaState();\n }\n return result;\n // return submit();\n };\n\n return {\n ...orderEntryActions,\n submit: submitOrder,\n reset,\n resetErrors,\n resetMetaState,\n formattedOrder,\n maxQty,\n estLiqPrice,\n estLeverage,\n helper: {\n /**\n * @deprecated use validate instead\n */\n validator: validateOrder,\n validate: validateOrder,\n },\n freeCollateral,\n setValue,\n setValues,\n symbolInfo: symbolInfo || {},\n metaState: meta,\n isMutating,\n markPrice,\n };\n};\n\nexport { useOrderEntry };\n","import {\n OrderlyOrder,\n OrderSide,\n OrderType,\n RequireKeys,\n} from \"@orderly.network/types\";\nimport { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport { immer } from \"zustand/middleware/immer\";\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 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 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\nexport const useOrderEntryFromStore = () =>\n useOrderStore((state) => state.entry);\n","import { useCallback, useEffect, useState } from \"react\";\nimport { VerifyResult } from \"../../services/orderCreator/interface\";\nimport { getOrderCreator } from \"./helper\";\nimport { useMarkPriceActions } from \"../../orderly/useMarkPrice/useMarkPriceStore\";\nimport { OrderSide, SDKError } from \"@orderly.network/types\";\nimport { useMaxQty } from \"../../orderly/useMaxQty\";\nimport { useSymbolsInfo } from \"../../orderly/useSymbolsInfo\";\nimport { useThrottledCallback } from \"use-debounce\";\n\nexport const useOrderEntity = (\n order: {\n symbol: string;\n side: OrderSide;\n reduce_only?: boolean;\n [key: string]: any;\n },\n options?: {\n maxQty?: number;\n }\n) => {\n if (!order.symbol) {\n throw new SDKError(\"symbol is required\");\n }\n const [errors, setErrors] =\n useState<\n Partial<Record<keyof typeof order, { type: string; message: string }>>\n >();\n\n const maxQty = useMaxQty(order.symbol, order.side, order.reduce_only);\n const finalMaxQty = options?.maxQty ?? maxQty;\n\n const actions = useMarkPriceActions();\n const markPrice = actions.getMarkPriceBySymbol(order.symbol);\n const prepareData = useCallback(() => {\n return {\n markPrice: actions.getMarkPriceBySymbol(order.symbol),\n maxQty: finalMaxQty,\n };\n }, [finalMaxQty, order.symbol, order]);\n\n const symbolInfo = useSymbolsInfo();\n\n const validate = () => {\n return new Promise<VerifyResult | null>(async (resolve, reject) => {\n const creator = getOrderCreator(order);\n const _symbol = symbolInfo[order.symbol]();\n\n const errors = await creator?.validate(order, {\n symbol: _symbol,\n maxQty: finalMaxQty,\n markPrice,\n });\n const keys = Object.keys(errors);\n if (keys.length > 0) {\n setErrors(errors);\n\n reject(errors);\n } else {\n setErrors({});\n }\n // create order\n const orderEntity = creator.create(order, {\n ...prepareData(),\n symbol: _symbol,\n });\n resolve(orderEntity);\n });\n };\n\n const autoCheck = useThrottledCallback(\n () => {\n validate().then(\n () => {},\n (reject) => {}\n );\n },\n 50,\n {}\n );\n\n useEffect(() => {\n autoCheck();\n }, [order.order_price, order.order_quantity, order.trigger_price]);\n\n return {\n validate,\n errors,\n markPrice,\n symbolInfo,\n };\n};\n","import { useEffect, useState } from \"react\";\nimport { useConfig } from \"./\";\n\nexport type RestrictedAreasReturns = {\n ip?: string;\n invalidRegions?: string[];\n restrictedAreasOpen?: boolean;\n contact?: {\n url?: string;\n text?: string;\n };\n};\n\ninterface ApiResponse<T> {\n success: boolean;\n data: T;\n}\n\ninterface RestrictedAreasData {\n invalid_web_country: string;\n invalid_web_city: string;\n}\n\ninterface IpInfoData {\n ip: string;\n city: string;\n region: string;\n checked: boolean;\n}\n\nexport interface IRestrictedAreasParams {\n enableDefault?: boolean;\n customRestrictedIps?: string[];\n customRestrictedRegions?: string[];\n contact?: { url?: string; text?: string };\n}\n\nexport const useRestrictedAreas = (\n params: IRestrictedAreasParams\n): RestrictedAreasReturns => {\n const {\n enableDefault = false,\n customRestrictedIps = [],\n customRestrictedRegions = [],\n contact = {},\n } = params;\n const apiBaseUrl: string = useConfig(\"apiBaseUrl\") as string;\n const [invalidWebCity, setInvalidWebCity] = useState<string[]>([]);\n const [invalidWebCountry, setInvalidWebCountry] = useState<string[]>([]);\n const [invalidRegions, setInvalidRegions] = useState<string[]>([]);\n const [allInvalidAreas, setAllInvalidAreas] = useState<string[]>([]);\n const [city, setCity] = useState<string>(\"\");\n const [region, setRegion] = useState<string>(\"\");\n const [ip, setIp] = useState<string>(\"\");\n const [restrictedAreasOpen, setRestrictedAreasOpen] =\n useState<boolean>(false);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const areaRes = await fetch(`${apiBaseUrl}/v1/restricted_areas`);\n const areaResdata: ApiResponse<RestrictedAreasData> =\n await areaRes.json();\n\n const ipRes = await fetch(`${apiBaseUrl}/v1/ip_info`);\n const ipData: ApiResponse<IpInfoData> = await ipRes.json();\n if (areaResdata.success && ipData.success) {\n // invalid regions\n const invalidCountries = areaResdata?.data?.invalid_web_country?.toLocaleLowerCase()\n ?.replace(/\\s+/g, \"\")\n .split(\",\");\n const invalidCities = areaResdata?.data?.invalid_web_city?.toLocaleLowerCase()\n ?.replace(/\\s+/g, \"\")\n .split(\",\");\n const combinedInvalidRegions = (\n enableDefault ? invalidCities.concat(invalidCountries) : []\n ).concat(\n customRestrictedRegions?.map((item) =>\n item?.replace(/\\s+/g, \"\")?.toLocaleLowerCase()\n )\n );\n const allInvalidAreas = [\n enableDefault ? areaResdata?.data?.invalid_web_country : \"\",\n enableDefault ? areaResdata?.data?.invalid_web_city : \"\",\n customRestrictedRegions?.join(\", \"),\n ].filter((item) => !!item)\n \n\n setInvalidWebCity(invalidCities);\n setInvalidWebCountry(invalidCountries);\n setInvalidRegions(combinedInvalidRegions);\n setAllInvalidAreas(allInvalidAreas)\n\n // user's current location\n const { city, region, ip } = ipData.data;\n setCity(city);\n setRegion(region);\n setIp(ip);\n if (\n combinedInvalidRegions.includes(\n ipData?.data?.city?.replace(/\\s+/g, \"\").toLocaleLowerCase()\n ) ||\n combinedInvalidRegions.includes(\n ipData?.data?.region?.replace(/\\s+/g, \"\").toLocaleLowerCase()\n ) ||\n customRestrictedIps.includes(ipData?.data?.ip)\n ) {\n setRestrictedAreasOpen(true);\n }\n }\n } catch (error) {\n console.error(\"API regions Error\", error);\n }\n };\n\n fetchData();\n }, [apiBaseUrl]);\n\n return {\n ip,\n invalidRegions: allInvalidAreas,\n restrictedAreasOpen,\n contact,\n };\n};\n"]}