@orderly.network/hooks 0.0.52 → 0.0.53

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/useQuery.ts","../src/orderlyContext.ts","../src/utils/fetcher.ts","../src/useMutation.ts","../src/useAccountInstance.ts","../src/usePrivateQuery.ts","../src/middleware/signatureMiddleware.ts","../src/useAccount.ts","../src/useTradingView.ts","../src/usePrivateObserve.ts","../src/useTopicObserve.ts","../src/useAppState.ts","../src/usePreloadData.ts","../src/useEventEmitter.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/useRunOnce.ts","../src/index.ts","../src/provider/dataProvider.tsx","../src/useWS.ts","../src/useConfig.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/utils/parseHolding.ts","../src/orderly/useCollateral.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useFetures.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useTokenInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useLeverage.tsx","../src/orderly/useFundingRate.ts","../src/usePrivateInfiniteQuery.ts","../src/orderly/useOrderStream.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useBalance.ts","../src/orderly/usePrivateDataObserver.ts","../src/orderly/useExecutionReport.ts","../src/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts"],"names":["useContext","account","fetcher","data","useSWR","SimpleDI","useEffect","useState","useConstant","useCallback","default","React","createContext","Account","AccountStatusEnum","useMemo","useRef","useSWRSubscription","Decimal","index","depth","OrderType","getPrecisionByNumber","_a","totalCollateral","totalValue","totalUnrealizedROI","pathOr","zero","mutate","usdc","positions","positionsPath","order","sortedData","get","OrderStatus","symbol","balance","allowance","item"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useContext } from \"react\";\nimport useSWR, { SWRResponse } from \"swr\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\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 } = useContext(OrderlyContext);\n const { formatter, ...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 OrderlyProvider to your app\");\n }\n\n // query = Array.isArray(query) ? [...query,] : [query];\n\n // @ts-ignore\n return useSWR<T>(\n // `${apiBaseUrl}${query}`,\n query,\n (url, init) =>\n fetcher(url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`, init, {\n formatter,\n }),\n swrOptions\n );\n};\n","import { createContext } from \"react\";\n\nimport { type ConfigStore, type OrderlyKeyStore } from \"@orderly.network/core\";\nimport { IContract, type getWalletAdapterFunc } from \"@orderly.network/core\";\n\nexport interface OrderlyAppConfig {\n logoUrl: string;\n theme: any;\n}\n\nexport type AppStateErrors = {\n ChainNetworkNotSupport: boolean;\n IpNotSupport: boolean;\n NetworkError: boolean;\n};\nexport interface OrderlyContextState extends OrderlyAppConfig {\n // coin cion generator\n\n // ws: WebSocketAdpater;\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n apiBaseUrl: string;\n klineDataUrl: string;\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n // walletAdapter: { new (options: any): WalletAdapter };\n getWalletAdapter: getWalletAdapterFunc;\n contractManager: IContract;\n networkId: string;\n brokerId: string;\n\n onWalletConnect?: () => Promise<any>;\n onWalletDisconnect?: () => Promise<any>;\n onSetChain?: (chainId: number) => Promise<any>;\n // account: Account;\n\n ready: boolean;\n\n onAppTestChange?: (name: string) => void;\n\n errors: AppStateErrors;\n}\n\nexport const OrderlyContext = createContext<OrderlyContextState>({\n // configStore: new MemoryConfigStore(),\n} as OrderlyContextState);\n\nexport const OrderlyProvider = OrderlyContext.Provider;\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 useSWRMutation, { type SWRMutationConfiguration } from \"swr/mutation\";\n\nimport { mutate } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useContext } from \"react\";\n// import { SimpleDI, Account } from \"@orderly.network/core\";\nimport { useAccountInstance } from \"./useAccountInstance\";\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 // console.log(\"muation fetcher\", url, options);\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): [any, any] => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n let fullUrl = url;\n if (!url.startsWith(\"http\")) {\n fullUrl = `${apiBaseUrl}${url}`;\n }\n\n // let account = SimpleDI.get<Account>(\"account\");\n const account = useAccountInstance();\n // sign message;\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 (data: any, params?: any): 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 // console.log(\"payload\", payload);\n\n const signature = await signer.sign(payload);\n\n return trigger({\n data,\n params,\n method,\n signature: {\n ...signature,\n \"orderly-account-id\": account.accountId,\n },\n });\n };\n\n return [\n mutation,\n {\n data,\n error,\n reset,\n isMutating,\n },\n ];\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, contractManager, 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 contractManager,\n getWalletAdapter\n // walletAdapter\n );\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n return account;\n};\n","\"use client\";\n\nimport useSWR, { SWRConfiguration, SWRResponse } from \"swr\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\n\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\n// const fetcher = (url: string, init: RequestInit) => get(url, init);\n/**\n * usePrivateQuery\n * @description for private api\n * @param query\n * @param options\n */\nexport const usePrivateQuery = <T>(\n query: string,\n // query: Parameters<typeof useSWR>[\"0\"],\n options?: useQueryOptions<T>\n): SWRResponse<T> => {\n const { formatter, ...swrOptions } = options || {};\n const account = useAccount();\n // check the query is public api\n\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 // query,\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [signatureMiddleware, ...middleware],\n onError: (err) => {\n console.log(\"usePrivateQuery error\", err);\n },\n }\n );\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { MessageFactor, getMockSigner } from \"@orderly.network/core\";\n\nimport { SimpleDI, Account } from \"@orderly.network/core\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n // const { account } = useAccountInstance();\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n let url = Array.isArray(args) ? args[0] : args;\n // console.log(\"signature middleware::::::::\", key, url);\n\n let account = SimpleDI.get<Account>(\"account\");\n let fullUrl = `${apiBaseUrl}${url}`;\n\n // console.log(\"signature middleware account::::::::\", account);\n const signer = account.signer;\n // const signer = getMockSigner();\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 useConstant from \"use-constant\";\nimport { Account, AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useAccountInstance } from \"./useAccountInstance\";\n\nexport const useAccount = (): {\n account: Account;\n state: AccountState;\n login: (address: string) => void;\n createOrderlyKey: (remember: boolean) => Promise<string>;\n createAccount: () => Promise<string>;\n disconnect: () => Promise<void>;\n connect: () => Promise<any>;\n setChain: (chainId: number) => Promise<any>;\n // settlement: () => Promise<any>;\n // info: API.AccountInfo | undefined;\n} => {\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 state = useObservable<AccountState>(\n // () => account.state$,\n // account.stateValue\n // );\n\n const statusChangeHandler = (nextState: AccountState) => {\n // console.log(\"------------>>>>>> account nextState\", nextState);\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 const connect = useCallback(async () => {\n return onWalletConnect?.();\n }, [account]);\n\n // const settlement = useCallback(async () => {\n // return account.settlement();\n // }, [account]);\n\n const disconnect = async () => {\n // account.disconnect();\n return onWalletDisconnect?.();\n };\n\n const setChain = async (chainId: number) => {\n return onSetChain?.(chainId);\n };\n\n return {\n // account: state!,\n account,\n state,\n // info: {},\n login,\n createOrderlyKey,\n createAccount,\n disconnect,\n connect,\n setChain,\n // settlement,\n };\n};\n","export const useTradingView = () => {\n return {};\n};\n","import { useEffect, useState } from \"react\";\n\nexport const usePrivateObserve = <T>() => {\n const [data, setData] = useState<T>();\n\n useEffect(() => {\n return () => {\n // unsubscribe\n };\n }, []);\n\n return {\n data,\n };\n};\n","import { useEffect, useState } from \"react\";\n\nexport const useTopicObserve = <T>(topic: string) => {\n const [data, setData] = useState<T>();\n\n useEffect(() => {\n return () => {\n // unsubscribe\n };\n }, []);\n\n return {\n data,\n };\n};\n","import { ExchangeStatusEnum, SystemStateEnum } from \"@orderly.network/types\";\n\nimport { getAppState } from \"./services/appState\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\n// app system State , loading, dataError,netError,\n// platform state\nexport const useAppState = () => {\n const { errors, ready } = useContext(OrderlyContext);\n\n return {\n errors,\n ready,\n };\n};\n","import { useContext } from \"react\";\nimport { OrderlyContext, useQuery, useSWR } from \".\";\n\nexport const usePreLoadData = (onSuccess: (name: string) => void) => {\n // const { onAppTestChange } = useContext(OrderlyContext);\n useSWR(\n \"https://fi-api.woo.org/swap_support\",\n (url) => fetch(url).then((res) => res.json()),\n {\n revalidateOnFocus: false,\n // suspense: true,\n onSuccess: (data, key, config) => {\n onSuccess(\"chains_fetch\");\n },\n }\n );\n // useQuery(\"\");\n};\n","import useConstant from \"use-constant\";\nimport { EventEmitter, SimpleDI } from \"@orderly.network/core\";\n\nexport const useEventEmitter = (channel?: string) => {\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 console.log(\"parsing error on\", { value });\n return undefined;\n }\n}\n","// https://usehooks-ts.com/react-hook/use-local-storage\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\n// declare global {\n// interface WindowEventMap {\n// 'local-storage': CustomEvent\n// }\n// }\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>;\n\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, any] {\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\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n return [storedValue, setValue];\n}\n","import React, { useEffect, useRef } from \"react\";\n\nexport type useRunOnceProps = {\n fn: () => any;\n sessionKey?: string;\n};\n\nexport const useRunOnce: React.FC<useRunOnceProps> = ({ fn, sessionKey }) => {\n const triggered = useRef<boolean>(false);\n\n useEffect(() => {\n const hasBeenTriggered = sessionKey\n ? sessionStorage.getItem(sessionKey)\n : triggered.current;\n\n if (!hasBeenTriggered) {\n fn();\n triggered.current = true;\n\n if (sessionKey) {\n sessionStorage.setItem(sessionKey, \"true\");\n }\n }\n }, [fn, sessionKey]);\n\n return null;\n};\n","export { useQuery } from \"./useQuery\";\nexport { useMutation } from \"./useMutation\";\nexport { usePrivateQuery } from \"./usePrivateQuery\";\n\nexport { useTradingView } from \"./useTradingView\";\n\nexport { usePrivateObserve } from \"./usePrivateObserve\";\nexport { useTopicObserve } from \"./useTopicObserve\";\n// export { useConfig } from \"./useConfig\";\n\nexport { useAccount } from \"./useAccount\";\nexport { useAccountInstance } from \"./useAccountInstance\";\nexport { useAppState } from \"./useAppState\";\n\nexport { usePreLoadData } from \"./usePreloadData\";\n\nexport { useEventEmitter } from \"./useEventEmitter\";\n\nexport { useSessionStorage } from \"./useSessionStorage\";\nexport { useLocalStorage } from \"./useLocalStorage\";\nexport { useRunOnce } from \"./useRunOnce\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { DataSourceProvider } from \"./provider/dataProvider\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration, SWRConfig } from \"swr\";\n\nexport { useSWR, SWRConfig, type SWRConfiguration };\n\nexport * as apis from \"./apis\";\nexport * from \"./orderly/orderlyHooks\";\n","import { SimpleDI } from \"@orderly.network/core\";\nimport React, {\n FC,\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n} from \"react\";\nimport { SWRConfig } from \"swr\";\nimport useConstant from \"use-constant\";\nimport { DataSource } from \"../services/dataSource\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { getWebSocketClient } from \"../utils/getWebSocketClient\";\nimport { get } from \"@orderly.network/net\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\ninterface DataSourceContextState {\n // dataSource: DataSource;\n // fetcher: typeof fetch;\n}\n\nexport const DataSourceContext = createContext({} as DataSourceContextState);\n\nexport const DataSourceProvider: FC<PropsWithChildren> = (props) => {\n console.log(\"render DataSourceProvider\");\n const account = useAccountInstance();\n\n const dataSource = useConstant(() => {\n // let dataSource = SimpleDI.get<DataSource>(DataSource.instanceName);\n // if (!dataSource) {\n // const ws = getWebSocketClient(account);\n // dataSource = new DataSource(account, ws);\n // SimpleDI.registerByName(DataSource.instanceName, dataSource);\n // }\n // return dataSource;\n });\n\n return (\n <DataSourceContext.Provider value={{}}>\n {/* <SWRConfig\n value={{\n provider: () => dataSource.swrCacheProvider,\n }}\n > */}\n {props.children}\n {/* </SWRConfig> */}\n </DataSourceContext.Provider>\n );\n};\n","import { Account, SimpleDI } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport { useContext, useEffect } from \"react\";\nimport useConstant from \"use-constant\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { AccountState } from \"@orderly.network/core\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\n\nexport const useWS = () => {\n const { state } = useAccount();\n const { configStore } = useContext(OrderlyContext);\n const ws = useConstant(() => {\n // return getWebSocketClient(account);\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 // accountId: \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\",\n networkId: \"testnet\",\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 // open the pirvate websocket when user login\n account.on(\"change:status\", (nextState: AccountState) => {\n // console.log(\"------------>>>>>> account nextState\", nextState);\n if (\n nextState.status === AccountStatusEnum.EnableTrading &&\n nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n }\n });\n\n SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n\n return websocketClient;\n });\n\n // auto open private when user login;\n\n return ws;\n};\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport const useConfig = () => {\n const { configStore } = useContext(OrderlyContext);\n\n // console.log(\"##############\", configStore);\n\n return configStore;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\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\";\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 // console.log(\"depth:::::\", depth);\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n // console.log(\"priceKey:::\", priceKey);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity]);\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 const asks = reduceItems(depth, level, data.asks, true).reverse();\n\n const bids = reduceItems(depth, level, data.bids);\n return {\n asks:\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks,\n bids:\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n // console.log(\"mergeItems\", data, update);\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 // console.log(\"item\", item);\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n // console.log(index);\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\n continue;\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n return {\n asks: mergeItems(data.asks, update.asks).sort(asksSortFn),\n bids: mergeItems(data.bids, update.bids).sort(bidsSortFn),\n };\n};\n\nexport type OrderbookOptions = {\n level?: number;\n};\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 = { asks: [], bids: [] },\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new Error(\"useOrderbookStream requires a symbol\");\n }\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 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 // console.log(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 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 // console.log(\"orderbook request message\", message);\n if (!!message) {\n const reduceOrderbookData = reduceOrderbook(depth, level, message);\n setRequestData(reduceOrderbookData);\n setData(reduceOrderbookData);\n }\n setIsLoading(false);\n },\n }\n );\n\n return () => {\n setRequestData(null);\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\n const subscription = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n onMessage: (message: any) => {\n // console.log(\"orderbook update message\", message);\n\n setData((data) => {\n const mergedData =\n !message.asks && !message.bids\n ? data\n : mergeOrderbook(data, message);\n\n const reducedData = reduceOrderbook(depth, level, mergedData);\n return reducedData;\n });\n },\n }\n );\n\n return () => {\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 // console.log(\"Orderbook depth has changed:\", depth);\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 return [\n {\n asks: data.asks.slice(-level),\n bids: data.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 useSWRSubscription from \"swr/subscription\";\n\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\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 const ws = useWS();\n\n const { data: ticker } = useSWRSubscription(\n `${symbol}@ticker`,\n (key, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n `${symbol}@ticker`,\n {\n onMessage: (message: any) => {\n next(null, message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n // console.log(\"error\", error);\n // },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\n unsubscribe?.();\n };\n }\n );\n\n const value = useMemo(() => {\n // console.log(\"ticker\", ticker, info);\n if (!info) return null;\n if (!ticker) return info;\n const config: any = { ...info };\n if (ticker.close !== undefined) {\n config[\"24h_close\"] = ticker.close;\n }\n if (ticker.open !== undefined) {\n config[\"24h_open\"] = ticker.open;\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 return config;\n }, [info, ticker]);\n\n // return useQuery(`/public/futures/${symbol}`);\n return value;\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n // console.log(\"markprice message\", message);\n next(null, message.price);\n },\n });\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe useMarkPrice !!!!!!!\");\n unsubscribe?.();\n };\n });\n};\n","type objectDepth = 1 | 2;\n\ntype propertyType<T, K, F> = T extends 1 ? K : F;\n\n// type Getter = {\n// [P in propertyType<typeof depth, K, string>]: (\n// key: K,\n// defaultValue: any\n// ) => any;\n// }\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 // console.log(\"getter\", property, receiver);\n // if (property === \"isLoading\") return isLoading;\n if (depth === 1) {\n // return data[property];\n return (defaultValue: any) => {\n if (!target) return defaultValue;\n return target[property] ?? defaultValue;\n };\n }\n return (key: K, defaultValue: any) => {\n // console.log(\"getter\", property, key, defaultValue, data);\n if (key) {\n return (target as any)[property]?.[key] ?? defaultValue;\n } else {\n return target[property];\n }\n\n // return data[value][property];\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);\n};\n","import { useMutation } from \"../useMutation\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useTokenInfo } from \"./useTokenInfo\";\n\nimport { compose, head } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { OrderFactory, OrderFormEntity } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useSWRConfig } from \"swr\";\nimport { unstable_serialize } from \"swr/infinite\";\n\nexport interface OrderEntryReturn {\n onSubmit: (values: OrderEntity) => Promise<any>;\n // setValue: (field: OrderEntityKey, value: any) => void;\n maxQty: number;\n freeCollateral: number;\n // values: OrderEntity;\n markPrice: number;\n // errors: Partial<Record<keyof OrderEntity, string>>;\n\n symbolConfig: API.SymbolExt;\n\n //\n // onFocus?: (field: keyof OrderEntity) => void;\n // onBlur?: (field: keyof OrderEntity) => void;\n helper: {\n calculate: (values: any, field: string, value: any) => any;\n validator: (values: any) => any;\n };\n}\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\n/**\n * 创建订单\n * @param symbol\n * @returns\n */\nexport const useOrderEntry = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false,\n // initialValue: Partial<OrderEntity> = {},\n options?: UseOrderEntryOptions\n): OrderEntryReturn => {\n // const { mutate } = useSWRConfig();\n const [doCreateOrder] = useMutation<OrderEntity, any>(\"/v1/order\");\n\n const { freeCollateral } = useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\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 // console.log(\"orderExtraValues\", orderExtraValues);\n\n // 订阅maskPrice\n // const ws = useWebSocketClient();\n\n const { data: markPrice } = useMarkPrice(symbol);\n\n const maxQty = useMaxQty(\n symbol,\n side,\n // orderExtraValues.reduce_only\n reduceOnly\n );\n\n /**\n * 提交订单,校验数据\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (\n !values ||\n typeof values.order_type === \"undefined\" ||\n (values.order_type !== OrderType.MARKET &&\n values.order_type !== OrderType.LIMIT)\n ) {\n throw new Error(\"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 Error(\"orderCreator is null\"));\n }\n\n return orderCreator\n ?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then(() => {\n if (!orderCreator) {\n throw new Error(\"orderCreator is null\");\n }\n\n if (!symbol) {\n throw new Error(\"symbol is null\");\n }\n\n const data = orderCreator.create(values!);\n\n return doCreateOrder({\n ...data,\n symbol,\n });\n });\n };\n\n const calculate = useCallback(\n (values: any, field: string, value: any) => {\n console.log(\"calculate\", values, field, value, markPrice);\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;\n },\n [markPrice]\n );\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 }) as any;\n };\n\n // validator\n // helper: validator,formater,calculate\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n helper: {\n calculate,\n validator,\n },\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 OrderEntity,\n // to update field\n string,\n any,\n number,\n {\n baseDP: number;\n quoteDP: number;\n }\n];\n\ntype orderEntryInputHandle = (inputs: orderEntryInputs) => orderEntryInputs;\n\nconst needNumberOnlyFields = [\"order_quantity\", \"order_price\", \"total\"];\n\nexport function baseInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n let [values, input, value, markPrice, config] = inputs;\n\n if (needNumberOnlyFields.includes(input)) {\n //清理千分位符\n value = value.toString();\n value = value.replace(/,/g, \"\");\n value = value.replace(/[^\\d.]/g, \"\"); //清除“数字”和“.”以外的字符\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 * 数字精度处理\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:格式化只处理千分位等等问题\n\n // if (!!values.order_quantity) {\n // console.log(\"baseTick //////\", baseTick);\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 * 价格输入处理\n * @param inputs\n * @returns\n */\nfunction priceInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n const [values, input, value, markPrice, config] = inputs;\n\n // console.log(\"priceInputHandle\", inputs);\n\n if (value === \"\") {\n return [{ ...values, total: \"\" }, input, value, markPrice, config];\n }\n\n // 输入价格的时候, total也需要联动\n const price = new Decimal(value);\n const priceDP = price.dp();\n\n // console.log(\"priceInputHandle\", priceDP, config.quoteDP);\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) {\n return [values, input, value, markPrice, config];\n }\n\n const total = price.mul(values.order_quantity);\n\n // const quantityDP = total.dp();\n return [\n {\n ...values,\n total: total.todp(2).toString(),\n },\n input,\n value,\n markPrice,\n config,\n ];\n}\n\n/**\n * 数量输入处理\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 //// 检查长度进行精度处理,用处理后的值重新计算\n\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 (values.order_type === OrderType.MARKET) {\n const price = markPrice;\n values.total = quantity.mul(price).todp(2).toNumber();\n }\n\n if (values.order_type === OrderType.LIMIT) {\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 * 总价输入处理\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 (values.order_type === OrderType.LIMIT && !!values.order_price) {\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 * 其他输入处理\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 { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/futures\";\n\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { OrderEntity } from \"@orderly.network/types\";\n\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nimport { useEventEmitter } from \"../useEventEmitter\";\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\n) => {\n const symbolInfo = useSymbolsInfo();\n\n const ee = useEventEmitter();\n\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // console.log(\"account info: \", accountInfo);\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: updatePositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 100,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {\n console.log(\"usePositionStream error\", err);\n },\n });\n\n // console.log(\"=========== positions ============\", data?.rows);\n\n const { data: markPrices } = useMarkPricesStream();\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 price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n // console.log(\"info\", info(\"base_mmr\"));\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: price,\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 };\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 }, [data?.rows, symbolInfo, accountInfo, markPrices, symbol, holding]);\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 return 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[info(\"base\")] 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,\n };\n });\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: formatedPositions?.[1] ?? {},\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: () => {},\n },\n ];\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 return createGetter<API.FundingRate>(data);\n};\n","import useSWRSubscription from \"swr/subscription\";\n\nimport { useWS } from \"../useWS\";\n\nexport const useMarkPricesStream = () => {\n const ws = useWS();\n // const markPrice$ = useMarkPricesSubject();\n // const [isLoading, setIsLoading] = useState(true);\n\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 console.log(\"error\", error);\n },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\n unsubscribe?.();\n };\n });\n\n // return [data, { isLoading }];\n};\n","import { API } from \"@orderly.network/types\";\n\ntype NonUSDCHolding = {\n holding: number;\n markPrice: number;\n //保證金替代率 暂时默认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 { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport {\n pathOr_unsettledPnLPathOr,\n usePositionStream,\n} from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/futures\";\n// import { useOrderStream } from \"./useOrderStream\";\nimport { type WSMessage, type API } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMemo } from \"react\";\nimport { useBalance } from \"./useBalance\";\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { totalUnsettlementPnLPath } from \"../utils/fn\";\nimport { useHoldingStream } from \"./useHoldingStream\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n availableBalance: number;\n unsettledPnL: number;\n};\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\nconst totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\n/**\n * 用户保证金\n * @returns\n */\n\ntype Options = {\n dp: number;\n};\nexport const useCollateral = (\n options: Options = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const positions = usePositionStream();\n\n // const orders = useOrderStream();\n const { data: orders } = usePrivateQuery<API.Order[]>(\n `/v1/orders?status=NEW`\n );\n // const { info: accountInfo } = useAccount();\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 { 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: orders ?? [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo,\n });\n }, [positions, orders, 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, 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};\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useEffect, useMemo } from \"react\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { prop } from \"ramda\";\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 { useMemo } from \"react\";\nimport { type API, OrderSide, type WSMessage } from \"@orderly.network/types\";\n\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { account } from \"@orderly.network/futures\";\nimport { useCollateral } from \"./useCollateral\";\n\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\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 { data: positions = [] } =\n // usePrivateQuery<API.PositionInfo>(`/positions`);\n\n const { data: orders } = usePrivateQuery<API.Order[]>(\n `/v1/orders?status=NEW`\n );\n\n // const { info: accountInfo } = useAccount();\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 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 // 当前symbol的仓位\n\n // 当前symbol的买单\n const buyOrdersQty = account.getQtyFromOrdersBySide(\n orders,\n symbol,\n OrderSide.BUY\n );\n // 当前symbol的卖单\n const sellOrdersQty = account.getQtyFromOrdersBySide(\n orders,\n symbol,\n OrderSide.SELL\n );\n\n const otherPositions = positions.filter(\n (item: API.Position) => item.symbol !== symbol\n );\n\n const otherOrders = orders.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[getSymbolInfo(\"base\")],\n });\n }, [\n orders,\n positionsData,\n markPrices,\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n reduceOnly,\n ]);\n\n return maxQty;\n};\n","import { OrderType, type API, OrderEntity } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order } from \"@orderly.network/futures\";\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) => OrderEntity;\n validate: (\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ) => Promise<VerifyResult>;\n}\n\nconst { maxPrice, minPrice } = order;\n\nexport abstract class BaseOrderCreator implements OrderCreator {\n abstract create(values: OrderEntity): OrderEntity;\n abstract validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult>;\n\n baseOrder(data: OrderEntity): OrderEntity {\n const order: any = {\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 };\n\n if (data.visible_quantity === 0) {\n order.visible_quantity = data.visible_quantity;\n }\n\n return order;\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 // console.log(\"=======>>>>> baseValidate\", values, configs);\n const { order_quantity, total } = values;\n\n if (!order_quantity) {\n errors.order_quantity = {\n type: \"required\",\n message: \"quantity is required\",\n };\n } else {\n //// 需要用MaxQty+base_max, base_min来判断\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 should be greater or equal than ${new Decimal(\n quote_min\n ).todp(quote_dp)}`,\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\nexport class LimitOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n }\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n\n const { order_price } = 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 } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n\n if (price.lt(minPriceNumber)) {\n errors.order_price = {\n type: \"min\",\n message: `price must be greater than ${new Decimal(\n minPriceNumber\n ).todp(symbol.quote_dp)}`,\n };\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = {\n type: \"max\",\n message: `price must be less than ${new Decimal(\n maxPriceNumber\n ).todp(symbol.quote_dp)}`,\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\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 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 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 default:\n return new GeneralOrderCreator();\n }\n }\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\n\ninterface MarketInfo {}\n\n// api: /public/futures\nexport const useFetures = () => {\n const { data, isLoading, error } = useQuery<MarketInfo[]>(\n `/v1/public/futures`,\n {\n revalidateOnFocus: false,\n }\n );\n\n const [sortedData, setSortedData] = useState(data);\n\n const ws = useWS();\n\n useEffect(() => {\n // const sub = ws\n // .observe<WSMessage.Ticker>(`tickers`)\n // .subscribe((value: any) => {\n // console.log(\"useTickers\", value);\n // // setData(value);\n // });\n // return () => {\n // sub.unsubscribe();\n // };\n }, []);\n\n useEffect(() => {\n if (data) {\n const sortedData = data.sort((a, b) => {\n return 0;\n });\n setSortedData(sortedData);\n }\n }, [data]);\n\n const sortBy = useCallback((key: string) => {}, [data]);\n\n const filterBy = useCallback((key: string) => {}, [data]);\n\n return {\n // ...data,\n data: sortedData,\n sortBy,\n filterBy,\n isLoading,\n error,\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\n\nexport const useTokenInfo = () => {\n const { data = {} } = useQuery<Record<string, API.TokenInfo>>(\n \"/v1/public/token\",\n {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n formatter(data: { rows: API.TokenInfo[] }) {\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\n obj[item.token] = item;\n }\n\n return obj;\n },\n }\n );\n\n return createGetter<API.TokenInfo>(data as any);\n};\n","import { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useMemo } from \"react\";\nimport { WSMessage } from \"@orderly.network/types\";\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 // const config = useSymbolsInfo();\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 // console.log(\"error\", error);\n // },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\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 return {\n ...item,\n [\"24h_close\"]: ticker.close,\n [\"24h_open\"]: ticker.open,\n [\"24h_volumn\"]: ticker.volume,\n change: 0,\n };\n }\n return item;\n });\n }, [futures, tickers]);\n\n // return listing;\n return { data: value };\n};\n","import { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport { prop } from \"ramda\";\n\nexport const useLeverage = () => {\n const { data, mutate } = usePrivateQuery(\"/v1/client/info\");\n const [update] = useMutation(\"/v1/client/leverage\");\n\n const updateLeverage = useCallback((data: any) => {\n return update(data).then((res: any) => {\n return mutate();\n // return res\n });\n }, []);\n\n return [prop(\"max_leverage\", data), { update: updateLeverage }];\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 { useContext } from \"react\";\n\nimport useSWRInfinite, {\n type SWRInfiniteKeyLoader,\n type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\n// import { apiPrefixMiddleware } from \"./middleware/apiPrefixMiddleware\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { get } from \"@orderly.network/net\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nconst fetcher = (url: string, init: RequestInit) => get(url, init);\n\nexport const usePrivateInfiniteQuery = (\n getKey: SWRInfiniteKeyLoader,\n options?: SWRInfiniteConfiguration\n) => {\n const account = useAccount();\n\n const middleware = Array.isArray(options?.use) ? options?.use ?? [] : [];\n\n const result = useSWRInfinite(\n (pageIndex: number, previousPageData) =>\n account.state.status >= AccountStatusEnum.EnableTrading\n ? getKey(pageIndex, previousPageData)\n : null,\n fetcher,\n {\n ...options,\n use: [signatureMiddleware, ...middleware],\n }\n );\n\n return result;\n};\n","import { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { type SWRInfiniteResponse } from \"swr/infinite\";\nimport { useCallback, useEffect, useMemo } from \"react\";\n\nimport { API, OrderSide } from \"@orderly.network/types\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMutation } from \"../useMutation\";\nimport { OrderEntity } from \"@orderly.network/types\";\nimport { useExecutionReport } from \"./orderlyHooks\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nexport interface UserOrdersReturn {\n data: any[];\n loading: boolean;\n update: (order: any) => void;\n cancel: (order: any) => void;\n}\n\nexport enum OrderStatus {\n FILLED = \"FILLED\",\n PARTIAL_FILLED = \"PARTIAL_FILLED\",\n CANCELED = \"CANCELED\",\n NEW = \"NEW\",\n COMPLETED = \"COMPLETED\",\n}\n\nexport const useOrderStream = ({\n status,\n symbol,\n side,\n size = 100,\n}: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n} = {}) => {\n // const markPrices$ = useMarkPricesSubject();\n\n const ee = useEventEmitter();\n\n const { data: markPrices = {} } = useMarkPricesStream();\n const [doCancelOrder] = useMutation(\"/v1/order\", \"DELETE\");\n const [doUpdateOrder] = useMutation(\"/v1/order\", \"PUT\");\n\n const ordersResponse = usePrivateInfiniteQuery(\n (pageIndex: number, previousPageData) => {\n // TODO: 检查是否有下一页\n // if(previousPageData){\n //\n // const {meta} = previousPageData;\n // }\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n // [`status`, status],\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 initialSize: 1,\n onError: (err) => {\n console.error(\"fetch failed::::\", err);\n },\n }\n );\n\n // useExecutionReport();\n\n const orders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n\n // console.log(\"orders:::\", markPrices);\n\n return ordersResponse.data?.flat().map((item) => {\n return {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n });\n }, [ordersResponse.data, markPrices]);\n\n /// Hack: 为了让订单列表能够及时更新,这里需要订阅订单的变化, 后续优化\n useEffect(() => {\n const handler = () => ordersResponse.mutate();\n ee.on(\"orders:changed\", handler);\n\n return () => {\n ee.off(\"orders:changed\", handler);\n };\n }, []);\n\n /**\n * 取消所有订单\n */\n const cancelAllOrders = useCallback(() => {}, [ordersResponse.data]);\n\n /**\n * 更新单个订单\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n // console.log(\"updateOrder\", order, orderId);\n return doUpdateOrder({ ...order, order_id: orderId });\n }, []);\n\n /**\n * 取消单个订单\n */\n const cancelOrder = useCallback((orderId: string, symbol?: string) => {\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n }).then((res: any) => {\n if (res.success) {\n return ordersResponse.mutate().then(() => {\n return res;\n });\n } else {\n throw new Error(res.message);\n }\n });\n }, []);\n\n return [\n orders,\n {\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\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 const [prevSymbol, setPrevSymbol] = useState<string>(() => symbol);\n\n const { limit = 50 } = options;\n\n const ws = useWS();\n\n useEffect(() => {\n setIsLoading(true);\n setTrades(() => []);\n ws.onceSubscribe(\n {\n id: `${symbol}@trade`,\n event: \"request\",\n params: {\n type: \"trade\",\n symbol: symbol,\n limit,\n },\n },\n {\n onMessage: (data: any) => {\n setIsLoading(false);\n setTrades(() => data);\n },\n }\n );\n }, [symbol]);\n\n useEffect(() => {\n // if (trades.length <= 0) return;\n\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 // console.log(\"ws: trade topic\", data);\n setTrades((prev) => {\n const arr = [{ ...data, ts: Date.now() }, ...prev];\n // console.log(\"arr\", arr);\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 console.log(\"trades\", trades);\n\n return { data: trades, isLoading };\n};\n","import { useMemo } from \"react\";\nimport { account } from \"@orderly.network/futures\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\n\nexport const useMarginRatio = () => {\n const [{ rows }] = 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 return { marginRatio, currentLeverage };\n};\n","// interface\n\nimport { type API } from \"@orderly.network/types\";\nimport { useCallback, useMemo } from \"react\";\nimport useSWR, { SWRConfiguration, SWRResponse } from \"swr\";\n\ntype inputOptions = {\n filter?: (item: API.Chain) => boolean;\n pick?: \"dexs\" | \"network_infos\" | \"token_infos\";\n};\n\nexport const useChains = (\n networkId?: \"testnet\" | \"mainnet\",\n\n options: inputOptions & SWRConfiguration = {}\n) => {\n const { filter, pick, ...swrOptions } = options;\n\n const field = options?.pick;\n\n const { data } = useSWR<any>(\n \"https://fi-api.woo.org/swap_support\",\n (url) => fetch(url).then((res) => res.json()),\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n ...swrOptions,\n }\n );\n\n const chains = useMemo(() => {\n if (!data || !data.data) return data;\n\n let arr: API.Chain[] = [];\n\n Object.keys(data.data).forEach((key) => {\n const item = data.data[key];\n arr.push({\n ...item,\n name: key,\n });\n });\n\n if (networkId === \"mainnet\") {\n arr = arr.filter((item) => item.network_infos.mainnet);\n }\n\n if (networkId === \"testnet\") {\n arr = arr.filter((item) => !item.network_infos.mainnet);\n }\n\n if (typeof options?.filter === \"function\") {\n arr = arr.filter(options.filter);\n }\n\n if (typeof field !== \"undefined\") {\n return arr.map((item) => {\n return item[field];\n });\n }\n\n return arr;\n }, [data, networkId, field, options]);\n\n const findByChainId = useCallback(\n (chainId: string) => {\n if (!data || !data.data) return undefined;\n\n return data.data[chainId];\n },\n [data]\n );\n\n return [chains, { findByChainId }];\n};\n","import { useEffect, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API, chainsMap } from \"@orderly.network/types\";\n// import { CHAINS } from \"../utils/chain\";\n\nexport const useChain = (\n token: string\n): {\n chains: API.Chain | null;\n isLoading: boolean;\n} => {\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 = chainsMap.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, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useHoldingStream } from \"./useHoldingStream\";\n\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useWS } from \"../useWS\";\nimport { useAccount } from \"../useAccount\";\nimport { useEventEmitter } from \"../useEventEmitter\";\n\nexport type WithdrawInputs = {\n amoutn: number;\n address: string;\n};\n\nexport const useWithdraw = () => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance } = useCollateral();\n\n // const withdrawQueue = useRef<number[]>([]);\n\n const withdraw = useCallback(\n (inputs: {\n chainId: number;\n token: string;\n amount: number;\n }): Promise<any> => {\n return account.assetsManager.withdraw(inputs).then((res: any) => {\n console.log(\"---------- withdraw -------\", res);\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 // // console.log(\"------- wallet -------\", data);\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 }, [usdc, unsettledPnL]);\n\n return { withdraw, isLoading, maxAmount, availableBalance, unsettledPnL };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n// import { Decimal } from \"@orderly.network/utils\";\n\nexport const useDeposit = () => {\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n // const depositQueue = useRef<string[]>([]);\n\n const fetchBalance = useCallback(async () => {\n const balance = await account.assetsManager.getBalance();\n\n // console.log(\"----- refresh balance -----\", balance);\n setBalance(() => balance);\n }, [state]);\n\n const fetchAllowance = useCallback(async () => {\n const allowance = await account.assetsManager.getAllowance();\n\n // console.log(\"----- refresh allowance -----\", allowance);\n setAllowance(() => allowance);\n return allowance;\n }, []);\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.EnableTrading) return;\n\n fetchBalance();\n\n fetchAllowance();\n }, [state]);\n\n const approve = useCallback(\n (amount: string | undefined) => {\n return account.assetsManager.approve(amount).then((result: any) => {\n if (typeof amount !== \"undefined\") {\n setAllowance((value) => new Decimal(value).add(amount).toString());\n }\n return result;\n });\n },\n [account, fetchAllowance]\n );\n\n const deposit = useCallback(\n (amount: string) => {\n return account.assetsManager.deposit(amount).then((res: any) => {\n console.log(\"----- deposit -----\", res);\n // depositQueue.current.push(res.hash);\n // return fetchAllowance().then(() => res);\n setAllowance((value) => new Decimal(value).sub(amount).toString());\n setBalance((value) => new Decimal(value).sub(amount).toString());\n return res;\n });\n },\n [account, fetchBalance, fetchAllowance]\n );\n\n return {\n balance,\n allowance,\n approve,\n deposit,\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 // console.log(\"------- wallet -------\", data);\n options?.onMessage?.(data);\n next(data);\n },\n }\n );\n\n return () => unsubscribe();\n });\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useBalance = () => {\n const ws = useWS();\n const { data } = useSWRSubscription(\"balance\", (_, { next }) => {\n const unsubscribe = ws.privateSubscribe(\"balance\", {\n onMessage: (data: any) => {\n console.log(data);\n },\n });\n return () => unsubscribe();\n });\n\n return data;\n};\n","import { useEffect } from \"react\";\n\nimport { useWS } from \"../useWS\";\nimport { useSWRConfig } from \"swr\";\nimport { API, OrderStatus, WSMessage } from \"@orderly.network/types\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useAccount } from \"../useAccount\";\n\nexport const usePrivateDataObserver = () => {\n const ws = useWS();\n const { mutate } = useSWRConfig();\n const ee = useEventEmitter();\n const { state } = useAccount();\n\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n const key = [\"/v1/orders?status=NEW\", state.accountId];\n // console.log(\"------ orders push -----------\", data);\n // console.log(cache);\n\n mutate(key, (orders: any) => {\n // console.log(orders);\n return Promise.resolve()\n .then(() => {\n if (!orders) {\n return orders;\n }\n if (data.status === OrderStatus.NEW) {\n return [\n {\n ...data,\n // average_executed_price:data.ava\n created_time: data.timestamp,\n order_id: data.orderId,\n // reduce_only\n },\n ...orders,\n ];\n }\n if (data.status === OrderStatus.CANCELLED) {\n return orders.filter(\n (order: any) => order.order_id !== data.orderId\n );\n }\n\n return orders;\n })\n .catch((error) => {\n console.log(\"error\", error, error.stack);\n });\n });\n\n ee.emit(\"orders:changed\");\n },\n });\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n useEffect(() => {\n console.log(\"subscribe: position: %s\", state.accountId);\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 mutate(key, (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 });\n return () => {\n console.log(\"unsubscribe: private subscription position\");\n unsubscribe?.();\n };\n }, [state.accountId]);\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useExecutionReport = () => {\n const ws = useWS();\n const { data } = useSWRSubscription(\"executionreport\", (_, { next }) => {\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n console.log(data);\n },\n });\n return () => unsubscribe();\n });\n\n return data;\n};\n","export { useInfo } from \"./useInfo\";\nexport { useToken } from \"./useToken\";\nexport { useFundingRateBySymbol } from \"./useFundingRateBySymbol\";\n// export { useFundingRate } from \"./useFundingRate\";\n\n//// mutation\n// export { useCreateOrder } from \"./useCreateOrder\";\n","import { useQuery } from \"../useQuery\";\n\nexport interface Info {\n // token name\n symbol: string;\n quote_min: number;\n quote_max: number;\n quote_tick: number;\n base_min: number;\n base_max: number;\n base_tick: number;\n min_notional: number;\n price_range: number;\n created_time: number;\n updated_time: number;\n}\n\n/**\n * useInfo\n * @returns\n */\nexport const useInfo = () => {\n return useQuery<Info[]>(\"/v1/public/info\", {\n // refreshInterval: 1000 * 60 * 60 * 24,\n });\n};\n","import { useQuery } from \"../useQuery\";\n\nexport interface Token {\n token: string;\n token_account_id: string;\n decimals: number;\n minimum_increment: number;\n}\n\n/**\n * useToken\n * @description get token info\n */\nexport const useToken = () => {\n return useQuery<Token[]>(\"/v1/public/token\");\n};\n","import { useQuery } from \"../useQuery\";\n\nexport interface FundingRate {\n symbol: string;\n est_funding_rate: number;\n est_funding_rate_timestamp: number;\n last_funding_rate: number;\n last_funding_rate_timestamp: number;\n next_funding_time: number;\n sum_unitary_funding: number;\n}\n\n/**\n * FundingRate\n * @param symbol\n */\nexport const useFundingRateBySymbol = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"symbol is required\");\n }\n return useQuery<FundingRate>(`/public/funding_rate/${symbol}`);\n};\n"]}
1
+ {"version":3,"sources":["../src/useQuery.ts","../src/orderlyContext.ts","../src/utils/fetcher.ts","../src/useMutation.ts","../src/useAccountInstance.ts","../src/usePrivateQuery.ts","../src/middleware/signatureMiddleware.ts","../src/useAccount.ts","../src/useTradingView.ts","../src/usePrivateObserve.ts","../src/useTopicObserve.ts","../src/useAppState.ts","../src/usePreloadData.ts","../src/useEventEmitter.ts","../src/useSessionStorage.ts","../src/utils/json.ts","../src/useLocalStorage.ts","../src/useRunOnce.ts","../src/index.ts","../src/provider/dataProvider.tsx","../src/useWS.ts","../src/useConfig.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useOrderEntry.ts","../src/utils/orderEntryHelper.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/utils/parseHolding.ts","../src/orderly/useCollateral.ts","../src/orderly/useHoldingStream.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useFetures.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useTokenInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useLeverage.tsx","../src/orderly/useFundingRate.ts","../src/usePrivateInfiniteQuery.ts","../src/orderly/useOrderStream.ts","../src/orderly/useMarketTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/orderly/useChain.ts","../src/orderly/useWithdraw.ts","../src/orderly/useDeposit.ts","../src/orderly/useWalletSubscription.ts","../src/orderly/useBalance.ts","../src/orderly/usePrivateDataObserver.ts","../src/orderly/useExecutionReport.ts","../src/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts"],"names":["useContext","account","fetcher","data","useSWR","SimpleDI","useEffect","useState","useConstant","useCallback","default","React","createContext","Account","AccountStatusEnum","useMemo","useRef","useSWRSubscription","Decimal","index","depth","OrderType","getPrecisionByNumber","_a","totalCollateral","totalValue","totalUnrealizedROI","pathOr","zero","mutate","usdc","positions","positionsPath","order","sortedData","get","OrderStatus","symbol","balance","allowance","item"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useContext } from \"react\";\nimport useSWR, { SWRResponse } from \"swr\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\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 } = useContext(OrderlyContext);\n const { formatter, ...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 OrderlyProvider to your app\");\n }\n\n // query = Array.isArray(query) ? [...query,] : [query];\n\n // @ts-ignore\n return useSWR<T>(\n // `${apiBaseUrl}${query}`,\n query,\n (url, init) =>\n fetcher(url.startsWith(\"http\") ? url : `${apiBaseUrl}${url}`, init, {\n formatter,\n }),\n swrOptions\n );\n};\n","import { createContext } from \"react\";\n\nimport { type ConfigStore, type OrderlyKeyStore } from \"@orderly.network/core\";\nimport { IContract, type getWalletAdapterFunc } from \"@orderly.network/core\";\n\nexport interface OrderlyAppConfig {\n logoUrl: string;\n theme: any;\n}\n\nexport type AppStateErrors = {\n ChainNetworkNotSupport: boolean;\n IpNotSupport: boolean;\n NetworkError: boolean;\n};\nexport interface OrderlyContextState extends OrderlyAppConfig {\n // coin cion generator\n\n // ws: WebSocketAdpater;\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n apiBaseUrl: string;\n klineDataUrl: string;\n configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n // walletAdapter: { new (options: any): WalletAdapter };\n getWalletAdapter: getWalletAdapterFunc;\n contractManager: IContract;\n networkId: string;\n brokerId: string;\n\n onWalletConnect?: () => Promise<any>;\n onWalletDisconnect?: () => Promise<any>;\n onSetChain?: (chainId: number) => Promise<any>;\n // account: Account;\n\n ready: boolean;\n\n onAppTestChange?: (name: string) => void;\n\n errors: AppStateErrors;\n}\n\nexport const OrderlyContext = createContext<OrderlyContextState>({\n // configStore: new MemoryConfigStore(),\n} as OrderlyContextState);\n\nexport const OrderlyProvider = OrderlyContext.Provider;\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 useSWRMutation, { type SWRMutationConfiguration } from \"swr/mutation\";\n\nimport { mutate } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useContext } from \"react\";\n// import { SimpleDI, Account } from \"@orderly.network/core\";\nimport { useAccountInstance } from \"./useAccountInstance\";\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 // console.log(\"muation fetcher\", url, options);\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): [any, any] => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n let fullUrl = url;\n if (!url.startsWith(\"http\")) {\n fullUrl = `${apiBaseUrl}${url}`;\n }\n\n // let account = SimpleDI.get<Account>(\"account\");\n const account = useAccountInstance();\n // sign message;\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 (data: any, params?: any): 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 // console.log(\"payload\", payload);\n\n const signature = await signer.sign(payload);\n\n return trigger({\n data,\n params,\n method,\n signature: {\n ...signature,\n \"orderly-account-id\": account.accountId,\n },\n });\n };\n\n return [\n mutation,\n {\n data,\n error,\n reset,\n isMutating,\n },\n ];\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, contractManager, 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 contractManager,\n getWalletAdapter\n // walletAdapter\n );\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n return account;\n};\n","\"use client\";\n\nimport useSWR, { SWRConfiguration, SWRResponse } from \"swr\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\n\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\n// const fetcher = (url: string, init: RequestInit) => get(url, init);\n/**\n * usePrivateQuery\n * @description for private api\n * @param query\n * @param options\n */\nexport const usePrivateQuery = <T>(\n query: string,\n // query: Parameters<typeof useSWR>[\"0\"],\n options?: useQueryOptions<T>\n): SWRResponse<T> => {\n const { formatter, ...swrOptions } = options || {};\n const account = useAccount();\n // check the query is public api\n\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 // query,\n (url: string, init: RequestInit) => {\n return fetcher(url, init, { formatter });\n },\n {\n ...swrOptions,\n use: [signatureMiddleware, ...middleware],\n onError: (err) => {\n console.log(\"usePrivateQuery error\", err);\n },\n }\n );\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { MessageFactor, getMockSigner } from \"@orderly.network/core\";\n\nimport { SimpleDI, Account } from \"@orderly.network/core\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n // const { account } = useAccountInstance();\n return (key, fetcher, config) => {\n try {\n const extendedFetcher = async (args: any) => {\n let url = Array.isArray(args) ? args[0] : args;\n // console.log(\"signature middleware::::::::\", key, url);\n\n let account = SimpleDI.get<Account>(\"account\");\n let fullUrl = `${apiBaseUrl}${url}`;\n\n // console.log(\"signature middleware account::::::::\", account);\n const signer = account.signer;\n // const signer = getMockSigner();\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 useConstant from \"use-constant\";\nimport { Account, AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useAccountInstance } from \"./useAccountInstance\";\n\nexport const useAccount = (): {\n account: Account;\n state: AccountState;\n login: (address: string) => void;\n createOrderlyKey: (remember: boolean) => Promise<string>;\n createAccount: () => Promise<string>;\n disconnect: () => Promise<void>;\n connect: () => Promise<any>;\n setChain: (chainId: number) => Promise<any>;\n // settlement: () => Promise<any>;\n // info: API.AccountInfo | undefined;\n} => {\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 state = useObservable<AccountState>(\n // () => account.state$,\n // account.stateValue\n // );\n\n const statusChangeHandler = (nextState: AccountState) => {\n // console.log(\"------------>>>>>> account nextState\", nextState);\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 const connect = useCallback(async () => {\n return onWalletConnect?.();\n }, [account]);\n\n // const settlement = useCallback(async () => {\n // return account.settlement();\n // }, [account]);\n\n const disconnect = async () => {\n // account.disconnect();\n return onWalletDisconnect?.();\n };\n\n const setChain = async (chainId: number) => {\n return onSetChain?.(chainId);\n };\n\n return {\n // account: state!,\n account,\n state,\n // info: {},\n login,\n createOrderlyKey,\n createAccount,\n disconnect,\n connect,\n setChain,\n // settlement,\n };\n};\n","export const useTradingView = () => {\n return {};\n};\n","import { useEffect, useState } from \"react\";\n\nexport const usePrivateObserve = <T>() => {\n const [data, setData] = useState<T>();\n\n useEffect(() => {\n return () => {\n // unsubscribe\n };\n }, []);\n\n return {\n data,\n };\n};\n","import { useEffect, useState } from \"react\";\n\nexport const useTopicObserve = <T>(topic: string) => {\n const [data, setData] = useState<T>();\n\n useEffect(() => {\n return () => {\n // unsubscribe\n };\n }, []);\n\n return {\n data,\n };\n};\n","import { ExchangeStatusEnum, SystemStateEnum } from \"@orderly.network/types\";\n\nimport { getAppState } from \"./services/appState\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\n// app system State , loading, dataError,netError,\n// platform state\nexport const useAppState = () => {\n const { errors, ready } = useContext(OrderlyContext);\n\n return {\n errors,\n ready,\n };\n};\n","import { useContext } from \"react\";\nimport { OrderlyContext, useQuery, useSWR } from \".\";\n\nexport const usePreLoadData = (onSuccess: (name: string) => void) => {\n const { configStore } = useContext(OrderlyContext);\n\n useSWR(\n `${configStore.get(\"swapSupportApiUrl\")}/swap_support`,\n (url) => fetch(url).then((res) => res.json()),\n {\n revalidateOnFocus: false,\n // suspense: true,\n onSuccess: (data, key, config) => {\n onSuccess(\"chains_fetch\");\n },\n }\n );\n // useQuery(\"\");\n};\n","import useConstant from \"use-constant\";\nimport { EventEmitter, SimpleDI } from \"@orderly.network/core\";\n\nexport const useEventEmitter = (channel?: string) => {\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 console.log(\"parsing error on\", { value });\n return undefined;\n }\n}\n","// https://usehooks-ts.com/react-hook/use-local-storage\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from \"react\";\nimport { parseJSON } from \"./utils/json\";\n\n// declare global {\n// interface WindowEventMap {\n// 'local-storage': CustomEvent\n// }\n// }\n\ntype SetValue<T> = Dispatch<SetStateAction<T>>;\n\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, any] {\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\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // const handleStorageChange = useCallback(\n // (event: StorageEvent | CustomEvent) => {\n // if ((event as StorageEvent)?.key && (event as StorageEvent).key !== key) {\n // return\n // }\n // setStoredValue(readValue())\n // },\n // [key, readValue],\n // )\n\n return [storedValue, setValue];\n}\n","import React, { useEffect, useRef } from \"react\";\n\nexport type useRunOnceProps = {\n fn: () => any;\n sessionKey?: string;\n};\n\nexport const useRunOnce: React.FC<useRunOnceProps> = ({ fn, sessionKey }) => {\n const triggered = useRef<boolean>(false);\n\n useEffect(() => {\n const hasBeenTriggered = sessionKey\n ? sessionStorage.getItem(sessionKey)\n : triggered.current;\n\n if (!hasBeenTriggered) {\n fn();\n triggered.current = true;\n\n if (sessionKey) {\n sessionStorage.setItem(sessionKey, \"true\");\n }\n }\n }, [fn, sessionKey]);\n\n return null;\n};\n","export { useQuery } from \"./useQuery\";\nexport { useMutation } from \"./useMutation\";\nexport { usePrivateQuery } from \"./usePrivateQuery\";\n\nexport { useTradingView } from \"./useTradingView\";\n\nexport { usePrivateObserve } from \"./usePrivateObserve\";\nexport { useTopicObserve } from \"./useTopicObserve\";\n// export { useConfig } from \"./useConfig\";\n\nexport { useAccount } from \"./useAccount\";\nexport { useAccountInstance } from \"./useAccountInstance\";\nexport { useAppState } from \"./useAppState\";\n\nexport { usePreLoadData } from \"./usePreloadData\";\n\nexport { useEventEmitter } from \"./useEventEmitter\";\n\nexport { useSessionStorage } from \"./useSessionStorage\";\nexport { useLocalStorage } from \"./useLocalStorage\";\nexport { useRunOnce } from \"./useRunOnce\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { DataSourceProvider } from \"./provider/dataProvider\";\nexport { useWS } from \"./useWS\";\nexport { useConfig } from \"./useConfig\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration, SWRConfig } from \"swr\";\n\nexport { useSWR, SWRConfig, type SWRConfiguration };\n\nexport * as apis from \"./apis\";\nexport * from \"./orderly/orderlyHooks\";\n","import { SimpleDI } from \"@orderly.network/core\";\nimport React, {\n FC,\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n} from \"react\";\nimport { SWRConfig } from \"swr\";\nimport useConstant from \"use-constant\";\nimport { DataSource } from \"../services/dataSource\";\nimport { useAccountInstance } from \"../useAccountInstance\";\nimport { getWebSocketClient } from \"../utils/getWebSocketClient\";\nimport { get } from \"@orderly.network/net\";\nimport { OrderlyContext } from \"../orderlyContext\";\n\ninterface DataSourceContextState {\n // dataSource: DataSource;\n // fetcher: typeof fetch;\n}\n\nexport const DataSourceContext = createContext({} as DataSourceContextState);\n\nexport const DataSourceProvider: FC<PropsWithChildren> = (props) => {\n console.log(\"render DataSourceProvider\");\n const account = useAccountInstance();\n\n const dataSource = useConstant(() => {\n // let dataSource = SimpleDI.get<DataSource>(DataSource.instanceName);\n // if (!dataSource) {\n // const ws = getWebSocketClient(account);\n // dataSource = new DataSource(account, ws);\n // SimpleDI.registerByName(DataSource.instanceName, dataSource);\n // }\n // return dataSource;\n });\n\n return (\n <DataSourceContext.Provider value={{}}>\n {/* <SWRConfig\n value={{\n provider: () => dataSource.swrCacheProvider,\n }}\n > */}\n {props.children}\n {/* </SWRConfig> */}\n </DataSourceContext.Provider>\n );\n};\n","import { Account, SimpleDI } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport { useContext, useEffect } from \"react\";\nimport useConstant from \"use-constant\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { AccountState } from \"@orderly.network/core\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\n\nexport const useWS = () => {\n const { state } = useAccount();\n const { configStore } = useContext(OrderlyContext);\n const ws = useConstant(() => {\n // return getWebSocketClient(account);\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 // accountId: \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\",\n networkId: \"testnet\",\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 // open the pirvate websocket when user login\n account.on(\"change:status\", (nextState: AccountState) => {\n // console.log(\"------------>>>>>> account nextState\", nextState);\n if (\n nextState.status === AccountStatusEnum.EnableTrading &&\n nextState.accountId\n ) {\n websocketClient.openPrivate(nextState.accountId);\n }\n });\n\n SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n\n return websocketClient;\n });\n\n // auto open private when user login;\n\n return ws;\n};\n","import { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\n\nexport const useConfig = () => {\n const { configStore } = useContext(OrderlyContext);\n\n // console.log(\"##############\", configStore);\n\n return configStore;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\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\";\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 // console.log(\"depth:::::\", depth);\n\n if (typeof depth !== \"undefined\") {\n const prices = new Map<number, number[]>();\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n let priceKey;\n\n if (asks) {\n priceKey = new Decimal(Math.ceil(price / depth)).mul(depth).toNumber();\n } else {\n priceKey = new Decimal(Math.floor(price / depth)).mul(depth).toNumber();\n }\n\n // console.log(\"priceKey:::\", priceKey);\n\n if (prices.has(priceKey)) {\n const item = prices.get(priceKey)!;\n const itemPrice = new Decimal(item[1]).add(quantity).toNumber();\n\n // prices.push([price, quantity]);\n prices.set(priceKey, [priceKey, itemPrice]);\n } else {\n prices.set(priceKey, [priceKey, quantity]);\n }\n }\n\n newData = Array.from(prices.values());\n }\n\n for (let i = 0; i < newData.length; i++) {\n const [price, quantity] = newData[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n\n const newQuantity = new Decimal(quantity)\n .add(result.length > 0 ? result[result.length - 1][2] : 0)\n .toNumber();\n\n result.push([price, quantity, newQuantity]);\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 const asks = reduceItems(depth, level, data.asks, true).reverse();\n\n const bids = reduceItems(depth, level, data.bids);\n return {\n asks:\n asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks,\n bids:\n bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids,\n };\n};\n\nconst mergeItems = (data: OrderBookItem[], update: OrderBookItem[]) => {\n // let index = -1;\n // console.log(\"mergeItems\", data, update);\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 // console.log(\"item\", item);\n if (item) {\n const [price, quantity] = item;\n\n const index = data.findIndex(([p], index) => p === price);\n // console.log(index);\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\n continue;\n } else {\n data[index] = item;\n }\n }\n }\n }\n\n return data;\n};\n\nexport const mergeOrderbook = (data: OrderbookData, update: OrderbookData) => {\n return {\n asks: mergeItems(data.asks, update.asks).sort(asksSortFn),\n bids: mergeItems(data.bids, update.bids).sort(bidsSortFn),\n };\n};\n\nexport type OrderbookOptions = {\n level?: number;\n};\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 = { asks: [], bids: [] },\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new Error(\"useOrderbookStream requires a symbol\");\n }\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 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 // console.log(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 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 // console.log(\"orderbook request message\", message);\n if (!!message) {\n const reduceOrderbookData = reduceOrderbook(depth, level, message);\n setRequestData(reduceOrderbookData);\n setData(reduceOrderbookData);\n }\n setIsLoading(false);\n },\n }\n );\n\n return () => {\n setRequestData(null);\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\n const subscription = ws.subscribe(\n {\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n },\n {\n onMessage: (message: any) => {\n // console.log(\"orderbook update message\", message);\n\n setData((data) => {\n const mergedData =\n !message.asks && !message.bids\n ? data\n : mergeOrderbook(data, message);\n\n const reducedData = reduceOrderbook(depth, level, mergedData);\n return reducedData;\n });\n },\n }\n );\n\n return () => {\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 // console.log(\"Orderbook depth has changed:\", depth);\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 return [\n {\n asks: data.asks.slice(-level),\n bids: data.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 useSWRSubscription from \"swr/subscription\";\n\nimport { API } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useWS } from \"../useWS\";\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 const ws = useWS();\n\n const { data: ticker } = useSWRSubscription(\n `${symbol}@ticker`,\n (key, { next }) => {\n const unsubscribe = ws.subscribe(\n // { event: \"subscribe\", topic: \"markprices\" },\n `${symbol}@ticker`,\n {\n onMessage: (message: any) => {\n next(null, message);\n },\n // onUnsubscribe: () => {\n // return \"markprices\";\n // },\n // onError: (error: any) => {\n // console.log(\"error\", error);\n // },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\n unsubscribe?.();\n };\n }\n );\n\n const value = useMemo(() => {\n // console.log(\"ticker\", ticker, info);\n if (!info) return null;\n if (!ticker) return info;\n const config: any = { ...info };\n if (ticker.close !== undefined) {\n config[\"24h_close\"] = ticker.close;\n }\n if (ticker.open !== undefined) {\n config[\"24h_open\"] = ticker.open;\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 return config;\n }, [info, ticker]);\n\n // return useQuery(`/public/futures/${symbol}`);\n return value;\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useMarkPrice = (symbol: string) => {\n const ws = useWS();\n return useSWRSubscription(`${symbol}@markprice`, (key, { next }) => {\n const unsubscribe = ws.subscribe(`${symbol}@markprice`, {\n onMessage: (message: any) => {\n // console.log(\"markprice message\", message);\n next(null, message.price);\n },\n });\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe useMarkPrice !!!!!!!\");\n unsubscribe?.();\n };\n });\n};\n","type objectDepth = 1 | 2;\n\ntype propertyType<T, K, F> = T extends 1 ? K : F;\n\n// type Getter = {\n// [P in propertyType<typeof depth, K, string>]: (\n// key: K,\n// defaultValue: any\n// ) => any;\n// }\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 // console.log(\"getter\", property, receiver);\n // if (property === \"isLoading\") return isLoading;\n if (depth === 1) {\n // return data[property];\n return (defaultValue: any) => {\n if (!target) return defaultValue;\n return target[property] ?? defaultValue;\n };\n }\n return (key: K, defaultValue: any) => {\n // console.log(\"getter\", property, key, defaultValue, data);\n if (key) {\n return (target as any)[property]?.[key] ?? defaultValue;\n } else {\n return target[property];\n }\n\n // return data[value][property];\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);\n};\n","import { useMutation } from \"../useMutation\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport { API, OrderEntity, OrderSide, OrderType } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, getPrecisionByNumber } from \"@orderly.network/utils\";\nimport { useTokenInfo } from \"./useTokenInfo\";\n\nimport { compose, head } from \"ramda\";\nimport {\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { OrderFactory, OrderFormEntity } from \"../utils/createOrder\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useSWRConfig } from \"swr\";\nimport { unstable_serialize } from \"swr/infinite\";\n\nexport interface OrderEntryReturn {\n onSubmit: (values: OrderEntity) => Promise<any>;\n // setValue: (field: OrderEntityKey, value: any) => void;\n maxQty: number;\n freeCollateral: number;\n // values: OrderEntity;\n markPrice: number;\n // errors: Partial<Record<keyof OrderEntity, string>>;\n\n symbolConfig: API.SymbolExt;\n\n //\n // onFocus?: (field: keyof OrderEntity) => void;\n // onBlur?: (field: keyof OrderEntity) => void;\n helper: {\n calculate: (values: any, field: string, value: any) => any;\n validator: (values: any) => any;\n };\n}\n\nexport type UseOrderEntryOptions = {\n commify?: boolean;\n validate?: (\n data: OrderEntity\n ) => { [P in keyof OrderEntity]?: string } | null | undefined;\n};\n\n/**\n * 创建订单\n * @param symbol\n * @returns\n */\nexport const useOrderEntry = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false,\n // initialValue: Partial<OrderEntity> = {},\n options?: UseOrderEntryOptions\n): OrderEntryReturn => {\n // const { mutate } = useSWRConfig();\n const [doCreateOrder] = useMutation<OrderEntity, any>(\"/v1/order\");\n\n const { freeCollateral } = useCollateral();\n\n const symbolInfo = useSymbolsInfo();\n // const tokenInfo = useTokenInfo();\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 // console.log(\"orderExtraValues\", orderExtraValues);\n\n // 订阅maskPrice\n // const ws = useWebSocketClient();\n\n const { data: markPrice } = useMarkPrice(symbol);\n\n const maxQty = useMaxQty(\n symbol,\n side,\n // orderExtraValues.reduce_only\n reduceOnly\n );\n\n /**\n * 提交订单,校验数据\n * @param values\n * @returns\n */\n const onSubmit = (values: OrderEntity) => {\n if (\n !values ||\n typeof values.order_type === \"undefined\" ||\n (values.order_type !== OrderType.MARKET &&\n values.order_type !== OrderType.LIMIT)\n ) {\n throw new Error(\"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 Error(\"orderCreator is null\"));\n }\n\n return orderCreator\n ?.validate(values, {\n symbol: symbolInfo[symbol](),\n // token: tokenInfo[symbol](),\n maxQty,\n markPrice: markPrice,\n })\n .then(() => {\n if (!orderCreator) {\n throw new Error(\"orderCreator is null\");\n }\n\n if (!symbol) {\n throw new Error(\"symbol is null\");\n }\n\n const data = orderCreator.create(values!);\n\n return doCreateOrder({\n ...data,\n symbol,\n });\n });\n };\n\n const calculate = useCallback(\n (values: any, field: string, value: any) => {\n console.log(\"calculate\", values, field, value, markPrice);\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;\n },\n [markPrice]\n );\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 }) as any;\n };\n\n // validator\n // helper: validator,formater,calculate\n return {\n maxQty,\n freeCollateral,\n markPrice,\n onSubmit,\n helper: {\n calculate,\n validator,\n },\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 OrderEntity,\n // to update field\n string,\n any,\n number,\n {\n baseDP: number;\n quoteDP: number;\n }\n];\n\ntype orderEntryInputHandle = (inputs: orderEntryInputs) => orderEntryInputs;\n\nconst needNumberOnlyFields = [\"order_quantity\", \"order_price\", \"total\"];\n\nexport function baseInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n let [values, input, value, markPrice, config] = inputs;\n\n if (needNumberOnlyFields.includes(input)) {\n //清理千分位符\n value = value.toString();\n value = value.replace(/,/g, \"\");\n value = value.replace(/[^\\d.]/g, \"\"); //清除“数字”和“.”以外的字符\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 * 数字精度处理\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:格式化只处理千分位等等问题\n\n // if (!!values.order_quantity) {\n // console.log(\"baseTick //////\", baseTick);\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 * 价格输入处理\n * @param inputs\n * @returns\n */\nfunction priceInputHandle(inputs: orderEntryInputs): orderEntryInputs {\n const [values, input, value, markPrice, config] = inputs;\n\n // console.log(\"priceInputHandle\", inputs);\n\n if (value === \"\") {\n return [{ ...values, total: \"\" }, input, value, markPrice, config];\n }\n\n // 输入价格的时候, total也需要联动\n const price = new Decimal(value);\n const priceDP = price.dp();\n\n // console.log(\"priceInputHandle\", priceDP, config.quoteDP);\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) {\n return [values, input, value, markPrice, config];\n }\n\n const total = price.mul(values.order_quantity);\n\n // const quantityDP = total.dp();\n return [\n {\n ...values,\n total: total.todp(2).toString(),\n },\n input,\n value,\n markPrice,\n config,\n ];\n}\n\n/**\n * 数量输入处理\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 //// 检查长度进行精度处理,用处理后的值重新计算\n\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 (values.order_type === OrderType.MARKET) {\n const price = markPrice;\n values.total = quantity.mul(price).todp(2).toNumber();\n }\n\n if (values.order_type === OrderType.LIMIT) {\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 * 总价输入处理\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 (values.order_type === OrderType.LIMIT && !!values.order_price) {\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 * 其他输入处理\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 { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { account, positions } from \"@orderly.network/futures\";\n\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API } from \"@orderly.network/types\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { pathOr, propOr } from \"ramda\";\nimport { OrderEntity } from \"@orderly.network/types\";\n\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\n\nimport { useEventEmitter } from \"../useEventEmitter\";\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\n) => {\n const symbolInfo = useSymbolsInfo();\n\n const ee = useEventEmitter();\n\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n // console.log(\"account info: \", accountInfo);\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: updatePositions,\n } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n // dedupingInterval: 100,\n // keepPreviousData: false,\n // revalidateIfStale: true,\n ...options,\n\n formatter: (data) => data,\n onError: (err) => {\n console.log(\"usePositionStream error\", err);\n },\n });\n\n // console.log(\"=========== positions ============\", data?.rows);\n\n const { data: markPrices } = useMarkPricesStream();\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 price = propOr(\n item.mark_price,\n item.symbol,\n markPrices\n ) as unknown as number;\n\n // console.log(\"info\", info(\"base_mmr\"));\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: price,\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 };\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 }, [data?.rows, symbolInfo, accountInfo, markPrices, symbol, holding]);\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 return 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,\n };\n });\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: formatedPositions?.[1] ?? {},\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: () => {},\n },\n ];\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 return createGetter<API.FundingRate>(data);\n};\n","import useSWRSubscription from \"swr/subscription\";\n\nimport { useWS } from \"../useWS\";\n\nexport const useMarkPricesStream = () => {\n const ws = useWS();\n // const markPrice$ = useMarkPricesSubject();\n // const [isLoading, setIsLoading] = useState(true);\n\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 console.log(\"error\", error);\n },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\n unsubscribe?.();\n };\n });\n\n // return [data, { isLoading }];\n};\n","import { API } from \"@orderly.network/types\";\n\ntype NonUSDCHolding = {\n holding: number;\n markPrice: number;\n //保證金替代率 暂时默认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 { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport {\n pathOr_unsettledPnLPathOr,\n usePositionStream,\n} from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\nimport { account } from \"@orderly.network/futures\";\n// import { useOrderStream } from \"./useOrderStream\";\nimport { type WSMessage, type API } from \"@orderly.network/types\";\nimport { useAccount } from \"../useAccount\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { Decimal, zero } from \"@orderly.network/utils\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMemo } from \"react\";\nimport { useBalance } from \"./useBalance\";\nimport { parseHolding } from \"../utils/parseHolding\";\nimport { totalUnsettlementPnLPath } from \"../utils/fn\";\nimport { useHoldingStream } from \"./useHoldingStream\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n availableBalance: number;\n unsettledPnL: number;\n};\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\nconst totalCollateralPath = pathOr(0, [0, \"totalCollateral\"]);\n\n/**\n * 用户保证金\n * @returns\n */\n\ntype Options = {\n dp: number;\n};\nexport const useCollateral = (\n options: Options = { dp: 6 }\n): CollateralOutputs => {\n const { dp } = options;\n const positions = usePositionStream();\n\n // const orders = useOrderStream();\n const { data: orders } = usePrivateQuery<API.Order[]>(\n `/v1/orders?status=NEW`\n );\n // const { info: accountInfo } = useAccount();\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 { 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: orders ?? [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo,\n });\n }, [positions, orders, 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, 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};\n","import { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { useEffect, useMemo } from \"react\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { prop } from \"ramda\";\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 { useMemo } from \"react\";\nimport { type API, OrderSide, type WSMessage } from \"@orderly.network/types\";\n\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { account } from \"@orderly.network/futures\";\nimport { useCollateral } from \"./useCollateral\";\n\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { pathOr } from \"ramda\";\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 { data: positions = [] } =\n // usePrivateQuery<API.PositionInfo>(`/positions`);\n\n const { data: orders } = usePrivateQuery<API.Order[]>(\n `/v1/orders?status=NEW`\n );\n\n // const { info: accountInfo } = useAccount();\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 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 // 当前symbol的仓位\n\n // 当前symbol的买单\n const buyOrdersQty = account.getQtyFromOrdersBySide(\n orders,\n symbol,\n OrderSide.BUY\n );\n // 当前symbol的卖单\n const sellOrdersQty = account.getQtyFromOrdersBySide(\n orders,\n symbol,\n OrderSide.SELL\n );\n\n const otherPositions = positions.filter(\n (item: API.Position) => item.symbol !== symbol\n );\n\n const otherOrders = orders.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 maxQty;\n};\n","import { OrderType, type API, OrderEntity } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\nimport { order } from \"@orderly.network/futures\";\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) => OrderEntity;\n validate: (\n values: OrderFormEntity,\n configs: ValuesDepConfig\n ) => Promise<VerifyResult>;\n}\n\nconst { maxPrice, minPrice } = order;\n\nexport abstract class BaseOrderCreator implements OrderCreator {\n abstract create(values: OrderEntity): OrderEntity;\n abstract validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult>;\n\n baseOrder(data: OrderEntity): OrderEntity {\n const order: any = {\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 };\n\n if (data.visible_quantity === 0) {\n order.visible_quantity = data.visible_quantity;\n }\n\n return order;\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 // console.log(\"=======>>>>> baseValidate\", values, configs);\n const { order_quantity, total } = values;\n\n if (!order_quantity) {\n errors.order_quantity = {\n type: \"required\",\n message: \"quantity is required\",\n };\n } else {\n //// 需要用MaxQty+base_max, base_min来判断\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 should be greater or equal than ${new Decimal(\n quote_min\n ).todp(quote_dp)}`,\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\nexport class LimitOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(values),\n order_price: values.order_price,\n };\n }\n validate(\n values: OrderFormEntity,\n config: ValuesDepConfig\n ): Promise<VerifyResult> {\n return this.baseValidate(values, config).then((errors) => {\n // const errors = this.baseValidate(values, config);\n\n const { order_price } = 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 } = symbol;\n const maxPriceNumber = maxPrice(config.markPrice, price_range);\n const minPriceNumber = minPrice(config.markPrice, price_range);\n\n if (price.lt(minPriceNumber)) {\n errors.order_price = {\n type: \"min\",\n message: `price must be greater than ${new Decimal(\n minPriceNumber\n ).todp(symbol.quote_dp)}`,\n };\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = {\n type: \"max\",\n message: `price must be less than ${new Decimal(\n maxPriceNumber\n ).todp(symbol.quote_dp)}`,\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\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 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 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 default:\n return new GeneralOrderCreator();\n }\n }\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\n\ninterface MarketInfo {}\n\n// api: /public/futures\nexport const useFetures = () => {\n const { data, isLoading, error } = useQuery<MarketInfo[]>(\n `/v1/public/futures`,\n {\n revalidateOnFocus: false,\n }\n );\n\n const [sortedData, setSortedData] = useState(data);\n\n const ws = useWS();\n\n useEffect(() => {\n // const sub = ws\n // .observe<WSMessage.Ticker>(`tickers`)\n // .subscribe((value: any) => {\n // console.log(\"useTickers\", value);\n // // setData(value);\n // });\n // return () => {\n // sub.unsubscribe();\n // };\n }, []);\n\n useEffect(() => {\n if (data) {\n const sortedData = data.sort((a, b) => {\n return 0;\n });\n setSortedData(sortedData);\n }\n }, [data]);\n\n const sortBy = useCallback((key: string) => {}, [data]);\n\n const filterBy = useCallback((key: string) => {}, [data]);\n\n return {\n // ...data,\n data: sortedData,\n sortBy,\n filterBy,\n isLoading,\n error,\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 { useQuery } from \"../useQuery\";\nimport { type API } from \"@orderly.network/types\";\nimport { createGetter } from \"../utils/createGetter\";\n\nexport const useTokenInfo = () => {\n const { data = {} } = useQuery<Record<string, API.TokenInfo>>(\n \"/v1/public/token\",\n {\n focusThrottleInterval: 1000 * 60 * 60 * 24,\n revalidateOnFocus: false,\n formatter(data: { rows: API.TokenInfo[] }) {\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\n obj[item.token] = item;\n }\n\n return obj;\n },\n }\n );\n\n return createGetter<API.TokenInfo>(data as any);\n};\n","import { useQuery } from \"../useQuery\";\n\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useMemo } from \"react\";\nimport { WSMessage } from \"@orderly.network/types\";\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 // const config = useSymbolsInfo();\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 // console.log(\"error\", error);\n // },\n }\n );\n\n return () => {\n //unsubscribe\n console.log(\"unsubscribe!!!!!!!\");\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 return {\n ...item,\n [\"24h_close\"]: ticker.close,\n [\"24h_open\"]: ticker.open,\n [\"24h_volumn\"]: ticker.volume,\n change: 0,\n };\n }\n return item;\n });\n }, [futures, tickers]);\n\n // return listing;\n return { data: value };\n};\n","import { useCallback } from \"react\";\nimport { useMutation } from \"../useMutation\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport { prop } from \"ramda\";\n\nexport const useLeverage = () => {\n const { data, mutate } = usePrivateQuery(\"/v1/client/info\");\n const [update] = useMutation(\"/v1/client/leverage\");\n\n const updateLeverage = useCallback((data: any) => {\n return update(data).then((res: any) => {\n return mutate();\n // return res\n });\n }, []);\n\n return [prop(\"max_leverage\", data), { update: updateLeverage }];\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 { useContext } from \"react\";\n\nimport useSWRInfinite, {\n type SWRInfiniteKeyLoader,\n type SWRInfiniteConfiguration,\n} from \"swr/infinite\";\n// import { apiPrefixMiddleware } from \"./middleware/apiPrefixMiddleware\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { get } from \"@orderly.network/net\";\nimport { useAccount } from \"./useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\n\nconst fetcher = (url: string, init: RequestInit) => get(url, init);\n\nexport const usePrivateInfiniteQuery = (\n getKey: SWRInfiniteKeyLoader,\n options?: SWRInfiniteConfiguration\n) => {\n const account = useAccount();\n\n const middleware = Array.isArray(options?.use) ? options?.use ?? [] : [];\n\n const result = useSWRInfinite(\n (pageIndex: number, previousPageData) =>\n account.state.status >= AccountStatusEnum.EnableTrading\n ? getKey(pageIndex, previousPageData)\n : null,\n fetcher,\n {\n ...options,\n use: [signatureMiddleware, ...middleware],\n }\n );\n\n return result;\n};\n","import { usePrivateInfiniteQuery } from \"../usePrivateInfiniteQuery\";\nimport { type SWRInfiniteResponse } from \"swr/infinite\";\nimport { useCallback, useEffect, useMemo } from \"react\";\n\nimport { API, OrderSide } from \"@orderly.network/types\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMutation } from \"../useMutation\";\nimport { OrderEntity } from \"@orderly.network/types\";\nimport { useExecutionReport } from \"./orderlyHooks\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nexport interface UserOrdersReturn {\n data: any[];\n loading: boolean;\n update: (order: any) => void;\n cancel: (order: any) => void;\n}\n\nexport enum OrderStatus {\n FILLED = \"FILLED\",\n PARTIAL_FILLED = \"PARTIAL_FILLED\",\n CANCELED = \"CANCELED\",\n NEW = \"NEW\",\n COMPLETED = \"COMPLETED\",\n}\n\nexport const useOrderStream = ({\n status,\n symbol,\n side,\n size = 100,\n}: {\n symbol?: string;\n status?: OrderStatus;\n size?: number;\n side?: OrderSide;\n} = {}) => {\n // const markPrices$ = useMarkPricesSubject();\n\n const ee = useEventEmitter();\n\n const { data: markPrices = {} } = useMarkPricesStream();\n const [doCancelOrder] = useMutation(\"/v1/order\", \"DELETE\");\n const [doUpdateOrder] = useMutation(\"/v1/order\", \"PUT\");\n\n const ordersResponse = usePrivateInfiniteQuery(\n (pageIndex: number, previousPageData) => {\n // TODO: 检查是否有下一页\n // if(previousPageData){\n //\n // const {meta} = previousPageData;\n // }\n const search = new URLSearchParams([\n [\"size\", size.toString()],\n [\"page\", `${pageIndex + 1}`],\n // [`status`, status],\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 initialSize: 1,\n onError: (err) => {\n console.error(\"fetch failed::::\", err);\n },\n }\n );\n\n // useExecutionReport();\n\n const orders = useMemo(() => {\n if (!ordersResponse.data) {\n return null;\n }\n\n // console.log(\"orders:::\", markPrices);\n\n return ordersResponse.data?.flat().map((item) => {\n return {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n });\n }, [ordersResponse.data, markPrices]);\n\n /// Hack: 为了让订单列表能够及时更新,这里需要订阅订单的变化, 后续优化\n useEffect(() => {\n const handler = () => ordersResponse.mutate();\n ee.on(\"orders:changed\", handler);\n\n return () => {\n ee.off(\"orders:changed\", handler);\n };\n }, []);\n\n /**\n * 取消所有订单\n */\n const cancelAllOrders = useCallback(() => {}, [ordersResponse.data]);\n\n /**\n * 更新单个订单\n */\n const updateOrder = useCallback((orderId: string, order: OrderEntity) => {\n // console.log(\"updateOrder\", order, orderId);\n return doUpdateOrder({ ...order, order_id: orderId });\n }, []);\n\n /**\n * 取消单个订单\n */\n const cancelOrder = useCallback((orderId: string, symbol?: string) => {\n return doCancelOrder(null, {\n order_id: orderId,\n symbol,\n }).then((res: any) => {\n if (res.success) {\n return ordersResponse.mutate().then(() => {\n return res;\n });\n } else {\n throw new Error(res.message);\n }\n });\n }, []);\n\n return [\n orders,\n {\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\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 const [prevSymbol, setPrevSymbol] = useState<string>(() => symbol);\n\n const { limit = 50 } = options;\n\n const ws = useWS();\n\n useEffect(() => {\n setIsLoading(true);\n setTrades(() => []);\n ws.onceSubscribe(\n {\n id: `${symbol}@trade`,\n event: \"request\",\n params: {\n type: \"trade\",\n symbol: symbol,\n limit,\n },\n },\n {\n onMessage: (data: any) => {\n setIsLoading(false);\n setTrades(() => data);\n },\n }\n );\n }, [symbol]);\n\n useEffect(() => {\n // if (trades.length <= 0) return;\n\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 // console.log(\"ws: trade topic\", data);\n setTrades((prev) => {\n const arr = [{ ...data, ts: Date.now() }, ...prev];\n // console.log(\"arr\", arr);\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 console.log(\"trades\", trades);\n\n return { data: trades, isLoading };\n};\n","import { useMemo } from \"react\";\nimport { account } from \"@orderly.network/futures\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useCollateral } from \"./useCollateral\";\n\nexport const useMarginRatio = () => {\n const [{ rows }] = 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 return { marginRatio, currentLeverage };\n};\n","// interface\n\nimport { type API } from \"@orderly.network/types\";\nimport { useCallback, useContext, useMemo } from \"react\";\nimport useSWR, { SWRConfiguration, SWRResponse } from \"swr\";\nimport { OrderlyContext } from \"../orderlyContext\";\nimport { useQuery } from \"../useQuery\";\n\ntype inputOptions = {\n filter?: (item: API.Chain) => boolean;\n pick?: \"dexs\" | \"network_infos\" | \"token_infos\";\n crossEnabled?: boolean;\n wooSwapEnabled?: boolean;\n};\n\nexport const useChains = (\n networkId?: \"testnet\" | \"mainnet\",\n\n options: inputOptions & SWRConfiguration = {}\n) => {\n const { filter, pick, crossEnabled, wooSwapEnabled, ...swrOptions } = options;\n const { configStore } = useContext(OrderlyContext);\n\n const field = options?.pick;\n\n const { data } = useSWR<any>(\n // () =>\n // wooSwapEnabled\n // ? `${configStore.get(\"swapSupportApiUrl\")}/swap_support`\n // : null,\n `${configStore.get(\"swapSupportApiUrl\")}/swap_support`,\n (url) => fetch(url).then((res) => res.json()),\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n ...swrOptions,\n }\n );\n\n const { data: orderlyChains } = useQuery<API.Chain[]>(\"/v1/public/token\");\n\n // console.log(orderlyChains);\n\n const chains = useMemo(() => {\n // 不需要跨链入金\n // if (!wooSwapEnabled) {\n // if (!orderlyChains) return orderlyChains;\n // console.log({ orderlyChains });\n // } else {\n //\n if (!data || !data.data || !orderlyChains) return data;\n\n // console.log(data.data, orderlyChains);\n\n let testnetArr: API.Chain[] = [];\n let mainnetArr: API.Chain[] = [];\n\n Object.keys(data.data).forEach((key) => {\n const item = { ...data.data[key], name: key, priority: 1 };\n\n if (typeof options?.filter === \"function\") {\n if (!options.filter(item)) return;\n }\n\n if (item.network_infos.mainnet) {\n mainnetArr.push(field ? item[field] : item);\n } else {\n testnetArr.push(field ? item[field] : item);\n }\n });\n\n // if (networkId === \"mainnet\") {\n // testnetArr = testnetArr.filter((item) => item.network_infos.mainnet);\n // }\n\n // if (networkId === \"testnet\") {\n // testnetArr = testnetArr.filter((item) => !item.network_infos.mainnet);\n // }\n\n // if (typeof field !== \"undefined\") {\n // return testnetArr.map((item) => {\n // return item[field];\n // });\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 }, [data, networkId, field, options, orderlyChains, wooSwapEnabled]);\n\n const findByChainId = useCallback(\n (chainId: string) => {\n if (!data || !data.data) return undefined;\n\n return data.data[chainId];\n },\n [data]\n );\n\n return [chains, { findByChainId }];\n};\n","import { useEffect, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { API, chainsMap } from \"@orderly.network/types\";\n// import { CHAINS } from \"../utils/chain\";\n\nexport const useChain = (\n token: string\n): {\n chains: API.Chain | null;\n isLoading: boolean;\n} => {\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 = chainsMap.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, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useHoldingStream } from \"./useHoldingStream\";\n\nimport { Decimal } from \"@orderly.network/utils\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useWS } from \"../useWS\";\nimport { useAccount } from \"../useAccount\";\nimport { useEventEmitter } from \"../useEventEmitter\";\n\nexport type WithdrawInputs = {\n amoutn: number;\n address: string;\n};\n\nexport const useWithdraw = () => {\n const { account, state } = useAccount();\n\n const [isLoading, setIsLoading] = useState(false);\n\n const { unsettledPnL, availableBalance } = useCollateral();\n\n // const withdrawQueue = useRef<number[]>([]);\n\n const withdraw = useCallback(\n (inputs: {\n chainId: number;\n token: string;\n amount: number;\n }): Promise<any> => {\n return account.assetsManager.withdraw(inputs).then((res: any) => {\n console.log(\"---------- withdraw -------\", res);\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 // // console.log(\"------- wallet -------\", data);\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 }, [usdc, unsettledPnL]);\n\n return { withdraw, isLoading, maxAmount, availableBalance, unsettledPnL };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useAccount } from \"../useAccount\";\nimport { AccountStatusEnum } from \"@orderly.network/types\";\nimport { Decimal } from \"@orderly.network/utils\";\n// import { Decimal } from \"@orderly.network/utils\";\n\nexport const useDeposit = () => {\n const [balance, setBalance] = useState(\"0\");\n const [allowance, setAllowance] = useState(\"0\");\n\n const { account, state } = useAccount();\n\n // const depositQueue = useRef<string[]>([]);\n\n const fetchBalance = useCallback(async () => {\n const balance = await account.assetsManager.getBalance();\n\n // console.log(\"----- refresh balance -----\", balance);\n setBalance(() => balance);\n }, [state]);\n\n const fetchAllowance = useCallback(async () => {\n const allowance = await account.assetsManager.getAllowance();\n\n // console.log(\"----- refresh allowance -----\", allowance);\n setAllowance(() => allowance);\n return allowance;\n }, []);\n\n useEffect(() => {\n if (state.status < AccountStatusEnum.EnableTrading) return;\n\n fetchBalance();\n\n fetchAllowance();\n }, [state]);\n\n const approve = useCallback(\n (amount: string | undefined) => {\n return account.assetsManager.approve(amount).then((result: any) => {\n if (typeof amount !== \"undefined\") {\n setAllowance((value) => new Decimal(value).add(amount).toString());\n }\n return result;\n });\n },\n [account, fetchAllowance]\n );\n\n const deposit = useCallback(\n (amount: string) => {\n return account.assetsManager.deposit(amount).then((res: any) => {\n console.log(\"----- deposit -----\", res);\n // depositQueue.current.push(res.hash);\n // return fetchAllowance().then(() => res);\n setAllowance((value) => new Decimal(value).sub(amount).toString());\n setBalance((value) => new Decimal(value).sub(amount).toString());\n return res;\n });\n },\n [account, fetchBalance, fetchAllowance]\n );\n\n return {\n balance,\n allowance,\n approve,\n deposit,\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 // console.log(\"------- wallet -------\", data);\n options?.onMessage?.(data);\n next(data);\n },\n }\n );\n\n return () => unsubscribe();\n });\n};\n","import { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\n\nexport const useBalance = () => {\n const ws = useWS();\n const { data } = useSWRSubscription(\"balance\", (_, { next }) => {\n const unsubscribe = ws.privateSubscribe(\"balance\", {\n onMessage: (data: any) => {\n console.log(data);\n },\n });\n return () => unsubscribe();\n });\n\n return data;\n};\n","import { useEffect } from \"react\";\n\nimport { useWS } from \"../useWS\";\nimport { useSWRConfig } from \"swr\";\nimport { API, OrderStatus, WSMessage } from \"@orderly.network/types\";\nimport { useEventEmitter } from \"../useEventEmitter\";\nimport { useAccount } from \"../useAccount\";\n\nexport const usePrivateDataObserver = () => {\n const ws = useWS();\n const { mutate } = useSWRConfig();\n const ee = useEventEmitter();\n const { state } = useAccount();\n\n useEffect(() => {\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n const key = [\"/v1/orders?status=NEW\", state.accountId];\n // console.log(\"------ orders push -----------\", data);\n // console.log(cache);\n\n mutate(key, (orders: any) => {\n // console.log(orders);\n return Promise.resolve()\n .then(() => {\n if (!orders) {\n return orders;\n }\n if (data.status === OrderStatus.NEW) {\n return [\n {\n ...data,\n // average_executed_price:data.ava\n created_time: data.timestamp,\n order_id: data.orderId,\n // reduce_only\n },\n ...orders,\n ];\n }\n if (data.status === OrderStatus.CANCELLED) {\n return orders.filter(\n (order: any) => order.order_id !== data.orderId\n );\n }\n\n return orders;\n })\n .catch((error) => {\n console.log(\"error\", error, error.stack);\n });\n });\n\n ee.emit(\"orders:changed\");\n },\n });\n return () => unsubscribe?.();\n }, [state.accountId]);\n\n useEffect(() => {\n console.log(\"subscribe: position: %s\", state.accountId);\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 mutate(key, (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 });\n return () => {\n console.log(\"unsubscribe: private subscription position\");\n unsubscribe?.();\n };\n }, [state.accountId]);\n};\n","import useSWRSubscription from \"swr/subscription\";\nimport { useWS } from \"../useWS\";\n\nexport const useExecutionReport = () => {\n const ws = useWS();\n const { data } = useSWRSubscription(\"executionreport\", (_, { next }) => {\n const unsubscribe = ws.privateSubscribe(\"executionreport\", {\n onMessage: (data: any) => {\n console.log(data);\n },\n });\n return () => unsubscribe();\n });\n\n return data;\n};\n","export { useInfo } from \"./useInfo\";\nexport { useToken } from \"./useToken\";\nexport { useFundingRateBySymbol } from \"./useFundingRateBySymbol\";\n// export { useFundingRate } from \"./useFundingRate\";\n\n//// mutation\n// export { useCreateOrder } from \"./useCreateOrder\";\n","import { useQuery } from \"../useQuery\";\n\nexport interface Info {\n // token name\n symbol: string;\n quote_min: number;\n quote_max: number;\n quote_tick: number;\n base_min: number;\n base_max: number;\n base_tick: number;\n min_notional: number;\n price_range: number;\n created_time: number;\n updated_time: number;\n}\n\n/**\n * useInfo\n * @returns\n */\nexport const useInfo = () => {\n return useQuery<Info[]>(\"/v1/public/info\", {\n // refreshInterval: 1000 * 60 * 60 * 24,\n });\n};\n","import { useQuery } from \"../useQuery\";\n\nexport interface Token {\n token: string;\n token_account_id: string;\n decimals: number;\n minimum_increment: number;\n}\n\n/**\n * useToken\n * @description get token info\n */\nexport const useToken = () => {\n return useQuery<Token[]>(\"/v1/public/token\");\n};\n","import { useQuery } from \"../useQuery\";\n\nexport interface FundingRate {\n symbol: string;\n est_funding_rate: number;\n est_funding_rate_timestamp: number;\n last_funding_rate: number;\n last_funding_rate_timestamp: number;\n next_funding_time: number;\n sum_unitary_funding: number;\n}\n\n/**\n * FundingRate\n * @param symbol\n */\nexport const useFundingRateBySymbol = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"symbol is required\");\n }\n return useQuery<FundingRate>(`/public/funding_rate/${symbol}`);\n};\n"]}