@orderly.network/hooks 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +89 -33
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +89 -34
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.d.mts
CHANGED
|
@@ -97,6 +97,8 @@ declare const useEventEmitter: (channel?: string) => EventEmitter<string | symbo
|
|
|
97
97
|
|
|
98
98
|
declare function useSessionStorage<T>(key: string, initialValue: T): [T, (data: any) => void];
|
|
99
99
|
|
|
100
|
+
declare function useLocalStorage<T>(key: string, initialValue: T): [T, any];
|
|
101
|
+
|
|
100
102
|
type useRunOnceProps = {
|
|
101
103
|
fn: () => any;
|
|
102
104
|
sessionKey?: string;
|
|
@@ -223,7 +225,7 @@ declare const useOrderStream: ({ status, symbol, side, size, }?: {
|
|
|
223
225
|
} | null)[];
|
|
224
226
|
|
|
225
227
|
interface MarketTradeStreamOptions {
|
|
226
|
-
|
|
228
|
+
limit?: number;
|
|
227
229
|
}
|
|
228
230
|
declare const useMarketTradeStream: (symbol: string, options?: MarketTradeStreamOptions) => {
|
|
229
231
|
data: API.Trade[];
|
|
@@ -324,4 +326,4 @@ declare namespace index {
|
|
|
324
326
|
};
|
|
325
327
|
}
|
|
326
328
|
|
|
327
|
-
export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
|
|
329
|
+
export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useLocalStorage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
|
package/dist/index.d.ts
CHANGED
|
@@ -97,6 +97,8 @@ declare const useEventEmitter: (channel?: string) => EventEmitter<string | symbo
|
|
|
97
97
|
|
|
98
98
|
declare function useSessionStorage<T>(key: string, initialValue: T): [T, (data: any) => void];
|
|
99
99
|
|
|
100
|
+
declare function useLocalStorage<T>(key: string, initialValue: T): [T, any];
|
|
101
|
+
|
|
100
102
|
type useRunOnceProps = {
|
|
101
103
|
fn: () => any;
|
|
102
104
|
sessionKey?: string;
|
|
@@ -223,7 +225,7 @@ declare const useOrderStream: ({ status, symbol, side, size, }?: {
|
|
|
223
225
|
} | null)[];
|
|
224
226
|
|
|
225
227
|
interface MarketTradeStreamOptions {
|
|
226
|
-
|
|
228
|
+
limit?: number;
|
|
227
229
|
}
|
|
228
230
|
declare const useMarketTradeStream: (symbol: string, options?: MarketTradeStreamOptions) => {
|
|
229
231
|
data: API.Trade[];
|
|
@@ -324,4 +326,4 @@ declare namespace index {
|
|
|
324
326
|
};
|
|
325
327
|
}
|
|
326
328
|
|
|
327
|
-
export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
|
|
329
|
+
export { AppStateErrors, DataSourceProvider, OrderStatus, OrderlyAppConfig, OrderlyContext, OrderlyContextState, OrderlyProvider, index as apis, useAccount, useAccountInfo, useAccountInstance, useAppState, useBalance, useChains, useCollateral, useEventEmitter, useExecutionReport, useFetures, useFundingRate, useHolding, useLeverage, useLocalStorage, useMarginRatio, useMarkPrice, useMarkPricesStream, useMarketTradeStream, useMarketsStream, useMaxQty, useMutation, useOrderEntry, useOrderStream, useOrderbookStream, usePositionStream, usePreLoadData, usePrivateDataObserver, usePrivateObserve, usePrivateQuery, useQuery, useRunOnce, useSessionStorage, useSymbolsInfo, useTickerStream, useTokenInfo, useTopicObserve, useTradingView, useWS };
|
package/dist/index.js
CHANGED
|
@@ -350,6 +350,18 @@ var useEventEmitter = (channel) => {
|
|
|
350
350
|
return ee;
|
|
351
351
|
});
|
|
352
352
|
};
|
|
353
|
+
|
|
354
|
+
// src/utils/json.ts
|
|
355
|
+
function parseJSON(value) {
|
|
356
|
+
try {
|
|
357
|
+
return value === "undefined" ? void 0 : JSON.parse(value != null ? value : "");
|
|
358
|
+
} catch (e) {
|
|
359
|
+
console.log("parsing error on", { value });
|
|
360
|
+
return void 0;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// src/useSessionStorage.ts
|
|
353
365
|
function useSessionStorage(key, initialValue) {
|
|
354
366
|
const readValue = React2.useCallback(() => {
|
|
355
367
|
if (typeof window === "undefined") {
|
|
@@ -401,13 +413,41 @@ function useSessionStorage(key, initialValue) {
|
|
|
401
413
|
);
|
|
402
414
|
return [storedValue, setValue];
|
|
403
415
|
}
|
|
404
|
-
function
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
416
|
+
function useLocalStorage(key, initialValue) {
|
|
417
|
+
const readValue = React2.useCallback(() => {
|
|
418
|
+
if (typeof window === "undefined") {
|
|
419
|
+
return initialValue;
|
|
420
|
+
}
|
|
421
|
+
try {
|
|
422
|
+
const item = window.localStorage.getItem(key);
|
|
423
|
+
return item ? parseJSON(item) : initialValue;
|
|
424
|
+
} catch (error) {
|
|
425
|
+
console.warn(`Error reading localStorage key \u201C${key}\u201D:`, error);
|
|
426
|
+
return initialValue;
|
|
427
|
+
}
|
|
428
|
+
}, [initialValue, key]);
|
|
429
|
+
const [storedValue, setStoredValue] = React2.useState(readValue);
|
|
430
|
+
const setValue = React2.useCallback(
|
|
431
|
+
(value) => {
|
|
432
|
+
if (typeof window === "undefined") {
|
|
433
|
+
console.warn(
|
|
434
|
+
`Tried setting localStorage key \u201C${key}\u201D even though environment is not a client`
|
|
435
|
+
);
|
|
436
|
+
}
|
|
437
|
+
try {
|
|
438
|
+
const newValue = value instanceof Function ? value(storedValue) : value;
|
|
439
|
+
window.localStorage.setItem(key, JSON.stringify(newValue));
|
|
440
|
+
setStoredValue(() => newValue);
|
|
441
|
+
} catch (error) {
|
|
442
|
+
console.warn(`Error setting localStorage key \u201C${key}\u201D:`, error);
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
[storedValue]
|
|
446
|
+
);
|
|
447
|
+
React2.useEffect(() => {
|
|
448
|
+
setStoredValue(readValue());
|
|
449
|
+
}, []);
|
|
450
|
+
return [storedValue, setValue];
|
|
411
451
|
}
|
|
412
452
|
var useRunOnce = ({ fn, sessionKey }) => {
|
|
413
453
|
const triggered = React2.useRef(false);
|
|
@@ -586,8 +626,6 @@ var useSymbolsInfo = () => {
|
|
|
586
626
|
});
|
|
587
627
|
return createGetter(data);
|
|
588
628
|
};
|
|
589
|
-
|
|
590
|
-
// src/orderly/useOrderbookStream.ts
|
|
591
629
|
var paddingFn = (len) => Array(len).fill([Number.NaN, Number.NaN, Number.NaN]);
|
|
592
630
|
var asksSortFn = (a, b) => a[0] - b[0];
|
|
593
631
|
var bidsSortFn = (a, b) => b[0] - a[0];
|
|
@@ -605,13 +643,13 @@ var reduceItems = (depth, level, data, asks = false) => {
|
|
|
605
643
|
continue;
|
|
606
644
|
let priceKey;
|
|
607
645
|
if (asks) {
|
|
608
|
-
priceKey = Math.ceil(price / depth)
|
|
646
|
+
priceKey = new utils.Decimal(Math.ceil(price / depth)).mul(depth).toNumber();
|
|
609
647
|
} else {
|
|
610
|
-
priceKey = Math.floor(price / depth)
|
|
648
|
+
priceKey = new utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
|
|
611
649
|
}
|
|
612
650
|
if (prices.has(priceKey)) {
|
|
613
651
|
const item = prices.get(priceKey);
|
|
614
|
-
const itemPrice = item[1]
|
|
652
|
+
const itemPrice = new utils.Decimal(item[1]).add(quantity).toNumber();
|
|
615
653
|
prices.set(priceKey, [priceKey, itemPrice]);
|
|
616
654
|
} else {
|
|
617
655
|
prices.set(priceKey, [priceKey, quantity]);
|
|
@@ -623,11 +661,8 @@ var reduceItems = (depth, level, data, asks = false) => {
|
|
|
623
661
|
const [price, quantity] = newData[i];
|
|
624
662
|
if (isNaN(price) || isNaN(quantity))
|
|
625
663
|
continue;
|
|
626
|
-
result.
|
|
627
|
-
|
|
628
|
-
quantity,
|
|
629
|
-
quantity + (result.length > 0 ? result[result.length - 1][2] : 0)
|
|
630
|
-
]);
|
|
664
|
+
const newQuantity = new utils.Decimal(quantity).add(result.length > 0 ? result[result.length - 1][2] : 0).toNumber();
|
|
665
|
+
result.push([price, quantity, newQuantity]);
|
|
631
666
|
if (i + 1 >= level) {
|
|
632
667
|
break;
|
|
633
668
|
}
|
|
@@ -645,6 +680,7 @@ var reduceOrderbook = (depth, level, data) => {
|
|
|
645
680
|
var mergeItems = (data, update) => {
|
|
646
681
|
if (data.length === 0)
|
|
647
682
|
return update;
|
|
683
|
+
data = data.filter(([price]) => !isNaN(price));
|
|
648
684
|
while (update.length > 0) {
|
|
649
685
|
const item = update.shift();
|
|
650
686
|
if (item) {
|
|
@@ -697,6 +733,7 @@ var useOrderbookStream = (symbol, initial = { asks: [], bids: [] }, options) =>
|
|
|
697
733
|
ws.onceSubscribe(
|
|
698
734
|
{
|
|
699
735
|
event: "request",
|
|
736
|
+
id: `${symbol}@orderbook`,
|
|
700
737
|
params: {
|
|
701
738
|
type: "orderbook",
|
|
702
739
|
symbol
|
|
@@ -826,10 +863,9 @@ function priceInputHandle(inputs) {
|
|
|
826
863
|
return [values, input, value, markPrice, config];
|
|
827
864
|
}
|
|
828
865
|
const total = price.mul(values.order_quantity);
|
|
829
|
-
const quantityDP = total.dp();
|
|
830
866
|
return [
|
|
831
867
|
__spreadProps(__spreadValues({}, values), {
|
|
832
|
-
total: total.todp(
|
|
868
|
+
total: total.todp(2).toString()
|
|
833
869
|
}),
|
|
834
870
|
input,
|
|
835
871
|
value,
|
|
@@ -853,10 +889,10 @@ function quantityInputHandle(inputs) {
|
|
|
853
889
|
price = Number(values.order_price);
|
|
854
890
|
}
|
|
855
891
|
const total = quantity.mul(price);
|
|
856
|
-
|
|
892
|
+
total.dp();
|
|
857
893
|
return [
|
|
858
894
|
__spreadProps(__spreadValues({}, values), {
|
|
859
|
-
total: total.todp(
|
|
895
|
+
total: total.todp(2).toNumber()
|
|
860
896
|
}),
|
|
861
897
|
input,
|
|
862
898
|
value,
|
|
@@ -1773,29 +1809,48 @@ var useMarketTradeStream = (symbol, options = {}) => {
|
|
|
1773
1809
|
throw new Error("useTradeStream: symbol is required");
|
|
1774
1810
|
}
|
|
1775
1811
|
const [trades, setTrades] = React2.useState([]);
|
|
1776
|
-
const
|
|
1777
|
-
const {
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1812
|
+
const [isLoading, setIsLoading] = React2.useState(false);
|
|
1813
|
+
const { limit = 50 } = options;
|
|
1814
|
+
const ws = useWS();
|
|
1815
|
+
React2.useEffect(() => {
|
|
1816
|
+
setIsLoading(true);
|
|
1817
|
+
setTrades(() => []);
|
|
1818
|
+
ws.onceSubscribe(
|
|
1819
|
+
{
|
|
1820
|
+
id: `${symbol}@trade`,
|
|
1821
|
+
event: "request",
|
|
1822
|
+
params: {
|
|
1823
|
+
type: "trade",
|
|
1824
|
+
symbol,
|
|
1825
|
+
limit
|
|
1826
|
+
}
|
|
1827
|
+
},
|
|
1828
|
+
{
|
|
1829
|
+
onMessage: (data) => {
|
|
1830
|
+
setIsLoading(false);
|
|
1782
1831
|
setTrades(() => data);
|
|
1783
1832
|
}
|
|
1784
|
-
return data;
|
|
1785
1833
|
}
|
|
1786
|
-
|
|
1787
|
-
);
|
|
1788
|
-
const ws = useWS();
|
|
1834
|
+
);
|
|
1835
|
+
}, [symbol]);
|
|
1789
1836
|
React2.useEffect(() => {
|
|
1837
|
+
if (trades.length <= 0)
|
|
1838
|
+
return;
|
|
1790
1839
|
const unsubscript = ws.subscribe(`@${symbol}/@trade`, {
|
|
1791
1840
|
onMessage: (data) => {
|
|
1792
|
-
|
|
1841
|
+
setTrades((prev) => {
|
|
1842
|
+
const arr = [data, ...prev];
|
|
1843
|
+
if (arr.length > limit) {
|
|
1844
|
+
arr.pop();
|
|
1845
|
+
}
|
|
1846
|
+
return arr;
|
|
1847
|
+
});
|
|
1793
1848
|
}
|
|
1794
1849
|
});
|
|
1795
1850
|
return () => {
|
|
1796
1851
|
unsubscript == null ? void 0 : unsubscript();
|
|
1797
1852
|
};
|
|
1798
|
-
}, []);
|
|
1853
|
+
}, [symbol, trades]);
|
|
1799
1854
|
return { data: trades, isLoading };
|
|
1800
1855
|
};
|
|
1801
1856
|
var useMarginRatio = () => {
|
|
@@ -1969,6 +2024,7 @@ exports.useFetures = useFetures;
|
|
|
1969
2024
|
exports.useFundingRate = useFundingRate;
|
|
1970
2025
|
exports.useHolding = useHolding;
|
|
1971
2026
|
exports.useLeverage = useLeverage;
|
|
2027
|
+
exports.useLocalStorage = useLocalStorage;
|
|
1972
2028
|
exports.useMarginRatio = useMarginRatio;
|
|
1973
2029
|
exports.useMarkPrice = useMarkPrice;
|
|
1974
2030
|
exports.useMarkPricesStream = useMarkPricesStream;
|