@orderly.network/hooks 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -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/usePrivateInfiniteQuery.ts","../src/useBoolean.ts","../src/usePreloadData.ts","../src/useEventEmitter.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/index.ts","../src/useWS.ts","../src/configProvider.tsx","../src/dataProvider.tsx","../src/orderly/usePrivateDataObserver.ts","../src/walletConnectorContext.tsx","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useIndexPrice.ts","../src/orderly/useOpenInterest.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/orderly/useCollateral.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/utils/parseHolding.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useOrderStream.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarkets.ts","../src/orderly/useLeverage.ts","../src/orderly/useFundingRate.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/woo/constants.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useSettleSubscription.ts","../src/orderly/useSymbolPriceRange.ts","../src/useMediaQuery.ts","../src/woo/useSwapQuery.ts","../src/woo/useCrossSwapQuery.ts","../src/woo/useCrossSwap.ts","../src/woo/useSwap.ts"],"names":["options","useSWRMutation","useContext","account","fetcher","data","useSWR","SimpleDI","get","AccountStatusEnum","useCallback","useState","useConstant","useEffect","default","Account","createContext","mutate","item","jsx","useMemo","useRef","useSWRSubscription","Decimal","index","depth","OrderSide","OrderType","SDKError","getPrecisionByNumber","totalCollateral","totalValue","totalUnrealizedROI","pathOr","OrderStatus","zero","usdc","order","symbol","positions","positionsPath","useDebouncedCallback","errors","symbolOrOrder","MarketsType","tabs","tab","type","prop","pick","field","chainsInfoMap","balance","allowance","quantity","query","utils","txHash","status","WS_WalletStatusEnum"],"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\"] = \"1.1.1\";\n};\n\nexport default \"1.1.1\";\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","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { ConfigStore, type ConfigKey } from \"@orderly.network/core\";\n\nexport const useConfig = <T>(\n key?: ConfigKey,\n defaultValue?: T\n): T | ConfigStore => {\n const { configStore } = useContext(OrderlyContext);\n\n if (typeof key !== \"undefined\") {\n if (typeof defaultValue !== \"undefined\") {\n return configStore.getOr(key, defaultValue);\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} from \"@orderly.network/core\";\n\nimport { NetworkId } from \"@orderly.network/types\";\n\nexport interface OrderlyConfigContextState {\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n getWalletAdapter: getWalletAdapterFunc;\n\n networkId: NetworkId;\n\n /**\n * @hidden\n */\n onlyTestnet?: boolean;\n /**\n * @hidden\n */\n enableSwapDeposit?: boolean;\n // extraApis:ExtraAPIs\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\";\n\ntype HTTP_METHOD = \"POST\" | \"PUT\" | \"DELETE\";\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\nexport const useMutation = <T, E>(\n url: string,\n method: HTTP_METHOD = \"POST\",\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 const signer = account.signer;\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 data: any,\n params?: any,\n options?: any\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 signature = await signer.sign(payload);\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, getWalletAdapter } =\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 = useConstant(() => {\n let account = SimpleDI.get<Account>(\"account\");\n\n if (!account) {\n account = new Account(\n configStore,\n keyStore,\n\n getWalletAdapter\n // walletAdapter\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 account = useAccount();\n const middleware = Array.isArray(options?.use) ? options?.use ?? [] : [];\n\n // @ts-ignore\n return useSWR<T>(\n () =>\n account.state.status >= AccountStatusEnum.EnableTrading\n ? [query, account.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\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const apiBaseUrl = useConfig<string>(\"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);\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\";\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\n // const { data: userInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // console.log(\"userInfo\", userInfo);\n\n // const state = useObservable<AccountState>(\n // () => account.state$,\n // account.stateValue\n // );\n\n const statusChangeHandler = (nextState: AccountState) => {\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 login = useCallback(\n // (address: string) => {\n // account.login(address);\n // },\n // [account]\n // );\n\n const createOrderlyKey = useCallback(\n async (remember: boolean) => {\n return account.createOrderlyKey(remember ? 365 : 30);\n },\n [account]\n );\n\n const createAccount = useCallback(async () => {\n return account.createAccount();\n }, [account]);\n\n // console.log(\"--------\", state);\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 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 = (\n getKey: SWRInfiniteKeyLoader,\n options?: SWRInfiniteConfiguration & {\n formatter?: (data: any) => any;\n }\n) => {\n const { formatter, ...restOptions } = options || {};\n const account = useAccount();\n\n const middleware = Array.isArray(restOptions?.use)\n ? restOptions?.use ?? []\n : [];\n\n const result = useSWRInfinite(\n (pageIndex: number, previousPageData) => {\n const queryKey = getKey(pageIndex, previousPageData);\n if (account.state.status < AccountStatusEnum.EnableTrading || !queryKey) {\n return null;\n }\n return [queryKey, account.state.accountId];\n },\n (url: string, init: RequestInit) => {\n return 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 { useContext, useMemo } from \"react\";\nimport { OrderlyContext, useQuery, useSWR } from \".\";\n\nexport const usePreLoadData = () => {\n const { configStore, enableSwapDeposit } = useContext(OrderlyContext);\n\n // const { error: swapSupportError, data: swapSupportData } = useSWR(\n // `${configStore.get(\"swapSupportApiUrl\")}/swap_support`,\n // (url) => fetch(url).then((res) => res.json()),\n // {\n // revalidateOnFocus: false,\n // }\n // );\n\n const { error: tokenError, data: tokenData } = useQuery(\n \"https://api-evm.orderly.org/v1/public/token\",\n {\n revalidateOnFocus: false,\n }\n );\n\n const isDone = useMemo(() => {\n return !!tokenData;\n }, [tokenData]);\n\n return {\n error: tokenError,\n done: isDone,\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 { 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 = (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 = 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 \n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return\n }\n setStoredValue(readValue());\n };\n\n // 添加 storage 事件监听器\n window.addEventListener('storage', handleStorageChange);\n\n return () => {\n // 清除 storage 事件监听器\n window.removeEventListener('storage', handleStorageChange);\n };\n }, [key]);\n\n return [storedValue, setValue];\n}\n","export { default as version } from \"./version\";\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\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\n\nexport * from \"./orderlyContext\";\nexport type { ConfigProviderProps } from \"./configProvider\";\nexport { OrderlyConfigProvider } from \"./configProvider\";\n\nexport {\n WalletConnectorContext,\n useWalletConnector,\n} from \"./walletConnectorContext\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration, SWRConfig } from \"swr\";\n\nexport { useSWR, SWRConfig, type SWRConfiguration };\n\nexport * from \"use-debounce\";\n\nexport { useMediaQuery } from \"./useMediaQuery\";\n\nexport * from \"./orderly/orderlyHooks\";\n\n//---- woo only -----\nexport * from \"./woo/woo\";\n\nexport type { WalletAdapter } from \"@orderly.network/core\";\n","import { useContext } 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\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\n\nexport const useWS = () => {\n const { configStore } = useContext(OrderlyContext);\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 = new Date().getTime();\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.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 //\n if (\n nextState.status === AccountStatusEnum.EnableTrading &&\n nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n }\n });\n\n if (typeof window !== \"undefined\") {\n (window 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 type { FC, PropsWithChildren } from \"react\";\nimport React, { useEffect } from \"react\";\nimport { OrderlyProvider } from \"./orderlyContext\";\nimport {\n ConfigStore,\n // MemoryConfigStore,\n DefaultConfigStore,\n OrderlyKeyStore,\n getWalletAdapterFunc,\n WalletAdapterOptions,\n LocalStorageStore,\n EtherAdapter,\n SimpleDI,\n Account,\n IContract,\n} from \"@orderly.network/core\";\n\nimport useConstant from \"use-constant\";\nimport { NetworkId } from \"@orderly.network/types\";\n// import { usePreLoadData } from \"./usePreloadData\";\nimport { DataCenterProvider } from \"./dataProvider\";\n// import { useParamsCheck } from \"./useParamsCheck\";\n\ntype RequireOnlyOne<T, U extends keyof T = keyof T> = Omit<T, U> &\n {\n [K in U]-?: Required<Pick<T, K>> & Partial<Record<Exclude<U, K>, never>>;\n }[U];\n\ntype RequireAtLeastOne<T, R extends keyof T = keyof T> = Omit<T, R> &\n {\n [K in R]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<R, K>>>;\n }[R];\n\nexport interface ConfigProviderProps {\n configStore?: ConfigStore;\n keyStore?: OrderlyKeyStore;\n contracts?: IContract;\n getWalletAdapter?: getWalletAdapterFunc;\n brokerId: string;\n networkId: NetworkId;\n enableSwapDeposit?: boolean;\n}\n\nexport const OrderlyConfigProvider = (\n props: PropsWithChildren<\n RequireAtLeastOne<ConfigProviderProps, \"brokerId\" | \"configStore\">\n >\n) => {\n const [account, setAccount] = React.useState<Account | null>(null);\n const {\n configStore,\n keyStore,\n getWalletAdapter,\n brokerId,\n networkId,\n enableSwapDeposit,\n contracts,\n } = props;\n\n if (!brokerId && typeof configStore === \"undefined\") {\n console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n }\n\n const innerConfigStore = useConstant<ConfigStore>(() => {\n return configStore || new DefaultConfigStore({ brokerId, networkId });\n });\n\n const innerKeyStore = useConstant<OrderlyKeyStore>(() => {\n return keyStore || new LocalStorageStore(networkId);\n });\n\n const innerGetWalletAdapter = useConstant<getWalletAdapterFunc>(() => {\n return (\n getWalletAdapter ||\n ((options: WalletAdapterOptions) => new EtherAdapter(options))\n );\n });\n\n // check params, if has mismatch, throw warning message to console\n // useParamsCheck({ brokerId: innerConfigStore.get(\"brokerId\") });\n\n useEffect(() => {\n let account = SimpleDI.get<Account>(Account.instanceName);\n\n if (!account) {\n account = new Account(\n innerConfigStore,\n innerKeyStore,\n innerGetWalletAdapter,\n {\n contracts,\n }\n );\n\n SimpleDI.registerByName(Account.instanceName, account);\n }\n\n setAccount(account);\n }, []);\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: networkId,\n enableSwapDeposit: enableSwapDeposit,\n // apiBaseUrl,\n }}\n >\n <DataCenterProvider>{props.children}</DataCenterProvider>\n </OrderlyProvider>\n );\n};\n\n// const DataPreload = () => {\n// const { error, done } = usePreLoadData();\n// };\n","import { PropsWithChildren, createContext, useContext, useRef } from \"react\";\nimport { usePrivateDataObserver } from \"./orderly/usePrivateDataObserver\";\nimport { usePreLoadData } from \"./usePreloadData\";\n\nexport type getKeyFunction = (index: number, prevData: any) => string | null;\n\ninterface DataCenterContextValue {\n // orders\n // positions\n // balances\n //\n regesterKeyHandler: (key: string, handler: getKeyFunction) => void;\n}\n\nexport const DataCenterContext = createContext<DataCenterContextValue>(\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 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 regesterKeyHandler: (key, fun) => {\n getKeyHandlerMapRef.current.set(key, fun);\n },\n }}\n >\n {children}\n </DataCenterContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { useSWRConfig } from \"swr\";\nimport { OrderStatus, WSMessage } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\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 } = useAccount();\n\n const updateOrders = useDebouncedCallback((data) => {\n const map = options.getKeysMap(\"orders\");\n\n map.forEach((getKey, key) => {\n mutate(\n unstable_serialize((index, prevData) => [\n getKey(index, prevData),\n state.accountId,\n ])\n );\n });\n\n // update the orders history list;\n\n // ee.emit(\"orders:changed\");\n }, 500);\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n updateOrders(data);\n ee.emit(\"orders:changed\", data);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n \n // algo orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n onMessage: (data: any) => {\n updateOrders(data);\n if (Array.isArray(data)) {\n data.forEach((item) => ee.emit(\"orders:changed\", {...item, status: item.algoStatus,}));\n } else {\n ee.emit(\"orders:changed\", {...data, status: data.algoStatus,});\n }\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\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 // console.log(\"ws----- positions data-----\", data);\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n return {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const item = nextPostions.find(\n (item) => item.symbol === row.symbol\n );\n if (item) {\n return {\n symbol: item.symbol,\n position_qty: item.positionQty,\n cost_position: item.costPosition,\n last_sum_unitary_funding: item.lastSumUnitaryFunding,\n pending_long_qty: item.pendingLongQty,\n pending_short_qty: item.pendingShortQty,\n settle_price: item.settlePrice,\n average_open_price: item.averageOpenPrice,\n unsettled_pnl: item.unsettledPnl,\n mark_price: item.markPrice,\n est_liq_price: item.estLiqPrice,\n timestamp: Date.now(),\n imr: item.imr,\n mmr: item.mmr,\n IMR_withdraw_orders: item.imrwithOrders,\n MMR_with_orders: item.mmrwithOrders,\n pnl_24_h: item.pnl24H,\n fee_24_h: item.fee24H,\n };\n }\n\n return row;\n }),\n };\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n};\n","import { createContext, useContext } from \"react\";\n\nexport type ConnectedChain = {\n id: number | string;\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: any;\n accounts: WalletAccount[];\n chains: ConnectedChain[];\n instance?: unknown;\n}\n\nexport interface WalletConnectorContextState {\n connect: () => 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: any;\n connectedChain: ConnectedChain | null;\n\n settingChain: boolean;\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 { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { max, min } from \"ramda\";\nimport { SDKError } from \"@orderly.network/types\";\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN] 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 < min(level, 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 = depth.toString().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\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 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] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity] = asks[0];\n\n if (askPrice <= bidPrice) {\n asks.shift();\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n asks[index][1] += askQty;\n }\n asks[index][2] += newQuantity;\n }\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\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 // add max qty for asks/bids\n // let maxAskQty = asks.reduce((a,b) => Math.max(a, b[1]),0);\n // let maxBidQty = bids.reduce((a,b) => Math.max(a, b[1]),0);\n // asks = asks.map((item) => [...item, maxAskQty]);\n // bids = bids.map((item) => [...item, maxBidQty]);\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\nexport type OrderbookOptions = {\n level?: number;\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\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 const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\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 setIsLoading(true);\n let ignore = false;\n ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n onMessage: (message: any) => {\n if (ignore) return;\n //\n if (!!message) {\n // sort and filter qty > 0\n let bids = [...message.bids.sort(bidsSortFn)];\n bids = bids.filter(\n (item: number[]) => !isNaN(item[0]) && item[1] > 0\n );\n let asks = [...message.asks.sort(asksSortFn)];\n asks = asks.filter(\n (item: number[]) => !isNaN(item[0]) && item[1] > 0\n );\n\n // const reduceOrderbookData = reduceOrderbook(depth, level, {\n // bids: bids,\n // asks: asks,\n // });\n setRequestData({ bids: bids, asks: asks });\n setData({ bids: [...bids], asks: [...asks] });\n }\n setIsLoading(false);\n },\n }\n );\n\n return () => {\n setRequestData(null);\n ignore = true;\n // clean the data;\n setData(INIT_DATA);\n };\n }, [symbol, depth]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const { data: markPrice } = useMarkPrice(symbol);\n\n useEffect(() => {\n if (!requestData) return;\n let ignore = false;\n\n const subscription = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n onMessage: (message: any) => {\n //\n if (ignore) return;\n setData((data) => {\n const mergedData =\n !message.asks && !message.bids\n ? data\n : mergeOrderbook(data, message);\n return mergedData;\n // const reducedData = reduceOrderbook(depth, level, mergedData);\n // return reducedData;\n });\n },\n }\n );\n\n return () => {\n ignore = true;\n subscription?.(); //unsubscribe\n };\n }, [symbol, requestData]);\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 // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = data.asks[data.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, data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n const reducedData = reduceOrderbook(depth, level, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n eventEmitter.emit(\"orderbook:update\", [\n reducedData.asks[0][0],\n reducedData.bids[0][0],\n ]);\n }, [reducedData.asks[0][0], reducedData.bids[0][0]]);\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\";\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\n const value = useMemo(() => {\n //\n if (!info) return null;\n if (!ticker) return info;\n const config: any = {\n ...info,\n mark_price: markPrice,\n index_price: indexPrice,\n open_interest: openInterest,\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 }\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 }\n return config;\n }, [info, symbol, ticker]);\n\n return value as API.MarketInfo;\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n\n return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n // console.log(message);\n next(null, message.price);\n },\n });\n\n return () => {\n // console.log(\"_____________________ unsubscribe _________ \", symbol);\n unsubscribe?.();\n };\n });\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","type objectDepth = 1 | 2;\ntype propertyType<T, K, F> = T extends 1 ? K : F;\n\nexport function createGetter<\n T extends Record<string, any>,\n K extends keyof T = string\n>(data: T, depth: objectDepth = 2) {\n return new Proxy(data || {}, {\n get(\n target: any,\n property: propertyType<typeof depth, K, any>,\n receiver\n ): any {\n if (depth === 1) {\n return (defaultValue: any) => {\n if (!target) return defaultValue;\n return target[property] ?? defaultValue;\n };\n }\n return (key: K, defaultValue: any) => {\n if (key) {\n return (target as any)[property]?.[key] ?? defaultValue;\n } else {\n return target[property];\n }\n };\n },\n });\n}\n","import { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\n\nexport const useSymbolsInfo = () => {\n const { data = {} } = useQuery<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\n return createGetter<API.SymbolExt>(data as API.SymbolExt) as Record<\n string,\n any\n // (key: string, defaultValue?: any) => any\n >;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { OrderFactory, availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\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<OrderEntity>,\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\ntype 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 * 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 * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\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 // console.log(\"+++++++\", symbolOrOrder);\n\n if (typeof symbolOrOrder === \"object\") {\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 [doCreateOrder, { data, error, reset, isMutating }] = useMutation<\n OrderEntity,\n any\n >(orderDataCache?.current?.isStopOrder ? \"/v1/algo/order\" : \"/v1/order\");\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\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, positions, accountInfo } =\n 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(() => symbolInfo[symbol](\"base_imr\"), [symbolInfo]);\n const baseMMR = useMemo(() => symbolInfo[symbol](\"base_mmr\"), [symbolInfo]);\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderEntity>,\n current: Partial<OrderEntity>\n ): { key: keyof OrderEntity; value: any } | null => {\n if (!prev) return null;\n let key, value;\n const keys = Object.keys(current) as (keyof OrderEntity)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\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 break;\n }\n }\n\n if (!key) return null;\n\n return { key, value };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\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 symbolOrOrder.order_quantity = symbolOrOrder.order_quantity.replace(\n /,/g,\n \"\"\n );\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n symbolOrOrder.order_price = symbolOrOrder.order_price.replace(/,/g, \"\");\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n symbolOrOrder.total = symbolOrOrder.total.replace(/,/g, \"\");\n }\n\n if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n return symbolOrOrder;\n }, [symbolOrOrder]);\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 (\n !values ||\n typeof values.order_type === \"undefined\" ||\n !includes(values.order_type, availableOrderTypes)\n ) {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\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) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price\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 // console.log(\"res::::\", res);\n // resolve(res);\n if (res.success) {\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 (typeof symbolOrOrder === \"string\") {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(symbolOrOrder);\n }, [symbolOrOrder]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\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 )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\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\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // if(item.key === \"reduce_only\") {\n\n // }\n\n // if (\n // item.key === \"side\" ||\n // item.key === \"symbol\" ||\n // item.key === \"order_type\"\n // ) {\n // // side or symbol changed, reset errors and the data;\n // prevOrderData.current = parsedData;\n // orderDataCache.current = {\n // ...parsedData,\n // total: \"\",\n // };\n\n // return orderDataCache.current;\n // }\n\n // set 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, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n // console.log(\"-----------\", values);\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [\n parsedData?.order_price,\n parsedData?.side,\n parsedData?.order_quantity,\n parsedData?.visible_quantity,\n parsedData?.order_type,\n parsedData?.order_type_ext,\n parsedData?.symbol,\n parsedData?.total,\n parsedData?.reduce_only,\n parsedData?.trigger_price,\n\n markPrice,\n ]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice) return;\n // validate order data;\n validator(formattedOrder)?.then((err) => {\n setErrors(err);\n });\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (!optionsValue?.watchOrderbook) return;\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 || askAndBid.current.length === 0)\n return null;\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;\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 liqPrice = order.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\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 = order.estLeverage({\n totalCollateral,\n 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 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 { OrderEntity, OrderType } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type OrderEntityKey = keyof OrderEntity & string;\n\n// index 3: markPrice\ntype orderEntryInputs = [\n Partial<OrderEntity>,\n // to update field\n keyof OrderEntity,\n any,\n number,\n {\n baseDP: number;\n quoteDP: number;\n }\n];\n\ntype orderEntryInputHandle = (inputs: orderEntryInputs) => orderEntryInputs;\n\nconst needNumberOnlyFields: (keyof OrderEntity)[] = [\n \"order_quantity\",\n \"order_price\",\n \"total\",\n];\n\nconst cleanStringStyle = (str: string | number): string => {\n if (typeof str !== \"string\") {\n str = str.toString();\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\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.order_quantity) {\n //\n // const d = new Decimal(values.order_quantity);\n // const dp = d.dp();\n // if (dp > quoteTick) {\n // values.order_quantity = d.toDecimalPlaces(baseTick).toNumber();\n // }\n // }\n\n // if (!!values.order_price && values.order_type === OrderType.LIMIT) {\n // const sd = new Decimal(values.order_price).sd(false);\n // if (sd > quoteTick) {\n // values.order_price = new Decimal(values.order_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.quoteDP) {\n values.order_price = price.toDecimalPlaces(config.quoteDP).toString();\n }\n\n price.toDecimalPlaces(Math.min(priceDP, config.quoteDP));\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.order_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.baseDP)\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.baseDP) {\n quantity = quantity.toDecimalPlaces(config.baseDP);\n values.order_quantity = quantity.toNumber();\n }\n\n // if(values.order_type === OrderType.MARKET) {\n\n // }\n\n if (\n values.order_type === OrderType.MARKET ||\n values.order_type === OrderType.STOP_MARKET\n ) {\n const price = markPrice;\n values.total = quantity.mul(price).todp(2).toNumber();\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(2).toNumber();\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 // total: total.todp(2).toNumber(),\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.quoteDP) {\n total = total.toDecimalPlaces(config.quoteDP);\n values.total = total.toNumber();\n }\n\n const quantity = total.div(price);\n\n return [\n {\n ...values,\n order_quantity: quantity\n .toDecimalPlaces(Math.min(config.baseDP, quantity.dp()))\n .toNumber(),\n },\n input,\n value,\n markPrice,\n config,\n ];\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: string\n): orderEntryInputHandle => {\n switch (fieldName) {\n case \"order_quantity\": {\n return quantityInputHandle;\n }\n case \"order_price\": {\n return priceInputHandle;\n }\n case \"total\": {\n return totalInputHandle;\n }\n default:\n return otherInputHandle;\n }\n};\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport {\n pathOr_unsettledPnLPathOr,\n usePositionStream,\n} from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/perp\";\nimport { type API, OrderStatus } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useHoldingStream } from \"./useHoldingStream\";\nimport { useOrderStream } from \"./useOrderStream\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n availableBalance: number;\n unsettledPnL: number;\n\n positions: API.Position[];\n accountInfo?: API.AccountInfo;\n};\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\nconst totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\ntype Options = {\n dp: number;\n};\n\nexport const useCollateral = (\n options: Options = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const positions = usePositionStream();\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 = 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.totalInitialMarginWithOrders({\n positions: positionsPath(positions),\n orders: filterAlgoOrders,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo,\n });\n }, [positions, filterAlgoOrders, markPrices, accountInfo, symbolInfo]);\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(),\n availableBalance,\n unsettledPnL: pathOr_unsettledPnLPathOr(positions),\n\n accountInfo,\n\n // @hidden\n positions: positionsPath(positions),\n };\n};\n","import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { type SWRConfiguration } from \"swr\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API, OrderEntity } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarketsStream } from \"./useMarketsStream\";\n\ntype PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport interface PositionReturn {\n data: any[];\n loading: boolean;\n close: (\n order: Pick<OrderEntity, \"order_type\" | \"order_price\" | \"side\">\n ) => void;\n}\n\nexport const usePositionStream = (\n symbol?: string,\n options?: SWRConfiguration & { calcMode?: PriceMode }\n) => {\n const symbolInfo = useSymbolsInfo();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\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 fundingRates = useFundingRates();\n\n const {\n data,\n error,\n mutate: refreshPositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 200,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {},\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n const [priceMode, setPriceMode] = useState(options?.calcMode || \"markPrice\");\n\n useEffect(() => {\n if (options?.calcMode && priceMode !== options?.calcMode) {\n setPriceMode(options?.calcMode);\n }\n }, [options?.calcMode]);\n\n const { data: tickers } = useMarketsStream();\n // console.log(\"mark prices\", markPrices);\n // console.log(\"tickers\", tickers);\n\n const tickerPrices = useMemo(() => {\n const data: Record<string, number> = Object.create(null);\n tickers?.forEach((item) => {\n // @ts-ignore\n data[item.symbol] = item[\"24h_close\"];\n });\n return data;\n }, [tickers]);\n\n const formatedPositions = useMemo<[API.PositionExt[], any] | null>(() => {\n if (!data?.rows || !symbolInfo || !accountInfo) return null;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows\n : data.rows.filter((item) => {\n return item.symbol === symbol;\n });\n\n let unrealPnL_total = zero,\n notional_total = zero,\n unsettlementPnL_total = zero;\n\n const formatted = filteredData.map((item: API.Position) => {\n // const price = (markPrices as any)[item.symbol] ?? item.mark_price;\n const unRealizedPrice = propOr(\n item.mark_price,\n item.symbol,\n priceMode === \"markPrice\" ? markPrices : tickerPrices\n ) as unknown as number;\n\n const price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n const info = symbolInfo?.[item.symbol];\n //\n\n const notional = positions.notional(item.position_qty, price);\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n markPrice: unRealizedPrice,\n });\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 const unsettlementPnL = positions.unsettlementPnL({\n positionQty: item.position_qty,\n markPrice: price,\n costPosition: item.cost_position,\n sumUnitaryFunding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n lastSumUnitaryFunding: item.last_sum_unitary_funding,\n });\n\n unrealPnL_total = unrealPnL_total.add(unrealPnl);\n notional_total = notional_total.add(notional);\n unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n return {\n ...item,\n mark_price: price,\n mm: 0,\n notional,\n unsettlement_pnl: unsettlementPnL,\n unrealized_pnl: unrealPnl,\n unsettled_pnl_ROI: unrealPnlROI,\n };\n });\n\n return [\n formatted,\n {\n unrealPnL: unrealPnL_total.toNumber(),\n notional: notional_total.toNumber(),\n unsettledPnL: unsettlementPnL_total.toNumber(),\n },\n ];\n }, [\n data?.rows,\n symbolInfo,\n accountInfo,\n markPrices,\n priceMode,\n tickerPrices,\n symbol,\n holding,\n ]);\n\n // const showSymbol = useCallback((symbol: string) => {\n // setVisibleSymbol(symbol);\n // }, []);\n\n const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo<\n [Decimal, Decimal, number]\n >(() => {\n if (!holding || !markPrices) {\n return [zero, zero, 0];\n }\n const unsettlemnedPnL = pathOr(0, [1, \"unsettledPnL\"])(formatedPositions);\n const unrealizedPnL = pathOr(0, [1, \"unrealPnL\"])(formatedPositions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettlemnedPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettlemnedPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n return [totalCollateral, totalValue, totalUnrealizedROI];\n }, [holding, formatedPositions, markPrices]);\n\n const positionsRows = useMemo(() => {\n if (!formatedPositions) return null;\n\n if (!symbolInfo || !accountInfo) return formatedPositions[0];\n\n const total = totalCollateral.toNumber();\n\n let rows = formatedPositions[0]\n .filter((item) => item.position_qty !== 0)\n .map((item) => {\n const info = symbolInfo?.[item.symbol];\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: item.notional,\n IMR_factor_power: 4 / 5,\n });\n\n return {\n ...item,\n mm: positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n }),\n // est_liq_price: positions.liqPrice({\n // markPrice: item.mark_price,\n // totalCollateral: total,\n // positionQty: item.position_qty,\n // MMR,\n // }),\n mmr: MMR,\n };\n });\n\n // calculate est_liq_price\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: total,\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 return rows;\n }, [formatedPositions, symbolInfo, accountInfo, totalCollateral]);\n\n // useEffect(() => {\n // ee.on(\"positions:changed\", () => {\n // updatePositions();\n // });\n // }, []);\n\n return [\n {\n rows: positionsRows,\n aggregated: {\n ...(formatedPositions?.[1] ?? {}),\n unrealPnlROI: totalUnrealizedROI,\n },\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n createGetter<Omit<API.Position, \"rows\">>(data as any, 1),\n {\n // close: onClosePosition,\n loading: false,\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\n\nexport const useFundingRates = () => {\n const { data } = useQuery<{ [key: string]: API.FundingRate }>(\n `/v1/public/funding_rates`,\n {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n formatter(data: { rows: API.FundingRate[] }) {\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 obj[item.symbol] = item;\n }\n\n return obj;\n },\n }\n );\n\n // @ts-ignore\n return createGetter<API.FundingRate>(data);\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useMarkPricesStream = () => {\n const ws = useWS();\n return useSWRSubscription(\"markPrices\", (key, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n \"markprices\",\n {\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 next(null, data);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n onError: (error: any) => {},\n }\n );\n\n return () => {\n unsubscribe?.();\n };\n });\n};\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 { 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\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWS();\n const { data: futures } = useQuery<WSMessage.Ticker[]>(`/v1/public/futures`, {\n revalidateOnFocus: false,\n });\n\n const { data: tickers } = useSWRSubscription(\"tickers\", (_, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n \"tickers\",\n {\n onMessage: (message: any) => {\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 [\"24h_volumn\"]: ticker.volume,\n change: 0,\n };\n\n if (ticker.close !== undefined && ticker.open !== undefined) {\n data[\"change\"] = new Decimal(ticker.close)\n .minus(ticker.open)\n .div(ticker.open)\n .toNumber();\n }\n\n return data;\n }\n return item;\n });\n }, [futures, tickers]);\n\n return { data: value };\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\";\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: Date.now(),\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 { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMutation } from \"../useMutation\";\nimport version from \"../version\";\nimport { useDataCenterContext } from \"../dataProvider\";\n\ntype OrderType = \"normalOrder\" | \"algoOrder\";\n\nexport interface UserOrdersReturn {\n data: any[];\n loading: boolean;\n update: (order: any) => void;\n cancel: (order: any) => void;\n}\n\n// const chche: Record<string, boolean> = {};\n\ntype Params = {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n};\n\nexport const useOrderStream = (params: Params) => {\n const { status, symbol, side, size = 100 } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n const { regesterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const getKey = (pageIndex: number, previousPageData: any) => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n [\"source_type\", 'ALL']\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\n useEffect(() => {\n const key = `orders:${status}:${symbol}:${side}`;\n regesterKeyHandler(key, getKey);\n }, [status, symbol, side]);\n\n const ordersResponse = usePrivateInfiniteQuery(getKey, {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n });\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n\n return ordersResponse.data?.map((item) => item.rows)?.flat();\n }, [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 return {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [ordersResponse.data?.[0]?.meta?.total]);\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => { }, [ordersResponse.data]);\n\n const _updateOrder = useCallback((orderId: string, order: OrderEntity, type: OrderType) => {\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 * 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\n const _cancelOrder = useCallback((orderId: number, type: OrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`\n })\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 * 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 return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\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 { 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 { usePrivateQuery } from \"../usePrivateQuery\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { useWS } from \"../useWS\";\nimport { useOrderStream } from \"./useOrderStream\";\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\n\nexport const useMaxQty = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false\n) => {\n const positionsData = usePositionStream();\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 { totalCollateral } = useCollateral();\n\n const { data: markPrices } = useMarkPricesStream();\n\n const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n // const {\n // data: orders,\n // error,\n // mutate: updateOrder,\n // } = usePrivateQuery<API.Order[]>(`/v1/orders?status=NEW&size=99`, {\n // formatter: (data) => data.rows,\n // onError: (err) => { },\n // });\n\n // const ws = useWS();\n // useEffect(() => {\n // const unsubscribe = ws.privateSubscribe(\n // {\n // id: \"executionreport_orders\",\n // event: \"subscribe\",\n // topic: \"executionreport\",\n // ts: Date.now(),\n // },\n // {\n // onMessage: (data: any) => {\n // console.log(\"refresh orders\", data);\n // updateOrder();\n // },\n // }\n // );\n // return () => unsubscribe();\n // }, []);\n\n const maxQty = useMemo(() => {\n if (!symbol) return 0;\n\n const positions = positionsPath(positionsData);\n\n const positionQty = account.getQtyFromPositions(positions, symbol);\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((item) => item.algo_order_id === undefined);\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 = positions.filter(\n (item: API.Position) => item.symbol !== symbol\n );\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.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 orders,\n positionsData,\n markPrices,\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n reduceOnly,\n ]);\n\n return Math.max(maxQty, 0) as number;\n};\n","import { OrderType, type API, OrderEntity } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order } from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\n\nexport type VerifyResult = {\n [P in keyof OrderEntity]?: { type: string; message: string };\n};\nexport type OrderFormEntity = Pick<\n OrderEntity,\n \"order_price\" | \"order_quantity\" | \"total\"\n>;\n\ntype ValuesDepConfig = {\n // token: API.TokenInfo;\n symbol: API.SymbolExt;\n maxQty: number;\n markPrice: number;\n};\n\nexport interface OrderCreator {\n create: (values: OrderEntity, configs: ValuesDepConfig) => OrderEntity;\n validate: (\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ) => Promise<VerifyResult>;\n}\n\nconst { maxPrice, minPrice, scropePrice } = order;\n\nexport abstract class BaseOrderCreator implements OrderCreator {\n abstract create(values: OrderEntity, config: ValuesDepConfig): OrderEntity;\n abstract validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult>;\n\n baseOrder(data: OrderEntity): OrderEntity {\n const order: Partial<OrderEntity> = {\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 return order as OrderEntity;\n }\n\n baseValidate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n const errors: {\n [P in keyof OrderEntity]?: { type: string; message: string };\n } = {};\n\n const { maxQty } = configs;\n\n let { order_quantity, total, order_price } = values;\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 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 return Promise.resolve(errors);\n }\n\n fixOrderQuantity(\n order: Partial<OrderEntity>,\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\nexport class LimitOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity, config: ValuesDepConfig): OrderEntity {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n\n this.fixOrderQuantity(order, config);\n\n delete order['total'];\n delete order['trigger_price'];\n delete order['isStopOrder'];\n\n console.log(\"create\", order);\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, 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 } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n const scropePriceNumbere = scropePrice(\n config.markPrice,\n price_scope,\n side\n );\n\n const priceRange = side === \"BUY\" ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\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(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 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 return errors;\n });\n }\n}\n\nexport class MarketOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): 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\nexport class PostOnlyOrderCreator extends LimitOrderCreator { }\n\nexport class FOKOrderCreator extends LimitOrderCreator { }\nexport class IOCOrderCreator extends LimitOrderCreator { }\n\nexport class StopLimitOrderCreator extends LimitOrderCreator {\n create(values: OrderEntity, config: ValuesDepConfig): OrderEntity {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n trigger_price: values.trigger_price,\n algo_type: \"STOP\",\n type: \"LIMIT\",\n quantity: values[\"order_quantity\"],\n price: values[\"order_price\"],\n trigger_price_type: \"MARK_PRICE\",\n };\n this.fixOrderQuantity(order, config);\n delete order[\"order_quantity\"];\n delete order[\"order_price\"];\n // @ts-ignore\n delete order[\"isStopOrder\"];\n delete order['total'];\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\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"price is required\",\n };\n }\n \n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n } \n \n if (trigger_price && order_price) {\n const price = new Decimal(order_price);\n const { symbol } = config;\n const { price_range, price_scope } = symbol;\n const maxPriceNumber = maxPrice(trigger_price, price_range);\n const minPriceNumber = minPrice(trigger_price, price_range);\n const scropePriceNumbere = scropePrice(\n trigger_price,\n price_scope,\n side\n );\n\n const priceRange = side === \"BUY\" ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\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(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 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 return errors;\n });\n }\n}\nexport class StopMarketOrderCreator extends LimitOrderCreator {\n create(values: OrderEntity, _: ValuesDepConfig): OrderEntity {\n const result = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n trigger_price: values.trigger_price,\n algo_type: \"STOP\",\n type: \"MARKET\",\n quantity: values[\"order_quantity\"],\n price: values[\"order_price\"],\n trigger_price_type: \"MARK_PRICE\",\n };\n delete result[\"order_quantity\"];\n delete result[\"order_price\"];\n // @ts-ignore\n delete result[\"isStopOrder\"];\n delete result['total'];\n\n console.log(\"result is\", result);\n return result;\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\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n return errors;\n });\n }\n}\n\nexport class GeneralOrderCreator extends BaseOrderCreator {\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\nexport const availableOrderTypes = [\n OrderType.LIMIT,\n OrderType.MARKET,\n OrderType.IOC,\n OrderType.FOK,\n OrderType.POST_ONLY,\n OrderType.STOP_LIMIT,\n OrderType.STOP_MARKET,\n];\n\nexport class OrderFactory {\n static create(type: OrderType): OrderCreator | null {\n switch (type) {\n case OrderType.LIMIT:\n return new LimitOrderCreator();\n case OrderType.MARKET:\n return new MarketOrderCreator();\n // case OrderType.ASK:\n // return new AskOrderCreator();\n // case OrderType.BID:\n // return new BidOrderCreator();\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\n case OrderType.STOP_LIMIT:\n return new StopLimitOrderCreator();\n case OrderType.STOP_MARKET:\n return new StopMarketOrderCreator();\n\n default:\n return new GeneralOrderCreator();\n }\n }\n}\n","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 { useCallback, useContext, useMemo, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useConfig } from \"../useConfig\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n}\n\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 \n }\n}\n*/\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 const useMarkets = (type: MarketsType) => {\n\n const marketsKey = \"markets\";\n\n const { data } = useMarketsStream();\n const { configStore } = useContext(OrderlyContext);\n\n // {\"PERP_ETH_USDC\": {}, ...}\n const publicInfo = useSymbolsInfo();\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 const defaultTab = { name: \"Popular\", id: 1 };\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 lastSelectFavoriteTab: { ...defaultTab }\n });\n }\n }\n\n const getFavoriteTabs = useMemo(() => {\n // @ts-ignore\n const tabs = configStore.get(marketsKey)[\"favoriteTabs\"];\n return (tabs || [{ name: \"Popular\", id: 1 }]) as FavoriteTab[];\n }, []);\n\n const getFavorites = useMemo(() => {\n // @ts-ignore\n const curData = (configStore.get(marketsKey,)[\"favorites\"] || []) as Favorite[];\n const tabs = getFavoriteTabs;\n const result = [];\n for (let index = 0; index < curData.length; index++) {\n const favData = curData[index];\n var favTabs = favData.tabs.filter((tab) => tabs.findIndex((item) => tab.id === item.id) !== -1);\n if (favTabs.length > 0) {\n result.push({ ...favData, tabs: favTabs })\n }\n\n }\n configStore.set(marketsKey, { ...configStore.getOr(marketsKey, {}), favorites: result });\n // localStorage.setItem(marketsKey, JSON.stringify(configStore.get(marketsKey)));\n\n return result;\n }, [configStore]);\n\n const getRecent = useMemo(() => {\n // @ts-ignore\n const curData = configStore.get(marketsKey)[\"recent\"];\n return ((curData || []) as Recent[]).filter((e) => e);\n }, []);\n\n const [favoriteTabs, setFavoriteTabs] = useState(getFavoriteTabs);\n const [favorites, setFavorites] = useState(getFavorites);\n const [recent, setRecent] = useState(getRecent);\n\n const updateFavoriteTabs = (tab: FavoriteTab | FavoriteTab[], operator?: {\n add?: boolean,\n update?: boolean,\n delete?: boolean,\n }) => {\n\n const saveTabs = (tabs: FavoriteTab[]) => {\n setFavoriteTabs(tabs);\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favoriteTabs\": tabs\n });\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 }\n saveTabs(tabs);\n };\n\n const setRecentData = (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 configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"recent\": curData\n });\n setRecent(curData);\n };\n\n\n\n const setFavoritesData = (symbol: API.MarketInfoExt, tab: FavoriteTab | FavoriteTab[], remove: boolean = false) => {\n\n const curData = [...favorites];\n const index = curData.findIndex((item) => item.name == symbol.symbol);\n\n if (index === -1) { // 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\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((tab) => tab.id != tab.id);\n if (tabs.length === 0) { // del favorite\n curData.splice(index, 1);\n } else {\n curData[index] = { ...favorite, tabs };\n }\n } else { // insert\n const tabs = favorite.tabs;\n tabs.push(tab);\n curData[index] = { ...favorite, tabs };\n }\n }\n }\n\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favorites\": curData\n });\n setFavorites(() => curData);\n };\n\n const getData = (type: MarketsType) => {\n\n\n // get data\n const localData = type === MarketsType.FAVORITES ? [...favorites] : [...recent];\n // filter\n const keys = localData.map((item) => item.name);\n const filter = type == MarketsType.ALL ?\n data :\n data?.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 = type == MarketsType.FAVORITES ?\n true :\n (favoriteKeys.includes(element.symbol));\n\n const fIndex = favoritesData.findIndex((item) => item.name === element.symbol);\n const tabs = fIndex === -1 ? [] : favoritesData[fIndex].tabs;\n\n let imr = undefined;\n if (publicInfo) {\n imr= publicInfo?.[element.symbol](\"base_imr\");\n }\n \n filter[index] = {\n ...filter[index],\n // @ts-ignore\n isFavorite,\n tabs,\n leverage: imr ? 1 / imr : undefined\n };\n }\n }\n\n return filter;\n\n };\n\n const addToHistory = (symbol: API.MarketInfoExt) => {\n setRecentData(symbol);\n };\n\n const updateSymbolFavoriteState = (symbol: API.MarketInfoExt, tab: FavoriteTab | FavoriteTab[], del: boolean = false) => {\n setFavoritesData(symbol, tab, del);\n };\n\n const markets = getData(type);\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\n\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favorites\": list\n });\n setFavorites(list);\n }\n };\n\n\n const tabs = useMemo(() => {\n return favoriteTabs;\n }, [favoriteTabs]);\n\n\n const getLastSelFavTab = () => {\n // @ts-ignore\n const curData = configStore.get(marketsKey)[\"lastSelectedFavoriteTab\"];\n return (curData || { name: \"Popular\", id: 1 }) as FavoriteTab;\n };\n\n const updateSelectedFavoriteTab = (tab: FavoriteTab) => {\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n lastSelectedFavoriteTab: tab\n });\n };\n\n return [\n markets || [],\n {\n favoriteTabs: tabs,\n favorites,\n recent,\n addToHistory,\n // updateFavoriteTabs(\"tab\", operator: {add/update/delete})\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n pinToTop,\n getLastSelFavTab,\n updateSelectedFavoriteTab,\n },\n ] as const;\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\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, useState } from \"react\";\nimport { 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() - Date.now();\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 return {\n ...data,\n est_funding_rate: (Number(data?.est_funding_rate ?? 0) * 100).toFixed(4),\n countDown,\n };\n};\n","import { API } from \"@orderly.network/types\";\nimport { useWS } from \"../useWS\";\nimport { useEffect, useState } from \"react\";\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: Date.now(),\n },\n {\n onMessage: (data: any) => {\n setTrades((prev) => {\n const arr = [{ ...data, ts: Date.now() }, ...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 { useMemo } from \"react\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { zero } from \"@orderly.network/utils\";\n\nexport type MarginRatioReturn = {\n // Margin Ratio\n marginRatio: number;\n // Current Leverage\n currentLeverage: number;\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 const { data: markPrices } = useMarkPricesStream();\n\n const { totalCollateral } = useCollateral();\n const marginRatio = useMemo(() => {\n if (!rows || !markPrices || !totalCollateral || rows.length === 0) {\n return 0;\n }\n\n const ratio = account.totalMarginRatio({\n totalCollateral: totalCollateral,\n markPrices: markPrices,\n positions: rows ?? [],\n });\n return ratio;\n }, [rows, markPrices, totalCollateral]);\n\n const currentLeverage = useMemo(() => {\n return account.currentLeverage(marginRatio);\n }, [marginRatio]);\n\n // MMR\n const mmr = useMemo<number | null>(() => {\n if (!rows || rows.length <= 0) 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 positionsMM = positionsMM.add(item.mm);\n }\n\n return account.MMR({\n positionsMMR: positionsMM.toNumber(),\n positionsNotional: aggregated.notional,\n });\n }, [rows, aggregated]);\n\n return { marginRatio, currentLeverage, mmr };\n};\n","import { NetworkId, type API, chainsInfoMap } from \"@orderly.network/types\";\nimport { useCallback, useContext, useMemo, useRef } from \"react\";\nimport useSWR, { SWRConfiguration } from \"swr\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useQuery } from \"../useQuery\";\nimport { mergeDeepRight, prop } from \"ramda\";\nimport { nativeTokenAddress } from \"../woo/constants\";\nimport { isTestnet } from \"@orderly.network/utils\";\nimport { TestnetChains } from \"@orderly.network/types\";\n\ntype inputOptions = {\n filter?: (item: API.Chain) => boolean;\n pick?: \"dexs\" | \"network_infos\" | \"token_infos\";\n crossEnabled?: boolean;\n /** if true, use wooSwap api, else use orderly api only */\n wooSwapEnabled?: boolean;\n};\n\nexport const useChains = (\n networkId?: NetworkId,\n options: inputOptions & SWRConfiguration = {}\n) => {\n const { pick, crossEnabled, wooSwapEnabled, ...swrOptions } = options;\n const { configStore } = useContext(OrderlyContext);\n\n const field = options?.pick;\n\n const filterFun = useRef(options?.filter);\n filterFun.current = options?.filter;\n\n const map = useRef(\n new Map<\n number,\n API.Chain & {\n nativeToken?: API.TokenInfo;\n }\n >()\n );\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 const { data: wooSupportData, error: swapSupportError } = useSWR<any>(\n () =>\n wooSwapEnabled\n ? `${configStore.get(\"swapSupportApiUrl\")}/swap_support`\n : null,\n (url) => fetch(url).then((res) => res.json()),\n { ...commonSwrOpts, ...swrOptions }\n );\n\n const { data: chainInfos, error: chainInfoErr } = useQuery(\n \"/v1/public/chain_info\",\n {\n ...commonSwrOpts,\n formatter: (data) => data.rows,\n }\n );\n\n const { data: orderlyChains, error: tokenError } = useQuery<API.Chain[]>(\n \"https://api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const chains:\n | API.Chain[]\n | {\n testnet: API.Chain[];\n mainnet: API.Chain[];\n } = useMemo(() => {\n let orderlyChainsArr: API.Chain[] = [];\n const orderlyChainIds = new Set<number>();\n\n orderlyChains?.forEach((item) => {\n item.chain_details.forEach((chain: any) => {\n const chainId = Number(chain.chain_id);\n orderlyChainIds.add(chainId);\n const chainInfo = chainsInfoMap.get(chainId);\n\n const _chain: any = {\n network_infos: {\n name: chain.chain_name ?? chainInfo?.chainName ?? \"--\",\n // \"public_rpc_url\": \"https://arb1.arbitrum.io/rpc\",\n chain_id: chainId,\n withdrawal_fee: chain.withdrawal_fee,\n cross_chain_withdrawal_fee: chain.cross_chain_withdrawal_fee,\n\n bridgeless: true,\n },\n token_infos: [\n {\n symbol: item.token,\n address: chain.contract_address,\n decimals: chain.decimals,\n },\n ],\n };\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(_chain)) return;\n }\n\n /// if chain is testnet, update network_infos\n if (isTestnet(_chain.chain_id)) {\n const index = testnetArr?.findIndex((item) =>\n isTestnet(item.network_infos.chain_id)\n );\n if (index > -1) {\n testnetArr[index] = _chain;\n }\n }\n\n map.current.set(chainId, _chain);\n\n orderlyChainsArr.push(_chain);\n });\n });\n\n let testnetArr = [...TestnetChains] as API.Chain[];\n\n testnetArr.forEach((chain) => {\n map.current.set(chain.network_infos?.chain_id, chain as any);\n });\n\n let mainnetArr: API.Chain[] = [];\n\n if (wooSwapEnabled) {\n if (!wooSupportData || !wooSupportData.data) return wooSupportData;\n\n Object.keys(wooSupportData.data).forEach((key) => {\n // if (orderlyChainIds.has(data.data[key].network_infos.chain_id)) return;\n\n const chain = wooSupportData.data[key];\n\n const item: any = mergeDeepRight(chain, {\n name: key,\n network_infos: {\n bridgeless: orderlyChainIds.has(chain.network_infos.chain_id),\n shortName: key,\n },\n token_infos: chain.token_infos.filter(\n (token: API.TokenInfo) => !!token.swap_enable\n ),\n });\n\n if (item.token_infos?.length === 0) return;\n\n map.current.set(item.network_infos.chain_id, item);\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(item)) return;\n }\n\n if (item.network_infos.mainnet) {\n mainnetArr.push(item);\n } else {\n testnetArr.push(item);\n }\n });\n } else {\n // orderly chains array form (/v1/public/token) api\n orderlyChainsArr.forEach((chain) => {\n let _chain = chain;\n\n const networkInfo = chainInfos?.find((item: { chain_id: any }) => {\n return item.chain_id == chain.network_infos.chain_id;\n });\n\n // update network_infos by chain_info api(v1/public/chain_info)\n if (networkInfo) {\n const {\n name,\n public_rpc_url,\n chain_id,\n currency_symbol,\n explorer_base_url,\n } = networkInfo;\n _chain.network_infos = {\n ..._chain.network_infos,\n name: name,\n shortName: name,\n public_rpc_url: public_rpc_url,\n\n currency_symbol: currency_symbol,\n bridge_enable: true,\n mainnet: true,\n explorer_base_url: explorer_base_url,\n est_txn_mins: null,\n woofi_dex_cross_chain_router: \"\",\n woofi_dex_depositor: \"\",\n };\n }\n\n map.current.set(_chain.network_infos.chain_id, _chain);\n if (isTestnet(_chain.network_infos.chain_id)) {\n const index = testnetArr.findIndex((item) =>\n isTestnet(item.network_infos.chain_id)\n );\n if (index > -1) {\n testnetArr[index] = _chain;\n }\n }\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(_chain)) return;\n }\n\n mainnetArr.push(_chain);\n });\n }\n\n mainnetArr.sort((a, b) => {\n return a.network_infos.bridgeless ? -1 : 1;\n });\n\n testnetArr.sort((a, b) => {\n return a.network_infos.bridgeless ? -1 : 1;\n });\n\n if (!!field) {\n //@ts-ignore\n testnetArr = testnetArr.map((item) => item[field]);\n //@ts-ignore\n mainnetArr = mainnetArr.map((item) => item[field]);\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 wooSupportData,\n networkId,\n field,\n orderlyChains,\n wooSwapEnabled,\n chainInfos,\n ]);\n\n const findByChainId = useCallback(\n (chainId: number, field?: string) => {\n const chain = map.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, map.current]\n );\n\n // const findNativeTokenByChainId = useCallback(\n // (chainId: number): API.TokenInfo | undefined => {\n // const chain = findByChainId(chainId);\n // if (!chain) return;\n //\n // },\n // [chains]\n // );\n\n return [\n chains,\n {\n findByChainId,\n // findNativeTokenByChainId,\n error: swapSupportError || tokenError,\n // nativeToken,\n },\n ] as const;\n};\n","export const woofiDexCrossChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\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: \"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: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\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: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\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: \"allDirectBridgeTokensLength\",\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: \"bridgeSlippage\",\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 payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\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: \"dstGasForSwapCall\",\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: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\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: \"orderlyFeeToggle\",\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: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\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: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\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: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\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 name: \"weth\",\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: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;","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\";\n\nexport const useWithdraw = () => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance, freeCollateral } = useCollateral();\n\n // const withdrawQueue = useRef<number[]>([]);\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 // withdrawQueue.current.push(res.data.withdraw_id);\n // }\n return res;\n });\n },\n [state]\n );\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 return {\n withdraw,\n isLoading,\n maxAmount,\n availableBalance,\n availableWithdraw,\n unsettledPnL,\n };\n};\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n MaxUint256,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { isNativeTokenChecker } from \"../woo/constants\";\nimport { useChains } from \"./useChains\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n // vaultAddress?: string;\n crossChainRouteAddress?: string;\n depositorAddress?: string;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n\n /**\n * @hidden\n */\n wooSwapEnabled?: boolean;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const { enableSwapDeposit } = useContext<any>(OrderlyContext);\n\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined, {\n wooSwapEnabled: enableSwapDeposit,\n });\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(ARBITRUM_TESTNET_CHAINID) 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 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(account.assetsManager.getBalanceByAddress(token.address));\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 (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${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 );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\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(address);\n\n setAllowance(() => allowance);\n };\n\n const getVaultAddress = useCallback((): string | undefined => {\n if (dst.chainId !== options?.srcChainId) {\n return options?.crossChainRouteAddress;\n } else {\n if (dst.symbol !== options?.srcToken) {\n return options?.depositorAddress;\n }\n }\n }, [options, dst]);\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\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 if (dst.chainId !== options?.srcChainId) {\n // getAllowance(options?.address, options?.crossChainRouteAddress);\n queryAllowance(options?.address, options?.crossChainRouteAddress);\n } else {\n if (dst.symbol !== options?.srcToken) {\n // getAllowance(options?.address, options?.depositorAddress);\n queryAllowance(options?.address, options?.depositorAddress);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.crossChainRouteAddress,\n options?.depositorAddress,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const vaultAddress = getVaultAddress();\n return account.assetsManager\n .approve(options.address, amount, vaultAddress)\n .then((result: any) => {\n if (typeof amount !== \"undefined\") {\n setAllowance((value) =>\n new Decimal(value).add(amount || MaxUint256.toString()).toString()\n );\n }\n return result;\n });\n },\n [account, getAllowance, options?.address]\n );\n\n const deposit = useCallback(async () => {\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n setAllowance((value) => new Decimal(value).sub(quantity).toString());\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n });\n }, [account, fetchBalance, getAllowance, quantity, depositFee]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\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 }, 3000);\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) {\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.log(\"getDepositFee error\", 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\";\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: Date.now(),\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}","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, useContext } from \"react\";\n\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { useBoolean } from \"../useBoolean\";\n\n/** @hidden */\nexport const useWooSwapQuery = () => {\n const { configStore } = useContext<any>(OrderlyContext);\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n /// swap 询价\n\n const query = useCallback(\n (inputs: any) => {\n if (loading) return;\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${configStore.get(\"swapSupportApiUrl\")}/woofi_dex/swap?${queryString}`\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account]\n );\n\n return {\n query,\n loading: false,\n };\n};\n","import { useCallback, useContext } from \"react\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { useBoolean } from \"../useBoolean\";\nimport { woofiDexCrossChainRouterAbi } from \"./constants\";\nimport { utils } from \"@orderly.network/core\";\n\n/** @hidden */\nexport type WooCrossSwapQueryOptions = {\n from: string;\n};\n\n/** @hidden */\nexport const useWooCrossSwapQuery = () => {\n const { configStore } = useContext<any>(OrderlyContext);\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(configStore.get(\"brokerId\")!),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n }\n ) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is not ready\");\n }\n const quotoLZFee = await account.walletClient.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n []\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n //\n if (loading) return;\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${configStore.get(\n \"swapSupportApiUrl\"\n )}/woofi_dex/cross_chain_swap?${queryString}`\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n //\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n }).then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n });\n })\n .finally(() => stop());\n },\n\n [loading, account]\n );\n\n return {\n query,\n loading,\n };\n};\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { utils } from \"@orderly.network/core\";\nimport { useBoolean } from \"../useBoolean\";\nimport { pick } from \"ramda\";\nimport { type Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { isNativeTokenChecker, woofiDexCrossChainRouterAbi } from \"./constants\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { useWalletSubscription } from \"../orderly/useWalletSubscription\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useConfig } from \"../useConfig\";\n\n/** @hidden */\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\n/** @hidden */\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const account = useAccountInstance();\n const { configStore } = useContext(OrderlyContext);\n const networkId = useConfig(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n //TODO: useWalletSubscription\n // useWalletSubscription({\n // onMessage: (message) => {\n // const { side, transStatus, trxId } = message;\n\n // if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n // setStatus(transStatus);\n // }\n // },\n // });\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n const check = async (txHash: string) => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n if (status === MessageStatus.INFLIGHT) {\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n }\n\n if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n }\n } else {\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n };\n\n check(txHash);\n }, []);\n\n //swap 的時候拿 src tx hash, cross swap 拿 dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(configStore.get(\"brokerId\")!),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n const quotoLZFee = await account.walletClient.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n // const result = await account.walletClient.call(\n // crossChainRouteAddress,\n // \"crossSwap\",\n // [\n // account.address,\n // src,\n // dst,\n // dstValutDeposit(),\n // {\n // value: quotoLZFee[0],\n // },\n // ],\n // {\n // abi: woofiDexCrossChainRouterAbi,\n // }\n // );\n\n try {\n const result = await account.walletClient.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n // account.walletClient.on(\n // {\n // address: crossChainRouteAddress,\n // },\n // (log: any, event: any) => {\n //\n // }\n // );\n\n stop();\n\n //\n\n checkLayerStatus(result.hash);\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","import { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { useBoolean } from \"../useBoolean\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { utils } from \"@orderly.network/core\";\nimport { pick } from \"ramda\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { isNativeTokenChecker } from \"./constants\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { useEventEmitter } from \"../useEventEmitter\";\n\n/**\n * PM doc:\n * https://www.figma.com/file/RNSrMH6zkqULTfZqYzhGRr/Dex-C4-Draft?type=design&node-id=975-21917&mode=design&t=zd8vtA5mTGTw8SVI-0\n *\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n * */\nconst woofiDexDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\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: \"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: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\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: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\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: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\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 name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\n/** @hidden */\nexport const useSwap = (): any => {\n // exec swap contract;\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const { configStore } = useContext(OrderlyContext);\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n //TODO: useWalletSubscription\n // useWalletSubscription({\n // onMessage: (message) => {\n // const { side, transStatus, trxId } = message;\n\n // if (side === \"DEPOSIT\" && trxId === txHash.current) {\n // setStatus(transStatus);\n // }\n // },\n // });\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n const brokerId = configStore.get<string>(\"brokerId\");\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any }\n ) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletClient.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexDepositorAbi,\n }\n );\n\n stop();\n\n txHash.current = result.hash;\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account]\n );\n\n return {\n swap,\n loading,\n status,\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/usePrivateInfiniteQuery.ts","../src/useBoolean.ts","../src/usePreloadData.ts","../src/useEventEmitter.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/index.ts","../src/useWS.ts","../src/configProvider.tsx","../src/dataProvider.tsx","../src/orderly/usePrivateDataObserver.ts","../src/walletConnectorContext.tsx","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useIndexPrice.ts","../src/orderly/useOpenInterest.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/orderly/useCollateral.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/utils/parseHolding.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useOrderStream.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarkets.ts","../src/orderly/useLeverage.ts","../src/orderly/useFundingRate.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/woo/constants.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useSettleSubscription.ts","../src/orderly/useSymbolPriceRange.ts","../src/useMediaQuery.ts","../src/woo/useSwapQuery.ts","../src/woo/useCrossSwapQuery.ts","../src/woo/useCrossSwap.ts","../src/woo/useSwap.ts"],"names":["options","useSWRMutation","useContext","account","fetcher","data","useSWR","SimpleDI","get","AccountStatusEnum","useCallback","useState","useConstant","useEffect","default","Account","createContext","mutate","item","jsx","useMemo","useRef","useSWRSubscription","Decimal","index","depth","OrderSide","OrderType","SDKError","getPrecisionByNumber","totalCollateral","totalValue","totalUnrealizedROI","pathOr","OrderStatus","zero","usdc","order","symbol","positions","positionsPath","useDebouncedCallback","errors","symbolOrOrder","MarketsType","tabs","tab","type","prop","pick","field","chainsInfoMap","balance","allowance","quantity","query","utils","txHash","status","WS_WalletStatusEnum"],"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\"] = \"1.1.2\";\n};\n\nexport default \"1.1.2\";\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","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { ConfigStore, type ConfigKey } from \"@orderly.network/core\";\n\nexport const useConfig = <T>(\n key?: ConfigKey,\n defaultValue?: T\n): T | ConfigStore => {\n const { configStore } = useContext(OrderlyContext);\n\n if (typeof key !== \"undefined\") {\n if (typeof defaultValue !== \"undefined\") {\n return configStore.getOr(key, defaultValue);\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} from \"@orderly.network/core\";\n\nimport { NetworkId } from \"@orderly.network/types\";\n\nexport interface OrderlyConfigContextState {\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n getWalletAdapter: getWalletAdapterFunc;\n\n networkId: NetworkId;\n\n /**\n * @hidden\n */\n onlyTestnet?: boolean;\n /**\n * @hidden\n */\n enableSwapDeposit?: boolean;\n // extraApis:ExtraAPIs\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\";\n\ntype HTTP_METHOD = \"POST\" | \"PUT\" | \"DELETE\";\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\nexport const useMutation = <T, E>(\n url: string,\n method: HTTP_METHOD = \"POST\",\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 const signer = account.signer;\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 data: any,\n params?: any,\n options?: any\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 signature = await signer.sign(payload);\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, getWalletAdapter } =\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 = useConstant(() => {\n let account = SimpleDI.get<Account>(\"account\");\n\n if (!account) {\n account = new Account(\n configStore,\n keyStore,\n\n getWalletAdapter\n // walletAdapter\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 account = useAccount();\n const middleware = Array.isArray(options?.use) ? options?.use ?? [] : [];\n\n // @ts-ignore\n return useSWR<T>(\n () =>\n account.state.status >= AccountStatusEnum.EnableTrading\n ? [query, account.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\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const apiBaseUrl = useConfig<string>(\"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);\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\";\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\n // const { data: userInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // console.log(\"userInfo\", userInfo);\n\n // const state = useObservable<AccountState>(\n // () => account.state$,\n // account.stateValue\n // );\n\n const statusChangeHandler = (nextState: AccountState) => {\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 login = useCallback(\n // (address: string) => {\n // account.login(address);\n // },\n // [account]\n // );\n\n const createOrderlyKey = useCallback(\n async (remember: boolean) => {\n return account.createOrderlyKey(remember ? 365 : 30);\n },\n [account]\n );\n\n const createAccount = useCallback(async () => {\n return account.createAccount();\n }, [account]);\n\n // console.log(\"--------\", state);\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 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 = (\n getKey: SWRInfiniteKeyLoader,\n options?: SWRInfiniteConfiguration & {\n formatter?: (data: any) => any;\n }\n) => {\n const { formatter, ...restOptions } = options || {};\n const account = useAccount();\n\n const middleware = Array.isArray(restOptions?.use)\n ? restOptions?.use ?? []\n : [];\n\n const result = useSWRInfinite(\n (pageIndex: number, previousPageData) => {\n const queryKey = getKey(pageIndex, previousPageData);\n if (account.state.status < AccountStatusEnum.EnableTrading || !queryKey) {\n return null;\n }\n return [queryKey, account.state.accountId];\n },\n (url: string, init: RequestInit) => {\n return 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 { useContext, useMemo } from \"react\";\nimport { OrderlyContext, useQuery, useSWR } from \".\";\n\nexport const usePreLoadData = () => {\n const { configStore, enableSwapDeposit } = useContext(OrderlyContext);\n\n // const { error: swapSupportError, data: swapSupportData } = useSWR(\n // `${configStore.get(\"swapSupportApiUrl\")}/swap_support`,\n // (url) => fetch(url).then((res) => res.json()),\n // {\n // revalidateOnFocus: false,\n // }\n // );\n\n const { error: tokenError, data: tokenData } = useQuery(\n \"https://api-evm.orderly.org/v1/public/token\",\n {\n revalidateOnFocus: false,\n }\n );\n\n const isDone = useMemo(() => {\n return !!tokenData;\n }, [tokenData]);\n\n return {\n error: tokenError,\n done: isDone,\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 { 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 = (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 = 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 \n if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n return\n }\n setStoredValue(readValue());\n };\n\n // 添加 storage 事件监听器\n window.addEventListener('storage', handleStorageChange);\n\n return () => {\n // 清除 storage 事件监听器\n window.removeEventListener('storage', handleStorageChange);\n };\n }, [key]);\n\n return [storedValue, setValue];\n}\n","export { default as version } from \"./version\";\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\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\n\nexport * from \"./orderlyContext\";\nexport type { ConfigProviderProps } from \"./configProvider\";\nexport { OrderlyConfigProvider } from \"./configProvider\";\n\nexport {\n WalletConnectorContext,\n useWalletConnector,\n} from \"./walletConnectorContext\";\n\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration, SWRConfig } from \"swr\";\n\nexport { useSWR, SWRConfig, type SWRConfiguration };\n\nexport * from \"use-debounce\";\n\nexport { useMediaQuery } from \"./useMediaQuery\";\n\nexport * from \"./orderly/orderlyHooks\";\n\n//---- woo only -----\nexport * from \"./woo/woo\";\n\nexport type { WalletAdapter } from \"@orderly.network/core\";\n","import { useContext } 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\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\n\nexport const useWS = () => {\n const { configStore } = useContext(OrderlyContext);\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 = new Date().getTime();\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.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 //\n if (\n nextState.status === AccountStatusEnum.EnableTrading &&\n nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n }\n });\n\n if (typeof window !== \"undefined\") {\n (window 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 type { FC, PropsWithChildren } from \"react\";\nimport React, { useEffect } from \"react\";\nimport { OrderlyProvider } from \"./orderlyContext\";\nimport {\n ConfigStore,\n // MemoryConfigStore,\n DefaultConfigStore,\n OrderlyKeyStore,\n getWalletAdapterFunc,\n WalletAdapterOptions,\n LocalStorageStore,\n EtherAdapter,\n SimpleDI,\n Account,\n IContract,\n} from \"@orderly.network/core\";\n\nimport useConstant from \"use-constant\";\nimport { NetworkId } from \"@orderly.network/types\";\n// import { usePreLoadData } from \"./usePreloadData\";\nimport { DataCenterProvider } from \"./dataProvider\";\n// import { useParamsCheck } from \"./useParamsCheck\";\n\ntype RequireOnlyOne<T, U extends keyof T = keyof T> = Omit<T, U> &\n {\n [K in U]-?: Required<Pick<T, K>> & Partial<Record<Exclude<U, K>, never>>;\n }[U];\n\ntype RequireAtLeastOne<T, R extends keyof T = keyof T> = Omit<T, R> &\n {\n [K in R]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<R, K>>>;\n }[R];\n\nexport interface ConfigProviderProps {\n configStore?: ConfigStore;\n keyStore?: OrderlyKeyStore;\n contracts?: IContract;\n getWalletAdapter?: getWalletAdapterFunc;\n brokerId: string;\n networkId: NetworkId;\n enableSwapDeposit?: boolean;\n}\n\nexport const OrderlyConfigProvider = (\n props: PropsWithChildren<\n RequireAtLeastOne<ConfigProviderProps, \"brokerId\" | \"configStore\">\n >\n) => {\n const [account, setAccount] = React.useState<Account | null>(null);\n const {\n configStore,\n keyStore,\n getWalletAdapter,\n brokerId,\n networkId,\n enableSwapDeposit,\n contracts,\n } = props;\n\n if (!brokerId && typeof configStore === \"undefined\") {\n console.error(\"[OrderlyConfigProvider]: brokerId is required\");\n }\n\n const innerConfigStore = useConstant<ConfigStore>(() => {\n return configStore || new DefaultConfigStore({ brokerId, networkId });\n });\n\n const innerKeyStore = useConstant<OrderlyKeyStore>(() => {\n return keyStore || new LocalStorageStore(networkId);\n });\n\n const innerGetWalletAdapter = useConstant<getWalletAdapterFunc>(() => {\n return (\n getWalletAdapter ||\n ((options: WalletAdapterOptions) => new EtherAdapter(options))\n );\n });\n\n // check params, if has mismatch, throw warning message to console\n // useParamsCheck({ brokerId: innerConfigStore.get(\"brokerId\") });\n\n useEffect(() => {\n let account = SimpleDI.get<Account>(Account.instanceName);\n\n if (!account) {\n account = new Account(\n innerConfigStore,\n innerKeyStore,\n innerGetWalletAdapter,\n {\n contracts,\n }\n );\n\n SimpleDI.registerByName(Account.instanceName, account);\n }\n\n setAccount(account);\n }, []);\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: networkId,\n enableSwapDeposit: enableSwapDeposit,\n // apiBaseUrl,\n }}\n >\n <DataCenterProvider>{props.children}</DataCenterProvider>\n </OrderlyProvider>\n );\n};\n\n// const DataPreload = () => {\n// const { error, done } = usePreLoadData();\n// };\n","import { PropsWithChildren, createContext, useContext, useRef } from \"react\";\nimport { usePrivateDataObserver } from \"./orderly/usePrivateDataObserver\";\nimport { usePreLoadData } from \"./usePreloadData\";\n\nexport type getKeyFunction = (index: number, prevData: any) => string | null;\n\ninterface DataCenterContextValue {\n // orders\n // positions\n // balances\n //\n regesterKeyHandler: (key: string, handler: getKeyFunction) => void;\n}\n\nexport const DataCenterContext = createContext<DataCenterContextValue>(\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 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 regesterKeyHandler: (key, fun) => {\n getKeyHandlerMapRef.current.set(key, fun);\n },\n }}\n >\n {children}\n </DataCenterContext.Provider>\n );\n};\n","import { useEffect } from \"react\";\nimport { useWS } from \"../useWS\";\nimport { useSWRConfig } from \"swr\";\nimport { OrderStatus, WSMessage } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { unstable_serialize } from \"swr/infinite\";\nimport { useDebouncedCallback } from \"use-debounce\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { getKeyFunction } from \"../dataProvider\";\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 } = useAccount();\n\n const updateOrders = useDebouncedCallback((data) => {\n const map = options.getKeysMap(\"orders\");\n\n map.forEach((getKey, key) => {\n mutate(\n unstable_serialize((index, prevData) => [\n getKey(index, prevData),\n state.accountId,\n ])\n );\n });\n\n // update the orders history list;\n\n // ee.emit(\"orders:changed\");\n }, 500);\n\n // orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n updateOrders(data);\n ee.emit(\"orders:changed\", data);\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\n \n // algo orders\n useEffect(() => {\n if (!state.accountId) return;\n const unsubscribe = ws.privateSubscribe(\"algoexecutionreport\", {\n onMessage: (data: any) => {\n updateOrders(data);\n if (Array.isArray(data)) {\n data.forEach((item) => ee.emit(\"orders:changed\", {...item, status: item.algoStatus,}));\n } else {\n ee.emit(\"orders:changed\", {...data, status: data.algoStatus,});\n }\n },\n });\n\n return () => unsubscribe?.();\n }, [state.accountId]);\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 // console.log(\"ws----- positions data-----\", data);\n\n // updatePositions();\n\n mutate(\n key,\n (prevPositions: any) => {\n // return nextPostions;\n if (!!prevPositions) {\n return {\n ...prevPositions,\n rows: prevPositions.rows.map((row: any) => {\n const item = nextPostions.find(\n (item) => item.symbol === row.symbol\n );\n if (item) {\n return {\n symbol: item.symbol,\n position_qty: item.positionQty,\n cost_position: item.costPosition,\n last_sum_unitary_funding: item.lastSumUnitaryFunding,\n pending_long_qty: item.pendingLongQty,\n pending_short_qty: item.pendingShortQty,\n settle_price: item.settlePrice,\n average_open_price: item.averageOpenPrice,\n unsettled_pnl: item.unsettledPnl,\n mark_price: item.markPrice,\n est_liq_price: item.estLiqPrice,\n timestamp: Date.now(),\n imr: item.imr,\n mmr: item.mmr,\n IMR_withdraw_orders: item.imrwithOrders,\n MMR_with_orders: item.mmrwithOrders,\n pnl_24_h: item.pnl24H,\n fee_24_h: item.fee24H,\n };\n }\n\n return row;\n }),\n };\n }\n },\n {\n revalidate: false,\n }\n );\n },\n });\n return () => {\n unsubscribe?.();\n };\n }, [state.accountId]);\n};\n","import { createContext, useContext } from \"react\";\n\nexport type ConnectedChain = {\n id: number | string;\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: any;\n accounts: WalletAccount[];\n chains: ConnectedChain[];\n instance?: unknown;\n}\n\nexport interface WalletConnectorContextState {\n connect: () => 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: any;\n connectedChain: ConnectedChain | null;\n\n settingChain: boolean;\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 { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { max, min } from \"ramda\";\nimport { SDKError } from \"@orderly.network/types\";\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst paddingFn = (len: number) =>\n Array(len).fill([Number.NaN, Number.NaN, Number.NaN] 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 < min(level, 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 = depth.toString().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\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 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] = asks[0];\n asks.shift();\n asks.push([price + (depth === undefined ? 0 : depth), qty, newQuantity]);\n } else {\n const [bidPrice] = bids[0];\n while (asks.length > 0) {\n const [askPrice, askQty, newQuantity] = asks[0];\n\n if (askPrice <= bidPrice) {\n asks.shift();\n for (let index = 0; index < asks.length; index++) {\n if (index === 0) {\n asks[index][1] += askQty;\n }\n asks[index][2] += newQuantity;\n }\n } else {\n break;\n }\n }\n }\n }\n\n asks = asks.reverse();\n\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 // add max qty for asks/bids\n // let maxAskQty = asks.reduce((a,b) => Math.max(a, b[1]),0);\n // let maxBidQty = bids.reduce((a,b) => Math.max(a, b[1]),0);\n // asks = asks.map((item) => [...item, maxAskQty]);\n // bids = bids.map((item) => [...item, maxBidQty]);\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\nexport type OrderbookOptions = {\n level?: number;\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\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 const depths = useMemo(() => {\n const tick = config(\"quote_tick\");\n\n return [tick, tick * 10, tick * 100, tick * 1000];\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 setIsLoading(true);\n let ignore = false;\n ws.onceSubscribe(\n {\n event: \"request\",\n id: `${symbol}@orderbook`,\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n {\n onMessage: (message: any) => {\n if (ignore) return;\n //\n if (!!message) {\n // sort and filter qty > 0\n let bids = [...message.bids.sort(bidsSortFn)];\n bids = bids.filter(\n (item: number[]) => !isNaN(item[0]) && item[1] > 0\n );\n let asks = [...message.asks.sort(asksSortFn)];\n asks = asks.filter(\n (item: number[]) => !isNaN(item[0]) && item[1] > 0\n );\n\n // const reduceOrderbookData = reduceOrderbook(depth, level, {\n // bids: bids,\n // asks: asks,\n // });\n setRequestData({ bids: bids, asks: asks });\n setData({ bids: [...bids], asks: [...asks] });\n }\n setIsLoading(false);\n },\n }\n );\n\n return () => {\n setRequestData(null);\n ignore = true;\n // clean the data;\n setData(INIT_DATA);\n };\n }, [symbol, depth]);\n\n // const {data:markPrices} = useMarkPricesStream();\n\n const { data: markPrice } = useMarkPrice(symbol);\n\n useEffect(() => {\n if (!requestData) return;\n let ignore = false;\n\n const subscription = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n onMessage: (message: any) => {\n //\n if (ignore) return;\n setData((data) => {\n const mergedData =\n !message.asks && !message.bids\n ? data\n : mergeOrderbook(data, message);\n return mergedData;\n // const reducedData = reduceOrderbook(depth, level, mergedData);\n // return reducedData;\n });\n },\n }\n );\n\n return () => {\n ignore = true;\n subscription?.(); //unsubscribe\n };\n }, [symbol, requestData]);\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 // markPrice, lastPrice\n const prevMiddlePrice = useRef<number>(0);\n\n const middlePrice = useMemo(() => {\n let asksFrist = 0,\n bidsFirst = 0;\n\n if (data.asks.length > 0) {\n asksFrist = data.asks[data.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, data]);\n\n useEffect(() => {\n prevMiddlePrice.current = middlePrice;\n }, [middlePrice]);\n\n const reducedData = reduceOrderbook(depth, level, {\n asks: [...data.asks],\n bids: [...data.bids],\n });\n\n // emit the asks0 and bids0\n useEffect(() => {\n eventEmitter.emit(\"orderbook:update\", [\n reducedData.asks[0][0],\n reducedData.bids[0][0],\n ]);\n }, [reducedData.asks[0][0], reducedData.bids[0][0]]);\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\";\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\n const value = useMemo(() => {\n //\n if (!info) return null;\n if (!ticker) return info;\n const config: any = {\n ...info,\n mark_price: markPrice,\n index_price: indexPrice,\n open_interest: openInterest,\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 }\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 }\n return config;\n }, [info, symbol, ticker]);\n\n return value as API.MarketInfo;\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n\n return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n // console.log(message);\n next(null, message.price);\n },\n });\n\n return () => {\n // console.log(\"_____________________ unsubscribe _________ \", symbol);\n unsubscribe?.();\n };\n });\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","type objectDepth = 1 | 2;\ntype propertyType<T, K, F> = T extends 1 ? K : F;\n\nexport function createGetter<\n T extends Record<string, any>,\n K extends keyof T = string\n>(data: T, depth: objectDepth = 2) {\n return new Proxy(data || {}, {\n get(\n target: any,\n property: propertyType<typeof depth, K, any>,\n receiver\n ): any {\n if (depth === 1) {\n return (defaultValue: any) => {\n if (!target) return defaultValue;\n return target[property] ?? defaultValue;\n };\n }\n return (key: K, defaultValue: any) => {\n if (key) {\n return (target as any)[property]?.[key] ?? defaultValue;\n } else {\n return target[property];\n }\n };\n },\n });\n}\n","import { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { getPrecisionByNumber } from \"@orderly.network/utils\";\n\nexport const useSymbolsInfo = () => {\n const { data = {} } = useQuery<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\n return createGetter<API.SymbolExt>(data as API.SymbolExt) as Record<\n string,\n any\n // (key: string, defaultValue?: any) => any\n >;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n API,\n OrderEntity,\n OrderSide,\n OrderType,\n SDKError,\n} from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useMutation } from \"../useMutation\";\nimport { compose, head, includes, omit } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { OrderFactory, availableOrderTypes } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { order } from \"@orderly.network/perp\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useDebouncedCallback } from \"use-debounce\";\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<OrderEntity>,\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\ntype 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 * 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 * ```\n */\nexport function useOrderEntry(\n order: OrderParams,\n options?: UseOrderEntryOptions\n): UseOrderEntryReturn;\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 // console.log(\"+++++++\", symbolOrOrder);\n\n if (typeof symbolOrOrder === \"object\") {\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 [doCreateOrder, { data, error, reset, isMutating }] = useMutation<\n OrderEntity,\n any\n >(orderDataCache?.current?.isStopOrder ? \"/v1/algo/order\" : \"/v1/order\");\n\n const [errors, setErrors] = useState<any>(null);\n\n const ee = useEventEmitter();\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, positions, accountInfo } =\n 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(() => symbolInfo[symbol](\"base_imr\"), [symbolInfo]);\n const baseMMR = useMemo(() => symbolInfo[symbol](\"base_mmr\"), [symbolInfo]);\n\n const { data: markPrice } = useMarkPrice(symbol);\n // const markPrice = 1;\n\n const diffOrderEntry = (\n prev: Partial<OrderEntity>,\n current: Partial<OrderEntity>\n ): { key: keyof OrderEntity; value: any } | null => {\n if (!prev) return null;\n let key, value;\n const keys = Object.keys(current) as (keyof OrderEntity)[];\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\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 break;\n }\n }\n\n if (!key) return null;\n\n return { key, value };\n };\n\n const maxQty = useMaxQty(symbol, sideValue, isReduceOnly);\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 symbolOrOrder.order_quantity = symbolOrOrder.order_quantity.replace(\n /,/g,\n \"\"\n );\n }\n\n if (typeof symbolOrOrder.order_price === \"string\") {\n symbolOrOrder.order_price = symbolOrOrder.order_price.replace(/,/g, \"\");\n }\n\n if (typeof symbolOrOrder.total === \"string\") {\n symbolOrOrder.total = symbolOrOrder.total.replace(/,/g, \"\");\n }\n\n if (typeof symbolOrOrder.order_quantity === \"number\") {\n symbolOrOrder.order_quantity = new Decimal(symbolOrOrder.order_quantity)\n .toDecimalPlaces(baseDP)\n .toString();\n }\n\n return symbolOrOrder;\n }, [symbolOrOrder]);\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 (\n !values ||\n typeof values.order_type === \"undefined\" ||\n !includes(values.order_type, availableOrderTypes)\n ) {\n throw new SDKError(\"order_type is error\");\n }\n\n const orderCreator = OrderFactory.create(\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) => {\n submitted.current = true;\n\n if (\n errors.order_price ||\n errors.order_quantity ||\n errors.trigger_price\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 // console.log(\"res::::\", res);\n // resolve(res);\n if (res.success) {\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 (typeof symbolOrOrder === \"string\") {\n throw new SDKError(\"Function is not supported, please use onSubmit()\");\n }\n return createOrder(symbolOrOrder);\n }, [symbolOrOrder]);\n\n const calculate = useCallback(\n (\n values: Partial<OrderEntity>,\n field: keyof OrderEntity,\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 )([values, field, value, markPrice, { baseDP, quoteDP }]);\n\n return newValues as Partial<OrderEntity>;\n },\n [markPrice]\n );\n\n // const estLiqPrice = useMemo(() => {}, []);\n\n const validator = (values: any) => {\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\n if (!item) {\n return orderDataCache.current as Partial<OrderEntity>;\n }\n\n // if(item.key === \"reduce_only\") {\n\n // }\n\n // if (\n // item.key === \"side\" ||\n // item.key === \"symbol\" ||\n // item.key === \"order_type\"\n // ) {\n // // side or symbol changed, reset errors and the data;\n // prevOrderData.current = parsedData;\n // orderDataCache.current = {\n // ...parsedData,\n // total: \"\",\n // };\n\n // return orderDataCache.current;\n // }\n\n // set 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, item.value);\n\n values.isStopOrder = values.order_type?.startsWith(\"STOP\") || false;\n\n // console.log(\"-----------\", values);\n\n values.total = values.total || \"\";\n\n prevOrderData.current = parsedData;\n orderDataCache.current = values;\n\n return values;\n }, [\n parsedData?.order_price,\n parsedData?.side,\n parsedData?.order_quantity,\n parsedData?.visible_quantity,\n parsedData?.order_type,\n parsedData?.order_type_ext,\n parsedData?.symbol,\n parsedData?.total,\n parsedData?.reduce_only,\n parsedData?.trigger_price,\n\n markPrice,\n ]);\n\n /// validator order info\n useEffect(() => {\n if (!markPrice) return;\n // validate order data;\n validator(formattedOrder)?.then((err) => {\n setErrors(err);\n });\n }, [\n formattedOrder.broker_id,\n formattedOrder.order_quantity,\n formattedOrder.total,\n formattedOrder.trigger_price,\n markPrice,\n ]);\n\n //====== update orderbook ask0/bid0 ======\n useEffect(() => {\n if (!optionsValue?.watchOrderbook) return;\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 || askAndBid.current.length === 0)\n return null;\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;\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 liqPrice = order.estLiqPrice({\n markPrice,\n baseIMR,\n baseMMR,\n totalCollateral,\n positions,\n IMR_Factor: accountInfo[\"imr_factor\"][symbol],\n newOrder: {\n qty: quantity,\n price,\n symbol: parsedData.symbol!,\n },\n });\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 = order.estLeverage({\n totalCollateral,\n 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 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 { OrderEntity, OrderType } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n\nexport type OrderEntityKey = keyof OrderEntity & string;\n\n// index 3: markPrice\ntype orderEntryInputs = [\n Partial<OrderEntity>,\n // to update field\n keyof OrderEntity,\n any,\n number,\n {\n baseDP: number;\n quoteDP: number;\n }\n];\n\ntype orderEntryInputHandle = (inputs: orderEntryInputs) => orderEntryInputs;\n\nconst needNumberOnlyFields: (keyof OrderEntity)[] = [\n \"order_quantity\",\n \"order_price\",\n \"total\",\n];\n\nconst cleanStringStyle = (str: string | number): string => {\n if (typeof str !== \"string\") {\n str = str.toString();\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\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.order_quantity) {\n //\n // const d = new Decimal(values.order_quantity);\n // const dp = d.dp();\n // if (dp > quoteTick) {\n // values.order_quantity = d.toDecimalPlaces(baseTick).toNumber();\n // }\n // }\n\n // if (!!values.order_price && values.order_type === OrderType.LIMIT) {\n // const sd = new Decimal(values.order_price).sd(false);\n // if (sd > quoteTick) {\n // values.order_price = new Decimal(values.order_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.quoteDP) {\n values.order_price = price.toDecimalPlaces(config.quoteDP).toString();\n }\n\n price.toDecimalPlaces(Math.min(priceDP, config.quoteDP));\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.order_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.baseDP)\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.baseDP) {\n quantity = quantity.toDecimalPlaces(config.baseDP);\n values.order_quantity = quantity.toNumber();\n }\n\n // if(values.order_type === OrderType.MARKET) {\n\n // }\n\n if (\n values.order_type === OrderType.MARKET ||\n values.order_type === OrderType.STOP_MARKET\n ) {\n const price = markPrice;\n values.total = quantity.mul(price).todp(2).toNumber();\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(2).toNumber();\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 // total: total.todp(2).toNumber(),\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.quoteDP) {\n total = total.toDecimalPlaces(config.quoteDP);\n values.total = total.toNumber();\n }\n\n const quantity = total.div(price);\n\n return [\n {\n ...values,\n order_quantity: quantity\n .toDecimalPlaces(Math.min(config.baseDP, quantity.dp()))\n .toNumber(),\n },\n input,\n value,\n markPrice,\n config,\n ];\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: string\n): orderEntryInputHandle => {\n switch (fieldName) {\n case \"order_quantity\": {\n return quantityInputHandle;\n }\n case \"order_price\": {\n return priceInputHandle;\n }\n case \"total\": {\n return totalInputHandle;\n }\n default:\n return otherInputHandle;\n }\n};\n","import { useMemo } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport {\n pathOr_unsettledPnLPathOr,\n usePositionStream,\n} from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/perp\";\nimport { type API, OrderStatus } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { zero } from \"@orderly.network/utils\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useHoldingStream } from \"./useHoldingStream\";\nimport { useOrderStream } from \"./useOrderStream\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n availableBalance: number;\n unsettledPnL: number;\n\n positions: API.Position[];\n accountInfo?: API.AccountInfo;\n};\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\nconst totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\ntype Options = {\n dp: number;\n};\n\nexport const useCollateral = (\n options: Options = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const positions = usePositionStream();\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 = 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.totalInitialMarginWithOrders({\n positions: positionsPath(positions),\n orders: filterAlgoOrders,\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo,\n });\n }, [positions, filterAlgoOrders, markPrices, accountInfo, symbolInfo]);\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(),\n availableBalance,\n unsettledPnL: pathOr_unsettledPnLPathOr(positions),\n\n accountInfo,\n\n // @hidden\n positions: positionsPath(positions),\n };\n};\n","import { useCallback, useEffect, useMemo, useState, useRef } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { type SWRConfiguration } from \"swr\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API, OrderEntity } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\nimport { useMarketsStream } from \"./useMarketsStream\";\n\ntype PriceMode = \"markPrice\" | \"lastPrice\";\n\nexport interface PositionReturn {\n data: any[];\n loading: boolean;\n close: (\n order: Pick<OrderEntity, \"order_type\" | \"order_price\" | \"side\">\n ) => void;\n}\n\nexport const usePositionStream = (\n symbol?: string,\n options?: SWRConfiguration & { calcMode?: PriceMode }\n) => {\n const symbolInfo = useSymbolsInfo();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\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 fundingRates = useFundingRates();\n\n const {\n data,\n error,\n mutate: refreshPositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 200,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {},\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n const [priceMode, setPriceMode] = useState(options?.calcMode || \"markPrice\");\n\n useEffect(() => {\n if (options?.calcMode && priceMode !== options?.calcMode) {\n setPriceMode(options?.calcMode);\n }\n }, [options?.calcMode]);\n\n const { data: tickers } = useMarketsStream();\n // console.log(\"mark prices\", markPrices);\n // console.log(\"tickers\", tickers);\n\n const tickerPrices = useMemo(() => {\n const data: Record<string, number> = Object.create(null);\n tickers?.forEach((item) => {\n // @ts-ignore\n data[item.symbol] = item[\"24h_close\"];\n });\n return data;\n }, [tickers]);\n\n const formatedPositions = useMemo<[API.PositionExt[], any] | null>(() => {\n if (!data?.rows || !symbolInfo || !accountInfo) return null;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows\n : data.rows.filter((item) => {\n return item.symbol === symbol;\n });\n\n let unrealPnL_total = zero,\n notional_total = zero,\n unsettlementPnL_total = zero;\n\n const formatted = filteredData.map((item: API.Position) => {\n // const price = (markPrices as any)[item.symbol] ?? item.mark_price;\n const unRealizedPrice = propOr(\n item.mark_price,\n item.symbol,\n priceMode === \"markPrice\" ? markPrices : tickerPrices\n ) as unknown as number;\n\n const price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n const info = symbolInfo?.[item.symbol];\n //\n\n const notional = positions.notional(item.position_qty, price);\n\n const unrealPnl = positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item?.average_open_price,\n markPrice: unRealizedPrice,\n });\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 const unsettlementPnL = positions.unsettlementPnL({\n positionQty: item.position_qty,\n markPrice: price,\n costPosition: item.cost_position,\n sumUnitaryFunding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n lastSumUnitaryFunding: item.last_sum_unitary_funding,\n });\n\n unrealPnL_total = unrealPnL_total.add(unrealPnl);\n notional_total = notional_total.add(notional);\n unsettlementPnL_total = unsettlementPnL_total.add(unsettlementPnL);\n\n return {\n ...item,\n mark_price: price,\n mm: 0,\n notional,\n unsettlement_pnl: unsettlementPnL,\n unrealized_pnl: unrealPnl,\n unsettled_pnl_ROI: unrealPnlROI,\n };\n });\n\n return [\n formatted,\n {\n unrealPnL: unrealPnL_total.toNumber(),\n notional: notional_total.toNumber(),\n unsettledPnL: unsettlementPnL_total.toNumber(),\n },\n ];\n }, [\n data?.rows,\n symbolInfo,\n accountInfo,\n markPrices,\n priceMode,\n tickerPrices,\n symbol,\n holding,\n ]);\n\n // const showSymbol = useCallback((symbol: string) => {\n // setVisibleSymbol(symbol);\n // }, []);\n\n const [totalCollateral, totalValue, totalUnrealizedROI] = useMemo<\n [Decimal, Decimal, number]\n >(() => {\n if (!holding || !markPrices) {\n return [zero, zero, 0];\n }\n const unsettlemnedPnL = pathOr(0, [1, \"unsettledPnL\"])(formatedPositions);\n const unrealizedPnL = pathOr(0, [1, \"unrealPnL\"])(formatedPositions);\n\n const [USDC_holding, nonUSDC] = parseHolding(holding, markPrices);\n\n const totalCollateral = account.totalCollateral({\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n unsettlementPnL: unsettlemnedPnL,\n });\n\n const totalValue = account.totalValue({\n totalUnsettlementPnL: unsettlemnedPnL,\n USDCHolding: USDC_holding,\n nonUSDCHolding: nonUSDC,\n });\n\n const totalUnrealizedROI = account.totalUnrealizedROI({\n totalUnrealizedPnL: unrealizedPnL,\n totalValue: totalValue.toNumber(),\n });\n\n return [totalCollateral, totalValue, totalUnrealizedROI];\n }, [holding, formatedPositions, markPrices]);\n\n const positionsRows = useMemo(() => {\n if (!formatedPositions) return null;\n\n if (!symbolInfo || !accountInfo) return formatedPositions[0];\n\n const total = totalCollateral.toNumber();\n\n let rows = formatedPositions[0]\n .filter((item) => item.position_qty !== 0)\n .map((item) => {\n const info = symbolInfo?.[item.symbol];\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: item.notional,\n IMR_factor_power: 4 / 5,\n });\n\n return {\n ...item,\n mm: positions.maintenanceMargin({\n positionQty: item.position_qty,\n markPrice: item.mark_price,\n MMR,\n }),\n // est_liq_price: positions.liqPrice({\n // markPrice: item.mark_price,\n // totalCollateral: total,\n // positionQty: item.position_qty,\n // MMR,\n // }),\n mmr: MMR,\n };\n });\n\n // calculate est_liq_price\n rows = rows.map((item) => {\n const est_liq_price = positions.liqPrice({\n markPrice: item.mark_price,\n totalCollateral: total,\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 return rows;\n }, [formatedPositions, symbolInfo, accountInfo, totalCollateral]);\n\n // useEffect(() => {\n // ee.on(\"positions:changed\", () => {\n // updatePositions();\n // });\n // }, []);\n\n return [\n {\n rows: positionsRows,\n aggregated: {\n ...(formatedPositions?.[1] ?? {}),\n unrealPnlROI: totalUnrealizedROI,\n },\n totalCollateral,\n totalValue,\n totalUnrealizedROI,\n },\n createGetter<Omit<API.Position, \"rows\">>(data as any, 1),\n {\n // close: onClosePosition,\n loading: false,\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\n\nexport const useFundingRates = () => {\n const { data } = useQuery<{ [key: string]: API.FundingRate }>(\n `/v1/public/funding_rates`,\n {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n formatter(data: { rows: API.FundingRate[] }) {\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 obj[item.symbol] = item;\n }\n\n return obj;\n },\n }\n );\n\n // @ts-ignore\n return createGetter<API.FundingRate>(data);\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useMarkPricesStream = () => {\n const ws = useWS();\n return useSWRSubscription(\"markPrices\", (key, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n \"markprices\",\n {\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 next(null, data);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n onError: (error: any) => {},\n }\n );\n\n return () => {\n unsubscribe?.();\n };\n });\n};\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 { 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\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWS();\n const { data: futures } = useQuery<WSMessage.Ticker[]>(`/v1/public/futures`, {\n revalidateOnFocus: false,\n });\n\n const { data: tickers } = useSWRSubscription(\"tickers\", (_, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n \"tickers\",\n {\n onMessage: (message: any) => {\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 [\"24h_volumn\"]: ticker.volume,\n change: 0,\n };\n\n if (ticker.close !== undefined && ticker.open !== undefined) {\n data[\"change\"] = new Decimal(ticker.close)\n .minus(ticker.open)\n .div(ticker.open)\n .toNumber();\n }\n\n return data;\n }\n return item;\n });\n }, [futures, tickers]);\n\n return { data: value };\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\";\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: Date.now(),\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 { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport {\n OrderSide,\n OrderEntity,\n OrderStatus,\n API,\n} from \"@orderly.network/types\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMutation } from \"../useMutation\";\nimport version from \"../version\";\nimport { useDataCenterContext } from \"../dataProvider\";\n\ntype OrderType = \"normalOrder\" | \"algoOrder\";\n\nexport interface UserOrdersReturn {\n data: any[];\n loading: boolean;\n update: (order: any) => void;\n cancel: (order: any) => void;\n}\n\n// const chche: Record<string, boolean> = {};\n\ntype Params = {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n};\n\nexport const useOrderStream = (params: Params) => {\n const { status, symbol, side, size = 100 } = params;\n\n const { data: markPrices = {} } = useMarkPricesStream();\n const { regesterKeyHandler } = useDataCenterContext();\n const [\n doCancelOrder,\n { error: cancelOrderError, isMutating: cancelMutating },\n ] = useMutation(\"/v1/order\", \"DELETE\");\n\n const [\n doUpdateOrder,\n { error: updateOrderError, isMutating: updateMutating },\n ] = useMutation(\"/v1/order\", \"PUT\");\n\n const [\n doCanceAlgolOrder,\n { error: cancelAlgoOrderError, isMutating: cancelAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"DELETE\");\n\n const [\n doUpdateAlgoOrder,\n { error: updateAlgoOrderError, isMutating: updateAlgoMutating },\n ] = useMutation(\"/v1/algo/order\", \"PUT\");\n\n const getKey = (pageIndex: number, previousPageData: any) => {\n // reached the end\n if (previousPageData && !previousPageData.rows?.length) return null;\n\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n [\"source_type\", 'ALL']\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\n useEffect(() => {\n const key = `orders:${status}:${symbol}:${side}`;\n regesterKeyHandler(key, getKey);\n }, [status, symbol, side]);\n\n const ordersResponse = usePrivateInfiniteQuery(getKey, {\n initialSize: 1,\n // revalidateFirstPage: false,\n // onError: (err) => {\n // console.error(\"fetch failed::::\", err);\n // },\n formatter: (data) => data,\n });\n\n const flattenOrders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n\n return ordersResponse.data?.map((item) => item.rows)?.flat();\n }, [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 return {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n });\n }, [flattenOrders, markPrices, status]);\n\n const total = useMemo(() => {\n return ordersResponse.data?.[0]?.meta?.total || 0;\n }, [ordersResponse.data?.[0]?.meta?.total]);\n\n /**\n * cancel all orders\n */\n const cancelAllOrders = useCallback(() => { }, [ordersResponse.data]);\n\n const _updateOrder = useCallback((orderId: string, order: OrderEntity, type: OrderType) => {\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 * 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\n const _cancelOrder = useCallback((orderId: number, type: OrderType, symbol?: string) => {\n switch (type) {\n case \"algoOrder\":\n return doCanceAlgolOrder(null, {\n // @ts-ignore\n order_id: orderId,\n symbol,\n source: `SDK${version}`\n })\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 * 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 return [\n orders,\n {\n total,\n isLoading: ordersResponse.isLoading,\n refresh: ordersResponse.mutate,\n loadMore,\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n updateAlgoOrder,\n cancelAlgoOrder,\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 { 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 { usePrivateQuery } from \"../usePrivateQuery\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { useWS } from \"../useWS\";\nimport { useOrderStream } from \"./useOrderStream\";\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\n\nexport const useMaxQty = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false\n) => {\n const positionsData = usePositionStream();\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 { totalCollateral } = useCollateral();\n\n const { data: markPrices } = useMarkPricesStream();\n\n const [orders] = useOrderStream({ status: OrderStatus.NEW });\n\n // const {\n // data: orders,\n // error,\n // mutate: updateOrder,\n // } = usePrivateQuery<API.Order[]>(`/v1/orders?status=NEW&size=99`, {\n // formatter: (data) => data.rows,\n // onError: (err) => { },\n // });\n\n // const ws = useWS();\n // useEffect(() => {\n // const unsubscribe = ws.privateSubscribe(\n // {\n // id: \"executionreport_orders\",\n // event: \"subscribe\",\n // topic: \"executionreport\",\n // ts: Date.now(),\n // },\n // {\n // onMessage: (data: any) => {\n // console.log(\"refresh orders\", data);\n // updateOrder();\n // },\n // }\n // );\n // return () => unsubscribe();\n // }, []);\n\n const maxQty = useMemo(() => {\n if (!symbol) return 0;\n\n const positions = positionsPath(positionsData);\n\n const positionQty = account.getQtyFromPositions(positions, symbol);\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((item) => item.algo_order_id === undefined);\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 = positions.filter(\n (item: API.Position) => item.symbol !== symbol\n );\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.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 orders,\n positionsData,\n markPrices,\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n reduceOnly,\n ]);\n\n return Math.max(maxQty, 0) as number;\n};\n","import { OrderType, type API, OrderEntity } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order } from \"@orderly.network/perp\";\nimport { OrderSide } from \"@orderly.network/types\";\n\nexport type VerifyResult = {\n [P in keyof OrderEntity]?: { type: string; message: string };\n};\nexport type OrderFormEntity = Pick<\n OrderEntity,\n \"order_price\" | \"order_quantity\" | \"total\"\n>;\n\ntype ValuesDepConfig = {\n // token: API.TokenInfo;\n symbol: API.SymbolExt;\n maxQty: number;\n markPrice: number;\n};\n\nexport interface OrderCreator {\n create: (values: OrderEntity, configs: ValuesDepConfig) => OrderEntity;\n validate: (\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ) => Promise<VerifyResult>;\n}\n\nconst { maxPrice, minPrice, scropePrice } = order;\n\nexport abstract class BaseOrderCreator implements OrderCreator {\n abstract create(values: OrderEntity, config: ValuesDepConfig): OrderEntity;\n abstract validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult>;\n\n baseOrder(data: OrderEntity): OrderEntity {\n const order: Partial<OrderEntity> = {\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 return order as OrderEntity;\n }\n\n baseValidate(\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ): Promise<VerifyResult> {\n const errors: {\n [P in keyof OrderEntity]?: { type: string; message: string };\n } = {};\n\n const { maxQty } = configs;\n\n let { order_quantity, total, order_price } = values;\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 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 return Promise.resolve(errors);\n }\n\n fixOrderQuantity(\n order: Partial<OrderEntity>,\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\nexport class LimitOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity, config: ValuesDepConfig): OrderEntity {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n\n this.fixOrderQuantity(order, config);\n\n delete order['total'];\n delete order['trigger_price'];\n delete order['isStopOrder'];\n\n console.log(\"create\", order);\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, 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 } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n const scropePriceNumbere = scropePrice(\n config.markPrice,\n price_scope,\n side\n );\n\n const priceRange = side === \"BUY\" ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\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(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 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 return errors;\n });\n }\n}\n\nexport class MarketOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): 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\nexport class PostOnlyOrderCreator extends LimitOrderCreator { }\n\nexport class FOKOrderCreator extends LimitOrderCreator { }\nexport class IOCOrderCreator extends LimitOrderCreator { }\n\nexport class StopLimitOrderCreator extends LimitOrderCreator {\n create(values: OrderEntity, config: ValuesDepConfig): OrderEntity {\n const order = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n trigger_price: values.trigger_price,\n algo_type: \"STOP\",\n type: \"LIMIT\",\n quantity: values[\"order_quantity\"],\n price: values[\"order_price\"],\n trigger_price_type: \"MARK_PRICE\",\n };\n this.fixOrderQuantity(order, config);\n delete order[\"order_quantity\"];\n delete order[\"order_price\"];\n // @ts-ignore\n delete order[\"isStopOrder\"];\n delete order['total'];\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\n if (!order_price) {\n errors.order_price = {\n type: \"required\",\n message: \"price is required\",\n };\n }\n \n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n } \n \n if (trigger_price && order_price) {\n const price = new Decimal(order_price);\n const { symbol } = config;\n const { price_range, price_scope } = symbol;\n const maxPriceNumber = maxPrice(trigger_price, price_range);\n const minPriceNumber = minPrice(trigger_price, price_range);\n const scropePriceNumbere = scropePrice(\n trigger_price,\n price_scope,\n side\n );\n\n const priceRange = side === \"BUY\" ? {\n min: scropePriceNumbere,\n max: maxPriceNumber,\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(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 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 return errors;\n });\n }\n}\nexport class StopMarketOrderCreator extends LimitOrderCreator {\n create(values: OrderEntity, _: ValuesDepConfig): OrderEntity {\n const result = {\n ...this.baseOrder(values),\n order_price: values.order_price,\n trigger_price: values.trigger_price,\n algo_type: \"STOP\",\n type: \"MARKET\",\n quantity: values[\"order_quantity\"],\n price: values[\"order_price\"],\n trigger_price_type: \"MARK_PRICE\",\n };\n delete result[\"order_quantity\"];\n delete result[\"order_price\"];\n // @ts-ignore\n delete result[\"isStopOrder\"];\n delete result['total'];\n\n console.log(\"result is\", result);\n return result;\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\n if (!trigger_price) {\n errors.trigger_price = {\n type: \"required\",\n message: \"Trigger price is required\",\n };\n }\n\n return errors;\n });\n }\n}\n\nexport class GeneralOrderCreator extends BaseOrderCreator {\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\nexport const availableOrderTypes = [\n OrderType.LIMIT,\n OrderType.MARKET,\n OrderType.IOC,\n OrderType.FOK,\n OrderType.POST_ONLY,\n OrderType.STOP_LIMIT,\n OrderType.STOP_MARKET,\n];\n\nexport class OrderFactory {\n static create(type: OrderType): OrderCreator | null {\n switch (type) {\n case OrderType.LIMIT:\n return new LimitOrderCreator();\n case OrderType.MARKET:\n return new MarketOrderCreator();\n // case OrderType.ASK:\n // return new AskOrderCreator();\n // case OrderType.BID:\n // return new BidOrderCreator();\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\n case OrderType.STOP_LIMIT:\n return new StopLimitOrderCreator();\n case OrderType.STOP_MARKET:\n return new StopMarketOrderCreator();\n\n default:\n return new GeneralOrderCreator();\n }\n }\n}\n","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 { useCallback, useContext, useMemo, useState } from \"react\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useConfig } from \"../useConfig\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nexport enum MarketsType {\n FAVORITES,\n RECENT,\n ALL,\n}\n\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 \n }\n}\n*/\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 const useMarkets = (type: MarketsType) => {\n\n const marketsKey = \"markets\";\n\n const { data } = useMarketsStream();\n const { configStore } = useContext(OrderlyContext);\n\n // {\"PERP_ETH_USDC\": {}, ...}\n const publicInfo = useSymbolsInfo();\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 const defaultTab = { name: \"Popular\", id: 1 };\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 lastSelectFavoriteTab: { ...defaultTab }\n });\n }\n }\n\n const getFavoriteTabs = useMemo(() => {\n // @ts-ignore\n const tabs = configStore.get(marketsKey)[\"favoriteTabs\"];\n return (tabs || [{ name: \"Popular\", id: 1 }]) as FavoriteTab[];\n }, []);\n\n const getFavorites = useMemo(() => {\n // @ts-ignore\n const curData = (configStore.get(marketsKey,)[\"favorites\"] || []) as Favorite[];\n const tabs = getFavoriteTabs;\n const result = [];\n for (let index = 0; index < curData.length; index++) {\n const favData = curData[index];\n var favTabs = favData.tabs.filter((tab) => tabs.findIndex((item) => tab.id === item.id) !== -1);\n if (favTabs.length > 0) {\n result.push({ ...favData, tabs: favTabs })\n }\n\n }\n configStore.set(marketsKey, { ...configStore.getOr(marketsKey, {}), favorites: result });\n // localStorage.setItem(marketsKey, JSON.stringify(configStore.get(marketsKey)));\n\n return result;\n }, [configStore]);\n\n const getRecent = useMemo(() => {\n // @ts-ignore\n const curData = configStore.get(marketsKey)[\"recent\"];\n return ((curData || []) as Recent[]).filter((e) => e);\n }, []);\n\n const [favoriteTabs, setFavoriteTabs] = useState(getFavoriteTabs);\n const [favorites, setFavorites] = useState(getFavorites);\n const [recent, setRecent] = useState(getRecent);\n\n const updateFavoriteTabs = (tab: FavoriteTab | FavoriteTab[], operator?: {\n add?: boolean,\n update?: boolean,\n delete?: boolean,\n }) => {\n\n const saveTabs = (tabs: FavoriteTab[]) => {\n setFavoriteTabs(tabs);\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favoriteTabs\": tabs\n });\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 }\n saveTabs(tabs);\n };\n\n const setRecentData = (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 configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"recent\": curData\n });\n setRecent(curData);\n };\n\n\n\n const setFavoritesData = (symbol: API.MarketInfoExt, tab: FavoriteTab | FavoriteTab[], remove: boolean = false) => {\n\n const curData = [...favorites];\n const index = curData.findIndex((item) => item.name == symbol.symbol);\n\n if (index === -1) { // 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\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((tab) => tab.id != tab.id);\n if (tabs.length === 0) { // del favorite\n curData.splice(index, 1);\n } else {\n curData[index] = { ...favorite, tabs };\n }\n } else { // insert\n const tabs = favorite.tabs;\n tabs.push(tab);\n curData[index] = { ...favorite, tabs };\n }\n }\n }\n\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favorites\": curData\n });\n setFavorites(() => curData);\n };\n\n const getData = (type: MarketsType) => {\n\n\n // get data\n const localData = type === MarketsType.FAVORITES ? [...favorites] : [...recent];\n // filter\n const keys = localData.map((item) => item.name);\n const filter = type == MarketsType.ALL ?\n data :\n data?.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 = type == MarketsType.FAVORITES ?\n true :\n (favoriteKeys.includes(element.symbol));\n\n const fIndex = favoritesData.findIndex((item) => item.name === element.symbol);\n const tabs = fIndex === -1 ? [] : favoritesData[fIndex].tabs;\n\n let imr = undefined;\n if (publicInfo) {\n imr= publicInfo?.[element.symbol](\"base_imr\");\n }\n \n filter[index] = {\n ...filter[index],\n // @ts-ignore\n isFavorite,\n tabs,\n leverage: imr ? 1 / imr : undefined\n };\n }\n }\n\n return filter;\n\n };\n\n const addToHistory = (symbol: API.MarketInfoExt) => {\n setRecentData(symbol);\n };\n\n const updateSymbolFavoriteState = (symbol: API.MarketInfoExt, tab: FavoriteTab | FavoriteTab[], del: boolean = false) => {\n setFavoritesData(symbol, tab, del);\n };\n\n const markets = getData(type);\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\n\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n \"favorites\": list\n });\n setFavorites(list);\n }\n };\n\n\n const tabs = useMemo(() => {\n return favoriteTabs;\n }, [favoriteTabs]);\n\n\n const getLastSelFavTab = () => {\n // @ts-ignore\n const curData = configStore.get(marketsKey)[\"lastSelectedFavoriteTab\"];\n return (curData || { name: \"Popular\", id: 1 }) as FavoriteTab;\n };\n\n const updateSelectedFavoriteTab = (tab: FavoriteTab) => {\n configStore.set(marketsKey, {\n ...configStore.getOr(marketsKey, {}),\n lastSelectedFavoriteTab: tab\n });\n };\n\n return [\n markets || [],\n {\n favoriteTabs: tabs,\n favorites,\n recent,\n addToHistory,\n // updateFavoriteTabs(\"tab\", operator: {add/update/delete})\n updateFavoriteTabs,\n updateSymbolFavoriteState,\n pinToTop,\n getLastSelFavTab,\n updateSelectedFavoriteTab,\n },\n ] as const;\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\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, useState } from \"react\";\nimport { 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() - Date.now();\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 return {\n ...data,\n est_funding_rate: (Number(data?.est_funding_rate ?? 0) * 100).toFixed(4),\n countDown,\n };\n};\n","import { API } from \"@orderly.network/types\";\nimport { useWS } from \"../useWS\";\nimport { useEffect, useState } from \"react\";\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: Date.now(),\n },\n {\n onMessage: (data: any) => {\n setTrades((prev) => {\n const arr = [{ ...data, ts: Date.now() }, ...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 { useMemo } from \"react\";\nimport { account, positions } from \"@orderly.network/perp\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\nimport { zero } from \"@orderly.network/utils\";\n\nexport type MarginRatioReturn = {\n // Margin Ratio\n marginRatio: number;\n // Current Leverage\n currentLeverage: number;\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 const { data: markPrices } = useMarkPricesStream();\n\n const { totalCollateral } = useCollateral();\n const marginRatio = useMemo(() => {\n if (!rows || !markPrices || !totalCollateral || rows.length === 0) {\n return 0;\n }\n\n const ratio = account.totalMarginRatio({\n totalCollateral: totalCollateral,\n markPrices: markPrices,\n positions: rows ?? [],\n });\n return ratio;\n }, [rows, markPrices, totalCollateral]);\n\n const currentLeverage = useMemo(() => {\n return account.currentLeverage(marginRatio);\n }, [marginRatio]);\n\n // MMR\n const mmr = useMemo<number | null>(() => {\n if (!rows || rows.length <= 0) 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 positionsMM = positionsMM.add(item.mm);\n }\n\n return account.MMR({\n positionsMMR: positionsMM.toNumber(),\n positionsNotional: aggregated.notional,\n });\n }, [rows, aggregated]);\n\n return { marginRatio, currentLeverage, mmr };\n};\n","import { NetworkId, type API, chainsInfoMap } from \"@orderly.network/types\";\nimport { useCallback, useContext, useMemo, useRef } from \"react\";\nimport useSWR, { SWRConfiguration } from \"swr\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useQuery } from \"../useQuery\";\nimport { mergeDeepRight, prop } from \"ramda\";\nimport { nativeTokenAddress } from \"../woo/constants\";\nimport { isTestnet } from \"@orderly.network/utils\";\nimport { TestnetChains } from \"@orderly.network/types\";\n\ntype inputOptions = {\n filter?: (item: API.Chain) => boolean;\n pick?: \"dexs\" | \"network_infos\" | \"token_infos\";\n crossEnabled?: boolean;\n /** if true, use wooSwap api, else use orderly api only */\n wooSwapEnabled?: boolean;\n};\n\nexport const useChains = (\n networkId?: NetworkId,\n options: inputOptions & SWRConfiguration = {}\n) => {\n const { pick, crossEnabled, wooSwapEnabled, ...swrOptions } = options;\n const { configStore } = useContext(OrderlyContext);\n\n const field = options?.pick;\n\n const filterFun = useRef(options?.filter);\n filterFun.current = options?.filter;\n\n const map = useRef(\n new Map<\n number,\n API.Chain & {\n nativeToken?: API.TokenInfo;\n }\n >()\n );\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 const { data: wooSupportData, error: swapSupportError } = useSWR<any>(\n () =>\n wooSwapEnabled\n ? `${configStore.get(\"swapSupportApiUrl\")}/swap_support`\n : null,\n (url) => fetch(url).then((res) => res.json()),\n { ...commonSwrOpts, ...swrOptions }\n );\n\n const { data: chainInfos, error: chainInfoErr } = useQuery(\n \"/v1/public/chain_info\",\n {\n ...commonSwrOpts,\n formatter: (data) => data.rows,\n }\n );\n\n const { data: orderlyChains, error: tokenError } = useQuery<API.Chain[]>(\n \"https://api-evm.orderly.org/v1/public/token\",\n { ...commonSwrOpts }\n );\n\n const chains:\n | API.Chain[]\n | {\n testnet: API.Chain[];\n mainnet: API.Chain[];\n } = useMemo(() => {\n let orderlyChainsArr: API.Chain[] = [];\n const orderlyChainIds = new Set<number>();\n\n orderlyChains?.forEach((item) => {\n item.chain_details.forEach((chain: any) => {\n const chainId = Number(chain.chain_id);\n orderlyChainIds.add(chainId);\n const chainInfo = chainsInfoMap.get(chainId);\n\n const _chain: any = {\n network_infos: {\n name: chain.chain_name ?? chainInfo?.chainName ?? \"--\",\n // \"public_rpc_url\": \"https://arb1.arbitrum.io/rpc\",\n chain_id: chainId,\n withdrawal_fee: chain.withdrawal_fee,\n cross_chain_withdrawal_fee: chain.cross_chain_withdrawal_fee,\n\n bridgeless: true,\n },\n token_infos: [\n {\n symbol: item.token,\n address: chain.contract_address,\n decimals: chain.decimals,\n },\n ],\n };\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(_chain)) return;\n }\n\n /// if chain is testnet, update network_infos\n if (isTestnet(_chain.chain_id)) {\n const index = testnetArr?.findIndex((item) =>\n isTestnet(item.network_infos.chain_id)\n );\n if (index > -1) {\n testnetArr[index] = _chain;\n }\n }\n\n map.current.set(chainId, _chain);\n\n orderlyChainsArr.push(_chain);\n });\n });\n\n let testnetArr = [...TestnetChains] as API.Chain[];\n\n testnetArr.forEach((chain) => {\n map.current.set(chain.network_infos?.chain_id, chain as any);\n });\n\n let mainnetArr: API.Chain[] = [];\n\n if (wooSwapEnabled) {\n if (!wooSupportData || !wooSupportData.data) return wooSupportData;\n\n Object.keys(wooSupportData.data).forEach((key) => {\n // if (orderlyChainIds.has(data.data[key].network_infos.chain_id)) return;\n\n const chain = wooSupportData.data[key];\n\n const item: any = mergeDeepRight(chain, {\n name: key,\n network_infos: {\n bridgeless: orderlyChainIds.has(chain.network_infos.chain_id),\n shortName: key,\n },\n token_infos: chain.token_infos.filter(\n (token: API.TokenInfo) => !!token.swap_enable\n ),\n });\n\n if (item.token_infos?.length === 0) return;\n\n map.current.set(item.network_infos.chain_id, item);\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(item)) return;\n }\n\n if (item.network_infos.mainnet) {\n mainnetArr.push(item);\n } else {\n testnetArr.push(item);\n }\n });\n } else {\n // orderly chains array form (/v1/public/token) api\n orderlyChainsArr.forEach((chain) => {\n let _chain = chain;\n\n const networkInfo = chainInfos?.find((item: { chain_id: any }) => {\n return item.chain_id == chain.network_infos.chain_id;\n });\n\n // update network_infos by chain_info api(v1/public/chain_info)\n if (networkInfo) {\n const {\n name,\n public_rpc_url,\n chain_id,\n currency_symbol,\n explorer_base_url,\n } = networkInfo;\n _chain.network_infos = {\n ..._chain.network_infos,\n name: name,\n shortName: name,\n public_rpc_url: public_rpc_url,\n\n currency_symbol: currency_symbol,\n bridge_enable: true,\n mainnet: true,\n explorer_base_url: explorer_base_url,\n est_txn_mins: null,\n woofi_dex_cross_chain_router: \"\",\n woofi_dex_depositor: \"\",\n };\n }\n\n map.current.set(_chain.network_infos.chain_id, _chain);\n if (isTestnet(_chain.network_infos.chain_id)) {\n const index = testnetArr.findIndex((item) =>\n isTestnet(item.network_infos.chain_id)\n );\n if (index > -1) {\n testnetArr[index] = _chain;\n }\n }\n\n if (typeof filterFun.current === \"function\") {\n if (!filterFun.current(_chain)) return;\n }\n\n mainnetArr.push(_chain);\n });\n }\n\n mainnetArr.sort((a, b) => {\n return a.network_infos.bridgeless ? -1 : 1;\n });\n\n testnetArr.sort((a, b) => {\n return a.network_infos.bridgeless ? -1 : 1;\n });\n\n if (!!field) {\n //@ts-ignore\n testnetArr = testnetArr.map((item) => item[field]);\n //@ts-ignore\n mainnetArr = mainnetArr.map((item) => item[field]);\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 wooSupportData,\n networkId,\n field,\n orderlyChains,\n wooSwapEnabled,\n chainInfos,\n ]);\n\n const findByChainId = useCallback(\n (chainId: number, field?: string) => {\n const chain = map.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, map.current]\n );\n\n // const findNativeTokenByChainId = useCallback(\n // (chainId: number): API.TokenInfo | undefined => {\n // const chain = findByChainId(chainId);\n // if (!chain) return;\n //\n // },\n // [chains]\n // );\n\n return [\n chains,\n {\n findByChainId,\n // findNativeTokenByChainId,\n error: swapSupportError || tokenError,\n // nativeToken,\n },\n ] as const;\n};\n","export const woofiDexCrossChainRouterAbi = [\n {\n inputs: [],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint8\",\n name: \"version\",\n type: \"uint8\",\n },\n ],\n name: \"Initialized\",\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: \"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: false,\n internalType: \"uint16\",\n name: \"srcChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"realToToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"realToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnDstChain\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint16\",\n name: \"dstChainId\",\n type: \"uint16\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"bridgeAmount\",\n type: \"uint256\",\n },\n ],\n name: \"WOOFiDexCrossSwapOnSrcChain\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"MAX_BRIDGE_SLIPPAGE\",\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: \"NATIVE_PLACEHOLDER\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"addDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"allDirectBridgeTokens\",\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: \"allDirectBridgeTokensLength\",\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: \"bridgeSlippage\",\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 payable\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgeToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minBridgeAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.SrcInfos\",\n name: \"srcInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"crossSwap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"dstGasForNoSwapCall\",\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: \"dstGasForSwapCall\",\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: \"stuckToken\",\n type: \"address\",\n },\n ],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_weth\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nonceCounter\",\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: \"orderlyFeeToggle\",\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: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstInfos\",\n name: \"dstInfos\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct IWOOFiDexCrossChainRouter.DstVaultDeposit\",\n name: \"dstVaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"quoteLayerZeroFee\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"nativeAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"zroAmount\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"removeDirectBridgeToken\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"renounceOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_bridgeSlippage\",\n type: \"uint256\",\n },\n ],\n name: \"setBridgeSlippage\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForNoSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForNoSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"_dstGasForSwapCall\",\n type: \"uint256\",\n },\n ],\n name: \"setDstGasForSwapCall\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_nonceCounter\",\n type: \"address\",\n },\n ],\n name: \"setNonceCounter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bool\",\n name: \"_orderlyFeeToggle\",\n type: \"bool\",\n },\n ],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"_sgChainIdLocal\",\n type: \"uint16\",\n },\n ],\n name: \"setSgChainIdLocal\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n ],\n name: \"setSgETH\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"poolId\",\n type: \"uint256\",\n },\n ],\n name: \"setSgPoolId\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_sgRouter\",\n type: \"address\",\n },\n ],\n name: \"setSgRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexCrossChainRouter\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexCrossChainRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"chainId\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"woofiDexVault\",\n type: \"address\",\n },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"_wooRouter\",\n type: \"address\",\n },\n ],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgChainIdLocal\",\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: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"sgETHs\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"sgPoolIds\",\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: \"srcChainId\",\n type: \"uint16\",\n },\n {\n internalType: \"bytes\",\n name: \"\",\n type: \"bytes\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n {\n internalType: \"address\",\n name: \"bridgedToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"bridgedAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"payload\",\n type: \"bytes\",\n },\n ],\n name: \"sgReceive\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"sgRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\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 name: \"weth\",\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: \"wooRouter\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n ],\n name: \"woofiDexCrossChainRouters\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint16\",\n name: \"\",\n type: \"uint16\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"woofiDexVaults\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n stateMutability: \"payable\",\n type: \"receive\",\n },\n];\n\nexport const nativeTokenAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\n\nexport const isNativeTokenChecker = (address: string) =>\n address === nativeTokenAddress;","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\";\n\nexport const useWithdraw = () => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance, freeCollateral } = useCollateral();\n\n // const withdrawQueue = useRef<number[]>([]);\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 // withdrawQueue.current.push(res.data.withdraw_id);\n // }\n return res;\n });\n },\n [state]\n );\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 return {\n withdraw,\n isLoading,\n maxAmount,\n availableBalance,\n availableWithdraw,\n unsettledPnL,\n };\n};\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport {\n API,\n ARBITRUM_MAINNET_CHAINID,\n ARBITRUM_TESTNET_CHAINID,\n AccountStatusEnum,\n DEPOSIT_FEE_RATE,\n MaxUint256,\n NetworkId,\n} from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { isNativeTokenChecker } from \"../woo/constants\";\nimport { useChains } from \"./useChains\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useConfig } from \"../useConfig\";\nimport { useDebouncedCallback } from \"use-debounce\";\n\nexport type useDepositOptions = {\n // from address\n address?: string;\n decimals?: number;\n // vaultAddress?: string;\n crossChainRouteAddress?: string;\n depositorAddress?: string;\n networkId?: NetworkId;\n srcChainId?: number;\n srcToken?: string;\n quantity?: string;\n\n /**\n * @hidden\n */\n wooSwapEnabled?: boolean;\n};\n\nexport const useDeposit = (options?: useDepositOptions) => {\n const { enableSwapDeposit } = useContext<any>(OrderlyContext);\n\n const networkId = useConfig(\"networkId\");\n const [balanceRevalidating, setBalanceRevalidating] = useState(false);\n const [allowanceRevalidating, setAllowanceRevalidating] = useState(false);\n\n const [_, { findByChainId }] = useChains(undefined, {\n wooSwapEnabled: enableSwapDeposit,\n });\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(ARBITRUM_TESTNET_CHAINID) 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 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(account.assetsManager.getBalanceByAddress(token.address));\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 (address?: string, vaultAddress?: string) => {\n // if (!address || !vaultAddress) return;\n const key = `${address}-${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 );\n\n setAllowance(() => allowance);\n // setAllowanceRevalidating(false);\n return allowance;\n };\n\n const getAllowanceByDefaultAddress = async (address?: string) => {\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(address);\n\n setAllowance(() => allowance);\n };\n\n const getVaultAddress = useCallback((): string | undefined => {\n if (dst.chainId !== options?.srcChainId) {\n return options?.crossChainRouteAddress;\n } else {\n if (dst.symbol !== options?.srcToken) {\n return options?.depositorAddress;\n }\n }\n }, [options, dst]);\n\n const queryBalance = useDebouncedCallback(\n (tokenAddress?: string, decimals?: number) => {\n fetchBalance(options?.address, options?.decimals).finally(() => {\n setBalanceRevalidating(false);\n });\n },\n 100\n );\n\n const queryAllowance = useDebouncedCallback(\n (tokenAddress?: string, vaultAddress?: string) => {\n getAllowance(tokenAddress, vaultAddress);\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 if (dst.chainId !== options?.srcChainId) {\n // getAllowance(options?.address, options?.crossChainRouteAddress);\n queryAllowance(options?.address, options?.crossChainRouteAddress);\n } else {\n if (dst.symbol !== options?.srcToken) {\n // getAllowance(options?.address, options?.depositorAddress);\n queryAllowance(options?.address, options?.depositorAddress);\n } else {\n getAllowanceByDefaultAddress(options?.address);\n }\n }\n }, [\n state.status,\n options?.address,\n options?.crossChainRouteAddress,\n options?.depositorAddress,\n options?.srcChainId,\n options?.srcToken,\n account.address,\n dst.chainId,\n dst.symbol,\n ]);\n\n const approve = useCallback(\n async (amount?: string) => {\n if (!options?.address) {\n throw new Error(\"address is required\");\n }\n const vaultAddress = getVaultAddress();\n return account.assetsManager\n .approve(options.address, amount, vaultAddress)\n .then((result: any) => {\n if (typeof amount !== \"undefined\") {\n setAllowance((value) =>\n new Decimal(value).add(amount || MaxUint256.toString()).toString()\n );\n }\n return result;\n });\n },\n [account, getAllowance, options?.address]\n );\n\n const deposit = useCallback(async () => {\n // only support orderly deposit\n return account.assetsManager\n .deposit(quantity, depositFee)\n .then((res: any) => {\n setAllowance((value) => new Decimal(value).sub(quantity).toString());\n setBalance((value) => new Decimal(value).sub(quantity).toString());\n return res;\n });\n }, [account, fetchBalance, getAllowance, quantity, depositFee]);\n\n const loopGetBalance = async () => {\n getBalanceListener.current && clearTimeout(getBalanceListener.current);\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 }, 3000);\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) {\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.log(\"getDepositFee error\", 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\";\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: Date.now(),\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}","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, useContext } from \"react\";\n\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { useBoolean } from \"../useBoolean\";\n\n/** @hidden */\nexport const useWooSwapQuery = () => {\n const { configStore } = useContext<any>(OrderlyContext);\n const account = useAccountInstance();\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n /// swap 询价\n\n const query = useCallback(\n (inputs: any) => {\n if (loading) return;\n start();\n\n const params = {\n network: inputs.srcNetwork,\n // network: \"arbitrum\",\n from_token: inputs.srcToken,\n to_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n from_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${configStore.get(\"swapSupportApiUrl\")}/woofi_dex/swap?${queryString}`\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .finally(() => stop());\n },\n [account]\n );\n\n return {\n query,\n loading: false,\n };\n};\n","import { useCallback, useContext } from \"react\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { useBoolean } from \"../useBoolean\";\nimport { woofiDexCrossChainRouterAbi } from \"./constants\";\nimport { utils } from \"@orderly.network/core\";\n\n/** @hidden */\nexport type WooCrossSwapQueryOptions = {\n from: string;\n};\n\n/** @hidden */\nexport const useWooCrossSwapQuery = () => {\n const { configStore } = useContext<any>(OrderlyContext);\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(configStore.get(\"brokerId\")!),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const queryDestinationFee = useCallback(\n async (\n crossChainRouteAddress: string,\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n orderlyNativeFees: bigint;\n }\n ) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is not ready\");\n }\n const quotoLZFee = await account.walletClient.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n return utils.formatByUnits(quotoLZFee[0]);\n },\n []\n );\n\n /// swap enquiry\n const query = useCallback(\n (inputs: {\n srcNetwork: string;\n srcToken: string;\n amount: bigint;\n slippage: number;\n dstToken: string;\n crossChainRouteAddress: string;\n }) => {\n //\n if (loading) return;\n start();\n\n const params = {\n // src_network: inputs.srcNetwork,\n src_network: inputs.srcNetwork,\n dst_network: \"arbitrum\",\n src_token: inputs.srcToken,\n dst_token: inputs.dstToken, //account.assetsManager.usdcAddress,\n src_amount: inputs.amount, //inputs.amount,\n slippage: inputs.slippage || 1,\n // to_token:account.assetsManager.usdcAddress,\n };\n\n const queryString = Object.entries(params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value as string)}`)\n .join(\"&\");\n\n return fetch(\n `${configStore.get(\n \"swapSupportApiUrl\"\n )}/woofi_dex/cross_chain_swap?${queryString}`\n )\n .then((res) => {\n if (!res.ok) {\n return res.json().then((data) => {\n throw new Error(data.error.message);\n });\n }\n return res.json();\n })\n .then((data) => {\n if (data.status === \"ok\") {\n return data.data;\n }\n throw new Error(data.message);\n })\n .then((swapInfo) => {\n //\n return queryDestinationFee(inputs.crossChainRouteAddress, {\n chainId: swapInfo.dst_infos.chain_id,\n bridgedToken: swapInfo.dst_infos.bridged_token,\n toToken: swapInfo.dst_infos.to_token,\n minToAmount: BigInt(swapInfo.dst_infos.min_to_amount),\n orderlyNativeFees: 0n,\n }).then((data) => {\n return {\n ...swapInfo,\n dst_infos: {\n ...swapInfo.dst_infos,\n gas_fee: data,\n },\n };\n });\n })\n .finally(() => stop());\n },\n\n [loading, account]\n );\n\n return {\n query,\n loading,\n };\n};\n","import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { utils } from \"@orderly.network/core\";\nimport { useBoolean } from \"../useBoolean\";\nimport { pick } from \"ramda\";\nimport { type Environment, createClient } from \"@layerzerolabs/scan-client\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { isNativeTokenChecker, woofiDexCrossChainRouterAbi } from \"./constants\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { useWalletSubscription } from \"../orderly/useWalletSubscription\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useConfig } from \"../useConfig\";\n\n/** @hidden */\nexport enum MessageStatus {\n INITIALIZING = \"WAITTING\",\n INFLIGHT = \"INFLIGHT\",\n DELIVERED = \"DELIVERED\",\n FAILED = \"FAILED\",\n}\n\n/** @hidden */\nexport const useCrossSwap = (): any => {\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n\n const [layerStatus, setLayerStatus] = useState<MessageStatus>(\n MessageStatus.INITIALIZING\n );\n\n const ee = useEventEmitter();\n\n const [bridgeMessage, setBridgeMessage] = useState<any | undefined>();\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO\n );\n const txHashFromBridge = useRef<string | undefined>();\n\n const account = useAccountInstance();\n const { configStore } = useContext(OrderlyContext);\n const networkId = useConfig(\"networkId\");\n\n const client = useRef(createClient(networkId as Environment)).current;\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n //TODO: useWalletSubscription\n // useWalletSubscription({\n // onMessage: (message) => {\n // const { side, transStatus, trxId } = message;\n\n // if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n // setStatus(transStatus);\n // }\n // },\n // });\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHashFromBridge.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHashFromBridge.current]);\n\n const checkLayerStatus = useCallback((txHash: string) => {\n const check = async (txHash: string) => {\n try {\n const { messages } = await client.getMessagesBySrcTxHash(txHash);\n\n if (messages.length > 0) {\n const { status } = messages[0];\n\n if (status === MessageStatus.INFLIGHT) {\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n setLayerStatus(status as MessageStatus);\n\n if (status === MessageStatus.DELIVERED) {\n setBridgeMessage(messages[0]);\n txHashFromBridge.current = messages[0].dstTxHash;\n }\n\n if (status === MessageStatus.FAILED) {\n setBridgeMessage(messages[0]);\n }\n } else {\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n } catch (e) {\n // setLayerStatus(MessageStatus.FAILED);\n setTimeout(() => {\n check(txHash);\n }, 1000);\n }\n };\n\n check(txHash);\n }, []);\n\n //swap 的時候拿 src tx hash, cross swap 拿 dst tx hash\n // const checkDeposit\n\n useEffect(() => {\n return () => {\n if (timer.current) {\n clearTimeout(timer.current);\n }\n };\n }, []);\n\n const dstValutDeposit = useCallback(() => {\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(configStore.get(\"brokerId\")!),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const swap = async (inputs: {\n address: string;\n crossChainRouteAddress: string;\n src: {\n fromToken: string;\n fromAmount: bigint;\n bridgeToken: string;\n minBridgeAmount: bigint;\n };\n dst: {\n chainId: string;\n bridgedToken: string;\n toToken: string;\n minToAmount: bigint;\n airdropNativeAmount: bigint;\n };\n }) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (!inputs.crossChainRouteAddress) {\n throw new Error(\"crossChainRouteAddress is undefined\");\n }\n\n const { address, src, dst, crossChainRouteAddress } = inputs;\n if (loading) return;\n start();\n\n const quotoLZFee = await account.walletClient.call(\n crossChainRouteAddress,\n \"quoteLayerZeroFee\",\n [account.address, dst, dstValutDeposit()],\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n // const result = await account.walletClient.call(\n // crossChainRouteAddress,\n // \"crossSwap\",\n // [\n // account.address,\n // src,\n // dst,\n // dstValutDeposit(),\n // {\n // value: quotoLZFee[0],\n // },\n // ],\n // {\n // abi: woofiDexCrossChainRouterAbi,\n // }\n // );\n\n try {\n const result = await account.walletClient.sendTransaction(\n crossChainRouteAddress,\n \"crossSwap\",\n {\n from: account.address!,\n to: crossChainRouteAddress,\n data: [account.address, src, dst, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.src.fromToken)\n ? BigInt(inputs.src.fromAmount) + quotoLZFee[0]\n : quotoLZFee[0],\n },\n {\n abi: woofiDexCrossChainRouterAbi,\n }\n );\n\n // account.walletClient.on(\n // {\n // address: crossChainRouteAddress,\n // },\n // (log: any, event: any) => {\n //\n // }\n // );\n\n stop();\n\n //\n\n checkLayerStatus(result.hash);\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n stop();\n throw new Error(e.errorCode);\n }\n };\n\n return {\n swap,\n loading,\n bridgeStatus: layerStatus,\n status,\n message: bridgeMessage,\n };\n};\n","import { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { useBoolean } from \"../useBoolean\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { utils } from \"@orderly.network/core\";\nimport { pick } from \"ramda\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { isNativeTokenChecker } from \"./constants\";\nimport { WS_WalletStatusEnum } from \"@orderly.network/types\";\nimport { useEventEmitter } from \"../useEventEmitter\";\n\n/**\n * PM doc:\n * https://www.figma.com/file/RNSrMH6zkqULTfZqYzhGRr/Dex-C4-Draft?type=design&node-id=975-21917&mode=design&t=zd8vtA5mTGTw8SVI-0\n *\n * 1. fee precision swap_support.woofi_dex_precision+3,round off\n * 2. price precision = abs(woofi_dex_precision - 5),cut off\n * 3. orderly deposit fee = $0\n * 4. deposit pop-ups: don't show token when fee is 0.\n * e.g. dst gas fee = 0 ETH, swap fee = 0.04 USDC, it will show $0.04 ( 0.04 USDC )\n * */\nconst woofiDexDepositorAbi = [\n { inputs: [], stateMutability: \"nonpayable\", type: \"constructor\" },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: \"uint8\", name: \"version\", type: \"uint8\" },\n ],\n name: \"Initialized\",\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: \"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: \"sender\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"address\",\n name: \"fromToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"fromAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"toToken\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minToAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"toAmount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"accountId\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"brokerHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"tokenHash\",\n type: \"bytes32\",\n },\n {\n indexed: false,\n internalType: \"uint128\",\n name: \"tokenAmount\",\n type: \"uint128\",\n },\n ],\n name: \"WOOFiDexSwap\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"NATIVE_PLACEHOLDER\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"stuckToken\", type: \"address\" }],\n name: \"inCaseTokenGotStuck\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"orderlyFeeToggle\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\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: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\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: [{ internalType: \"bool\", name: \"_orderlyFeeToggle\", type: \"bool\" }],\n name: \"setOrderlyFeeToggle\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"token\", type: \"address\" },\n { internalType: \"address\", name: \"woofiDexVault\", type: \"address\" },\n ],\n name: \"setWOOFiDexVault\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_wooRouter\", type: \"address\" }],\n name: \"setWooRouter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address payable\", name: \"to\", type: \"address\" },\n {\n components: [\n { internalType: \"address\", name: \"fromToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"fromAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"toToken\", type: \"address\" },\n { internalType: \"uint256\", name: \"minToAmount\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"orderlyNativeFees\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct IWOOFiDexDepositor.Infos\",\n name: \"infos\",\n type: \"tuple\",\n },\n {\n components: [\n { internalType: \"bytes32\", name: \"accountId\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"brokerHash\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"tokenHash\", type: \"bytes32\" },\n ],\n internalType: \"struct IWOOFiDexDepositor.VaultDeposit\",\n name: \"vaultDeposit\",\n type: \"tuple\",\n },\n ],\n name: \"swap\",\n outputs: [],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\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 name: \"wooRouter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"woofiDexVaults\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n { stateMutability: \"payable\", type: \"receive\" },\n];\n\n/** @hidden */\nexport const useSwap = (): any => {\n // exec swap contract;\n const [loading, { setTrue: start, setFalse: stop }] = useBoolean(false);\n const account = useAccountInstance();\n const { configStore } = useContext(OrderlyContext);\n\n const [status, setStatus] = useState<WS_WalletStatusEnum>(\n WS_WalletStatusEnum.NO\n );\n\n const txHash = useRef<string | undefined>();\n const ee = useEventEmitter();\n\n //TODO: useWalletSubscription\n // useWalletSubscription({\n // onMessage: (message) => {\n // const { side, transStatus, trxId } = message;\n\n // if (side === \"DEPOSIT\" && trxId === txHash.current) {\n // setStatus(transStatus);\n // }\n // },\n // });\n\n useEffect(() => {\n const handler = (data: any) => {\n const { side, transStatus, trxId } = data;\n\n if (side === \"DEPOSIT\" && trxId === txHash.current) {\n setStatus(transStatus);\n }\n };\n ee.on(\"wallet:changed\", handler);\n\n return () => {\n ee.off(\"wallet:changed\", handler);\n };\n }, [txHash.current]);\n\n const dstValutDeposit = useCallback(() => {\n const brokerId = configStore.get<string>(\"brokerId\");\n return {\n accountId: account.accountIdHashStr,\n brokerHash: utils.parseBrokerHash(brokerId),\n tokenHash: utils.parseTokenHash(\"USDC\"),\n };\n }, [account]);\n\n const swap = useCallback(\n async (\n woofiDexDepositorAdress: string,\n inputs: {\n fromToken: string;\n fromAmount: string;\n toToken: string;\n minToAmount: string;\n orderlyNativeFees: bigint;\n },\n config: { dst: any; src: any }\n ) => {\n if (!account.walletClient) {\n throw new Error(\"walletClient is undefined\");\n }\n\n if (!account.address) {\n throw new Error(\"account.address is undefined\");\n }\n\n if (loading) return;\n start();\n\n const txPayload = {\n from: account.address,\n to: woofiDexDepositorAdress,\n data: [account.address, inputs, dstValutDeposit()],\n value: isNativeTokenChecker(inputs.fromToken)\n ? BigInt(inputs.fromAmount) + inputs.orderlyNativeFees\n : inputs.orderlyNativeFees,\n };\n\n try {\n const result = await account.walletClient.sendTransaction(\n woofiDexDepositorAdress,\n \"swap\",\n txPayload,\n {\n abi: woofiDexDepositorAbi,\n }\n );\n\n stop();\n\n txHash.current = result.hash;\n\n // @ts-ignore\n return pick([\"from\", \"to\", \"hash\", \"value\"], result);\n } catch (e: any) {\n throw new Error(e.errorCode);\n }\n },\n [loading, account]\n );\n\n return {\n swap,\n loading,\n status,\n };\n};\n"]}