@orderly.network/hooks 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/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/services/appState.ts","../src/useWebSocketClient.ts","../src/index.ts","../src/provider/dataProvider.tsx","../src/useWS.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useOrderEntry.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useTokenInfo.ts","../src/utils/orderEntryHelper.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/orderly/useCollateral.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useFetures.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useFundingRate.ts","../src/usePrivateInfiniteQuery.ts","../src/orderly/useOrderStream.ts","../src/orderly/useTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts","../src/apis/useFundingRate.ts"],"names":["useContext","account","fetcher","data","useSWR","SimpleDI","useConstant","Account","useState","useEffect","ExchangeStatusEnum","SystemStateEnum","useObservable","default","createContext","WS_NAME","useCallback","useMemo","useSWRSubscription","index","depth","OrderType","compose","head","Decimal","aggregatedData","symbol","pathOr","positions","totalValue","positionsPath","order","sortedData","get","AccountStatusEnum","OrderStatus","_a","useFundingRate"],"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(\"/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) => fetcher(`${apiBaseUrl}${url}`, init, { formatter }),\n swrOptions\n );\n};\n","import { createContext } from \"react\";\n\nimport {\n type ConfigStore,\n type OrderlyKeyStore,\n type WalletAdapter,\n} from \"@orderly.network/core\";\n\nexport interface OrderlyAppConfig {\n logoUrl: string;\n theme: any;\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 networkId: string;\n\n onWalletConnect?: () => Promise<any>;\n onWalletDisconnect?: () => Promise<any>;\n // account: Account;\n\n ready: boolean;\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 { post, del } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n} from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useContext } from \"react\";\nimport { SimpleDI, Account } from \"@orderly.network/core\";\nimport { useAccountInstance } from \"./useAccountInstance\";\n\nconst fetcher = (\n url: string,\n options: { arg: { data?: any; signature: SignedMessagePayload } }\n) => {\n // console.log(\"muation fetcher\", url, options);\n return post(url, options.arg.data, {\n headers: {\n ...options.arg.signature,\n },\n });\n};\n\nconst deleteFetcher = (\n url: string,\n options: { arg: { data?: any; signature: SignedMessagePayload } }\n) => {\n // console.log(\"muation fetcher\", url, options);\n return del(url, options.arg.data, {\n headers: {\n ...options.arg.signature,\n },\n });\n};\n\ntype HTTP_METHOD = \"POST\" | \"PUT\" | \"DELETE\" | \"GET\";\n\n// export const useMutation = (\n// url: string,\n// method: any\n// ):any\nexport const useMutation = <T, E>(\n url: string,\n options?: SWRMutationConfiguration<T, E>,\n method: HTTP_METHOD = \"POST\"\n): [any, any] => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n if (!url.startsWith(\"http\")) {\n url = `${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 url,\n method === \"POST\" ? fetcher : deleteFetcher,\n options\n );\n\n const mutation = async (data: any): Promise<any> => {\n const payload: MessageFactor = {\n method,\n url,\n data,\n };\n\n const signature = await signer.sign(payload);\n\n return trigger({\n data,\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 = () => {\n const { configStore, keyStore, walletAdapter } = 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(configStore, keyStore, walletAdapter);\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 { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\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 // console.log(\n // \"lunch usePrivateQuery, account state \",\n // query,\n // account.state.status\n // );\n\n // console.log(\"usePrivateQuery account\", account.state);\n\n // @ts-ignore\n return useSWR<T>(\n () =>\n account.state.status >= AccountStatusEnum.EnableTrading ? query : null,\n // query,\n (url, init) => {\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\";\nimport { useAccount } from \"../useAccount\";\nimport { useAccountInstance } from \"../useAccountInstance\";\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 (url: string) => {\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: fullUrl,\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, useState } from \"react\";\nimport useConstant from \"use-constant\";\nimport { Account, SimpleDI, AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useObservable } from \"rxjs-hooks\";\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 // info: API.AccountInfo | undefined;\n} => {\n const {\n configStore,\n keyStore,\n walletAdapter,\n onWalletConnect,\n onWalletDisconnect,\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(configStore, keyStore, walletAdapter);\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n const state = useObservable<AccountState>(\n () => account.state$,\n account.stateValue\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 disconnect = useCallback(async () => {\n // account.disconnect();\n return onWalletDisconnect?.();\n }, [account]);\n\n return {\n // account: state!,\n account,\n state,\n // info: {},\n login,\n createOrderlyKey,\n createAccount,\n disconnect,\n connect,\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\";\nimport { merge } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { getAppState } from \"./services/appState\";\n\n// app system State , loading, dataError,netError,\n// platform state\nexport const useAppState = () => {\n const appState = getAppState();\n return useObservable<{\n systemState: SystemStateEnum;\n exchangeState: ExchangeStatusEnum;\n }>(\n () =>\n merge(appState.exchangeState$, appState.systemState$).pipe(\n map((data) => {\n // console.log(data);\n return {\n systemState: SystemStateEnum.Ready,\n exchangeState: ExchangeStatusEnum.Normal,\n };\n })\n ),\n {\n systemState: appState.systemState$.value,\n exchangeState: appState.exchangeState$.value,\n }\n );\n};\n","import { SimpleDI } from \"@orderly.network/core\";\nimport { ExchangeStatusEnum, SystemStateEnum } from \"@orderly.network/types\";\nimport { BehaviorSubject } from \"rxjs\";\n\ntype AppPrepareItem = \"symbolInfo\" | \"clientInfo\" | \"tradingView\";\n\nexport class AppState {\n static instanceName: string = \"AppState\";\n systemState$ = new BehaviorSubject(SystemStateEnum.Loading);\n exchangeState$ = new BehaviorSubject(ExchangeStatusEnum.Normal);\n\n private prepare: AppPrepareItem[] = [\"symbolInfo\", \"clientInfo\"];\n\n updateState(name: AppPrepareItem) {\n this.prepare = this.prepare.filter((item) => item !== name);\n\n if (this.prepare.length === 0) {\n // this.state$.next(\"ready\")\n this.systemState$.next(SystemStateEnum.Ready);\n }\n }\n\n udpateSystemState(state: SystemStateEnum) {\n this.systemState$.next(state);\n }\n\n updateExchangeState(state: ExchangeStatusEnum) {\n this.exchangeState$.next(state);\n }\n}\n\nSimpleDI.registerByName(AppState.instanceName, new AppState());\n\nexport function getAppState() {\n return SimpleDI.get<AppState>(AppState.instanceName);\n}\n","import { getMockSigner, SimpleDI } from \"@orderly.network/core\";\n\nimport { WebSocketClient } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { getWebSocketClient } from \"./utils/getWebSocketClient\";\n\nexport const WS_NAME = \"websocketClient\";\n\nexport const useWebSocketClient = () => {\n // const account = useAccountInstance();\n const ws = useConstant(() => {\n // return getWebSocketClient(account);\n let websocketClient = SimpleDI.get<WebSocketClient>(WS_NAME);\n\n if (!websocketClient) {\n websocketClient = new WebSocketClient({\n accountId: \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\",\n networkId: \"testnet\",\n onSigntureRequest: async (accountId: string) => {\n const signer = getMockSigner();\n const timestamp = new Date().getTime();\n const result = await signer.signText(timestamp.toString());\n\n return { ...result, timestamp };\n },\n });\n\n SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n return websocketClient;\n });\n\n return ws;\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 { useAppState } from \"./useAppState\";\n\nexport { useWebSocketClient } from \"./useWebSocketClient\";\n\nexport { useEventCallback, useObservable } from \"rxjs-hooks\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { DataSourceProvider } from \"./provider/dataProvider\";\nexport { useWS } from \"./useWS\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration } from \"swr\";\n\nexport { useSWR, 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, getMockSigner } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\nexport const useWS = () => {\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 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 SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n return websocketClient;\n });\n\n return ws;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { pick, pathOr, defaultTo, last, compose, head, set } from \"ramda\";\nimport useConstant from \"use-constant\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst asksFirstPath = compose(defaultTo(0), head, last, pathOr([], [\"asks\"]));\n// const asksFirstPath = pathOr(0, [\"asks\", 0,]);\nconst bidsFirstPath = pathOr(0, [\"bids\", 0, 0]);\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 = (depth: number, level: number, data: OrderBookItem[]) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n const result: OrderBookItem[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n result.push([\n price,\n quantity,\n quantity + (result.length > 0 ? result[result.length - 1][2] : 0),\n ]);\n // if the total is greater than the level, break\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,\n level: number,\n data: OrderbookData\n): OrderbookData => {\n const asks = reduceItems(depth, level, data.asks).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 if (data.length === 0) return update;\n while (update.length > 0) {\n const item = update.shift();\n if (item) {\n const [price, quantity] = item;\n if (price < data[0][0] && quantity > 0) {\n data.unshift(item);\n\n continue;\n }\n\n const index = data.findIndex(([p], index) => p === price);\n if (index === -1) {\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n\n continue;\n }\n data[index] = item;\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 [depth, setDepth] = useState(0.001);\n const [level, setLevel] = useState(() => options?.level ?? 10);\n\n // console.log(\"useOrderbookStream -----------\", data);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n // const orderbookRequest =\n\n useEffect(() => {\n ws.onceSubscribe(\n {\n event: \"request\",\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]);\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 onDepthChange = useCallback((depth: number) => {\n console.log(\"Orderbook depth has changed:\", depth);\n // orderbookOptions$.next({\n // ...orderbookOptions$.value,\n // depth,\n // // level,\n // });\n }, []);\n\n // markPrice, lastPrice\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 return [\n { ...data, markPrice, middlePrice },\n { onDepthChange, depth, isLoading },\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\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { combineLatestWith, map, startWith } from \"rxjs/operators\";\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>(`/public/futures/${symbol}`);\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","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\";\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 [mutation] = useMutation<OrderEntity, any>(\"/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 tokenInfo.USDC(\"decimals\", 0);\n }, [tokenInfo]);\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 mutation({\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","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 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\";\n\nexport const useSymbolsInfo = () => {\n const { data = {} } = useQuery<API.SymbolExt[]>(`/public/info`, {\n focusThrottleInterval: 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 obj[item.symbol] = {\n ...item,\n base: arr[1],\n quote: arr[2],\n type: arr[0],\n name: `${arr[1]}-${arr[0]}`,\n };\n }\n\n return obj;\n },\n });\n\n return createGetter<API.SymbolExt>(data as API.SymbolExt);\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 \"/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 { 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\n .toDecimalPlaces(Math.min(quantityDP, config.baseDP))\n .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 let price = markPrice;\n\n if (values.order_type === OrderType.LIMIT && !!values.order_price) {\n price = Number(values.order_price);\n }\n\n const total = quantity.mul(price);\n const totalDP = total.dp();\n // total.todp(Math.min(config.quoteDP, totalDP));\n\n return [\n {\n ...values,\n total: total.todp(Math.min(config.quoteDP, totalDP)).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 { 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 { propOr } from \"ramda\";\nimport { OrderEntity } from \"@orderly.network/types\";\n\nimport { useAccount } from \"../useAccount\";\n// import { useAccount } from \"../useAccount\";\n// import { useDataSource } from \"../useDataSource\";\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 [visibledSymbol, setVisibleSymbol] = useState<string | undefined>(\n symbol\n );\n\n const symbolInfo = useSymbolsInfo();\n // const { info: accountInfo } = useAccount();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/client/info\");\n\n const fundingRates = useFundingRates();\n\n // const { totalCollateral } = useCollateral();\n\n const { data, error } = usePrivateQuery<API.PositionInfo>(`/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n ...options,\n formatter: (data) => data,\n onError: (err) => {\n console.log(\"usePositionStream error\", err);\n },\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n const formatedPositions = useMemo(() => {\n if (!data?.rows || !symbolInfo || !accountInfo) return null;\n\n let totalCollateral = 0;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows.filter((item) => {\n return item.position_qty !== 0;\n })\n : data.rows.filter((item) => {\n return item.symbol === symbol && item.position_qty !== 0;\n });\n\n return 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 const info = symbolInfo?.[item.symbol];\n // console.log(\"info\", info(\"base_mmr\"));\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: positions.notional(\n item.position_qty,\n price\n ) as number,\n IMR_factor_power: 4 / 5,\n });\n\n // console.log(\"MMR\", MMR);\n\n return {\n ...item,\n mark_price: price,\n est_liq_price: positions.liqPrice({\n markPrice: price,\n totalCollateral,\n positionQty: item.position_qty,\n MMR,\n }),\n notional: positions.notional(\n item.position_qty,\n item.average_open_price\n ),\n unrealized_pnl: positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item.average_open_price,\n markPrice: price,\n }),\n };\n });\n }, [data?.rows, symbolInfo, accountInfo, markPrices, symbol]);\n\n // 合计数据\n const aggregatedData = useMemo(() => {\n const aggregatedData = {\n unsettledPnL: NaN,\n unrealPnL: NaN,\n notional: NaN,\n };\n\n if (formatedPositions && formatedPositions.length) {\n aggregatedData.unrealPnL =\n positions.totalUnrealizedPnL(formatedPositions);\n aggregatedData.notional = positions.totalNotional(formatedPositions);\n aggregatedData.unsettledPnL = positions.totalUnsettlementPnL(\n formatedPositions.map((item) => ({\n ...item,\n sum_unitary_funding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n }))\n );\n }\n\n return aggregatedData;\n }, [formatedPositions, fundingRates]);\n\n const showSymbol = useCallback((symbol: string) => {\n setVisibleSymbol(symbol);\n }, []);\n\n // console.log(\"usePositionStream ***\", data, formatedPositions);\n\n return [\n { rows: formatedPositions, aggregated: aggregatedData },\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 // toggleHideOthers,\n // filter: (filter: string) => {},\n },\n ];\n\n // const dataSource = useDataSource();\n\n // useObservable(()=>dataSource.positions$,[])\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 `/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 { useObservable } from \"rxjs-hooks\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport { merge } from \"rxjs\";\nimport { map, filter, debounceTime } from \"rxjs/operators\";\nimport { usePositionStream } 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\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n};\n\nconst totalUnsettlementPnLPath = pathOr(0, [0, \"aggregated\", \"unsettledPnL\"]);\nconst positionsPath = pathOr([], [0, \"rows\"]);\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 // const { data: positions } = usePrivateQuery<API.PositionInfo>(`/positions`);\n\n // const orders = useOrderStream();\n const { data: orders } = usePrivateQuery<API.Order[]>(`/orders`);\n // const { info: accountInfo } = useAccount();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/client/info\");\n\n const symbolInfo = useSymbolsInfo();\n\n const { data: markPrices } = useMarkPricesStream();\n\n const { data: holding } = usePrivateQuery<API.Holding[]>(\"/client/holding\", {\n formatter: (data) => {\n return data.holding;\n },\n });\n\n const [totalCollateral, totalValue] = useMemo(() => {\n if (!holding || !markPrices) {\n return [zero, zero];\n }\n const unsettlemnedPnL = totalUnsettlementPnLPath(positions);\n\n // console.log(\"unsettlemnedPnL\", unsettlemnedPnL);\n //取出 USDC\n const nonUSDC: {\n holding: number;\n markPrice: number;\n //保證金替代率 暂时默认0\n discount: number;\n }[] = [];\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 const number = 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 return [new Decimal(number), totalValue];\n }, [holding, 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 return {\n totalCollateral: totalCollateral.toDecimalPlaces(dp).toNumber(),\n freeCollateral: account\n .freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n })\n .toDecimalPlaces(dp)\n .toNumber(),\n totalValue: totalValue.toDecimalPlaces(dp).toNumber(),\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[]>(`/orders`);\n\n // const { info: accountInfo } = useAccount();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/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_max, base_min } = 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 ${base_min}`,\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 ${maxQty}`,\n };\n }\n }\n\n if (!!total) {\n const { quote_max, quote_min } = 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 ${quote_min}`,\n };\n } else if (totalNumber.gt(quote_max)) {\n errors.total = {\n type: \"max\",\n message: `Quantity should be less or equal than ${quote_max}`,\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 ${minPriceNumber}`,\n };\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = {\n type: \"max\",\n message: `price must be less than ${maxPriceNumber}`,\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\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { type WSMessage } from \"@orderly.network/core\";\n\ninterface MarketInfo {}\n\n// api: /public/futures\nexport const useFetures = () => {\n const { data, isLoading, error } = useQuery<MarketInfo[]>(`/public/futures`);\n\n const [sortedData, setSortedData] = useState(data);\n\n const ws = useWebSocketClient();\n\n useEffect(() => {\n const sub = ws.observe<WSMessage.Ticker>(`tickers`).subscribe((value) => {\n console.log(\"useTickers\", value);\n // setData(value);\n });\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>(\"/client/info\");\n};\n","import { useQuery } from \"../useQuery\";\nimport { type WSMessage } from \"@orderly.network/core\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useMemo } from \"react\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWS();\n const { data: futures } = useQuery<WSMessage.Ticker[]>(`/public/futures`);\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 { 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>(`/public/funding_rate/${symbol}`, {\n fallbackData: {\n est_funding_rate: 0,\n next_funing_time: 0,\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 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, useMemo } from \"react\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, map } from \"rxjs/operators\";\nimport { API } from \"@orderly.network/types\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\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 = OrderStatus.NEW,\n symbol,\n}: {\n symbol?: string;\n status?: OrderStatus;\n} = {}) => {\n // const markPrices$ = useMarkPricesSubject();\n\n const { data: markPrices = {} } = useMarkPricesStream();\n\n const res = usePrivateInfiniteQuery(\n (pageIndex: number, previousPageData) => {\n // TODO: 检查是否有下一页\n // if(previousPageData){\n //\n // const {meta} = previousPageData;\n // }\n const search = new URLSearchParams([\n [\"size\", \"100\"],\n [\"page\", `${pageIndex + 1}`],\n [`status`, status],\n ]);\n if (symbol) {\n search.set(`symbol`, symbol);\n }\n return `/orders?${search.toString()}`;\n },\n {\n initialSize: 1,\n onError: (err) => {\n console.error(\"fetch failed::::\", err);\n },\n }\n );\n\n const orders = useMemo(() => {\n if (!res.data) {\n return null;\n }\n\n // console.log(\"orders:::\", markPrices);\n\n return res.data?.flat().map((item) => {\n return {\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n };\n });\n }, [res.data, markPrices]);\n\n /**\n * 取消所有订单\n */\n const cancelAllOrders = useCallback(() => {}, [res.data]);\n\n /**\n * 更新单个订单\n */\n const updateOrder = useCallback((id: string, data: any) => {}, []);\n\n /**\n * 取消单个订单\n */\n const cancelOrder = useCallback((id: string) => {}, []);\n\n return [\n orders,\n // {\n // ...res,\n // data: res.data?.reduce((acc, cur) => {\n // return [...acc, ...cur];\n // }, []),\n // },\n {\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useTradeStream = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useTradeStream: symbol is required\");\n }\n\n const { data, isLoading } = useQuery<API.Trade[]>(\n `/public/market_trades?symbol=${symbol}&limit=20`\n );\n\n return { data, isLoading };\n};\n","import { account } from \"@orderly.network/futures\";\nimport { useMemo } from \"react\";\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 const { totalCollateral } = useCollateral();\n const marginRatio = useMemo(() => {\n const ratio = account.totalMarginRatio({\n totalCollateral: totalCollateral,\n markPrices: markPrices,\n positions: rows ?? [],\n });\n return ratio;\n }, [rows, markPrices, totalCollateral]);\n\n return marginRatio;\n};\n","// interface\n\nimport { type API } from \"@orderly.network/types\";\nimport { useCallback, useMemo } from \"react\";\nimport useSWR, { 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\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 }\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","export { useInfo } from \"./useInfo\";\nexport { useToken } from \"./useToken\";\nexport { useFundingRateBySymbol } from \"./useFundingRateBySymbol\";\nexport { 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[]>(\"/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[]>(\"/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","import { useQuery } from \"../useQuery\";\nimport { FundingRate } from \"./useFundingRateBySymbol\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * FundingRate\n * @param symbol\n */\nexport const useFundingRate = (symbol?: string) => {\n return useQuery<FundingRate>(`/public/funding_rate`);\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/services/appState.ts","../src/useWebSocketClient.ts","../src/index.ts","../src/provider/dataProvider.tsx","../src/useWS.ts","../src/orderly/useOrderbookStream.ts","../src/orderly/useTickerStream.ts","../src/orderly/useMarkPrice.ts","../src/orderly/useOrderEntry.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useTokenInfo.ts","../src/utils/orderEntryHelper.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesStream.ts","../src/orderly/useCollateral.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useFetures.ts","../src/orderly/useAccountInfo.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useFundingRate.ts","../src/usePrivateInfiniteQuery.ts","../src/orderly/useOrderStream.ts","../src/orderly/useTradeStream.ts","../src/orderly/useMarginRatio.ts","../src/orderly/useChains.ts","../src/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts","../src/apis/useFundingRate.ts"],"names":["useContext","account","fetcher","data","useSWR","SimpleDI","useConstant","Account","useState","useEffect","ExchangeStatusEnum","SystemStateEnum","useObservable","default","createContext","WS_NAME","useCallback","useMemo","useSWRSubscription","index","depth","OrderType","compose","head","Decimal","aggregatedData","symbol","pathOr","positions","totalValue","positionsPath","order","mutate","sortedData","get","AccountStatusEnum","OrderStatus","_a","useFundingRate"],"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) => fetcher(`${apiBaseUrl}${url}`, init, { formatter }),\n swrOptions\n );\n};\n","import { createContext } from \"react\";\n\nimport {\n type ConfigStore,\n type OrderlyKeyStore,\n type WalletAdapter,\n} from \"@orderly.network/core\";\n\nexport interface OrderlyAppConfig {\n logoUrl: string;\n theme: any;\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 networkId: string;\n\n onWalletConnect?: () => Promise<any>;\n onWalletDisconnect?: () => Promise<any>;\n // account: Account;\n\n ready: boolean;\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 { post, del, 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\";\nimport { 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 = () => {\n const { configStore, keyStore, walletAdapter } = 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(configStore, keyStore, walletAdapter);\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 { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\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 ? query : null,\n // query,\n (url, init) => {\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\";\nimport { useAccount } from \"../useAccount\";\nimport { useAccountInstance } from \"../useAccountInstance\";\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 (url: string) => {\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, useState } from \"react\";\nimport useConstant from \"use-constant\";\nimport { Account, SimpleDI, AccountState } from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useObservable } from \"rxjs-hooks\";\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 // info: API.AccountInfo | undefined;\n} => {\n const {\n configStore,\n keyStore,\n walletAdapter,\n onWalletConnect,\n onWalletDisconnect,\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(configStore, keyStore, walletAdapter);\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n const state = useObservable<AccountState>(\n () => account.state$,\n account.stateValue\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 disconnect = useCallback(async () => {\n // account.disconnect();\n return onWalletDisconnect?.();\n }, [account]);\n\n return {\n // account: state!,\n account,\n state,\n // info: {},\n login,\n createOrderlyKey,\n createAccount,\n disconnect,\n connect,\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\";\nimport { merge } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { getAppState } from \"./services/appState\";\n\n// app system State , loading, dataError,netError,\n// platform state\nexport const useAppState = () => {\n const appState = getAppState();\n return useObservable<{\n systemState: SystemStateEnum;\n exchangeState: ExchangeStatusEnum;\n }>(\n () =>\n merge(appState.exchangeState$, appState.systemState$).pipe(\n map((data) => {\n // console.log(data);\n return {\n systemState: SystemStateEnum.Ready,\n exchangeState: ExchangeStatusEnum.Normal,\n };\n })\n ),\n {\n systemState: appState.systemState$.value,\n exchangeState: appState.exchangeState$.value,\n }\n );\n};\n","import { SimpleDI } from \"@orderly.network/core\";\nimport { ExchangeStatusEnum, SystemStateEnum } from \"@orderly.network/types\";\nimport { BehaviorSubject } from \"rxjs\";\n\ntype AppPrepareItem = \"symbolInfo\" | \"clientInfo\" | \"tradingView\";\n\nexport class AppState {\n static instanceName: string = \"AppState\";\n systemState$ = new BehaviorSubject(SystemStateEnum.Loading);\n exchangeState$ = new BehaviorSubject(ExchangeStatusEnum.Normal);\n\n private prepare: AppPrepareItem[] = [\"symbolInfo\", \"clientInfo\"];\n\n updateState(name: AppPrepareItem) {\n this.prepare = this.prepare.filter((item) => item !== name);\n\n if (this.prepare.length === 0) {\n // this.state$.next(\"ready\")\n this.systemState$.next(SystemStateEnum.Ready);\n }\n }\n\n udpateSystemState(state: SystemStateEnum) {\n this.systemState$.next(state);\n }\n\n updateExchangeState(state: ExchangeStatusEnum) {\n this.exchangeState$.next(state);\n }\n}\n\nSimpleDI.registerByName(AppState.instanceName, new AppState());\n\nexport function getAppState() {\n return SimpleDI.get<AppState>(AppState.instanceName);\n}\n","import { getMockSigner, SimpleDI } from \"@orderly.network/core\";\n\nimport { WebSocketClient } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\nimport { useAccountInstance } from \"./useAccountInstance\";\nimport { getWebSocketClient } from \"./utils/getWebSocketClient\";\n\nexport const WS_NAME = \"websocketClient\";\n\nexport const useWebSocketClient = () => {\n // const account = useAccountInstance();\n const ws = useConstant(() => {\n // return getWebSocketClient(account);\n let websocketClient = SimpleDI.get<WebSocketClient>(WS_NAME);\n\n if (!websocketClient) {\n websocketClient = new WebSocketClient({\n accountId: \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\",\n networkId: \"testnet\",\n onSigntureRequest: async (accountId: string) => {\n const signer = getMockSigner();\n const timestamp = new Date().getTime();\n const result = await signer.signText(timestamp.toString());\n\n return { ...result, timestamp };\n },\n });\n\n SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n return websocketClient;\n });\n\n return ws;\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 { useAppState } from \"./useAppState\";\n\nexport { useWebSocketClient } from \"./useWebSocketClient\";\n\nexport { useEventCallback, useObservable } from \"rxjs-hooks\";\n\nexport { default as useConstant } from \"use-constant\";\nexport { DataSourceProvider } from \"./provider/dataProvider\";\nexport { useWS } from \"./useWS\";\n\nexport * from \"./orderlyContext\";\nexport * from \"./orderly/orderlyHooks\";\n\nimport useSWR, { type SWRConfiguration } from \"swr\";\n\nexport { useSWR, 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, getMockSigner } from \"@orderly.network/core\";\nimport { WS } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\n\nconst WS_NAME = \"nativeWebsocketClient\";\nexport const useWS = () => {\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 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 SimpleDI.registerByName(WS_NAME, websocketClient);\n }\n return websocketClient;\n });\n\n return ws;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { pick, pathOr, defaultTo, last, compose, head, set } from \"ramda\";\nimport useConstant from \"use-constant\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useMarkPrice } from \"./useMarkPrice\";\nimport { useWS } from \"../useWS\";\n\nexport type OrderBookItem = number[];\n\nexport type OrderbookData = {\n asks: OrderBookItem[];\n bids: OrderBookItem[];\n};\n\nconst asksFirstPath = compose(defaultTo(0), head, last, pathOr([], [\"asks\"]));\n// const asksFirstPath = pathOr(0, [\"asks\", 0,]);\nconst bidsFirstPath = pathOr(0, [\"bids\", 0, 0]);\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 = (depth: number, level: number, data: OrderBookItem[]) => {\n if (!Array.isArray(data) || data.length === 0) {\n return [];\n }\n const result: OrderBookItem[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const [price, quantity] = data[i];\n if (isNaN(price) || isNaN(quantity)) continue;\n result.push([\n price,\n quantity,\n quantity + (result.length > 0 ? result[result.length - 1][2] : 0),\n ]);\n // if the total is greater than the level, break\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,\n level: number,\n data: OrderbookData\n): OrderbookData => {\n const asks = reduceItems(depth, level, data.asks).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 if (data.length === 0) return update;\n while (update.length > 0) {\n const item = update.shift();\n if (item) {\n const [price, quantity] = item;\n if (price < data[0][0] && quantity > 0) {\n data.unshift(item);\n\n continue;\n }\n\n const index = data.findIndex(([p], index) => p === price);\n if (index === -1) {\n data.push(item);\n } else {\n if (quantity === 0) {\n data.splice(index, 1);\n\n continue;\n }\n data[index] = item;\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 [depth, setDepth] = useState(0.001);\n const [level, setLevel] = useState(() => options?.level ?? 10);\n\n // console.log(\"useOrderbookStream -----------\", data);\n\n const ws = useWS();\n\n const ticker = useTickerStream(symbol);\n\n // const orderbookRequest =\n\n useEffect(() => {\n ws.onceSubscribe(\n {\n event: \"request\",\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]);\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 onDepthChange = useCallback((depth: number) => {\n console.log(\"Orderbook depth has changed:\", depth);\n // orderbookOptions$.next({\n // ...orderbookOptions$.value,\n // depth,\n // // level,\n // });\n }, []);\n\n // markPrice, lastPrice\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 return [\n { ...data, markPrice, middlePrice },\n { onDepthChange, depth, isLoading },\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\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { API } from \"@orderly.network/types\";\nimport { combineLatestWith, map, startWith } from \"rxjs/operators\";\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","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 tokenInfo.USDC(\"decimals\", 0);\n }, [tokenInfo]);\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 }).then((res: any) => {\n if (res.success) {\n //update orders;\n mutate(\"/v1/orders?size=100&page=1$status=NEW\");\n }\n return res;\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","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 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\";\n\nexport const useSymbolsInfo = () => {\n const { data = {} } = useQuery<API.SymbolExt[]>(`/v1/public/info`, {\n focusThrottleInterval: 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 obj[item.symbol] = {\n ...item,\n base: arr[1],\n quote: arr[2],\n type: arr[0],\n name: `${arr[1]}-${arr[0]}`,\n };\n }\n\n return obj;\n },\n });\n\n return createGetter<API.SymbolExt>(data as API.SymbolExt);\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 { 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\n .toDecimalPlaces(Math.min(quantityDP, config.baseDP))\n .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 let price = markPrice;\n\n if (values.order_type === OrderType.LIMIT && !!values.order_price) {\n price = Number(values.order_price);\n }\n\n const total = quantity.mul(price);\n const totalDP = total.dp();\n // total.todp(Math.min(config.quoteDP, totalDP));\n\n return [\n {\n ...values,\n total: total.todp(Math.min(config.quoteDP, totalDP)).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 { 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 { propOr } from \"ramda\";\nimport { OrderEntity } from \"@orderly.network/types\";\n\nimport { useAccount } from \"../useAccount\";\n// import { useAccount } from \"../useAccount\";\n// import { useDataSource } from \"../useDataSource\";\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 [visibledSymbol, setVisibleSymbol] = useState<string | undefined>(\n symbol\n );\n\n const symbolInfo = useSymbolsInfo();\n // const { info: accountInfo } = useAccount();\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/v1/client/info\");\n\n const fundingRates = useFundingRates();\n\n // const { totalCollateral } = useCollateral();\n\n const { data, error } = usePrivateQuery<API.PositionInfo>(`/v1/positions`, {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n ...options,\n formatter: (data) => data,\n onError: (err) => {\n console.log(\"usePositionStream error\", err);\n },\n });\n\n const { data: markPrices } = useMarkPricesStream();\n\n const formatedPositions = useMemo(() => {\n if (!data?.rows || !symbolInfo || !accountInfo) return null;\n\n let totalCollateral = 0;\n\n const filteredData =\n typeof symbol === \"undefined\" || symbol === \"\"\n ? data.rows.filter((item) => {\n return item.position_qty !== 0;\n })\n : data.rows.filter((item) => {\n return item.symbol === symbol && item.position_qty !== 0;\n });\n\n return 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 const info = symbolInfo?.[item.symbol];\n // console.log(\"info\", info(\"base_mmr\"));\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: positions.notional(\n item.position_qty,\n price\n ) as number,\n IMR_factor_power: 4 / 5,\n });\n\n // console.log(\"MMR\", MMR);\n\n return {\n ...item,\n mark_price: price,\n est_liq_price: positions.liqPrice({\n markPrice: price,\n totalCollateral,\n positionQty: item.position_qty,\n MMR,\n }),\n notional: positions.notional(\n item.position_qty,\n item.average_open_price\n ),\n unrealized_pnl: positions.unrealizedPnL({\n qty: item.position_qty,\n openPrice: item.average_open_price,\n markPrice: price,\n }),\n };\n });\n }, [data?.rows, symbolInfo, accountInfo, markPrices, symbol]);\n\n // 合计数据\n const aggregatedData = useMemo(() => {\n const aggregatedData = {\n unsettledPnL: NaN,\n unrealPnL: NaN,\n notional: NaN,\n };\n\n if (formatedPositions && formatedPositions.length) {\n aggregatedData.unrealPnL =\n positions.totalUnrealizedPnL(formatedPositions);\n aggregatedData.notional = positions.totalNotional(formatedPositions);\n aggregatedData.unsettledPnL = positions.totalUnsettlementPnL(\n formatedPositions.map((item) => ({\n ...item,\n sum_unitary_funding: fundingRates[item.symbol]?.(\n \"sum_unitary_funding\",\n 0\n ),\n }))\n );\n }\n\n return aggregatedData;\n }, [formatedPositions, fundingRates]);\n\n const showSymbol = useCallback((symbol: string) => {\n setVisibleSymbol(symbol);\n }, []);\n\n // console.log(\"usePositionStream ***\", data, formatedPositions);\n\n return [\n { rows: formatedPositions, aggregated: aggregatedData },\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 // toggleHideOthers,\n // filter: (filter: string) => {},\n },\n ];\n\n // const dataSource = useDataSource();\n\n // useObservable(()=>dataSource.positions$,[])\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 { useObservable } from \"rxjs-hooks\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\n\nimport { merge } from \"rxjs\";\nimport { map, filter, debounceTime } from \"rxjs/operators\";\nimport { usePositionStream } 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\";\n\nexport type CollateralOutputs = {\n totalCollateral: number;\n freeCollateral: number;\n totalValue: number;\n};\n\nconst totalUnsettlementPnLPath = pathOr(0, [0, \"aggregated\", \"unsettledPnL\"]);\nconst positionsPath = pathOr([], [0, \"rows\"]);\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 // const { data: positions } = usePrivateQuery<API.PositionInfo>(\"/v1/positions`);\n\n // const orders = useOrderStream();\n const { data: orders } = usePrivateQuery<API.Order[]>(`/v1/orders`);\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 { 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 if (!holding || !markPrices) {\n return [zero, zero];\n }\n const unsettlemnedPnL = totalUnsettlementPnLPath(positions);\n\n // console.log(\"unsettlemnedPnL\", unsettlemnedPnL);\n //取出 USDC\n const nonUSDC: {\n holding: number;\n markPrice: number;\n //保證金替代率 暂时默认0\n discount: number;\n }[] = [];\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 const number = 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 return [new Decimal(number), totalValue];\n }, [holding, 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 return {\n totalCollateral: totalCollateral.toDecimalPlaces(dp).toNumber(),\n freeCollateral: account\n .freeCollateral({\n totalCollateral,\n totalInitialMarginWithOrders,\n })\n .toDecimalPlaces(dp)\n .toNumber(),\n totalValue: totalValue.toDecimalPlaces(dp).toNumber(),\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[]>(`/v1/orders`);\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_max, base_min } = 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 ${base_min}`,\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 ${maxQty}`,\n };\n }\n }\n\n if (!!total) {\n const { quote_max, quote_min } = 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 ${quote_min}`,\n };\n } else if (totalNumber.gt(quote_max)) {\n errors.total = {\n type: \"max\",\n message: `Quantity should be less or equal than ${quote_max}`,\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 ${minPriceNumber}`,\n };\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = {\n type: \"max\",\n message: `price must be less than ${maxPriceNumber}`,\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\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { type WSMessage } from \"@orderly.network/core\";\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 = useWebSocketClient();\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\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 WSMessage } from \"@orderly.network/core\";\nimport { useWS } from \"../useWS\";\nimport useSWRSubscription from \"swr/subscription\";\nimport { useMemo } from \"react\";\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 { 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 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, useMemo } from \"react\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, map } from \"rxjs/operators\";\nimport { API } from \"@orderly.network/types\";\nimport { useMarketsStream } from \"./useMarketsStream\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { useMutation } from \"../useMutation\";\nimport { OrderEntity } from \"@orderly.network/types\";\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 = OrderStatus.NEW,\n symbol,\n}: {\n symbol?: string;\n status?: OrderStatus;\n} = {}) => {\n // const markPrices$ = useMarkPricesSubject();\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\", \"100\"],\n [\"page\", `${pageIndex + 1}`],\n [`status`, status],\n ]);\n if (symbol) {\n search.set(`symbol`, symbol);\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 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 /**\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 // ...res,\n // data: res.data?.reduce((acc, cur) => {\n // return [...acc, ...cur];\n // }, []),\n // },\n {\n cancelAllOrders,\n updateOrder,\n cancelOrder,\n },\n ];\n};\n","import { API } from \"@orderly.network/types\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useTradeStream = (symbol: string) => {\n if (!symbol) {\n throw new Error(\"useTradeStream: symbol is required\");\n }\n\n const { data, isLoading } = useQuery<API.Trade[]>(\n `/v1/public/market_trades?symbol=${symbol}&limit=20`\n );\n\n return { data, isLoading };\n};\n","import { account } from \"@orderly.network/futures\";\nimport { useMemo } from \"react\";\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 const { totalCollateral } = useCollateral();\n const marginRatio = useMemo(() => {\n const ratio = account.totalMarginRatio({\n totalCollateral: totalCollateral,\n markPrices: markPrices,\n positions: rows ?? [],\n });\n return ratio;\n }, [rows, markPrices, totalCollateral]);\n\n return marginRatio;\n};\n","// interface\n\nimport { type API } from \"@orderly.network/types\";\nimport { useCallback, useMemo } from \"react\";\nimport useSWR, { 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\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 }\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","export { useInfo } from \"./useInfo\";\nexport { useToken } from \"./useToken\";\nexport { useFundingRateBySymbol } from \"./useFundingRateBySymbol\";\nexport { 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","import { useQuery } from \"../useQuery\";\nimport { FundingRate } from \"./useFundingRateBySymbol\";\nimport { useEffect, useState } from \"react\";\n\n/**\n * FundingRate\n * @param symbol\n */\nexport const useFundingRate = (symbol?: string) => {\n return useQuery<FundingRate>(`/v1/public/funding_rate`);\n};\n"]}