@0xmonaco/react 0.3.0 → 0.3.2
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/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/useAuth/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth/useAuth.js +13 -4
- package/dist/hooks/useAuth/useAuth.js.map +1 -1
- package/dist/hooks/useFees/index.d.ts +1 -1
- package/dist/hooks/useFees/index.d.ts.map +1 -1
- package/dist/hooks/useFees/index.js.map +1 -1
- package/dist/hooks/useOrderbook/types.d.ts +5 -1
- package/dist/hooks/useOrderbook/types.d.ts.map +1 -1
- package/dist/hooks/useOrderbook/useOrderbook.d.ts +16 -2
- package/dist/hooks/useOrderbook/useOrderbook.d.ts.map +1 -1
- package/dist/hooks/useOrderbook/useOrderbook.js +29 -11
- package/dist/hooks/useOrderbook/useOrderbook.js.map +1 -1
- package/dist/hooks/useProfile/types.d.ts +6 -1
- package/dist/hooks/useProfile/types.d.ts.map +1 -1
- package/dist/hooks/useProfile/useProfile.d.ts.map +1 -1
- package/dist/hooks/useProfile/useProfile.js +12 -0
- package/dist/hooks/useProfile/useProfile.js.map +1 -1
- package/dist/hooks/useTokenLifecycle/index.d.ts +3 -0
- package/dist/hooks/useTokenLifecycle/index.d.ts.map +1 -0
- package/dist/hooks/useTokenLifecycle/index.js +2 -0
- package/dist/hooks/useTokenLifecycle/index.js.map +1 -0
- package/dist/hooks/useTokenLifecycle/types.d.ts +24 -0
- package/dist/hooks/useTokenLifecycle/types.d.ts.map +1 -0
- package/dist/hooks/useTokenLifecycle/types.js +2 -0
- package/dist/hooks/useTokenLifecycle/types.js.map +1 -0
- package/dist/hooks/useTokenLifecycle/useTokenLifecycle.d.ts +21 -0
- package/dist/hooks/useTokenLifecycle/useTokenLifecycle.d.ts.map +1 -0
- package/dist/hooks/useTokenLifecycle/useTokenLifecycle.js +126 -0
- package/dist/hooks/useTokenLifecycle/useTokenLifecycle.js.map +1 -0
- package/dist/hooks/useTokenLifecycle/utils.d.ts +8 -0
- package/dist/hooks/useTokenLifecycle/utils.d.ts.map +1 -0
- package/dist/hooks/useTokenLifecycle/utils.js +16 -0
- package/dist/hooks/useTokenLifecycle/utils.js.map +1 -0
- package/dist/hooks/useTrade/types.d.ts +5 -5
- package/dist/hooks/useTrade/types.d.ts.map +1 -1
- package/dist/hooks/useTrade/useTrade.d.ts.map +1 -1
- package/dist/hooks/useTrade/useTrade.js.map +1 -1
- package/dist/hooks/useTradeFeed/utils.js +2 -2
- package/dist/hooks/useTradeFeed/utils.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/provider/MonacoProvider.d.ts +1 -1
- package/dist/provider/MonacoProvider.d.ts.map +1 -1
- package/dist/provider/MonacoProvider.js +47 -8
- package/dist/provider/MonacoProvider.js.map +1 -1
- package/dist/provider/types.d.ts +5 -0
- package/dist/provider/types.d.ts.map +1 -1
- package/dist/provider/types.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/tokenStorage.d.ts +39 -0
- package/dist/utils/tokenStorage.d.ts.map +1 -0
- package/dist/utils/tokenStorage.js +103 -0
- package/dist/utils/tokenStorage.js.map +1 -0
- package/package.json +2 -2
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,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,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,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,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuth/useAuth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,OAAO,QAAO,
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuth/useAuth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,OAAO,QAAO,aA4K1B,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { useMonacoContext } from "../../provider/MonacoProvider";
|
|
|
5
5
|
import { useMonacoSDK } from "../useMonaco";
|
|
6
6
|
export const useAuth = () => {
|
|
7
7
|
const { sdk, clientId } = useMonacoSDK();
|
|
8
|
-
const { authenticationStatus, setAuthenticationStatus } = useMonacoContext();
|
|
8
|
+
const { authenticationStatus, setAuthenticationStatus, tokenLifecycle } = useMonacoContext();
|
|
9
9
|
const { data: walletClient } = useWalletClient();
|
|
10
10
|
const login = useCallback(async (options) => {
|
|
11
11
|
if (!sdk)
|
|
@@ -15,6 +15,8 @@ export const useAuth = () => {
|
|
|
15
15
|
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATING);
|
|
16
16
|
try {
|
|
17
17
|
const authState = await sdk.login(clientId, options);
|
|
18
|
+
// Initialize token lifecycle management (caching + auto-refresh)
|
|
19
|
+
tokenLifecycle.initializeTokens(authState);
|
|
18
20
|
const authenticated = sdk.isAuthenticated();
|
|
19
21
|
setAuthenticationStatus(authenticated ? AuthenticationStatus.AUTHENTICATED : AuthenticationStatus.UNAUTHENTICATED);
|
|
20
22
|
return authState;
|
|
@@ -23,35 +25,42 @@ export const useAuth = () => {
|
|
|
23
25
|
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
24
26
|
throw error;
|
|
25
27
|
}
|
|
26
|
-
}, [sdk, walletClient, clientId, setAuthenticationStatus]);
|
|
28
|
+
}, [sdk, walletClient, clientId, setAuthenticationStatus, tokenLifecycle]);
|
|
27
29
|
const logout = useCallback(async () => {
|
|
28
30
|
if (!sdk)
|
|
29
31
|
throw new Error("SDK not available");
|
|
30
32
|
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATING);
|
|
31
33
|
try {
|
|
32
34
|
await sdk.logout();
|
|
35
|
+
// Clear cached tokens and stop auto-refresh
|
|
36
|
+
tokenLifecycle.clearTokens();
|
|
33
37
|
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
34
38
|
}
|
|
35
39
|
catch (error) {
|
|
40
|
+
// Clear tokens even if logout fails
|
|
41
|
+
tokenLifecycle.clearTokens();
|
|
36
42
|
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
37
43
|
throw error;
|
|
38
44
|
}
|
|
39
|
-
}, [sdk, setAuthenticationStatus]);
|
|
45
|
+
}, [sdk, setAuthenticationStatus, tokenLifecycle]);
|
|
40
46
|
const refreshAuth = useCallback(async () => {
|
|
41
47
|
if (!sdk)
|
|
42
48
|
throw new Error("SDK not available");
|
|
43
49
|
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATING);
|
|
44
50
|
try {
|
|
45
51
|
const result = await sdk.refreshAuth();
|
|
52
|
+
// Reinitialize token lifecycle with new tokens
|
|
53
|
+
tokenLifecycle.initializeTokens(result);
|
|
46
54
|
const authenticated = sdk.isAuthenticated();
|
|
47
55
|
setAuthenticationStatus(authenticated ? AuthenticationStatus.AUTHENTICATED : AuthenticationStatus.UNAUTHENTICATED);
|
|
48
56
|
return result;
|
|
49
57
|
}
|
|
50
58
|
catch (error) {
|
|
59
|
+
tokenLifecycle.clearTokens();
|
|
51
60
|
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
52
61
|
throw error;
|
|
53
62
|
}
|
|
54
|
-
}, [sdk, setAuthenticationStatus]);
|
|
63
|
+
}, [sdk, setAuthenticationStatus, tokenLifecycle]);
|
|
55
64
|
const signChallenge = useCallback(async (message) => {
|
|
56
65
|
if (!sdk)
|
|
57
66
|
throw new Error("SDK not available");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../src/hooks/useAuth/useAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,OAAO,GAAG,GAAkB,EAAE;IACzC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;IACzC,MAAM,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,GAAG,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../src/hooks/useAuth/useAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFees/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFees/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFees/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useFees/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ConnectionStatus, OrderbookEvent, TradingMode } from "@0xmonaco/types";
|
|
1
|
+
import type { ConnectionStatus, OrderbookEvent, OrderbookQuotationMode, TradingMode } from "@0xmonaco/types";
|
|
2
2
|
/**
|
|
3
3
|
* State structure for current subscription ref
|
|
4
4
|
*/
|
|
@@ -7,6 +7,10 @@ export interface OrderbookSubscriptionRef {
|
|
|
7
7
|
pair: string;
|
|
8
8
|
/** The mode subscribed to */
|
|
9
9
|
mode: TradingMode;
|
|
10
|
+
/** The magnitude for orderbook grouping */
|
|
11
|
+
magnitude?: number;
|
|
12
|
+
/** The quotation mode for orderbook subscription */
|
|
13
|
+
quotationMode?: OrderbookQuotationMode;
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
16
|
* Return type for the useOrderbook hook
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE7G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kCAAkC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;IAEpB,gEAAgE;IAChE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type TradingMode } from "@0xmonaco/types";
|
|
1
|
+
import { type OrderbookQuotationMode, type TradingMode } from "@0xmonaco/types";
|
|
2
2
|
import type { UseOrderbookReturn } from "./types";
|
|
3
3
|
/**
|
|
4
4
|
* React hook to subscribe to and manage the orderbook for a given trading pair and mode.
|
|
@@ -8,6 +8,8 @@ import type { UseOrderbookReturn } from "./types";
|
|
|
8
8
|
*
|
|
9
9
|
* @param {string | null} tradingPair - The trading pair to subscribe to (e.g., "BTC/USD"). If null, no subscription is made.
|
|
10
10
|
* @param {TradingMode} tradingMode - The trading mode to use for the subscription (e.g., "live", "test").
|
|
11
|
+
* @param {number} [magnitude] - Optional magnitude for orderbook grouping (0.0001 to 10000, defaults to no grouping).
|
|
12
|
+
* @param {OrderbookQuotationMode} [quotationMode] - Optional quotation mode ("BASE" or "QUOTE"), defaults to "BASE".
|
|
11
13
|
* @returns {UseOrderbookReturn} An object containing the latest orderbook event, connection status, subscription state, error, and error clearing function.
|
|
12
14
|
*
|
|
13
15
|
* @example
|
|
@@ -28,7 +30,19 @@ import type { UseOrderbookReturn } from "./types";
|
|
|
28
30
|
* </div>
|
|
29
31
|
* );
|
|
30
32
|
* }
|
|
33
|
+
*
|
|
34
|
+
* // With magnitude for grouping
|
|
35
|
+
* function GroupedOrderbookComponent() {
|
|
36
|
+
* const { orderbook } = useOrderbook("BTC/USD", "live", 10);
|
|
37
|
+
* // ... render grouped orderbook
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // With QUOTE quotation mode
|
|
41
|
+
* function QuoteOrderbookComponent() {
|
|
42
|
+
* const { orderbook } = useOrderbook("BTC/USD", "live", undefined, "QUOTE");
|
|
43
|
+
* // ... render orderbook in QUOTE mode
|
|
44
|
+
* }
|
|
31
45
|
* ```
|
|
32
46
|
*/
|
|
33
|
-
export declare function useOrderbook(tradingPair: string | null, tradingMode: TradingMode): UseOrderbookReturn;
|
|
47
|
+
export declare function useOrderbook(tradingPair: string | null, tradingMode: TradingMode, magnitude?: number, quotationMode?: OrderbookQuotationMode): UseOrderbookReturn;
|
|
34
48
|
//# sourceMappingURL=useOrderbook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbook.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useOrderbook.d.ts","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAEjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAA4B,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,YAAY,CAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,sBAAsB,GACrC,kBAAkB,CA+HpB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { WebSocketStatus } from "@0xmonaco/types";
|
|
1
|
+
import { WebSocketStatus, } from "@0xmonaco/types";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { useMonacoSDK } from "../useMonaco";
|
|
4
4
|
/**
|
|
@@ -9,6 +9,8 @@ import { useMonacoSDK } from "../useMonaco";
|
|
|
9
9
|
*
|
|
10
10
|
* @param {string | null} tradingPair - The trading pair to subscribe to (e.g., "BTC/USD"). If null, no subscription is made.
|
|
11
11
|
* @param {TradingMode} tradingMode - The trading mode to use for the subscription (e.g., "live", "test").
|
|
12
|
+
* @param {number} [magnitude] - Optional magnitude for orderbook grouping (0.0001 to 10000, defaults to no grouping).
|
|
13
|
+
* @param {OrderbookQuotationMode} [quotationMode] - Optional quotation mode ("BASE" or "QUOTE"), defaults to "BASE".
|
|
12
14
|
* @returns {UseOrderbookReturn} An object containing the latest orderbook event, connection status, subscription state, error, and error clearing function.
|
|
13
15
|
*
|
|
14
16
|
* @example
|
|
@@ -29,9 +31,21 @@ import { useMonacoSDK } from "../useMonaco";
|
|
|
29
31
|
* </div>
|
|
30
32
|
* );
|
|
31
33
|
* }
|
|
34
|
+
*
|
|
35
|
+
* // With magnitude for grouping
|
|
36
|
+
* function GroupedOrderbookComponent() {
|
|
37
|
+
* const { orderbook } = useOrderbook("BTC/USD", "live", 10);
|
|
38
|
+
* // ... render grouped orderbook
|
|
39
|
+
* }
|
|
40
|
+
*
|
|
41
|
+
* // With QUOTE quotation mode
|
|
42
|
+
* function QuoteOrderbookComponent() {
|
|
43
|
+
* const { orderbook } = useOrderbook("BTC/USD", "live", undefined, "QUOTE");
|
|
44
|
+
* // ... render orderbook in QUOTE mode
|
|
45
|
+
* }
|
|
32
46
|
* ```
|
|
33
47
|
*/
|
|
34
|
-
export function useOrderbook(tradingPair, tradingMode) {
|
|
48
|
+
export function useOrderbook(tradingPair, tradingMode, magnitude, quotationMode) {
|
|
35
49
|
const { sdk } = useMonacoSDK();
|
|
36
50
|
const [orderbook, setOrderbook] = useState(null);
|
|
37
51
|
const [error, setError] = useState(null);
|
|
@@ -59,7 +73,7 @@ export function useOrderbook(tradingPair, tradingMode) {
|
|
|
59
73
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
60
74
|
}
|
|
61
75
|
}, [orderbookWSClient, connectionStatus]);
|
|
62
|
-
const subscribe = useCallback(async (pair, mode) => {
|
|
76
|
+
const subscribe = useCallback(async (pair, mode, mag, qMode) => {
|
|
63
77
|
if (!orderbookWSClient)
|
|
64
78
|
return;
|
|
65
79
|
if (connectionStatus !== WebSocketStatus.Connected)
|
|
@@ -67,11 +81,10 @@ export function useOrderbook(tradingPair, tradingMode) {
|
|
|
67
81
|
setOrderbook(null);
|
|
68
82
|
setError(null);
|
|
69
83
|
try {
|
|
70
|
-
|
|
71
|
-
orderbookWSClient.subscribeToOrderbookEvents(pair, normalizedMode, (event) => {
|
|
84
|
+
orderbookWSClient.subscribeToOrderbookEvents(pair, mode, (event) => {
|
|
72
85
|
setOrderbook(event);
|
|
73
|
-
});
|
|
74
|
-
currentSubscriptionRef.current = { pair, mode:
|
|
86
|
+
}, mag, qMode);
|
|
87
|
+
currentSubscriptionRef.current = { pair, mode, magnitude: mag, quotationMode: qMode };
|
|
75
88
|
}
|
|
76
89
|
catch (err) {
|
|
77
90
|
setError(err instanceof Error ? err : new Error(String(err)));
|
|
@@ -86,7 +99,9 @@ export function useOrderbook(tradingPair, tradingMode) {
|
|
|
86
99
|
return;
|
|
87
100
|
try {
|
|
88
101
|
const tradingMode = currentSubscriptionRef.current.mode;
|
|
89
|
-
|
|
102
|
+
const magnitude = currentSubscriptionRef.current.magnitude;
|
|
103
|
+
const quotationMode = currentSubscriptionRef.current.quotationMode;
|
|
104
|
+
orderbookWSClient.unsubscribeFromOrderbookEvents(currentSubscriptionRef.current.pair, tradingMode, magnitude, quotationMode);
|
|
90
105
|
currentSubscriptionRef.current = null;
|
|
91
106
|
setOrderbook(null);
|
|
92
107
|
}
|
|
@@ -109,12 +124,15 @@ export function useOrderbook(tradingPair, tradingMode) {
|
|
|
109
124
|
}, [orderbookWSClient, connectionStatus]);
|
|
110
125
|
useEffect(() => {
|
|
111
126
|
if (tradingPair && tradingMode && connectionStatus === WebSocketStatus.Connected) {
|
|
112
|
-
if (tradingPair === currentSubscriptionRef.current?.pair &&
|
|
127
|
+
if (tradingPair === currentSubscriptionRef.current?.pair &&
|
|
128
|
+
tradingMode === currentSubscriptionRef.current?.mode &&
|
|
129
|
+
magnitude === currentSubscriptionRef.current?.magnitude &&
|
|
130
|
+
quotationMode === currentSubscriptionRef.current?.quotationMode)
|
|
113
131
|
return;
|
|
114
132
|
unsubscribe();
|
|
115
|
-
void subscribe(tradingPair, tradingMode);
|
|
133
|
+
void subscribe(tradingPair, tradingMode, magnitude, quotationMode);
|
|
116
134
|
}
|
|
117
|
-
}, [tradingPair, tradingMode, connectionStatus, unsubscribe, subscribe]);
|
|
135
|
+
}, [tradingPair, tradingMode, magnitude, quotationMode, connectionStatus, unsubscribe, subscribe]);
|
|
118
136
|
useEffect(() => {
|
|
119
137
|
if (isSDKAuthenticated) {
|
|
120
138
|
void connect(); // Connect when SDK is available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOrderbook.js","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useOrderbook.js","sourceRoot":"","sources":["../../../src/hooks/useOrderbook/useOrderbook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { GetPaginatedUserMovementsResponse, GetUserMovementsParams, UserProfile } from "@0xmonaco/types";
|
|
1
|
+
import type { AccountBalance, GetPaginatedUserMovementsResponse, GetUserBalancesParams, GetUserBalancesResponse, GetUserMovementsParams, UserProfile } from "@0xmonaco/types";
|
|
2
|
+
import type { Address } from "viem";
|
|
2
3
|
export interface UseProfileReturn {
|
|
3
4
|
/** User profile data */
|
|
4
5
|
profile?: UserProfile;
|
|
@@ -6,5 +7,9 @@ export interface UseProfileReturn {
|
|
|
6
7
|
fetchProfile: () => Promise<UserProfile>;
|
|
7
8
|
/** Get user's ledger movements (transaction history) with pagination */
|
|
8
9
|
getPaginatedUserMovements: (params?: GetUserMovementsParams) => Promise<GetPaginatedUserMovementsResponse>;
|
|
10
|
+
/** Get user's token balances with pagination */
|
|
11
|
+
getUserBalances: (params?: GetUserBalancesParams) => Promise<GetUserBalancesResponse>;
|
|
12
|
+
/** Get user's balance for a specific token */
|
|
13
|
+
getUserBalanceByToken: (token: Address) => Promise<AccountBalance>;
|
|
9
14
|
}
|
|
10
15
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useProfile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useProfile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,wBAAwB;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,6BAA6B;IAC7B,YAAY,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,wEAAwE;IACxE,yBAAyB,EAAE,CAAC,MAAM,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC3G,gDAAgD;IAChD,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtF,8CAA8C;IAC9C,qBAAqB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProfile.d.ts","sourceRoot":"","sources":["../../../src/hooks/useProfile/useProfile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProfile.d.ts","sourceRoot":"","sources":["../../../src/hooks/useProfile/useProfile.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,UAAU,QAAO,gBAyD7B,CAAC"}
|
|
@@ -23,12 +23,24 @@ export const useProfile = () => {
|
|
|
23
23
|
throw new Error("SDK not available");
|
|
24
24
|
return await sdk.profile.getPaginatedUserMovements(params);
|
|
25
25
|
}, [sdk]);
|
|
26
|
+
const getUserBalances = useCallback(async (params) => {
|
|
27
|
+
if (!sdk)
|
|
28
|
+
throw new Error("SDK not available");
|
|
29
|
+
return await sdk.profile.getUserBalances(params);
|
|
30
|
+
}, [sdk]);
|
|
31
|
+
const getUserBalanceByToken = useCallback(async (token) => {
|
|
32
|
+
if (!sdk)
|
|
33
|
+
throw new Error("SDK not available");
|
|
34
|
+
return await sdk.profile.getUserBalanceByToken(token);
|
|
35
|
+
}, [sdk]);
|
|
26
36
|
return {
|
|
27
37
|
// State
|
|
28
38
|
profile,
|
|
29
39
|
// Actions
|
|
30
40
|
fetchProfile,
|
|
31
41
|
getPaginatedUserMovements,
|
|
42
|
+
getUserBalances,
|
|
43
|
+
getUserBalanceByToken,
|
|
32
44
|
};
|
|
33
45
|
};
|
|
34
46
|
//# sourceMappingURL=useProfile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProfile.js","sourceRoot":"","sources":["../../../src/hooks/useProfile/useProfile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProfile.js","sourceRoot":"","sources":["../../../src/hooks/useProfile/useProfile.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAqB,EAAE;IAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,oBAAoB,EAAE,GAAG,OAAO,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAe,CAAC;IAEtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,oBAAoB,KAAK,oBAAoB,CAAC,aAAa,EAAE,CAAC;YAChE,UAAU,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACnD,UAAU,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,yBAAyB,GAAG,WAAW,CAC3C,KAAK,EAAE,MAA+B,EAA8C,EAAE;QACpF,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,MAA8B,EAAoC,EAAE;QACzE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,MAAM,qBAAqB,GAAG,WAAW,CACvC,KAAK,EAAE,KAAc,EAA2B,EAAE;QAChD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE/C,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,OAAO;QAEP,UAAU;QACV,YAAY;QACZ,yBAAyB;QACzB,eAAe;QACf,qBAAqB;KACtB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AuthState } from "@0xmonaco/types";
|
|
2
|
+
export interface TokenLifecycleConfig {
|
|
3
|
+
/** Enable automatic token refresh (default: true) */
|
|
4
|
+
autoRefresh?: boolean;
|
|
5
|
+
/** Enable token persistence in localStorage (default: true) */
|
|
6
|
+
persistTokens?: boolean;
|
|
7
|
+
/** Buffer time in seconds before token expiry to trigger refresh (default: 300 = 5 minutes) */
|
|
8
|
+
refreshBufferSeconds?: number;
|
|
9
|
+
/** Callback when token refresh fails */
|
|
10
|
+
onRefreshError?: (error: Error) => void;
|
|
11
|
+
/** Callback when token is refreshed successfully */
|
|
12
|
+
onRefreshSuccess?: (authState: AuthState) => void;
|
|
13
|
+
}
|
|
14
|
+
export interface UseTokenLifecycleReturn {
|
|
15
|
+
/** Initialize token lifecycle with auth state */
|
|
16
|
+
initializeTokens: (authState: AuthState) => void;
|
|
17
|
+
/** Clear tokens and stop lifecycle management */
|
|
18
|
+
clearTokens: () => void;
|
|
19
|
+
/** Manually trigger token refresh */
|
|
20
|
+
refreshTokens: () => Promise<AuthState | null>;
|
|
21
|
+
/** Check if token is expired or near expiry */
|
|
22
|
+
isTokenExpired: (authState: AuthState | null) => boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+FAA+F;IAC/F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wCAAwC;IACxC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,gBAAgB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACjD,iDAAiD;IACjD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,qCAAqC;IACrC,aAAa,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC/C,+CAA+C;IAC/C,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { MonacoSDK } from "@0xmonaco/core";
|
|
2
|
+
import type { TokenLifecycleConfig, UseTokenLifecycleReturn } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Hook for managing token lifecycle including automatic refresh and persistence
|
|
5
|
+
*
|
|
6
|
+
* @param sdk - Monaco SDK instance
|
|
7
|
+
* @param config - Configuration options for token lifecycle
|
|
8
|
+
* @returns Token lifecycle management functions
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* const { initializeTokens, clearTokens, refreshTokens } = useTokenLifecycle(sdk, {
|
|
13
|
+
* autoRefresh: true,
|
|
14
|
+
* persistTokens: true,
|
|
15
|
+
* refreshBufferSeconds: 300, // 5 minutes
|
|
16
|
+
* onRefreshError: (error) => console.error('Token refresh failed:', error),
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const useTokenLifecycle: (sdk: MonacoSDK | null, config?: TokenLifecycleConfig) => UseTokenLifecycleReturn;
|
|
21
|
+
//# sourceMappingURL=useTokenLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokenLifecycle.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/useTokenLifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAG7E;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,GAAG,IAAI,EAAE,SAAQ,oBAAyB,KAAG,uBA0I5F,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { useCallback, useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { clearAuthState, getTimeUntilExpiry, isTokenExpired, saveAuthState } from "../../utils";
|
|
3
|
+
import { validateRefreshBuffer } from "./utils";
|
|
4
|
+
/**
|
|
5
|
+
* Hook for managing token lifecycle including automatic refresh and persistence
|
|
6
|
+
*
|
|
7
|
+
* @param sdk - Monaco SDK instance
|
|
8
|
+
* @param config - Configuration options for token lifecycle
|
|
9
|
+
* @returns Token lifecycle management functions
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* const { initializeTokens, clearTokens, refreshTokens } = useTokenLifecycle(sdk, {
|
|
14
|
+
* autoRefresh: true,
|
|
15
|
+
* persistTokens: true,
|
|
16
|
+
* refreshBufferSeconds: 300, // 5 minutes
|
|
17
|
+
* onRefreshError: (error) => console.error('Token refresh failed:', error),
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export const useTokenLifecycle = (sdk, config = {}) => {
|
|
22
|
+
const { autoRefresh = true, persistTokens = true, onRefreshError, onRefreshSuccess } = config;
|
|
23
|
+
const refreshBufferSeconds = validateRefreshBuffer(config.refreshBufferSeconds);
|
|
24
|
+
const refreshTimerRef = useRef(null);
|
|
25
|
+
const currentAuthStateRef = useRef(null);
|
|
26
|
+
const refreshPromiseRef = useRef(null);
|
|
27
|
+
const clearRefreshTimer = useCallback(() => {
|
|
28
|
+
if (refreshTimerRef.current) {
|
|
29
|
+
clearTimeout(refreshTimerRef.current);
|
|
30
|
+
refreshTimerRef.current = null;
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
const isTokenExpiredCheck = useCallback((authState) => {
|
|
34
|
+
if (!authState)
|
|
35
|
+
return true;
|
|
36
|
+
return isTokenExpired(authState, refreshBufferSeconds);
|
|
37
|
+
}, [refreshBufferSeconds]);
|
|
38
|
+
const scheduleRefresh = useCallback((authState) => {
|
|
39
|
+
if (!autoRefresh)
|
|
40
|
+
return;
|
|
41
|
+
clearRefreshTimer();
|
|
42
|
+
const timeUntilExpiry = getTimeUntilExpiry(authState);
|
|
43
|
+
const refreshIn = Math.max(0, timeUntilExpiry - refreshBufferSeconds);
|
|
44
|
+
const refreshInMs = refreshIn * 1000;
|
|
45
|
+
refreshTimerRef.current = setTimeout(() => {
|
|
46
|
+
refreshTokensRef.current?.();
|
|
47
|
+
}, refreshInMs);
|
|
48
|
+
}, [autoRefresh, refreshBufferSeconds, clearRefreshTimer]);
|
|
49
|
+
const refreshTokens = useCallback(async () => {
|
|
50
|
+
if (!sdk)
|
|
51
|
+
return null;
|
|
52
|
+
if (refreshPromiseRef.current) {
|
|
53
|
+
return refreshPromiseRef.current;
|
|
54
|
+
}
|
|
55
|
+
const currentAuthState = currentAuthStateRef.current;
|
|
56
|
+
if (!currentAuthState?.refreshToken) {
|
|
57
|
+
console.warn("No refresh token available for token refresh");
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const refreshPromise = (async () => {
|
|
61
|
+
try {
|
|
62
|
+
// Re-check SDK in case it became null during async operations
|
|
63
|
+
if (!sdk) {
|
|
64
|
+
console.warn("SDK became null during token refresh");
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const newAuthState = await sdk.refreshAuth();
|
|
68
|
+
currentAuthStateRef.current = newAuthState;
|
|
69
|
+
if (persistTokens) {
|
|
70
|
+
saveAuthState(newAuthState);
|
|
71
|
+
}
|
|
72
|
+
scheduleRefresh(newAuthState);
|
|
73
|
+
onRefreshSuccess?.(newAuthState);
|
|
74
|
+
return newAuthState;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
78
|
+
console.error("Failed to refresh tokens:", err);
|
|
79
|
+
if (persistTokens) {
|
|
80
|
+
clearAuthState();
|
|
81
|
+
}
|
|
82
|
+
currentAuthStateRef.current = null;
|
|
83
|
+
clearRefreshTimer();
|
|
84
|
+
onRefreshError?.(err);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
refreshPromiseRef.current = null;
|
|
89
|
+
}
|
|
90
|
+
})();
|
|
91
|
+
refreshPromiseRef.current = refreshPromise;
|
|
92
|
+
return refreshPromise;
|
|
93
|
+
}, [sdk, persistTokens, onRefreshError, onRefreshSuccess, scheduleRefresh, clearRefreshTimer]);
|
|
94
|
+
const refreshTokensRef = useRef(refreshTokens);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
refreshTokensRef.current = refreshTokens;
|
|
97
|
+
}, [refreshTokens]);
|
|
98
|
+
const initializeTokens = useCallback((authState) => {
|
|
99
|
+
currentAuthStateRef.current = authState;
|
|
100
|
+
if (persistTokens) {
|
|
101
|
+
saveAuthState(authState);
|
|
102
|
+
}
|
|
103
|
+
if (autoRefresh) {
|
|
104
|
+
scheduleRefresh(authState);
|
|
105
|
+
}
|
|
106
|
+
}, [persistTokens, autoRefresh, scheduleRefresh]);
|
|
107
|
+
const clearTokens = useCallback(() => {
|
|
108
|
+
currentAuthStateRef.current = null;
|
|
109
|
+
clearRefreshTimer();
|
|
110
|
+
if (persistTokens) {
|
|
111
|
+
clearAuthState();
|
|
112
|
+
}
|
|
113
|
+
}, [persistTokens, clearRefreshTimer]);
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
return () => {
|
|
116
|
+
clearRefreshTimer();
|
|
117
|
+
};
|
|
118
|
+
}, [clearRefreshTimer]);
|
|
119
|
+
return useMemo(() => ({
|
|
120
|
+
initializeTokens,
|
|
121
|
+
clearTokens,
|
|
122
|
+
refreshTokens,
|
|
123
|
+
isTokenExpired: isTokenExpiredCheck,
|
|
124
|
+
}), [initializeTokens, clearTokens, refreshTokens, isTokenExpiredCheck]);
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=useTokenLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokenLifecycle.js","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/useTokenLifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAqB,EAAE,SAA+B,EAAE,EAA2B,EAAE;IACrH,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAC9F,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEhF,MAAM,eAAe,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,MAAM,CAAmC,IAAI,CAAC,CAAC;IAEzE,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACtC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,SAA2B,EAAW,EAAE;QACvC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,OAAO,cAAc,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,oBAAoB,CAAC,CACvB,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,SAAoB,EAAE,EAAE;QACvB,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,iBAAiB,EAAE,CAAC;QAEpB,MAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;QAErC,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,CAAC,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC,EACD,CAAC,WAAW,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CACvD,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAA+B,EAAE;QACtE,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,iBAAiB,CAAC,OAAO,CAAC;QACnC,CAAC;QAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC;QACrD,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;oBACrD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;gBAE7C,mBAAmB,CAAC,OAAO,GAAG,YAAY,CAAC;gBAE3C,IAAI,aAAa,EAAE,CAAC;oBAClB,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBAED,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC9B,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC;gBAEjC,OAAO,YAAY,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;gBAEhD,IAAI,aAAa,EAAE,CAAC;oBAClB,cAAc,EAAE,CAAC;gBACnB,CAAC;gBACD,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACnC,iBAAiB,EAAE,CAAC;gBACpB,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC;gBAEtB,OAAO,IAAI,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;QAC3C,OAAO,cAAc,CAAC;IACxB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE/F,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAC3C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,SAAoB,EAAE,EAAE;QACvB,mBAAmB,CAAC,OAAO,GAAG,SAAS,CAAC;QAExC,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,EACD,CAAC,aAAa,EAAE,WAAW,EAAE,eAAe,CAAC,CAC9C,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;QACnC,iBAAiB,EAAE,CAAC;QAEpB,IAAI,aAAa,EAAE,CAAC;YAClB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,iBAAiB,EAAE,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,gBAAgB;QAChB,WAAW;QACX,aAAa;QACb,cAAc,EAAE,mBAAmB;KACpC,CAAC,EACF,CAAC,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,CAAC,CACpE,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates and returns a safe refreshBufferSeconds value
|
|
3
|
+
*
|
|
4
|
+
* @param value - The refresh buffer value to validate (in seconds)
|
|
5
|
+
* @returns A safe refresh buffer value between 1-3600 seconds
|
|
6
|
+
*/
|
|
7
|
+
export declare const validateRefreshBuffer: (value: number | undefined) => number;
|
|
8
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,MAUjE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates and returns a safe refreshBufferSeconds value
|
|
3
|
+
*
|
|
4
|
+
* @param value - The refresh buffer value to validate (in seconds)
|
|
5
|
+
* @returns A safe refresh buffer value between 1-3600 seconds
|
|
6
|
+
*/
|
|
7
|
+
export const validateRefreshBuffer = (value) => {
|
|
8
|
+
const defaultValue = 300;
|
|
9
|
+
const buffer = value ?? defaultValue;
|
|
10
|
+
if (buffer < 1 || buffer > 3600) {
|
|
11
|
+
console.warn(`Invalid refreshBufferSeconds: ${buffer}. Must be between 1-3600 seconds. Using default: ${defaultValue}`);
|
|
12
|
+
return defaultValue;
|
|
13
|
+
}
|
|
14
|
+
return buffer;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/hooks/useTokenLifecycle/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAyB,EAAU,EAAE;IACzE,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,IAAI,YAAY,CAAC;IAErC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,iCAAiC,MAAM,oDAAoD,YAAY,EAAE,CAAC,CAAC;QACxH,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import type { CreateOrderResponse,
|
|
1
|
+
import type { CancelOrderResponse, CreateOrderResponse, GetOrderResponse, GetPaginatedOrdersParams, GetPaginatedOrdersResponse, OrderSide, ReplaceOrderResponse, TimeInForce, TradingMode } from "@0xmonaco/types";
|
|
2
2
|
export interface UseTradeReturn {
|
|
3
3
|
/** Place a limit order */
|
|
4
4
|
placeLimitOrder: (tradingPairId: string, side: OrderSide, quantity: string, price: string, options?: {
|
|
5
|
-
tradingMode?:
|
|
5
|
+
tradingMode?: TradingMode;
|
|
6
6
|
useMasterBalance?: boolean;
|
|
7
7
|
expirationDate?: string;
|
|
8
|
-
timeInForce?:
|
|
8
|
+
timeInForce?: TimeInForce;
|
|
9
9
|
}) => Promise<CreateOrderResponse>;
|
|
10
10
|
/** Place a market order */
|
|
11
11
|
placeMarketOrder: (tradingPairId: string, side: OrderSide, quantity: string, options?: {
|
|
12
|
-
tradingMode?:
|
|
12
|
+
tradingMode?: TradingMode;
|
|
13
13
|
slippageTolerance?: number;
|
|
14
|
-
timeInForce?:
|
|
14
|
+
timeInForce?: TimeInForce;
|
|
15
15
|
}) => Promise<CreateOrderResponse>;
|
|
16
16
|
/** Cancel an existing order */
|
|
17
17
|
cancelOrder: (orderId: string) => Promise<CancelOrderResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,eAAe,EAAE,CACf,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,KACpH,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElC,2BAA2B;IAC3B,gBAAgB,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,KAC3F,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElC,+BAA+B;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE/D,gCAAgC;IAChC,YAAY,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACxE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,kBAAkB,EAAE,CAAC,MAAM,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAE/F,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrade.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTrade.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,QAAQ,QAAO,cAkH3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrade.js","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTrade.js","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,10 @@ export function convertOrderEventToTrade(event) {
|
|
|
2
2
|
const { orderId, timestamp, data } = event;
|
|
3
3
|
const eventData = data;
|
|
4
4
|
return {
|
|
5
|
-
price: eventData.price ?? eventData.averageFillPrice ?? "0",
|
|
5
|
+
price: eventData.executionPrice ?? eventData.price ?? eventData.averageFillPrice ?? "0",
|
|
6
6
|
tradingPair: eventData.tradingPair,
|
|
7
7
|
tradingPairId: eventData.tradingPairId,
|
|
8
|
-
quantity: eventData.
|
|
8
|
+
quantity: eventData.executionQuantity ?? eventData.totalFilled ?? eventData.quantity ?? "0",
|
|
9
9
|
userId: eventData.userId,
|
|
10
10
|
tradingMode: eventData.tradingMode.toUpperCase(),
|
|
11
11
|
orderId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/utils.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,wBAAwB,CAAC,KAAiB;IACxD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAoE,CAAC;IAEvF,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,gBAAgB,IAAI,GAAG;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/hooks/useTradeFeed/utils.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,wBAAwB,CAAC,KAAiB;IACxD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAoE,CAAC;IAEvF,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,gBAAgB,IAAI,GAAG;QACvF,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,QAAQ,IAAI,GAAG;QAC3F,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,WAAW,EAAiB;QAC/D,OAAO;QACP,SAAS;QACT,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export type { MonacoSDK, Network, SDKConfig } from "@0xmonaco/core";
|
|
|
2
2
|
export type { AuthState, ChallengeResponse, TokenRefreshResponse, UserProfile } from "@0xmonaco/types";
|
|
3
3
|
export * from "./hooks";
|
|
4
4
|
export * from "./provider";
|
|
5
|
+
export * from "./utils";
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvG,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvG,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type MonacoContextValue, type MonacoProviderProps } from "./types";
|
|
2
|
-
export declare const MonacoProvider: ({ children, clientId, network }: MonacoProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const MonacoProvider: ({ children, clientId, network, tokenLifecycle: tokenLifecycleConfig }: MonacoProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export declare const useMonacoContext: () => MonacoContextValue;
|
|
4
4
|
//# sourceMappingURL=MonacoProvider.d.ts.map
|
|
@@ -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":"AAMA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIlG,eAAO,MAAM,cAAc,GAAI,uEAAuE,mBAAmB,4CAoGxH,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,kBAQnC,CAAC"}
|
|
@@ -2,14 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { MonacoSDK } from "@0xmonaco/core";
|
|
3
3
|
import { createContext, useContext, useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { useWalletClient } from "wagmi";
|
|
5
|
+
import { useTokenLifecycle } from "../hooks";
|
|
6
|
+
import { loadAuthState } from "../utils";
|
|
5
7
|
import { AuthenticationStatus } from "./types";
|
|
6
8
|
const MonacoContext = createContext(null);
|
|
7
|
-
export const MonacoProvider = ({ children, clientId, network }) => {
|
|
9
|
+
export const MonacoProvider = ({ children, clientId, network, tokenLifecycle: tokenLifecycleConfig }) => {
|
|
8
10
|
const { data: walletClient } = useWalletClient();
|
|
9
11
|
const [sdk, setSdk] = useState(null);
|
|
10
12
|
const [error, setError] = useState(null);
|
|
11
13
|
// Global authentication state (shared across all components)
|
|
12
14
|
const [authenticationStatus, setAuthenticationStatus] = useState(AuthenticationStatus.UNAUTHENTICATED);
|
|
15
|
+
// Token lifecycle management
|
|
16
|
+
const tokenLifecycle = useTokenLifecycle(sdk, tokenLifecycleConfig);
|
|
13
17
|
useEffect(() => {
|
|
14
18
|
const initializeSDK = async () => {
|
|
15
19
|
if (!walletClient) {
|
|
@@ -31,25 +35,60 @@ export const MonacoProvider = ({ children, clientId, network }) => {
|
|
|
31
35
|
setSdk(null);
|
|
32
36
|
});
|
|
33
37
|
}, [network, walletClient]);
|
|
34
|
-
//
|
|
38
|
+
// Restore cached tokens on mount
|
|
35
39
|
useEffect(() => {
|
|
36
|
-
if (!sdk)
|
|
37
|
-
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
40
|
+
if (!sdk)
|
|
38
41
|
return;
|
|
42
|
+
const persistTokens = tokenLifecycleConfig?.persistTokens ?? true;
|
|
43
|
+
if (!persistTokens)
|
|
44
|
+
return;
|
|
45
|
+
const cachedAuthState = loadAuthState();
|
|
46
|
+
if (!cachedAuthState)
|
|
47
|
+
return;
|
|
48
|
+
// Check if token is expired
|
|
49
|
+
if (tokenLifecycle.isTokenExpired(cachedAuthState)) {
|
|
50
|
+
// Set the auth state first so refreshAuth has a refresh token to use
|
|
51
|
+
sdk.setAuthState(cachedAuthState);
|
|
52
|
+
tokenLifecycle.initializeTokens(cachedAuthState);
|
|
53
|
+
// Attempt to refresh
|
|
54
|
+
tokenLifecycle.refreshTokens().then((newAuthState) => {
|
|
55
|
+
if (newAuthState) {
|
|
56
|
+
// Refresh succeeded, SDK auth state is already updated by refreshAuth
|
|
57
|
+
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATED);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Refresh failed, clear tokens and SDK state
|
|
61
|
+
tokenLifecycle.clearTokens();
|
|
62
|
+
sdk.logout().catch(() => { }); // Ignore errors, we're already in cleanup mode
|
|
63
|
+
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
64
|
+
}
|
|
65
|
+
}).catch((err) => {
|
|
66
|
+
const normalizedError = err instanceof Error ? err : new Error(String(err));
|
|
67
|
+
setError(normalizedError);
|
|
68
|
+
tokenLifecycle.clearTokens();
|
|
69
|
+
sdk.logout().catch(() => { }); // Ignore errors, we're already in cleanup mode
|
|
70
|
+
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Token is still valid, restore it
|
|
75
|
+
sdk.setAuthState(cachedAuthState);
|
|
76
|
+
tokenLifecycle.initializeTokens(cachedAuthState);
|
|
77
|
+
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATED);
|
|
39
78
|
}
|
|
40
|
-
|
|
41
|
-
setAuthenticationStatus(isAuthenticated ? AuthenticationStatus.AUTHENTICATED : AuthenticationStatus.UNAUTHENTICATED);
|
|
42
|
-
}, [sdk]);
|
|
79
|
+
}, [sdk, tokenLifecycle, tokenLifecycleConfig?.persistTokens]);
|
|
43
80
|
const contextValue = useMemo(() => ({
|
|
44
81
|
sdk,
|
|
45
82
|
clientId,
|
|
46
83
|
error,
|
|
47
84
|
// Global authentication state
|
|
48
85
|
authenticationStatus,
|
|
86
|
+
// Token lifecycle management
|
|
87
|
+
tokenLifecycle,
|
|
49
88
|
// Global authentication state setters
|
|
50
89
|
setAuthenticationStatus,
|
|
51
90
|
setError,
|
|
52
|
-
}), [sdk, clientId, error, authenticationStatus]);
|
|
91
|
+
}), [sdk, clientId, error, authenticationStatus, tokenLifecycle]);
|
|
53
92
|
return _jsx(MonacoContext.Provider, { value: contextValue, children: children });
|
|
54
93
|
};
|
|
55
94
|
export const useMonacoContext = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAqD,MAAM,SAAS,CAAC;AAElG,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAuB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"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"}
|
package/dist/provider/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IMonacoSDK } from "@0xmonaco/core";
|
|
2
2
|
import type { Network } from "@0xmonaco/types";
|
|
3
3
|
import type { ReactNode } from "react";
|
|
4
|
+
import type { TokenLifecycleConfig, UseTokenLifecycleReturn } from "../hooks";
|
|
4
5
|
export declare enum AuthenticationStatus {
|
|
5
6
|
/** User is not authenticated */
|
|
6
7
|
UNAUTHENTICATED = "unauthenticated",
|
|
@@ -18,6 +19,8 @@ export interface MonacoContextValue {
|
|
|
18
19
|
error: Error | null;
|
|
19
20
|
/** Current authentication status */
|
|
20
21
|
authenticationStatus: AuthenticationStatus;
|
|
22
|
+
/** Token lifecycle manager */
|
|
23
|
+
tokenLifecycle: UseTokenLifecycleReturn;
|
|
21
24
|
/** Function to update authentication status */
|
|
22
25
|
setAuthenticationStatus: (status: AuthenticationStatus) => void;
|
|
23
26
|
/** Function to update error */
|
|
@@ -30,5 +33,7 @@ export interface MonacoProviderProps {
|
|
|
30
33
|
clientId: string;
|
|
31
34
|
/** Monaco Network API to use */
|
|
32
35
|
network: Network;
|
|
36
|
+
/** Token lifecycle configuration options */
|
|
37
|
+
tokenLifecycle?: TokenLifecycleConfig;
|
|
33
38
|
}
|
|
34
39
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAE9E,oBAAY,oBAAoB;IAC9B,gCAAgC;IAChC,eAAe,oBAAoB;IACnC,oCAAoC;IACpC,cAAc,mBAAmB;IACjC,yCAAyC;IACzC,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IACvB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,oCAAoC;IACpC,oBAAoB,EAAE,oBAAoB,CAAC;IAG3C,8BAA8B;IAC9B,cAAc,EAAE,uBAAuB,CAAC;IAGxC,+CAA+C;IAC/C,uBAAuB,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChE,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,gCAAgC;IAChC,2DAAmC,CAAA;IACnC,oCAAoC;IACpC,yDAAiC,CAAA;IACjC,yCAAyC;IACzC,uDAA+B,CAAA;AACjC,CAAC,EAPW,oBAAoB,KAApB,oBAAoB,QAO/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AuthState } from "@0xmonaco/types";
|
|
2
|
+
/**
|
|
3
|
+
* Save auth state to localStorage
|
|
4
|
+
*
|
|
5
|
+
* @security This function stores authentication tokens (including refresh tokens) in localStorage,
|
|
6
|
+
* which is accessible to any JavaScript running on the page. This makes tokens vulnerable to XSS attacks.
|
|
7
|
+
*
|
|
8
|
+
* Security recommendations:
|
|
9
|
+
* - Implement Content Security Policy (CSP) headers to mitigate XSS risks
|
|
10
|
+
* - Sanitize all user input to prevent XSS vulnerabilities
|
|
11
|
+
* - Consider the tradeoffs: localStorage provides persistence across sessions but sacrifices XSS protection
|
|
12
|
+
* - For high-security requirements, consider httpOnly cookies (requires backend changes)
|
|
13
|
+
*
|
|
14
|
+
* @param authState - The authentication state to persist
|
|
15
|
+
*/
|
|
16
|
+
export declare function saveAuthState(authState: AuthState): void;
|
|
17
|
+
/**
|
|
18
|
+
* Load auth state from localStorage
|
|
19
|
+
* @returns The persisted auth state or null if not found/invalid
|
|
20
|
+
*/
|
|
21
|
+
export declare function loadAuthState(): AuthState | null;
|
|
22
|
+
/**
|
|
23
|
+
* Clear auth state from localStorage
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearAuthState(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Check if the stored token is expired
|
|
28
|
+
* @param authState - The auth state to check
|
|
29
|
+
* @param bufferSeconds - Buffer time before actual expiry (default: 60 seconds)
|
|
30
|
+
* @returns True if token is expired or will expire within buffer time
|
|
31
|
+
*/
|
|
32
|
+
export declare function isTokenExpired(authState: AuthState, bufferSeconds?: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Get time until token expiration in seconds
|
|
35
|
+
* @param authState - The auth state to check
|
|
36
|
+
* @returns Seconds until expiration (negative if already expired)
|
|
37
|
+
*/
|
|
38
|
+
export declare function getTimeUntilExpiry(authState: AuthState): number;
|
|
39
|
+
//# sourceMappingURL=tokenStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenStorage.d.ts","sourceRoot":"","sources":["../../src/utils/tokenStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAYxD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,GAAG,IAAI,CAsChD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,SAAK,GAAG,OAAO,CAGhF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAG/D"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage key for persisting auth tokens
|
|
3
|
+
*/
|
|
4
|
+
const STORAGE_KEY = "monaco_auth_state";
|
|
5
|
+
/**
|
|
6
|
+
* Save auth state to localStorage
|
|
7
|
+
*
|
|
8
|
+
* @security This function stores authentication tokens (including refresh tokens) in localStorage,
|
|
9
|
+
* which is accessible to any JavaScript running on the page. This makes tokens vulnerable to XSS attacks.
|
|
10
|
+
*
|
|
11
|
+
* Security recommendations:
|
|
12
|
+
* - Implement Content Security Policy (CSP) headers to mitigate XSS risks
|
|
13
|
+
* - Sanitize all user input to prevent XSS vulnerabilities
|
|
14
|
+
* - Consider the tradeoffs: localStorage provides persistence across sessions but sacrifices XSS protection
|
|
15
|
+
* - For high-security requirements, consider httpOnly cookies (requires backend changes)
|
|
16
|
+
*
|
|
17
|
+
* @param authState - The authentication state to persist
|
|
18
|
+
*/
|
|
19
|
+
export function saveAuthState(authState) {
|
|
20
|
+
try {
|
|
21
|
+
const data = JSON.stringify({
|
|
22
|
+
accessToken: authState.accessToken,
|
|
23
|
+
refreshToken: authState.refreshToken,
|
|
24
|
+
expiresAt: authState.expiresAt,
|
|
25
|
+
user: authState.user,
|
|
26
|
+
});
|
|
27
|
+
localStorage.setItem(STORAGE_KEY, data);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.warn("Failed to save auth state to localStorage:", error);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Load auth state from localStorage
|
|
35
|
+
* @returns The persisted auth state or null if not found/invalid
|
|
36
|
+
*/
|
|
37
|
+
export function loadAuthState() {
|
|
38
|
+
try {
|
|
39
|
+
const data = localStorage.getItem(STORAGE_KEY);
|
|
40
|
+
if (!data)
|
|
41
|
+
return null;
|
|
42
|
+
const parsed = JSON.parse(data);
|
|
43
|
+
// Validate required fields and types
|
|
44
|
+
if (typeof parsed.accessToken !== "string" ||
|
|
45
|
+
parsed.accessToken.length === 0 ||
|
|
46
|
+
typeof parsed.refreshToken !== "string" ||
|
|
47
|
+
parsed.refreshToken.length === 0 ||
|
|
48
|
+
typeof parsed.expiresAt !== "number" ||
|
|
49
|
+
!Number.isFinite(parsed.expiresAt) ||
|
|
50
|
+
parsed.expiresAt <= 0 ||
|
|
51
|
+
typeof parsed.user !== "object" ||
|
|
52
|
+
parsed.user === null ||
|
|
53
|
+
typeof parsed.user.id !== "string" ||
|
|
54
|
+
parsed.user.id.length === 0 ||
|
|
55
|
+
typeof parsed.user.address !== "string" ||
|
|
56
|
+
parsed.user.address.length === 0) {
|
|
57
|
+
clearAuthState();
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
accessToken: parsed.accessToken,
|
|
62
|
+
refreshToken: parsed.refreshToken,
|
|
63
|
+
expiresAt: parsed.expiresAt,
|
|
64
|
+
user: parsed.user,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.warn("Failed to load auth state from localStorage:", error);
|
|
69
|
+
clearAuthState();
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Clear auth state from localStorage
|
|
75
|
+
*/
|
|
76
|
+
export function clearAuthState() {
|
|
77
|
+
try {
|
|
78
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.warn("Failed to clear auth state from localStorage:", error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if the stored token is expired
|
|
86
|
+
* @param authState - The auth state to check
|
|
87
|
+
* @param bufferSeconds - Buffer time before actual expiry (default: 60 seconds)
|
|
88
|
+
* @returns True if token is expired or will expire within buffer time
|
|
89
|
+
*/
|
|
90
|
+
export function isTokenExpired(authState, bufferSeconds = 60) {
|
|
91
|
+
const now = Math.floor(Date.now() / 1000);
|
|
92
|
+
return authState.expiresAt <= now + bufferSeconds;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get time until token expiration in seconds
|
|
96
|
+
* @param authState - The auth state to check
|
|
97
|
+
* @returns Seconds until expiration (negative if already expired)
|
|
98
|
+
*/
|
|
99
|
+
export function getTimeUntilExpiry(authState) {
|
|
100
|
+
const now = Math.floor(Date.now() / 1000);
|
|
101
|
+
return authState.expiresAt - now;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=tokenStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenStorage.js","sourceRoot":"","sources":["../../src/utils/tokenStorage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xmonaco/react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@0xmonaco/core": "0.3.
|
|
12
|
+
"@0xmonaco/core": "0.3.2"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"@types/react": "^19.1.12",
|