@0xmonaco/react 0.5.2 → 0.5.4
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/README.md +13 -9
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useMarket/types.d.ts +17 -3
- package/dist/hooks/useMarket/types.d.ts.map +1 -1
- package/dist/hooks/useMarket/useMarket.d.ts.map +1 -1
- package/dist/hooks/useMarket/useMarket.js +12 -10
- package/dist/hooks/useMarket/useMarket.js.map +1 -1
- package/dist/hooks/useMonaco/useMonaco.js +1 -1
- package/dist/hooks/useMonaco/useMonaco.js.map +1 -1
- package/dist/hooks/useOrderbook/useOrderbook.d.ts.map +1 -1
- package/dist/hooks/useOrderbook/useOrderbook.js +1 -1
- package/dist/hooks/useOrderbook/useOrderbook.js.map +1 -1
- package/dist/hooks/useTradeFeed/types.d.ts +3 -3
- package/dist/hooks/useTradeFeed/types.d.ts.map +1 -1
- package/dist/hooks/useTradeFeed/useTradeFeed.d.ts +6 -2
- package/dist/hooks/useTradeFeed/useTradeFeed.d.ts.map +1 -1
- package/dist/hooks/useTradeFeed/useTradeFeed.js +20 -34
- package/dist/hooks/useTradeFeed/useTradeFeed.js.map +1 -1
- package/dist/hooks/useUserMovements/index.d.ts +3 -0
- package/dist/hooks/useUserMovements/index.d.ts.map +1 -0
- package/dist/hooks/useUserMovements/index.js +3 -0
- package/dist/hooks/useUserMovements/index.js.map +1 -0
- package/dist/hooks/useUserMovements/types.d.ts +17 -0
- package/dist/hooks/useUserMovements/types.d.ts.map +1 -0
- package/dist/hooks/useUserMovements/types.js +2 -0
- package/dist/hooks/useUserMovements/types.js.map +1 -0
- package/dist/hooks/useUserMovements/useUserMovements.d.ts +12 -0
- package/dist/hooks/useUserMovements/useUserMovements.d.ts.map +1 -0
- package/dist/hooks/useUserMovements/useUserMovements.js +92 -0
- package/dist/hooks/useUserMovements/useUserMovements.js.map +1 -0
- package/dist/hooks/useVault/types.d.ts +4 -4
- package/dist/hooks/useVault/types.d.ts.map +1 -1
- package/dist/hooks/useVault/useVault.js +16 -16
- package/dist/hooks/useVault/useVault.js.map +1 -1
- package/dist/provider/MonacoProvider.d.ts.map +1 -1
- package/dist/provider/MonacoProvider.js +2 -1
- package/dist/provider/MonacoProvider.js.map +1 -1
- package/dist/provider/TradeFeedProvider.d.ts +23 -0
- package/dist/provider/TradeFeedProvider.d.ts.map +1 -0
- package/dist/provider/TradeFeedProvider.js +144 -0
- package/dist/provider/TradeFeedProvider.js.map +1 -0
- package/dist/provider/index.d.ts +1 -0
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +1 -0
- package/dist/provider/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -202,25 +202,29 @@ const trades = await getTradeFeed("BTC/USDC", { limit: 50 });
|
|
|
202
202
|
### Vault Hooks
|
|
203
203
|
|
|
204
204
|
#### `useVault()`
|
|
205
|
-
Manage token deposits and withdrawals.
|
|
205
|
+
Manage token deposits and withdrawals using asset IDs.
|
|
206
206
|
|
|
207
207
|
```tsx
|
|
208
208
|
const { deposit, withdraw, approve, getBalance, needsApproval } = useVault();
|
|
209
209
|
|
|
210
|
+
// Get asset ID from trading pair
|
|
211
|
+
const pair = await getTradingPairBySymbol("USDC/USDT");
|
|
212
|
+
const assetId = pair.base_asset_id;
|
|
213
|
+
|
|
210
214
|
// Check balance
|
|
211
|
-
const balance = await getBalance(
|
|
215
|
+
const balance = await getBalance(assetId);
|
|
212
216
|
console.log(`Balance: ${balance.formatted} ${balance.symbol}`);
|
|
213
217
|
|
|
214
|
-
//
|
|
215
|
-
if (await needsApproval(
|
|
216
|
-
await approve(
|
|
218
|
+
// Check if approval is needed
|
|
219
|
+
if (await needsApproval(assetId, amount)) {
|
|
220
|
+
await approve(assetId, amount);
|
|
217
221
|
}
|
|
218
222
|
|
|
219
|
-
// Deposit
|
|
220
|
-
await deposit(
|
|
223
|
+
// Deposit tokens
|
|
224
|
+
await deposit(assetId, amount);
|
|
221
225
|
|
|
222
|
-
// Withdraw
|
|
223
|
-
await withdraw(
|
|
226
|
+
// Withdraw tokens
|
|
227
|
+
await withdraw(assetId, amount);
|
|
224
228
|
```
|
|
225
229
|
|
|
226
230
|
### Profile Hooks
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
package/dist/hooks/index.js
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
@@ -1,10 +1,24 @@
|
|
|
1
|
-
import type { Candlestick, GetTradingPairsParams, Interval, PaginatedTradingPairs, TradingPair } from "@0xmonaco/types";
|
|
1
|
+
import type { Candlestick, GetCandlesticksParams, GetTradingPairsParams, Interval, MarketMetadata, PaginatedTradingPairs, TradingPair } from "@0xmonaco/types";
|
|
2
2
|
export interface UseMarketReturn {
|
|
3
3
|
/** Get all available trading pairs with optional filtering and pagination */
|
|
4
4
|
getPaginatedTradingPairs: (params?: GetTradingPairsParams) => Promise<PaginatedTradingPairs>;
|
|
5
5
|
/** Get a specific trading pair by symbol */
|
|
6
6
|
getTradingPairBySymbol: (symbol: string) => Promise<TradingPair | undefined>;
|
|
7
|
-
/**
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Get candlestick data for a trading pair.
|
|
9
|
+
*
|
|
10
|
+
* Supports TradingView-compliant query patterns:
|
|
11
|
+
* - `endTime` + `limit`: Backward pagination (bars ending at timestamp)
|
|
12
|
+
* - `startTime` + `limit`: Forward pagination (bars starting from timestamp)
|
|
13
|
+
* - `limit` only: Most recent bars
|
|
14
|
+
* - `startTime` + `endTime` + `limit`: Specific range (capped at limit)
|
|
15
|
+
*
|
|
16
|
+
* @param tradingPairId - Trading pair UUID
|
|
17
|
+
* @param interval - Candlestick interval (1m, 5m, 15m, 1h, 4h, 1d)
|
|
18
|
+
* @param params - Optional query parameters (startTime, endTime, limit)
|
|
19
|
+
*/
|
|
20
|
+
getCandlesticks: (tradingPairId: string, interval: Interval, params?: GetCandlesticksParams) => Promise<Candlestick[]>;
|
|
21
|
+
/** Get comprehensive market metadata including 24h statistics */
|
|
22
|
+
getMarketMetadata: (pairId: string) => Promise<MarketMetadata>;
|
|
9
23
|
}
|
|
10
24
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMarket/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMarket/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE/J,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,wBAAwB,EAAE,CAAC,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE7F,4CAA4C;IAC5C,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAE7E;;;;;;;;;;;;OAYG;IACH,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEvH,iEAAiE;IACjE,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAChE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarket.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMarket/useMarket.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,SAAS,QAAO,
|
|
1
|
+
{"version":3,"file":"useMarket.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMarket/useMarket.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,SAAS,QAAO,eAuD5B,CAAC"}
|
|
@@ -18,25 +18,27 @@ export const useMarket = () => {
|
|
|
18
18
|
throw new Error("Symbol is required and cannot be empty");
|
|
19
19
|
return await sdk.market.getTradingPairBySymbol(symbol);
|
|
20
20
|
}, [sdk]);
|
|
21
|
-
const getCandlesticks = useCallback(async (
|
|
21
|
+
const getCandlesticks = useCallback(async (tradingPairId, interval, params) => {
|
|
22
22
|
if (!sdk)
|
|
23
23
|
throw new Error("SDK not available");
|
|
24
|
-
if (!
|
|
25
|
-
throw new Error("
|
|
24
|
+
if (!tradingPairId?.trim())
|
|
25
|
+
throw new Error("Trading pair ID is required and cannot be empty");
|
|
26
26
|
if (!interval)
|
|
27
27
|
throw new Error("Interval is required");
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
return await sdk.market.getCandlesticks(tradingPairId, interval, params);
|
|
29
|
+
}, [sdk]);
|
|
30
|
+
const getMarketMetadata = useCallback(async (pairId) => {
|
|
31
|
+
if (!sdk)
|
|
32
|
+
throw new Error("SDK not available");
|
|
33
|
+
if (!pairId?.trim())
|
|
34
|
+
throw new Error("Pair ID is required and cannot be empty");
|
|
35
|
+
return await sdk.market.getMarketMetadata(pairId);
|
|
35
36
|
}, [sdk]);
|
|
36
37
|
return {
|
|
37
38
|
getPaginatedTradingPairs,
|
|
38
39
|
getTradingPairBySymbol,
|
|
39
40
|
getCandlesticks,
|
|
41
|
+
getMarketMetadata,
|
|
40
42
|
};
|
|
41
43
|
};
|
|
42
44
|
//# sourceMappingURL=useMarket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarket.js","sourceRoot":"","sources":["../../../src/hooks/useMarket/useMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAoB,EAAE;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,wBAAwB,GAAG,WAAW,CAC1C,KAAK,EAAE,MAA8B,EAAkC,EAAE;QACvE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,KAAK,EAAE,MAAc,EAAoC,EAAE;QACzD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAE/E,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useMarket.js","sourceRoot":"","sources":["../../../src/hooks/useMarket/useMarket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAoB,EAAE;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,wBAAwB,GAAG,WAAW,CAC1C,KAAK,EAAE,MAA8B,EAAkC,EAAE;QACvE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,KAAK,EAAE,MAAc,EAAoC,EAAE;QACzD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAE/E,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,aAAqB,EAAE,QAAkB,EAAE,MAA8B,EAA0B,EAAE;QAC1G,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAC/F,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEvD,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,MAAc,EAA2B,EAAE;QAChD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAEhF,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,OAAO;QACL,wBAAwB;QACxB,sBAAsB;QACtB,eAAe;QACf,iBAAiB;KAClB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback } from "react";
|
|
2
|
-
import { useMonacoContext } from "../../provider
|
|
2
|
+
import { useMonacoContext } from "../../provider";
|
|
3
3
|
export const useMonacoSDK = () => {
|
|
4
4
|
const { sdk, clientId, error, setError } = useMonacoContext();
|
|
5
5
|
const clearError = useCallback(() => setError(null), [setError]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMonaco.js","sourceRoot":"","sources":["../../../src/hooks/useMonaco/useMonaco.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"useMonaco.js","sourceRoot":"","sources":["../../../src/hooks/useMonaco/useMonaco.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,MAAM,CAAC,MAAM,YAAY,GAAG,GAAoB,EAAE;IAChD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE9D,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,GAAG;QACH,QAAQ;QACR,KAAK;QACL,UAAU;QACV,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbook.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useOrderbook.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,sBAAsB,EACrC,KAAK,SAAK,GACT,kBAAkB,CAoCpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useMonacoSDK } from "@0xmonaco/react";
|
|
2
1
|
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { useMonacoSDK } from "../useMonaco";
|
|
3
3
|
export function useOrderbook(tradingPairId, tradingMode, magnitude, quotationMode, depth = 10) {
|
|
4
4
|
const { sdk } = useMonacoSDK();
|
|
5
5
|
const [orderbook, setOrderbook] = useState(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbook.js","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useOrderbook.js","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,UAAU,YAAY,CAC1B,aAAqB,EACrB,WAAwB,EACxB,SAAiB,EACjB,aAAqC,EACrC,KAAK,GAAG,EAAE;IAEV,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YAClD,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,mCAAmC;QACnC,GAAG,CAAC,SAAS;aACV,YAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;aAC3F,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;aACxC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjF,2EAA2E;QAC3E,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QACzG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpB,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -5,11 +5,11 @@ import type { TradeEvent } from "@0xmonaco/types";
|
|
|
5
5
|
export interface UseTradeFeedReturn {
|
|
6
6
|
/** Array of trade events from WebSocket and REST API */
|
|
7
7
|
trades: TradeEvent[];
|
|
8
|
-
/** Whether currently subscribed to a market */
|
|
8
|
+
/** Whether currently subscribed to a market. Will be false if the SDK is not yet initialized. */
|
|
9
9
|
subscribed: boolean;
|
|
10
|
+
/** Whether the initial trades are being fetched */
|
|
11
|
+
fetchingInitialState: boolean;
|
|
10
12
|
/** Any error that occurred during connection or subscription */
|
|
11
13
|
error: Error | null;
|
|
12
|
-
/** Clear the current error state */
|
|
13
|
-
clearError: () => void;
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,MAAM,EAAE,UAAU,EAAE,CAAC;IAErB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAC;IAEpB,mDAAmD;IACnD,oBAAoB,EAAE,OAAO,CAAC;IAE9B,gEAAgE;IAChE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB"}
|
|
@@ -2,8 +2,12 @@ import type { UseTradeFeedReturn } from "./types";
|
|
|
2
2
|
/**
|
|
3
3
|
* Hook for subscribing to real-time trade events via WebSocket (public)
|
|
4
4
|
*
|
|
5
|
+
* Subscriptions are shared at the provider level - multiple components using the same
|
|
6
|
+
* tradingPairId will share both the WebSocket connection and the trade state.
|
|
7
|
+
* Initial trades are fetched only once when the first component subscribes.
|
|
8
|
+
* The last 50 trades are kept in state (this limit is fixed and not configurable).
|
|
9
|
+
*
|
|
5
10
|
* @param tradingPairId - The trading pair UUID to subscribe to
|
|
6
|
-
* @param maxTrades - Maximum number of trades to keep in state (default: 50)
|
|
7
11
|
*/
|
|
8
|
-
export declare function useTradeFeed(tradingPairId: string
|
|
12
|
+
export declare function useTradeFeed(tradingPairId: string): UseTradeFeedReturn;
|
|
9
13
|
//# sourceMappingURL=useTradeFeed.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTradeFeed.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/useTradeFeed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTradeFeed.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/useTradeFeed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB,CAuBtE"}
|
|
@@ -1,47 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { MAX_TRADES, useTradeFeedContext } from "../../provider";
|
|
2
3
|
import { useMonacoSDK } from "../useMonaco";
|
|
3
4
|
/**
|
|
4
5
|
* Hook for subscribing to real-time trade events via WebSocket (public)
|
|
5
6
|
*
|
|
7
|
+
* Subscriptions are shared at the provider level - multiple components using the same
|
|
8
|
+
* tradingPairId will share both the WebSocket connection and the trade state.
|
|
9
|
+
* Initial trades are fetched only once when the first component subscribes.
|
|
10
|
+
* The last 50 trades are kept in state (this limit is fixed and not configurable).
|
|
11
|
+
*
|
|
6
12
|
* @param tradingPairId - The trading pair UUID to subscribe to
|
|
7
|
-
* @param maxTrades - Maximum number of trades to keep in state (default: 50)
|
|
8
13
|
*/
|
|
9
|
-
export function useTradeFeed(tradingPairId
|
|
14
|
+
export function useTradeFeed(tradingPairId) {
|
|
10
15
|
const { sdk } = useMonacoSDK();
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const [subscribed, setSubscribed] = useState(false);
|
|
14
|
-
const clearError = useCallback(() => setError(null), []);
|
|
15
|
-
// Fetch initial trades and subscribe to WebSocket updates
|
|
16
|
+
const { subscribe, subscriptions } = useTradeFeedContext();
|
|
17
|
+
const subscription = subscriptions.get(tradingPairId);
|
|
16
18
|
useEffect(() => {
|
|
17
19
|
if (!sdk?.ws || !sdk?.trades || !tradingPairId) {
|
|
18
|
-
setSubscribed(false);
|
|
19
20
|
return;
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
setTrades((prev) => {
|
|
32
|
-
// Deduplicate by tradeId and keep newest first
|
|
33
|
-
const exists = prev.some((t) => t.data.tradeId === event.data.tradeId);
|
|
34
|
-
if (exists)
|
|
35
|
-
return prev;
|
|
36
|
-
return [event, ...prev].slice(0, limit);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
setSubscribed(true);
|
|
40
|
-
return () => {
|
|
41
|
-
unsubscribe();
|
|
42
|
-
setSubscribed(false);
|
|
43
|
-
};
|
|
44
|
-
}, [sdk?.ws, sdk?.trades, tradingPairId, maxTrades]);
|
|
45
|
-
return { trades, subscribed, error, clearError };
|
|
22
|
+
const fetchInitialTrades = () => sdk.trades.getTrades(tradingPairId, { limit: MAX_TRADES });
|
|
23
|
+
const subscribeToWs = (handler) => sdk.ws.trades(tradingPairId, handler);
|
|
24
|
+
return subscribe(tradingPairId, fetchInitialTrades, subscribeToWs);
|
|
25
|
+
}, [sdk?.ws, sdk?.trades, tradingPairId, subscribe]);
|
|
26
|
+
return {
|
|
27
|
+
trades: subscription?.trades ?? [],
|
|
28
|
+
subscribed: subscription?.subscribed ?? false,
|
|
29
|
+
fetchingInitialState: subscription?.fetchingInitialState ?? false,
|
|
30
|
+
error: subscription?.error ?? null,
|
|
31
|
+
};
|
|
46
32
|
}
|
|
47
33
|
//# sourceMappingURL=useTradeFeed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTradeFeed.js","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/useTradeFeed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useTradeFeed.js","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/useTradeFeed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAE3D,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5F,MAAM,aAAa,GAAG,CAAC,OAAoC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEtG,OAAO,SAAS,CAAC,aAAa,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACrE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAErD,OAAO;QACL,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE;QAClC,UAAU,EAAE,YAAY,EAAE,UAAU,IAAI,KAAK;QAC7C,oBAAoB,EAAE,YAAY,EAAE,oBAAoB,IAAI,KAAK;QACjE,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { UserMovementEvent } from "@0xmonaco/types";
|
|
2
|
+
/**
|
|
3
|
+
* Return type for the useUserMovements hook
|
|
4
|
+
*/
|
|
5
|
+
export interface UseUserMovementsReturn {
|
|
6
|
+
/** Array of user movement events from WebSocket */
|
|
7
|
+
movements: UserMovementEvent[];
|
|
8
|
+
/** Whether initial data is being loaded */
|
|
9
|
+
loading: boolean;
|
|
10
|
+
/** Whether currently subscribed to movements channel */
|
|
11
|
+
subscribed: boolean;
|
|
12
|
+
/** Any error that occurred during connection or subscription */
|
|
13
|
+
error: Error | null;
|
|
14
|
+
/** Clear the current error state */
|
|
15
|
+
clearError: () => void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IAEjB,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAC;IAEpB,gEAAgE;IAChE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UseUserMovementsReturn } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Hook for subscribing to real-time user movement events via WebSocket (authenticated)
|
|
4
|
+
*
|
|
5
|
+
* Fetches initial movements from the REST API, then subscribes to real-time updates.
|
|
6
|
+
* Requires authentication - the user must be logged in with a valid JWT token.
|
|
7
|
+
* User is identified on the backend via the JWT token.
|
|
8
|
+
*
|
|
9
|
+
* @param maxMovements - Maximum number of movements to keep in state (default: 50)
|
|
10
|
+
*/
|
|
11
|
+
export declare function useUserMovements(maxMovements?: number): UseUserMovementsReturn;
|
|
12
|
+
//# sourceMappingURL=useUserMovements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserMovements.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AA4BtD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,SAAK,GAAG,sBAAsB,CA+D1E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { useMonacoSDK } from "../useMonaco";
|
|
3
|
+
/**
|
|
4
|
+
* Convert a LedgerMovement from the REST API to a UserMovementEvent format
|
|
5
|
+
*/
|
|
6
|
+
function ledgerMovementToEvent(movement, userId) {
|
|
7
|
+
return {
|
|
8
|
+
eventType: "movement",
|
|
9
|
+
userId,
|
|
10
|
+
data: {
|
|
11
|
+
id: movement.id,
|
|
12
|
+
entryType: movement.entry_type,
|
|
13
|
+
transactionType: movement.transaction_type,
|
|
14
|
+
tokenAddress: movement.token,
|
|
15
|
+
amount: movement.amount,
|
|
16
|
+
balanceBefore: movement.balance_before ?? undefined,
|
|
17
|
+
balanceAfter: movement.balance_after ?? undefined,
|
|
18
|
+
lockedBefore: movement.locked_before ?? undefined,
|
|
19
|
+
lockedAfter: movement.locked_after ?? undefined,
|
|
20
|
+
referenceId: movement.reference_id ?? undefined,
|
|
21
|
+
referenceType: movement.reference_type ?? undefined,
|
|
22
|
+
description: movement.description ?? undefined,
|
|
23
|
+
txHash: movement.tx_hash ?? undefined,
|
|
24
|
+
createdAt: movement.created_at ?? undefined,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Hook for subscribing to real-time user movement events via WebSocket (authenticated)
|
|
30
|
+
*
|
|
31
|
+
* Fetches initial movements from the REST API, then subscribes to real-time updates.
|
|
32
|
+
* Requires authentication - the user must be logged in with a valid JWT token.
|
|
33
|
+
* User is identified on the backend via the JWT token.
|
|
34
|
+
*
|
|
35
|
+
* @param maxMovements - Maximum number of movements to keep in state (default: 50)
|
|
36
|
+
*/
|
|
37
|
+
export function useUserMovements(maxMovements = 50) {
|
|
38
|
+
const { sdk } = useMonacoSDK();
|
|
39
|
+
const [movements, setMovements] = useState([]);
|
|
40
|
+
const [loading, setLoading] = useState(false);
|
|
41
|
+
const [error, setError] = useState(null);
|
|
42
|
+
const [subscribed, setSubscribed] = useState(false);
|
|
43
|
+
const clearError = useCallback(() => setError(null), []);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (!sdk?.ws || !sdk?.profile) {
|
|
46
|
+
setSubscribed(false);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
setMovements([]);
|
|
50
|
+
setError(null);
|
|
51
|
+
setLoading(true);
|
|
52
|
+
const limit = Number.isFinite(maxMovements) ? maxMovements : 50;
|
|
53
|
+
// Fetch initial movements via REST API, then subscribe to WebSocket updates
|
|
54
|
+
let unsubscribe;
|
|
55
|
+
sdk.profile
|
|
56
|
+
.getProfile()
|
|
57
|
+
.then((profile) => {
|
|
58
|
+
return sdk.profile.getPaginatedUserMovements({ limit }).then((response) => {
|
|
59
|
+
const initialMovements = response.movements.map((m) => ledgerMovementToEvent(m, profile.id));
|
|
60
|
+
setMovements(initialMovements);
|
|
61
|
+
// Subscribe to WebSocket movement updates after initial data is loaded
|
|
62
|
+
// This prevents race conditions where WS events could be overwritten by REST response
|
|
63
|
+
try {
|
|
64
|
+
unsubscribe = sdk.ws.movements((event) => {
|
|
65
|
+
setMovements((prev) => {
|
|
66
|
+
// Deduplicate by id and keep newest first
|
|
67
|
+
const exists = prev.some((m) => m.data.id === event.data.id);
|
|
68
|
+
if (exists) {
|
|
69
|
+
// Update existing movement
|
|
70
|
+
return prev.map((m) => (m.data.id === event.data.id ? event : m));
|
|
71
|
+
}
|
|
72
|
+
return [event, ...prev].slice(0, limit);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
setSubscribed(true);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
79
|
+
setSubscribed(false);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
})
|
|
83
|
+
.catch((err) => setError(err instanceof Error ? err : new Error(String(err))))
|
|
84
|
+
.finally(() => setLoading(false));
|
|
85
|
+
return () => {
|
|
86
|
+
unsubscribe?.();
|
|
87
|
+
setSubscribed(false);
|
|
88
|
+
};
|
|
89
|
+
}, [sdk?.ws, sdk?.profile, maxMovements]);
|
|
90
|
+
return { movements, loading, subscribed, error, clearError };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=useUserMovements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserMovements.js","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { Balance, TransactionResult } from "@0xmonaco/types";
|
|
2
2
|
export interface UseVaultReturn {
|
|
3
3
|
/** Approve the vault to spend tokens */
|
|
4
|
-
approve: (
|
|
4
|
+
approve: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
5
5
|
/** Deposit tokens into the vault */
|
|
6
6
|
deposit: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
7
7
|
/** Withdraw tokens from the vault */
|
|
8
8
|
withdraw: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
9
9
|
/** Get the balance of a token in the vault */
|
|
10
|
-
getBalance: (
|
|
10
|
+
getBalance: (assetId: string) => Promise<Balance>;
|
|
11
11
|
/** Get the allowance for a token */
|
|
12
|
-
getAllowance: (
|
|
12
|
+
getAllowance: (assetId: string) => Promise<bigint>;
|
|
13
13
|
/** Check if a token needs approval for an amount */
|
|
14
|
-
needsApproval: (
|
|
14
|
+
needsApproval: (assetId: string, amount: bigint) => Promise<boolean>;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useVault/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,OAAO,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useVault/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE7F,oCAAoC;IACpC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE7F,qCAAqC;IACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9F,8CAA8C;IAC9C,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAElD,oCAAoC;IACpC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnD,oDAAoD;IACpD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACtE"}
|
|
@@ -2,14 +2,14 @@ import { useCallback } from "react";
|
|
|
2
2
|
import { useMonacoSDK } from "../useMonaco";
|
|
3
3
|
export const useVault = () => {
|
|
4
4
|
const { sdk } = useMonacoSDK();
|
|
5
|
-
const approve = useCallback(async (
|
|
5
|
+
const approve = useCallback(async (assetId, amount, autoWait) => {
|
|
6
6
|
if (!sdk)
|
|
7
7
|
throw new Error("SDK not available");
|
|
8
|
-
if (!
|
|
9
|
-
throw new Error("
|
|
8
|
+
if (!assetId?.trim())
|
|
9
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
10
10
|
if (amount <= 0n)
|
|
11
11
|
throw new Error("Amount must be greater than 0");
|
|
12
|
-
return await sdk.vault.approve(
|
|
12
|
+
return await sdk.vault.approve(assetId, amount, autoWait);
|
|
13
13
|
}, [sdk]);
|
|
14
14
|
const deposit = useCallback(async (assetId, amount, autoWait) => {
|
|
15
15
|
if (!sdk)
|
|
@@ -29,28 +29,28 @@ export const useVault = () => {
|
|
|
29
29
|
throw new Error("Amount must be greater than 0");
|
|
30
30
|
return await sdk.vault.withdraw(assetId, amount, autoWait);
|
|
31
31
|
}, [sdk]);
|
|
32
|
-
const getBalance = useCallback(async (
|
|
32
|
+
const getBalance = useCallback(async (assetId) => {
|
|
33
33
|
if (!sdk)
|
|
34
34
|
throw new Error("SDK not available");
|
|
35
|
-
if (!
|
|
36
|
-
throw new Error("
|
|
37
|
-
return await sdk.vault.getBalance(
|
|
35
|
+
if (!assetId?.trim())
|
|
36
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
37
|
+
return await sdk.vault.getBalance(assetId);
|
|
38
38
|
}, [sdk]);
|
|
39
|
-
const getAllowance = useCallback(async (
|
|
39
|
+
const getAllowance = useCallback(async (assetId) => {
|
|
40
40
|
if (!sdk)
|
|
41
41
|
throw new Error("SDK not available");
|
|
42
|
-
if (!
|
|
43
|
-
throw new Error("
|
|
44
|
-
return await sdk.vault.getAllowance(
|
|
42
|
+
if (!assetId?.trim())
|
|
43
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
44
|
+
return await sdk.vault.getAllowance(assetId);
|
|
45
45
|
}, [sdk]);
|
|
46
|
-
const needsApproval = useCallback(async (
|
|
46
|
+
const needsApproval = useCallback(async (assetId, amount) => {
|
|
47
47
|
if (!sdk)
|
|
48
48
|
throw new Error("SDK not available");
|
|
49
|
-
if (!
|
|
50
|
-
throw new Error("
|
|
49
|
+
if (!assetId?.trim())
|
|
50
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
51
51
|
if (amount <= 0n)
|
|
52
52
|
throw new Error("Amount must be greater than 0");
|
|
53
|
-
return await sdk.vault.needsApproval(
|
|
53
|
+
return await sdk.vault.needsApproval(assetId, amount);
|
|
54
54
|
}, [sdk]);
|
|
55
55
|
return {
|
|
56
56
|
// Token operations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVault.js","sourceRoot":"","sources":["../../../src/hooks/useVault/useVault.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAmB,EAAE;IAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useVault.js","sourceRoot":"","sources":["../../../src/hooks/useVault/useVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProvider.d.ts","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MonacoProvider.d.ts","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIlG,eAAO,MAAM,cAAc,GAAI,yFAAyF,mBAAmB,4CA0G1I,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,kBAQnC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { createContext, useContext, useEffect, useMemo, useState } from "react";
|
|
|
4
4
|
import { useWalletClient } from "wagmi";
|
|
5
5
|
import { useTokenLifecycle } from "../hooks";
|
|
6
6
|
import { loadAuthState } from "../utils";
|
|
7
|
+
import { TradeFeedProvider } from "./TradeFeedProvider";
|
|
7
8
|
import { AuthenticationStatus } from "./types";
|
|
8
9
|
const MonacoContext = createContext(null);
|
|
9
10
|
export const MonacoProvider = ({ children, clientId, network, seiRpcUrl, wsUrl, tokenLifecycle: tokenLifecycleConfig }) => {
|
|
@@ -91,7 +92,7 @@ export const MonacoProvider = ({ children, clientId, network, seiRpcUrl, wsUrl,
|
|
|
91
92
|
setAuthenticationStatus,
|
|
92
93
|
setError,
|
|
93
94
|
}), [sdk, clientId, error, authenticationStatus, tokenLifecycle]);
|
|
94
|
-
return _jsx(MonacoContext.Provider, { value: contextValue, children: children });
|
|
95
|
+
return (_jsx(MonacoContext.Provider, { value: contextValue, children: _jsx(TradeFeedProvider, { children: children }) }));
|
|
95
96
|
};
|
|
96
97
|
export const useMonacoContext = () => {
|
|
97
98
|
const context = useContext(MonacoContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { TradeEvent } from "@0xmonaco/types";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
export declare const MAX_TRADES = 50;
|
|
4
|
+
export interface TradeFeedSubscription {
|
|
5
|
+
trades: TradeEvent[];
|
|
6
|
+
error: Error | null;
|
|
7
|
+
subscribed: boolean;
|
|
8
|
+
subscriberCount: number;
|
|
9
|
+
fetchingInitialState: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface TradeFeedContextValue {
|
|
12
|
+
/** Subscribe to a trading pair - returns unsubscribe function */
|
|
13
|
+
subscribe: (tradingPairId: string, fetchInitialTrades: () => Promise<TradeEvent[]>, subscribeToWs: (handler: (event: TradeEvent) => void) => () => void) => () => void;
|
|
14
|
+
/** Get subscription state with reactivity */
|
|
15
|
+
subscriptions: Map<string, TradeFeedSubscription>;
|
|
16
|
+
}
|
|
17
|
+
interface TradeFeedProviderProps {
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export declare const TradeFeedProvider: ({ children }: TradeFeedProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare const useTradeFeedContext: () => TradeFeedContextValue;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=TradeFeedProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradeFeedProvider.d.ts","sourceRoot":"","sources":["../../src/provider/TradeFeedProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,eAAO,MAAM,UAAU,KAAK,CAAC;AAE7B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,UAAU,qBAAqB;IAC7B,iEAAiE;IACjE,SAAS,EAAE,CACT,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC,EAC/C,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,KAAK,MAAM,IAAI,KAChE,MAAM,IAAI,CAAC;IAChB,6CAA6C;IAC7C,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CACnD;AAID,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,iBAAiB,GAAI,cAAc,sBAAsB,4CA4JrE,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,qBAWtC,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
export const MAX_TRADES = 50;
|
|
4
|
+
const TradeFeedContext = createContext(null);
|
|
5
|
+
export const TradeFeedProvider = ({ children }) => {
|
|
6
|
+
const [subscriptions, setSubscriptions] = useState(new Map());
|
|
7
|
+
// Track active WebSocket unsubscribe functions
|
|
8
|
+
const wsUnsubscribes = useRef(new Map());
|
|
9
|
+
// Cleanup all WebSocket subscriptions when provider unmounts
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
return () => {
|
|
12
|
+
for (const unsubscribe of wsUnsubscribes.current.values()) {
|
|
13
|
+
unsubscribe();
|
|
14
|
+
}
|
|
15
|
+
wsUnsubscribes.current.clear();
|
|
16
|
+
};
|
|
17
|
+
}, []);
|
|
18
|
+
const handleTrade = useCallback((tradingPairId, event) => {
|
|
19
|
+
setSubscriptions((prev) => {
|
|
20
|
+
const current = prev.get(tradingPairId);
|
|
21
|
+
if (!current)
|
|
22
|
+
return prev;
|
|
23
|
+
const exists = current.trades.some((t) => t.data.tradeId === event.data.tradeId);
|
|
24
|
+
if (exists)
|
|
25
|
+
return prev;
|
|
26
|
+
const newSubscriptions = new Map(prev);
|
|
27
|
+
newSubscriptions.set(tradingPairId, {
|
|
28
|
+
...current,
|
|
29
|
+
trades: [event, ...current.trades].slice(0, MAX_TRADES),
|
|
30
|
+
error: null, // Clear error on successful WebSocket event
|
|
31
|
+
});
|
|
32
|
+
return newSubscriptions;
|
|
33
|
+
});
|
|
34
|
+
}, []);
|
|
35
|
+
// Use ref to maintain stable reference to handleTrade for the subscribe callback
|
|
36
|
+
const handleTradeRef = useRef(handleTrade);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
handleTradeRef.current = handleTrade;
|
|
39
|
+
});
|
|
40
|
+
const subscribe = useCallback((tradingPairId, fetchInitialTrades, subscribeToWs) => {
|
|
41
|
+
setSubscriptions((prev) => {
|
|
42
|
+
const current = prev.get(tradingPairId);
|
|
43
|
+
if (current) {
|
|
44
|
+
// Already subscribed, just increment count
|
|
45
|
+
const newSubscriptions = new Map(prev);
|
|
46
|
+
newSubscriptions.set(tradingPairId, {
|
|
47
|
+
...current,
|
|
48
|
+
subscriberCount: current.subscriberCount + 1,
|
|
49
|
+
});
|
|
50
|
+
return newSubscriptions;
|
|
51
|
+
}
|
|
52
|
+
// First subscriber - create new subscription
|
|
53
|
+
const newSubscriptions = new Map(prev);
|
|
54
|
+
newSubscriptions.set(tradingPairId, {
|
|
55
|
+
trades: [],
|
|
56
|
+
error: null,
|
|
57
|
+
subscribed: true,
|
|
58
|
+
subscriberCount: 1,
|
|
59
|
+
fetchingInitialState: true,
|
|
60
|
+
});
|
|
61
|
+
return newSubscriptions;
|
|
62
|
+
});
|
|
63
|
+
// Check if this is the first subscriber (no existing WS subscription)
|
|
64
|
+
if (!wsUnsubscribes.current.has(tradingPairId)) {
|
|
65
|
+
// Set placeholder immediately to prevent race condition with concurrent subscribers
|
|
66
|
+
wsUnsubscribes.current.set(tradingPairId, () => { });
|
|
67
|
+
// Fetch initial trades
|
|
68
|
+
fetchInitialTrades()
|
|
69
|
+
.then((initialTrades) => {
|
|
70
|
+
setSubscriptions((prev) => {
|
|
71
|
+
const current = prev.get(tradingPairId);
|
|
72
|
+
if (!current)
|
|
73
|
+
return prev;
|
|
74
|
+
const newSubscriptions = new Map(prev);
|
|
75
|
+
newSubscriptions.set(tradingPairId, {
|
|
76
|
+
...current,
|
|
77
|
+
trades: initialTrades.slice(0, MAX_TRADES),
|
|
78
|
+
error: null,
|
|
79
|
+
fetchingInitialState: false,
|
|
80
|
+
});
|
|
81
|
+
return newSubscriptions;
|
|
82
|
+
});
|
|
83
|
+
})
|
|
84
|
+
.catch((err) => {
|
|
85
|
+
setSubscriptions((prev) => {
|
|
86
|
+
const current = prev.get(tradingPairId);
|
|
87
|
+
if (!current)
|
|
88
|
+
return prev;
|
|
89
|
+
const newSubscriptions = new Map(prev);
|
|
90
|
+
newSubscriptions.set(tradingPairId, {
|
|
91
|
+
...current,
|
|
92
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
93
|
+
fetchingInitialState: false,
|
|
94
|
+
});
|
|
95
|
+
return newSubscriptions;
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
// Subscribe to WebSocket
|
|
99
|
+
const unsubscribe = subscribeToWs((event) => handleTradeRef.current(tradingPairId, event));
|
|
100
|
+
wsUnsubscribes.current.set(tradingPairId, unsubscribe);
|
|
101
|
+
}
|
|
102
|
+
// Return unsubscribe function
|
|
103
|
+
return () => {
|
|
104
|
+
setSubscriptions((prev) => {
|
|
105
|
+
const current = prev.get(tradingPairId);
|
|
106
|
+
if (!current)
|
|
107
|
+
return prev;
|
|
108
|
+
const newCount = current.subscriberCount - 1;
|
|
109
|
+
if (newCount <= 0) {
|
|
110
|
+
// Last subscriber - clean up
|
|
111
|
+
const wsUnsubscribe = wsUnsubscribes.current.get(tradingPairId);
|
|
112
|
+
if (wsUnsubscribe) {
|
|
113
|
+
wsUnsubscribe();
|
|
114
|
+
wsUnsubscribes.current.delete(tradingPairId);
|
|
115
|
+
}
|
|
116
|
+
const newSubscriptions = new Map(prev);
|
|
117
|
+
newSubscriptions.delete(tradingPairId);
|
|
118
|
+
return newSubscriptions;
|
|
119
|
+
}
|
|
120
|
+
// Still have subscribers, just decrement count
|
|
121
|
+
const newSubscriptions = new Map(prev);
|
|
122
|
+
newSubscriptions.set(tradingPairId, {
|
|
123
|
+
...current,
|
|
124
|
+
subscriberCount: newCount,
|
|
125
|
+
});
|
|
126
|
+
return newSubscriptions;
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
}, []);
|
|
130
|
+
const contextValue = useMemo(() => ({
|
|
131
|
+
subscribe,
|
|
132
|
+
subscriptions,
|
|
133
|
+
}), [subscribe, subscriptions]);
|
|
134
|
+
return _jsx(TradeFeedContext.Provider, { value: contextValue, children: children });
|
|
135
|
+
};
|
|
136
|
+
export const useTradeFeedContext = () => {
|
|
137
|
+
const context = useContext(TradeFeedContext);
|
|
138
|
+
if (!context) {
|
|
139
|
+
throw new Error("useTradeFeedContext must be used within a TradeFeedProvider. " +
|
|
140
|
+
"Make sure to wrap your app with <MonacoProvider>.");
|
|
141
|
+
}
|
|
142
|
+
return context;
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=TradeFeedProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TradeFeedProvider.js","sourceRoot":"","sources":["../../src/provider/TradeFeedProvider.tsx"],"names":[],"mappings":"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"}
|
package/dist/provider/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAClG,cAAc,SAAS,CAAC"}
|
package/dist/provider/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,UAAU,EAA8B,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAClG,cAAc,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xmonaco/react",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@0xmonaco/
|
|
13
|
-
"@0xmonaco/
|
|
12
|
+
"@0xmonaco/types": "0.5.4",
|
|
13
|
+
"@0xmonaco/core": "0.5.4"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@types/react": "^19.1.12",
|