@orderly.network/hooks 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useQuery.ts","../src/orderlyContext.ts","../src/utils/fetcher.ts","../src/useMutation.ts","../src/usePrivateQuery.ts","../src/middleware/signatureMiddleware.ts","../src/useTradingView.ts","../src/usePrivateObserve.ts","../src/useTopicObserve.ts","../src/useAccount.ts","../src/useWebSocketClient.ts","../src/index.ts","../src/orderly/useOrderbook.ts","../src/orderly/useTickerStream.ts","../src/orderly/useOrderEntry.ts","../src/utils/createGetter.ts","../src/orderly/useSymbolsInfo.ts","../src/orderly/useTokenInfo.ts","../src/utils/orderEntryHelper.ts","../src/orderly/useCollateral.ts","../src/orderly/usePositionStream.ts","../src/orderly/useFundingRates.ts","../src/orderly/useMarkPricesSubject.ts","../src/usePrivateInfiniteQuery.ts","../src/orderly/useOrderStream.ts","../src/orderly/useMarkPriceStream.ts","../src/orderly/useMaxQty.ts","../src/utils/createOrder.ts","../src/orderly/useFetures.ts","../src/orderly/useMarketsStream.ts","../src/orderly/useFundingRate.ts","../src/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts","../src/apis/useFundingRate.ts"],"names":["useContext","fetcher","data","useSWR","getMockSigner","useEffect","useState","account","SimpleDI","useConstant","useEventCallback","useObservable","default","useCallback","startWith","map","ticker","index","symbol","depth","useMemo","OrderSide","OrderType","switchMap","withLatestFrom","compose","head","Decimal","merge","debounceTime","combineLatestWith","symbolInfo","accountInfo","aggregatedData","pathOr","get","OrderStatus","_a","positions","markPrices","orders","filter","positionsPath","reduceOnly","side","totalCollateral","maxQty","order","type","sortedData","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// const fetcher = (url: string, queryOptions: useQueryOptions<any>) =>\n// get(url, {}, queryOptions?.formatter);\n\n// export type useQueryOptions<T> = {\n// formatter?: (data:any) => T;\n// };\n\n/**\n * useQuery\n * @description for public api\n * @param query\n * @param options\n */\nexport const useQuery = <T>(\n query: string,\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 (!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 // @ts-ignore\n return useSWR<T>(\n `${apiBaseUrl}${query}`,\n (url, init) => fetcher(url, init, { formatter }),\n swrOptions\n );\n};\n","import { createContext } from \"react\";\nimport { Observable } from \"rxjs\";\nimport { type ConfigStore } from \"@orderly.network/core\";\nimport { MemoryConfigStore } from \"@orderly.network/core\";\n\nexport interface OrderlyContextState {\n // coin cion generator\n\n // ws: WebSocketAdpater;\n fetcher?: (url: string, init: RequestInit) => Promise<any>;\n apiBaseUrl: string;\n configStore: ConfigStore;\n // account: Account;\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 } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n getMockSigner,\n} from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useContext } from \"react\";\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 \"orderly-account-id\":\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\n },\n });\n};\n\nexport const useMutation = <T, E>(\n url: string,\n options?: SWRMutationConfiguration<T, E>\n) => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n if (!url.startsWith(\"http\")) {\n url = `${apiBaseUrl}${url}`;\n }\n\n // sign message;\n const signer = getMockSigner();\n const { trigger, data, error, reset, isMutating } = useSWRMutation(\n url,\n fetcher,\n options\n );\n\n const mutation = async (data: any) => {\n const payload: MessageFactor = {\n method: \"POST\",\n url,\n data,\n };\n\n const signature = await signer.sign(payload);\n\n return trigger({ data, signature });\n };\n\n return {\n mutation,\n data,\n error,\n reset,\n isMutating,\n };\n};\n","\"use client\";\n\nimport useSWR, { SWRConfiguration, SWRResponse } from \"swr\";\nimport { signatureMiddleware } from \"./middleware/signatureMiddleware\";\nimport { get } from \"@orderly.network/net\";\nimport { useContext } from \"react\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { fetcher, useQueryOptions } from \"./utils/fetcher\";\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 { apiBaseUrl } = useContext(OrderlyContext);\n const { formatter, ...swrOptions } = options || {};\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 `${apiBaseUrl}${query}`,\n (url, init) => fetcher(url, init, { formatter }),\n {\n ...swrOptions,\n use: [signatureMiddleware, ...middleware],\n }\n );\n};\n","import { SWRHook, Middleware } from \"swr\";\nimport { MessageFactor, getMockSigner } from \"@orderly.network/core\";\n\nexport const signatureMiddleware: Middleware = (useSWRNext: SWRHook) => {\n return (key, fetcher, config) => {\n const extendedFetcher = async (url: string) => {\n // console.log(\"signature middleware::\", key, url);\n const signer = getMockSigner();\n\n const payload: MessageFactor = {\n method: \"GET\",\n url: url,\n };\n\n const signature = await signer.sign(payload);\n\n // @ts-ignore\n return fetcher(url, {\n headers: {\n ...signature,\n \"orderly-account-id\":\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\n },\n });\n };\n return useSWRNext(key, extendedFetcher, config);\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 { 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\";\nimport { API } from \"@orderly.network/types\";\nimport { usePrivateQuery } from \"./usePrivateQuery\";\n\nexport const useAccount = (): {\n account: AccountState;\n login: (address: string) => void;\n info: API.AccountInfo | undefined;\n} => {\n const { configStore } = useContext(OrderlyContext);\n\n if (!configStore)\n throw new Error(\"configStore is not defined, please use OrderlyProvider\");\n\n const account = useConstant(() => {\n let account = SimpleDI.get<Account>(\"account\");\n\n if (!account) {\n account = new Account(configStore);\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n const { data: accountInfo } =\n usePrivateQuery<API.AccountInfo>(\"/client/info\");\n\n // console.log(accountInfo);\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 // console.log(state);\n //maxLeverage\n\n return {\n account: state!,\n info: accountInfo,\n login,\n };\n};\n","import { getMockSigner, SimpleDI } from \"@orderly.network/core\";\n\nimport { WebSocketClient } from \"@orderly.network/net\";\nimport useConstant from \"use-constant\";\n\nexport const WS_NAME = \"websocketClient\";\n\nexport const useWebSocketClient = () => {\n const ws = useConstant(() => {\n let websocketClient = SimpleDI.get<WebSocketClient>(WS_NAME);\n\n if (!websocketClient) {\n websocketClient = new WebSocketClient({\n accountId:\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\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\";\n\nexport { useWebSocketClient } from \"./useWebSocketClient\";\n\nexport { useEventCallback, useObservable } from \"rxjs-hooks\";\n\nexport { default as useConstant } from \"use-constant\";\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 { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { BehaviorSubject, Subscription } from \"rxjs\";\nimport {\n startWith,\n map,\n scan,\n withLatestFrom,\n tap,\n switchMap,\n debounceTime,\n} from \"rxjs/operators\";\nimport { merge } from \"rxjs\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { pick, pathOr, defaultTo, last, compose, head } from \"ramda\";\nimport useConstant from \"use-constant\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useObservable } from \"rxjs-hooks\";\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\nconst 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 result.push([price, quantity, quantity + (i > 0 ? result[i - 1][2] : 0)]);\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 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 useOrderbook\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbook = (\n symbol: string,\n initial: OrderbookData = { asks: [], bids: [] },\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new Error(\"useOrderbook requires a symbol\");\n }\n\n const [data, setData] = useState<OrderbookData>(initial);\n const [depth, setDepth] = useState(0.001);\n const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const ws = useWebSocketClient();\n\n const orderbookSubscriberRef = useRef<Subscription | undefined>();\n\n const ticker = useTickerStream(symbol);\n\n // console.log(\"ticker:::::::\", ticker);\n\n const orderbookRequest$ = useMemo(() => {\n return ws.observe(\n {\n event: \"request\",\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n undefined,\n (message: any) => message.event === \"request\"\n );\n }, [symbol]);\n\n const orderbookUpdate$ = useMemo(() => {\n return ws\n .observe(`${symbol}@orderbookupdate`, () => ({\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n }))\n .pipe(\n startWith({ asks: [], bids: [] })\n // filter((message: any) => !!message.success)\n );\n }, [symbol]);\n\n const orderbookOptions$ = useConstant(() => {\n return new BehaviorSubject({\n depth: 0.001,\n level: 10,\n });\n });\n\n const markPrice = useObservable(\n (_, input$) =>\n input$.pipe(\n debounceTime(200),\n switchMap(([symbol]) => {\n return ws\n .observe(`${symbol}@markprice`)\n .pipe(map((data: any) => data.price));\n })\n ),\n 0,\n [symbol]\n );\n\n useEffect(() => {\n if (orderbookSubscriberRef.current) {\n orderbookSubscriberRef.current.unsubscribe();\n }\n\n orderbookSubscriberRef.current = merge(orderbookRequest$, orderbookUpdate$)\n .pipe(\n // tap((data) => console.log(data)),\n map<any, OrderbookData>(\n (data) => pick([\"asks\", \"bids\"], data) as OrderbookData\n ),\n scan<OrderbookData, OrderbookData>((acc, curr) => {\n if (!acc.asks && !acc.bids) {\n return curr;\n }\n\n return mergeOrderbook(acc, curr);\n }),\n map((data) => reduceOrderbook(depth, level, data))\n )\n .subscribe((data) => {\n setData(data);\n });\n\n () => {\n return orderbookSubscriberRef.current?.unsubscribe();\n };\n }, [orderbookRequest$, orderbookUpdate$]);\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.bids.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 // const asksFirst = asksFirstPath(data);\n // const bidsFirst = bidsFirstPath(data);\n // console.log(\"asksFirst\", asksFrist, bidsFirst, ticker[\"24h_close\"]);\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker, data]);\n\n return [\n { ...data, markPrice, middlePrice },\n { onDepthChange, depth },\n ];\n};\n\nexport type useOrderbookReturn = ReturnType<typeof useOrderbook>;\n","import { useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\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\";\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 = useWebSocketClient();\n\n const ticker = useObservable<any, any>(\n (_, input$) =>\n input$.pipe(\n map(([config]) => config),\n combineLatestWith(ws.observe(`${symbol}@ticker`).pipe(startWith({}))),\n map(([config, ticker]: [API.MarketInfoExt, any]) => {\n if (!config) return config;\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\n return config;\n })\n ),\n null,\n [info]\n );\n\n // return useQuery(`/public/futures/${symbol}`);\n return ticker;\n};\n","import { useMutation } from \"../useMutation\";\nimport { useCallback, useEffect, 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\";\nimport { type FormikErrors, useFormik, FormikState } from \"formik\";\nimport { useEventCallback, useObservable } from \"rxjs-hooks\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { switchMap, map, takeWhile, withLatestFrom } from \"rxjs/operators\";\nimport { compose, head, type } from \"ramda\";\nimport {\n OrderEntityKey,\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { Observable } from \"rxjs\";\nimport { OrderFactory, OrderFormEntity } from \"../utils/createOrder\";\n\nexport interface OrderEntryReturn {\n onSubmit: (values?: OrderEntity) => Promise<any>;\n validateForm: (values?: any) => Promise<FormikErrors<OrderEntity>>;\n resetForm: (nextState?: Partial<FormikState<OrderEntity>>) => void;\n\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 submitCount: number;\n isSubmitting: boolean;\n\n //\n onFocus?: (field: keyof OrderEntity) => void;\n onBlur?: (field: keyof OrderEntity) => void;\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 initialValue: Partial<OrderEntity> = {},\n options?: UseOrderEntryOptions\n): OrderEntryReturn => {\n // const [orderType, setOrderType] = useState<OrderType>(OrderType.MARKET);\n // const [orderSide, setOrderSide] = useState<OrderSide>(OrderSide.BUY);\n const { mutation } = useMutation<OrderEntity, any>(\"/order\");\n // const [freeCollateral, setFreeCollateral] = useState(0);\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 const [valuesUpdate, [orderExtraValues]] = useEventCallback(\n (event$: Observable<any>, state$) => {\n return event$.pipe(\n withLatestFrom(state$),\n map(([event, state]) => {\n const { field, value } = event;\n\n console.log(\"orderExtraValues\", field, value);\n\n return [{ ...state[0], [field]: value }];\n })\n );\n },\n [\n {\n order_type: OrderType.MARKET,\n side: OrderSide.BUY,\n reduce_only: false,\n },\n ]\n );\n\n // console.log(\"orderExtraValues\", orderExtraValues);\n\n // 订阅maskPrice\n const ws = useWebSocketClient();\n\n const markPrice = useObservable(\n (_, input$) =>\n input$.pipe(\n switchMap(([symbol]) => {\n return ws.observe(`${symbol}@markprice`).pipe(\n map((data: any) => data.price)\n // takeWhile(() => type === OrderType.MARKET)\n );\n })\n ),\n 0,\n [symbol]\n );\n\n // console.log(markPrice);\n\n const formik = useFormik<OrderFormEntity>({\n initialValues: {\n // order_type: OrderType.MARKET,\n // side: OrderSide.BUY,\n order_quantity: \"\",\n total: \"\",\n order_price: \"\",\n visible_quantity: 1,\n ...initialValue,\n },\n validate: (values) => {\n const creator = OrderFactory.create(orderExtraValues.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 onSubmit: (values) => {\n console.log(values);\n },\n });\n\n const maxQty = useMaxQty(\n symbol,\n orderExtraValues.side,\n orderExtraValues.reduce_only\n );\n\n const formFieldds = useMemo(() => {\n return [\"order_quantity\", \"order_price\", \"total\"];\n }, []);\n\n const setValue = (field: OrderEntityKey, value: any) => {\n if (formFieldds.indexOf(field) < 0) {\n valuesUpdate({ field, value });\n return;\n }\n\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([\n { ...formik.values, ...orderExtraValues },\n field,\n value,\n markPrice,\n { baseDP, quoteDP },\n ]);\n\n formik.setValues(newValues as OrderEntity, true);\n };\n\n /**\n * 提交订单,校验数据\n * @param values\n * @returns\n */\n const onSubmit = (values?: OrderEntity) => {\n values = (values || formik.values) as OrderEntity;\n\n if (\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 return Promise.resolve().then(() => {\n const orderCreator = OrderFactory.create(\n !!values!.order_type_ext ? values!.order_type_ext : values!.order_type\n );\n\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 console.log(\"orderentry data:::\", data);\n\n formik.setSubmitting(true);\n\n return mutation({\n ...data,\n symbol,\n }).finally(() => {\n formik.setSubmitting(false);\n });\n });\n };\n\n // symbol 变化的时候重置表单\n useEffect(() => {\n // if (symbol !== formik.values.symbol) {\n formik.resetForm();\n // }\n }, [symbol]);\n\n return {\n maxQty,\n // formState,\n values: { ...formik.values, ...orderExtraValues },\n errors: formik.errors,\n freeCollateral,\n markPrice,\n setValue,\n onSubmit,\n isSubmitting: formik.isSubmitting,\n resetForm: formik.resetForm,\n validateForm: formik.validateForm,\n submitCount: formik.submitCount,\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 OrderEntityKey,\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 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 if (priceDP > config.quoteDP) {\n price.toDecimalPlaces(config.quoteDP);\n values.order_price = price.toNumber();\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 total.toDecimalPlaces(Math.min(quantityDP, config.baseDP));\n\n return [\n { ...values, total: total.toNumber() },\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.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: OrderEntityKey\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 { 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\";\nimport { 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 { useMarkPriceStream } from \"./useMarkPriceStream\";\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 */\nexport const useCollateral = (dp: number = 6): CollateralOutputs => {\n const positions = usePositionStream();\n const orders = useOrderStream();\n const { info: accountInfo } = useAccount();\n const symbolInfo = useSymbolsInfo();\n\n const markPrices = useMarkPriceStream();\n\n // console.log(\"----- markPrices\", markPrices);\n\n const { data } = usePrivateQuery<API.Holding[]>(\"/client/holding\", {\n formatter: (data) => {\n return data.holding;\n },\n });\n\n const totalCollateral = useObservable<Decimal, any>(\n (_, input$) =>\n merge(input$).pipe(\n debounceTime(100),\n filter((data) => !!data[0]),\n map(\n ([data, unsettlemnedPnL, markPrices]: [\n API.Holding[],\n number,\n any\n ]) => {\n //取出 USDC\n const nonUSDC: {\n holding: number;\n markPrice: number;\n //保證金替代率 暂时默认0\n discount: number;\n }[] = [];\n let USDC_holding = 0;\n\n data.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 return new Decimal(number);\n }\n )\n ),\n zero,\n [data, totalUnsettlementPnLPath(positions), markPrices]\n );\n\n const totalInitialMarginWithOrders = useObservable<any, any>(\n (_, input$) =>\n input$.pipe(\n filter((data) => !!data[3] && !!data[4]),\n map(([positions, orders, markPrices, accountInfo, symbolInfo]) => {\n return account.totalInitialMarginWithOrders({\n positions: positionsPath(positions),\n orders: orders?.[0] ?? [],\n markPrices,\n IMR_Factors: accountInfo.imr_factor,\n maxLeverage: accountInfo.max_leverage,\n symbolInfo,\n });\n // return 0;\n })\n ),\n 0,\n [positions, orders, markPrices, accountInfo, symbolInfo]\n );\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: 0,\n };\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { positions } from \"@orderly.network/futures\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, debounce, debounceTime, map } from \"rxjs/operators\";\n\nimport { type SWRConfiguration } from \"swr\";\nimport { createGetter } from \"../utils/createGetter\";\nimport { useFundingRates } from \"./useFundingRates\";\nimport { type API } from \"@orderly.network/types\";\nimport { useMarkPricesSubject } from \"./useMarkPricesSubject\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useAccount } from \"../useAccount\";\nimport { useCollateral } from \"./useCollateral\";\n\nexport interface PositionReturn {\n data: any[];\n loading: boolean;\n close: (qty: number) => void;\n}\n\nexport const usePositionStream = (\n symbol?: string,\n options?: SWRConfiguration\n) => {\n // const [data, setData] = useState<Position[]>([]);\n // const [loading, setLoading] = useState<boolean>(false);\n const [visibledSymbol, setVisibleSymbol] = useState<string | undefined>(\n symbol\n );\n\n const symbolInfo = useSymbolsInfo();\n const { info: accountInfo } = useAccount();\n\n const fundingRates = useFundingRates();\n const markPrices$ = useMarkPricesSubject();\n // const { totalCollateral } = useCollateral();\n\n const { data, error, isLoading } = usePrivateQuery<API.PositionInfo>(\n `/positions`,\n {\n // revalidateOnFocus: false,\n // revalidateOnReconnect: false,\n ...options,\n formatter: (data) => data,\n }\n );\n\n type PositionArray =\n | (API.Position & {\n sum_unitary_funding?: number;\n })[]\n | undefined;\n\n // TODO: 动态更新 markprice\n const value = useObservable<PositionArray, [PositionArray, any, any]>(\n (_, input$) =>\n input$.pipe(\n // map((data) => {\n // return data[0];\n // }),\n combineLatestWith(markPrices$),\n debounceTime(100),\n map(([[data, symbolInfo, accountInfo], markPrices]) => {\n // console.log(\"obser\", data);\n let totalCollateral = 0;\n\n return data?.map((item) => {\n const price = (markPrices as any)[item.symbol] ?? item.mark_price;\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\")],\n positionNotional: positions.notional(item.position_qty, price),\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 })\n ),\n undefined,\n [data?.rows, symbolInfo, accountInfo]\n );\n\n // 合计数据\n const aggregatedData = useMemo(() => {\n const aggregatedData = {\n unsettledPnL: NaN,\n unrealPnL: NaN,\n notional: NaN,\n };\n\n if (value && value.length) {\n aggregatedData.unrealPnL = positions.totalUnrealizedPnL(value);\n aggregatedData.notional = positions.totalNotional(value);\n aggregatedData.unsettledPnL = positions.totalUnsettlementPnL(\n value.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 }, [value, fundingRates]);\n\n const showSymbol = useCallback((symbol: string) => {\n setVisibleSymbol(symbol);\n }, []);\n\n return [\n { rows: value, aggregated: aggregatedData },\n createGetter<Omit<API.Position, \"rows\">>(data as any, 1),\n {\n close: (qty: number) => {},\n loading: false,\n showSymbol,\n error,\n loadMore: () => {},\n refresh: () => {},\n // toggleHideOthers,\n // filter: (filter: string) => {},\n },\n ];\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 { map } from \"rxjs/operators\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport useConstant from \"use-constant\";\n\nexport const useMarkPricesSubject = () => {\n const ws = useWebSocketClient();\n return useConstant(() =>\n ws.observe<{ [key: string]: number }>(\"markprices\").pipe(\n map<any, any>((data: WSMessage.MarkPrice[]) => {\n const prices: { [key: string]: number } = {};\n\n data.forEach((item) => {\n prices[item.symbol] = item.price;\n });\n return prices;\n })\n )\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\";\n\nconst fetcher = (url: string, init: RequestInit) => get(url, init);\n\nexport const usePrivateInfiniteQuery = (\n getKey: SWRInfiniteKeyLoader,\n options?: SWRInfiniteConfiguration\n) => {\n const middleware = Array.isArray(options?.use) ? options?.use ?? [] : [];\n const { apiBaseUrl } = useContext(OrderlyContext);\n\n const result = useSWRInfinite(\n (index, prevData) => `${apiBaseUrl}${getKey(index, prevData)}`,\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 } from \"react\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, map } from \"rxjs/operators\";\nimport { useMarkPricesSubject } from \"./useMarkPricesSubject\";\nimport { API } 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 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 = useObservable<API.OrderExt[] | null, API.Order[][]>(\n (_, input$) =>\n input$.pipe(\n map(([data]) => {\n return data.flat();\n }),\n combineLatestWith(markPrices$),\n map(([data, markPrices]) => {\n return data.map((item: API.Order) => ({\n ...item,\n mark_price: (markPrices as any)[item.symbol] ?? 0,\n }));\n })\n ),\n null,\n [res.data ?? []]\n );\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 { useObservable } from \"rxjs-hooks\";\n\nimport { useMarkPricesSubject } from \"./useMarkPricesSubject\";\n\nexport const useMarkPriceStream = () => {\n const markPrice$ = useMarkPricesSubject();\n\n return useObservable(() => markPrice$, {});\n};\n","import { useMemo } from \"react\";\nimport { type API, OrderSide, type WSMessage } from \"@orderly.network/types\";\nimport { usePositionStream } from \"./usePositionStream\";\nimport { useOrderStream } from \"./useOrderStream\";\nimport { useAccount } from \"../useAccount\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\n\nimport { useMarkPriceStream } from \"./useMarkPriceStream\";\nimport { account } from \"@orderly.network/futures\";\nimport { useObservable } from \"rxjs-hooks\";\nimport { map, filter, distinct, tap, switchMap } from \"rxjs/operators\";\nimport { useCollateral } from \"./useCollateral\";\nimport { pathOr } from \"ramda\";\nimport { iif } from \"rxjs\";\n\nconst positionsPath = pathOr([], [0, \"rows\"]);\n\nexport const useMaxQty = (\n symbol: string,\n side: OrderSide,\n reduceOnly: boolean = false\n) => {\n // const ws = useWebSocketClient();\n const positions = usePositionStream();\n const orders = useOrderStream();\n const { info: accountInfo } = useAccount();\n const symbolInfo = useSymbolsInfo();\n\n const { totalCollateral } = useCollateral();\n\n const markPrices = useMarkPriceStream();\n\n const maxQty = useObservable<number, any>(\n (_, input$) =>\n input$.pipe(\n switchMap(([{ reduceOnly }]) =>\n iif(\n () => reduceOnly,\n input$.pipe(\n filter(([{ positions }]) => positions.length > 0),\n map(\n ([\n {\n positions,\n\n symbol,\n side,\n },\n ]) => {\n const positionQty = account.getQtyFromPositions(\n positions,\n symbol\n );\n\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 ),\n input$.pipe(\n filter(\n ([\n {\n markPrices,\n positions,\n orders,\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n },\n ]) =>\n !!symbol &&\n !!side &&\n !!markPrices[symbol] &&\n !!positions &&\n !!orders &&\n !!accountInfo &&\n !!symbolInfo &&\n !!totalCollateral\n ),\n // 数据准备\n map(\n ([\n {\n markPrices,\n positions,\n orders,\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n },\n ]) => {\n const getSymbolInfo = symbolInfo[symbol];\n // 当前symbol的仓位\n const positionQty = account.getQtyFromPositions(\n positions,\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 // console.log(\"otherIMs\", otherIMs);\n\n return [\n side,\n {\n markPrice: markPrices[symbol],\n\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 dp: getSymbolInfo(\"base_tick\"),\n },\n ];\n }\n ),\n map(([side, inputs, options]) => {\n const maxQty = account.maxQty(side, inputs);\n\n // console.log(\"maxQty\", side, maxQty, options);\n\n return maxQty;\n }),\n distinct()\n // tap((data: number) => console.log(\"************\", data))\n )\n )\n )\n ),\n 0,\n [\n {\n markPrices,\n positions: positionsPath(positions),\n orders: orders[0] ?? [],\n accountInfo,\n symbolInfo,\n symbol,\n side,\n totalCollateral,\n reduceOnly,\n },\n ]\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 = { [P in keyof OrderEntity]?: string };\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: !!data.order_type_ext ? data.order_type_ext : 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: { [P in keyof OrderEntity]?: string } = {};\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 = \"quantity is required\";\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 = `quantity must be greater than ${base_min}`;\n } else if (qty.gt(maxQty)) {\n errors.order_quantity = `quantity must be less than ${base_max}`;\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 = `Quantity should be greater than ${quote_min}`;\n } else if (totalNumber.gt(quote_max)) {\n errors.total = `Quantity should be less or equal than ${quote_max}`;\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 = \"price is required\";\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 = `price must be greater than ${minPriceNumber}`;\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = `price must be less than ${maxPriceNumber}`;\n }\n }\n\n return errors;\n });\n }\n}\n\nexport class MarketOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(values),\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 { useObservable } from \"rxjs-hooks\";\nimport { useQuery } from \"../useQuery\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { withLatestFrom, map, startWith } from \"rxjs/operators\";\nimport { type WSMessage } from \"@orderly.network/core\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWebSocketClient();\n const { data } = useQuery<WSMessage.Ticker[]>(`/public/futures`);\n // const config = useSymbolsInfo();\n\n const value = useObservable<WSMessage.Ticker[] | null, WSMessage.Ticker[][]>(\n (_, input$) =>\n ws.observe<any>(\"tickers\").pipe(\n startWith([]),\n withLatestFrom(input$.pipe(map((args) => args[0]))),\n map((args) => {\n if (args[0].length === 0) {\n return args[1];\n }\n\n return args[1].map((item) => {\n const ticker = args[0].find(\n (t: WSMessage.Ticker) => t.symbol === item.symbol\n );\n if (ticker) {\n // console.log(config[item.symbol]());\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\n // return args[1];\n })\n ),\n null,\n [data as WSMessage.Ticker[]]\n );\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 { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, timeInterval } from \"rxjs/operators\";\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","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/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/useAccountInstance.ts","../src/useWS.ts","../src/orderly/useOrderbook.ts","../src/orderly/useTickerStream.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/useMarkPricesSubject.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/apis/index.ts","../src/apis/useInfo.ts","../src/apis/useToken.ts","../src/apis/useFundingRateBySymbol.ts","../src/apis/useFundingRate.ts"],"names":["useContext","fetcher","account","data","useSWR","SimpleDI","Account","useState","useEffect","ExchangeStatusEnum","SystemStateEnum","useObservable","useConstant","useEventCallback","default","createContext","getMockSigner","WS_NAME","useCallback","BehaviorSubject","startWith","map","merge","ticker","index","symbol","depth","useMemo","OrderSide","OrderType","switchMap","withLatestFrom","compose","head","Decimal","aggregatedData","order","pathOr","positions","totalValue","positionsPath","type","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 configStore: ConfigStore;\n keyStore: OrderlyKeyStore;\n walletAdapter: WalletAdapter;\n networkId: string;\n // account: Account;\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 } from \"@orderly.network/net\";\nimport {\n type MessageFactor,\n type SignedMessagePayload,\n getMockSigner,\n} from \"@orderly.network/core\";\nimport { OrderlyContext } from \"./orderlyContext\";\nimport { useContext } from \"react\";\nimport { SimpleDI } from \"@orderly.network/core\";\nimport { Account } from \"@orderly.network/core\";\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 \"orderly-account-id\":\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\n },\n });\n};\n\nexport const useMutation = <T, E>(\n url: string,\n options?: SWRMutationConfiguration<T, E>\n) => {\n const { apiBaseUrl } = useContext(OrderlyContext);\n if (!url.startsWith(\"http\")) {\n url = `${apiBaseUrl}${url}`;\n }\n let account = SimpleDI.get<Account>(\"account\");\n // sign message;\n const signer = account.signer;\n const { trigger, data, error, reset, isMutating } = useSWRMutation(\n url,\n fetcher,\n options\n );\n\n const mutation = async (data: any) => {\n const payload: MessageFactor = {\n method: \"POST\",\n url,\n data,\n };\n\n const signature = await signer.sign(payload);\n\n return trigger({ data, signature });\n };\n\n return {\n mutation,\n data,\n error,\n reset,\n isMutating,\n };\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 () => (account.state.status >= AccountStatusEnum.SignedIn ? 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 // \"orderly-account-id\":\n // \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\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 // info: API.AccountInfo | undefined;\n} => {\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 const state = useObservable<AccountState>(\n () => account.state$,\n account.stateValue\n );\n\n // const { data: accountInfo } =\n // usePrivateQuery<API.AccountInfo>(\"/client/info\");\n\n // console.log(accountInfo);\n\n const login = useCallback(\n (address: string) => {\n account.login(address);\n },\n [account]\n );\n\n return {\n // account: state!,\n account,\n state,\n // info: {},\n login,\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:\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\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 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 } = 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);\n\n SimpleDI.registerByName(\"account\", account);\n }\n return account;\n });\n\n console.log(\"account instance ======>>>>>\", account);\n\n return account;\n};\n","import { 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\n if (!websocketClient) {\n websocketClient = new WS({\n accountId:\n \"0x47ab075adca7dfe9dd206eb7c50a10f7b99f4f08fa6c3abd4c170d438e15093b\",\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","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { BehaviorSubject, Subscription } from \"rxjs\";\nimport {\n startWith,\n map,\n scan,\n withLatestFrom,\n tap,\n switchMap,\n debounceTime,\n} from \"rxjs/operators\";\nimport { merge } from \"rxjs\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { pick, pathOr, defaultTo, last, compose, head } from \"ramda\";\nimport useConstant from \"use-constant\";\nimport { useTickerStream } from \"./useTickerStream\";\nimport { useObservable } from \"rxjs-hooks\";\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\nconst 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 result.push([price, quantity, quantity + (i > 0 ? result[i - 1][2] : 0)]);\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 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 useOrderbook\n * @description React hook that returns the current orderbook for a given market\n */\nexport const useOrderbook = (\n symbol: string,\n initial: OrderbookData = { asks: [], bids: [] },\n options?: OrderbookOptions\n) => {\n if (!symbol) {\n throw new Error(\"useOrderbook requires a symbol\");\n }\n\n const [data, setData] = useState<OrderbookData>(initial);\n const [depth, setDepth] = useState(0.001);\n const [level, setLevel] = useState(() => options?.level ?? 10);\n\n const ws = useWebSocketClient();\n\n const orderbookSubscriberRef = useRef<Subscription | undefined>();\n\n const ticker = useTickerStream(symbol);\n\n // console.log(\"ticker:::::::\", ticker);\n\n const orderbookRequest$ = useMemo(() => {\n return ws.observe(\n {\n event: \"request\",\n params: {\n type: \"orderbook\",\n symbol: symbol,\n },\n },\n undefined,\n (message: any) => message.event === \"request\"\n );\n }, [symbol]);\n\n const orderbookUpdate$ = useMemo(() => {\n return ws\n .observe(`${symbol}@orderbookupdate`, () => ({\n event: \"subscribe\",\n topic: `${symbol}@orderbookupdate`,\n }))\n .pipe(\n startWith({ asks: [], bids: [] })\n // filter((message: any) => !!message.success)\n );\n }, [symbol]);\n\n const orderbookOptions$ = useConstant(() => {\n return new BehaviorSubject({\n depth: 0.001,\n level: 10,\n });\n });\n\n const markPrice = useObservable(\n (_, input$) =>\n input$.pipe(\n debounceTime(200),\n switchMap(([symbol]) => {\n return ws\n .observe(`${symbol}@markprice`)\n .pipe(map((data: any) => data.price));\n })\n ),\n 0,\n [symbol]\n );\n\n useEffect(() => {\n if (orderbookSubscriberRef.current) {\n orderbookSubscriberRef.current.unsubscribe();\n }\n\n orderbookSubscriberRef.current = merge(orderbookRequest$, orderbookUpdate$)\n .pipe(\n // tap((data) => console.log(data)),\n map<any, OrderbookData>(\n (data) => pick([\"asks\", \"bids\"], data) as OrderbookData\n ),\n scan<OrderbookData, OrderbookData>((acc, curr) => {\n if (!acc.asks && !acc.bids) {\n return curr;\n }\n\n return mergeOrderbook(acc, curr);\n }),\n map((data) => reduceOrderbook(depth, level, data))\n )\n .subscribe((data) => {\n setData(data);\n });\n\n () => {\n return orderbookSubscriberRef.current?.unsubscribe();\n };\n }, [orderbookRequest$, orderbookUpdate$]);\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.bids.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 // const asksFirst = asksFirstPath(data);\n // const bidsFirst = bidsFirstPath(data);\n // console.log(\"asksFirst\", asksFrist, bidsFirst, ticker[\"24h_close\"]);\n\n return [asksFrist, bidsFirst, ticker[\"24h_close\"]].sort()[1];\n }, [ticker, data]);\n\n return [\n { ...data, markPrice, middlePrice },\n { onDepthChange, depth },\n ];\n};\n\nexport type useOrderbookReturn = ReturnType<typeof useOrderbook>;\n","import { useEffect, useState } from \"react\";\nimport { useQuery } from \"../useQuery\";\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\";\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 = useWebSocketClient();\n\n const ticker = useObservable<any, any>(\n (_, input$) =>\n input$.pipe(\n map(([config]) => config),\n combineLatestWith(ws.observe(`${symbol}@ticker`).pipe(startWith({}))),\n map(([config, ticker]: [API.MarketInfoExt, any]) => {\n if (!config) return config;\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\n return config;\n })\n ),\n null,\n [info]\n );\n\n // return useQuery(`/public/futures/${symbol}`);\n return ticker;\n};\n","import { useMutation } from \"../useMutation\";\nimport { useCallback, useEffect, 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\";\nimport { type FormikErrors, useFormik, FormikState } from \"formik\";\nimport { useEventCallback, useObservable } from \"rxjs-hooks\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { switchMap, map, takeWhile, withLatestFrom } from \"rxjs/operators\";\nimport { compose, head, type } from \"ramda\";\nimport {\n OrderEntityKey,\n baseInputHandle,\n getCalculateHandler,\n orderEntityFormatHandle,\n} from \"../utils/orderEntryHelper\";\nimport { useCollateral } from \"./useCollateral\";\nimport { useMaxQty } from \"./useMaxQty\";\nimport { Observable } from \"rxjs\";\nimport { OrderFactory, OrderFormEntity } from \"../utils/createOrder\";\n\nexport interface OrderEntryReturn {\n onSubmit: (values?: OrderEntity) => Promise<any>;\n validateForm: (values?: any) => Promise<FormikErrors<OrderEntity>>;\n resetForm: (nextState?: Partial<FormikState<OrderEntity>>) => void;\n\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 submitCount: number;\n isSubmitting: boolean;\n\n //\n onFocus?: (field: keyof OrderEntity) => void;\n onBlur?: (field: keyof OrderEntity) => void;\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 initialValue: Partial<OrderEntity> = {},\n options?: UseOrderEntryOptions\n): OrderEntryReturn => {\n // const [orderType, setOrderType] = useState<OrderType>(OrderType.MARKET);\n // const [orderSide, setOrderSide] = useState<OrderSide>(OrderSide.BUY);\n const { mutation } = useMutation<OrderEntity, any>(\"/order\");\n // const [freeCollateral, setFreeCollateral] = useState(0);\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 const [valuesUpdate, [orderExtraValues]] = useEventCallback(\n (event$: Observable<any>, state$) => {\n return event$.pipe(\n withLatestFrom(state$),\n map(([event, state]) => {\n const { field, value } = event;\n\n console.log(\"orderExtraValues\", field, value);\n\n return [{ ...state[0], [field]: value }];\n })\n );\n },\n [\n {\n order_type: OrderType.MARKET,\n side: OrderSide.BUY,\n reduce_only: false,\n },\n ]\n );\n\n // console.log(\"orderExtraValues\", orderExtraValues);\n\n // 订阅maskPrice\n const ws = useWebSocketClient();\n\n const markPrice = useObservable(\n (_, input$) =>\n input$.pipe(\n switchMap(([symbol]) => {\n return ws.observe(`${symbol}@markprice`).pipe(\n map((data: any) => data.price)\n // takeWhile(() => type === OrderType.MARKET)\n );\n })\n ),\n 0,\n [symbol]\n );\n\n // console.log(markPrice);\n\n const formik = useFormik<OrderFormEntity>({\n initialValues: {\n // order_type: OrderType.MARKET,\n // side: OrderSide.BUY,\n order_quantity: \"\",\n total: \"\",\n order_price: \"\",\n visible_quantity: 1,\n ...initialValue,\n },\n validate: (values) => {\n const creator = OrderFactory.create(orderExtraValues.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 onSubmit: (values) => {\n console.log(values);\n },\n });\n\n const maxQty = useMaxQty(\n symbol,\n orderExtraValues.side,\n orderExtraValues.reduce_only\n );\n\n const formFieldds = useMemo(() => {\n return [\"order_quantity\", \"order_price\", \"total\"];\n }, []);\n\n const setValue = (field: OrderEntityKey, value: any) => {\n if (formFieldds.indexOf(field) < 0) {\n valuesUpdate({ field, value });\n return;\n }\n\n const fieldHandler = getCalculateHandler(field);\n const newValues = compose(\n head,\n orderEntityFormatHandle(baseDP, quoteDP),\n fieldHandler,\n baseInputHandle\n )([\n { ...formik.values, ...orderExtraValues },\n field,\n value,\n markPrice,\n { baseDP, quoteDP },\n ]);\n\n formik.setValues(newValues as OrderEntity, true);\n };\n\n /**\n * 提交订单,校验数据\n * @param values\n * @returns\n */\n const onSubmit = (values?: OrderEntity) => {\n values = (values || formik.values) as OrderEntity;\n\n if (\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 return Promise.resolve().then(() => {\n const orderCreator = OrderFactory.create(\n !!values!.order_type_ext ? values!.order_type_ext : values!.order_type\n );\n\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 console.log(\"orderentry data:::\", data);\n\n formik.setSubmitting(true);\n\n return mutation({\n ...data,\n symbol,\n }).finally(() => {\n formik.setSubmitting(false);\n });\n });\n };\n\n // symbol 变化的时候重置表单\n useEffect(() => {\n // if (symbol !== formik.values.symbol) {\n formik.resetForm();\n // }\n }, [symbol]);\n\n return {\n maxQty,\n // formState,\n values: { ...formik.values, ...orderExtraValues },\n errors: formik.errors,\n freeCollateral,\n markPrice,\n setValue,\n onSubmit,\n isSubmitting: formik.isSubmitting,\n resetForm: formik.resetForm,\n validateForm: formik.validateForm,\n submitCount: formik.submitCount,\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 OrderEntityKey,\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 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 if (priceDP > config.quoteDP) {\n price.toDecimalPlaces(config.quoteDP);\n values.order_price = price.toNumber();\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 total.toDecimalPlaces(Math.min(quantityDP, config.baseDP));\n\n return [\n { ...values, total: total.toNumber() },\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.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: OrderEntityKey\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 { useMarkPricesSubject } from \"./useMarkPricesSubject\";\nimport { useSymbolsInfo } from \"./useSymbolsInfo\";\nimport { useMarkPricesStream } from \"./useMarkPricesStream\";\nimport { propOr } from \"ramda\";\nimport { OrderEntity } from \"@orderly.network/types\";\nimport { useMutation } from \"../useMutation\";\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 [data, setData] = useState<Position[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\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 { mutation } = useMutation<OrderEntity, any>(\"/order\");\n\n const fundingRates = useFundingRates();\n const markPrices$ = useMarkPricesSubject();\n // const { totalCollateral } = useCollateral();\n\n const { data, error, isLoading } = usePrivateQuery<API.PositionInfo>(\n `/positions`,\n {\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\n type PositionArray =\n | (API.Position & {\n sum_unitary_funding?: number;\n })[]\n | undefined;\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 return data.rows.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]);\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 const onClosePosition = useCallback(\n (order: Pick<OrderEntity, \"order_type\" | \"order_price\" | \"side\">) => {\n return mutation(order).finally(() => {});\n },\n []\n );\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 // 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 { map } from \"rxjs/operators\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { WSMessage } from \"@orderly.network/types\";\nimport useConstant from \"use-constant\";\n\nexport const useMarkPricesSubject = () => {\n const ws = useWebSocketClient();\n return useConstant(() =>\n ws.observe<{ [key: string]: number }>(\"markprices\").pipe(\n map<any, any>((data: WSMessage.MarkPrice[]) => {\n const prices: { [key: string]: number } = {};\n\n data.forEach((item) => {\n prices[item.symbol] = item.price;\n });\n return prices;\n })\n )\n );\n};\n","import useSWRSubscription from \"swr/subscription\";\n\nimport { useWS } from \"../useWS\";\nimport { useState } from \"react\";\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.subscription(\n { event: \"subscribe\", topic: \"markprices\" },\n {\n onMessage: (message: any) => {\n // if (isLoading) {\n // setIsLoading(false);\n // }\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 console.log(\"unsubscribe\", 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 */\nexport const useCollateral = (dp: number = 6): CollateralOutputs => {\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 // console.log(\"orders:::::\", 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 = { [P in keyof OrderEntity]?: string };\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: !!data.order_type_ext ? data.order_type_ext : 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: { [P in keyof OrderEntity]?: string } = {};\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 = \"quantity is required\";\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 = `quantity must be greater than ${base_min}`;\n } else if (qty.gt(maxQty)) {\n errors.order_quantity = `quantity must be less than ${base_max}`;\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 = `Quantity should be greater than ${quote_min}`;\n } else if (totalNumber.gt(quote_max)) {\n errors.total = `Quantity should be less or equal than ${quote_max}`;\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 = \"price is required\";\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 = `price must be greater than ${minPriceNumber}`;\n } else if (price.gt(maxPriceNumber)) {\n errors.order_price = `price must be less than ${maxPriceNumber}`;\n }\n }\n\n return errors;\n });\n }\n}\n\nexport class MarketOrderCreator extends BaseOrderCreator {\n create(values: OrderEntity): OrderEntity {\n return {\n ...this.baseOrder(values),\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 { useObservable } from \"rxjs-hooks\";\nimport { useQuery } from \"../useQuery\";\nimport { useWebSocketClient } from \"../useWebSocketClient\";\nimport { withLatestFrom, map, startWith } from \"rxjs/operators\";\nimport { type WSMessage } from \"@orderly.network/core\";\n\nexport const useMarketsStream = () => {\n // get listing of all markets from /public/info\n const ws = useWebSocketClient();\n const { data } = useQuery<WSMessage.Ticker[]>(`/public/futures`);\n // const config = useSymbolsInfo();\n\n const value = useObservable<WSMessage.Ticker[] | null, WSMessage.Ticker[][]>(\n (_, input$) =>\n ws.observe<any>(\"tickers\").pipe(\n startWith([]),\n withLatestFrom(input$.pipe(map((args) => args[0]))),\n map((args) => {\n if (args[0].length === 0) {\n return args[1];\n }\n\n return args[1].map((item) => {\n const ticker = args[0].find(\n (t: WSMessage.Ticker) => t.symbol === item.symbol\n );\n if (ticker) {\n // console.log(config[item.symbol]());\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\n // return args[1];\n })\n ),\n null,\n [data as WSMessage.Ticker[]]\n );\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 { useObservable } from \"rxjs-hooks\";\nimport { combineLatestWith, timeInterval } from \"rxjs/operators\";\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.SignedIn\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 = useObservable<API.OrderExt[] | null, API.Order[][]>(\n // (_, input$) =>\n // input$.pipe(\n // map(([data]) => {\n // return data.flat();\n // }),\n // combineLatestWith(markPrices$),\n // map(([data, markPrices]) => {\n // return data.map((item: API.Order) => ({\n // ...item,\n // mark_price: (markPrices as any)[item.symbol] ?? 0,\n // }));\n // })\n // ),\n // null,\n // [res.data ?? []]\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","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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orderly.network/hooks",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -21,7 +21,7 @@
21
21
  "rxjs": "^7.8.1",
22
22
  "tsup": "^7.1.0",
23
23
  "typescript": "^5.1.6",
24
- "tsconfig": "0.0.3"
24
+ "tsconfig": "0.0.5"
25
25
  },
26
26
  "dependencies": {
27
27
  "formik": "^2.4.3",
@@ -29,11 +29,11 @@
29
29
  "rxjs-hooks": "0.8.0-alpha.0",
30
30
  "swr": "^2.2.0",
31
31
  "use-constant": "^1.1.1",
32
- "@orderly.network/futures": "0.0.6",
33
- "@orderly.network/core": "0.0.5",
34
- "@orderly.network/net": "1.0.3",
35
- "@orderly.network/types": "0.0.5",
36
- "@orderly.network/utils": "0.0.2"
32
+ "@orderly.network/core": "0.0.7",
33
+ "@orderly.network/futures": "0.0.8",
34
+ "@orderly.network/types": "0.0.7",
35
+ "@orderly.network/utils": "0.0.2",
36
+ "@orderly.network/net": "1.0.5"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "rxjs": "^7.8.1"