@0xmonaco/react 0.0.0-develop-20260120180031
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 +381 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAuth/index.d.ts +3 -0
- package/dist/hooks/useAuth/index.d.ts.map +1 -0
- package/dist/hooks/useAuth/index.js +2 -0
- package/dist/hooks/useAuth/index.js.map +1 -0
- package/dist/hooks/useAuth/types.d.ts +31 -0
- package/dist/hooks/useAuth/types.d.ts.map +1 -0
- package/dist/hooks/useAuth/types.js +2 -0
- package/dist/hooks/useAuth/types.js.map +1 -0
- package/dist/hooks/useAuth/useAuth.d.ts +3 -0
- package/dist/hooks/useAuth/useAuth.d.ts.map +1 -0
- package/dist/hooks/useAuth/useAuth.js +150 -0
- package/dist/hooks/useAuth/useAuth.js.map +1 -0
- package/dist/hooks/useFees/index.d.ts +3 -0
- package/dist/hooks/useFees/index.d.ts.map +1 -0
- package/dist/hooks/useFees/index.js +2 -0
- package/dist/hooks/useFees/index.js.map +1 -0
- package/dist/hooks/useFees/types.d.ts +6 -0
- package/dist/hooks/useFees/types.d.ts.map +1 -0
- package/dist/hooks/useFees/types.js +2 -0
- package/dist/hooks/useFees/types.js.map +1 -0
- package/dist/hooks/useFees/useFees.d.ts +3 -0
- package/dist/hooks/useFees/useFees.d.ts.map +1 -0
- package/dist/hooks/useFees/useFees.js +15 -0
- package/dist/hooks/useFees/useFees.js.map +1 -0
- package/dist/hooks/useMarket/index.d.ts +3 -0
- package/dist/hooks/useMarket/index.d.ts.map +1 -0
- package/dist/hooks/useMarket/index.js +2 -0
- package/dist/hooks/useMarket/index.js.map +1 -0
- package/dist/hooks/useMarket/types.d.ts +24 -0
- package/dist/hooks/useMarket/types.d.ts.map +1 -0
- package/dist/hooks/useMarket/types.js +2 -0
- package/dist/hooks/useMarket/types.js.map +1 -0
- package/dist/hooks/useMarket/useMarket.d.ts +3 -0
- package/dist/hooks/useMarket/useMarket.d.ts.map +1 -0
- package/dist/hooks/useMarket/useMarket.js +44 -0
- package/dist/hooks/useMarket/useMarket.js.map +1 -0
- package/dist/hooks/useMonaco/index.d.ts +3 -0
- package/dist/hooks/useMonaco/index.d.ts.map +1 -0
- package/dist/hooks/useMonaco/index.js +2 -0
- package/dist/hooks/useMonaco/index.js.map +1 -0
- package/dist/hooks/useMonaco/types.d.ts +14 -0
- package/dist/hooks/useMonaco/types.d.ts.map +1 -0
- package/dist/hooks/useMonaco/types.js +2 -0
- package/dist/hooks/useMonaco/types.js.map +1 -0
- package/dist/hooks/useMonaco/useMonaco.d.ts +3 -0
- package/dist/hooks/useMonaco/useMonaco.d.ts.map +1 -0
- package/dist/hooks/useMonaco/useMonaco.js +14 -0
- package/dist/hooks/useMonaco/useMonaco.js.map +1 -0
- package/dist/hooks/useOrderbook/index.d.ts +3 -0
- package/dist/hooks/useOrderbook/index.d.ts.map +1 -0
- package/dist/hooks/useOrderbook/index.js +2 -0
- package/dist/hooks/useOrderbook/index.js.map +1 -0
- package/dist/hooks/useOrderbook/types.d.ts +28 -0
- package/dist/hooks/useOrderbook/types.d.ts.map +1 -0
- package/dist/hooks/useOrderbook/types.js +2 -0
- package/dist/hooks/useOrderbook/types.js.map +1 -0
- package/dist/hooks/useOrderbook/useOrderbook.d.ts +4 -0
- package/dist/hooks/useOrderbook/useOrderbook.d.ts.map +1 -0
- package/dist/hooks/useOrderbook/useOrderbook.js +32 -0
- package/dist/hooks/useOrderbook/useOrderbook.js.map +1 -0
- package/dist/hooks/useProfile/index.d.ts +3 -0
- package/dist/hooks/useProfile/index.d.ts.map +1 -0
- package/dist/hooks/useProfile/index.js +2 -0
- package/dist/hooks/useProfile/index.js.map +1 -0
- package/dist/hooks/useProfile/types.d.ts +14 -0
- package/dist/hooks/useProfile/types.d.ts.map +1 -0
- package/dist/hooks/useProfile/types.js +2 -0
- package/dist/hooks/useProfile/types.js.map +1 -0
- package/dist/hooks/useProfile/useProfile.d.ts +3 -0
- package/dist/hooks/useProfile/useProfile.d.ts.map +1 -0
- package/dist/hooks/useProfile/useProfile.js +46 -0
- package/dist/hooks/useProfile/useProfile.js.map +1 -0
- 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/index.d.ts +3 -0
- package/dist/hooks/useTrade/index.d.ts.map +1 -0
- package/dist/hooks/useTrade/index.js +2 -0
- package/dist/hooks/useTrade/index.js.map +1 -0
- package/dist/hooks/useTrade/types.d.ts +29 -0
- package/dist/hooks/useTrade/types.d.ts.map +1 -0
- package/dist/hooks/useTrade/types.js +2 -0
- package/dist/hooks/useTrade/types.js.map +1 -0
- package/dist/hooks/useTrade/useTrade.d.ts +3 -0
- package/dist/hooks/useTrade/useTrade.d.ts.map +1 -0
- package/dist/hooks/useTrade/useTrade.js +89 -0
- package/dist/hooks/useTrade/useTrade.js.map +1 -0
- package/dist/hooks/useTradeFeed/index.d.ts +3 -0
- package/dist/hooks/useTradeFeed/index.d.ts.map +1 -0
- package/dist/hooks/useTradeFeed/index.js +3 -0
- package/dist/hooks/useTradeFeed/index.js.map +1 -0
- package/dist/hooks/useTradeFeed/types.d.ts +15 -0
- package/dist/hooks/useTradeFeed/types.d.ts.map +1 -0
- package/dist/hooks/useTradeFeed/types.js +2 -0
- package/dist/hooks/useTradeFeed/types.js.map +1 -0
- package/dist/hooks/useTradeFeed/useTradeFeed.d.ts +9 -0
- package/dist/hooks/useTradeFeed/useTradeFeed.d.ts.map +1 -0
- package/dist/hooks/useTradeFeed/useTradeFeed.js +47 -0
- package/dist/hooks/useTradeFeed/useTradeFeed.js.map +1 -0
- 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/index.d.ts +3 -0
- package/dist/hooks/useVault/index.d.ts.map +1 -0
- package/dist/hooks/useVault/index.js +2 -0
- package/dist/hooks/useVault/index.js.map +1 -0
- package/dist/hooks/useVault/types.d.ts +16 -0
- package/dist/hooks/useVault/types.d.ts.map +1 -0
- package/dist/hooks/useVault/types.js +2 -0
- package/dist/hooks/useVault/types.js.map +1 -0
- package/dist/hooks/useVault/useVault.d.ts +3 -0
- package/dist/hooks/useVault/useVault.d.ts.map +1 -0
- package/dist/hooks/useVault/useVault.js +66 -0
- package/dist/hooks/useVault/useVault.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/provider/MonacoProvider.d.ts +4 -0
- package/dist/provider/MonacoProvider.d.ts.map +1 -0
- package/dist/provider/MonacoProvider.js +103 -0
- package/dist/provider/MonacoProvider.js.map +1 -0
- package/dist/provider/index.d.ts +3 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +3 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/types.d.ts +46 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +10 -0
- package/dist/provider/types.js.map +1 -0
- 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 +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useVault/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Balance, TransactionResult } from "@0xmonaco/types";
|
|
2
|
+
export interface UseVaultReturn {
|
|
3
|
+
/** Approve the vault to spend tokens */
|
|
4
|
+
approve: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
5
|
+
/** Deposit tokens into the vault */
|
|
6
|
+
deposit: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
7
|
+
/** Withdraw tokens from the vault */
|
|
8
|
+
withdraw: (assetId: string, amount: bigint, autoWait?: boolean) => Promise<TransactionResult>;
|
|
9
|
+
/** Get the balance of a token in the vault */
|
|
10
|
+
getBalance: (assetId: string) => Promise<Balance>;
|
|
11
|
+
/** Get the allowance for a token */
|
|
12
|
+
getAllowance: (assetId: string) => Promise<bigint>;
|
|
13
|
+
/** Check if a token needs approval for an amount */
|
|
14
|
+
needsApproval: (assetId: string, amount: bigint) => Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useVault/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVault.d.ts","sourceRoot":"","sources":["../../../src/hooks/useVault/useVault.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,QAAQ,QAAO,cA8E3B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useMonacoSDK } from "../useMonaco";
|
|
3
|
+
export const useVault = () => {
|
|
4
|
+
const { sdk } = useMonacoSDK();
|
|
5
|
+
const approve = useCallback(async (assetId, amount, autoWait) => {
|
|
6
|
+
if (!sdk)
|
|
7
|
+
throw new Error("SDK not available");
|
|
8
|
+
if (!assetId?.trim())
|
|
9
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
10
|
+
if (amount <= 0n)
|
|
11
|
+
throw new Error("Amount must be greater than 0");
|
|
12
|
+
return await sdk.vault.approve(assetId, amount, autoWait);
|
|
13
|
+
}, [sdk]);
|
|
14
|
+
const deposit = useCallback(async (assetId, amount, autoWait) => {
|
|
15
|
+
if (!sdk)
|
|
16
|
+
throw new Error("SDK not available");
|
|
17
|
+
if (!assetId?.trim())
|
|
18
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
19
|
+
if (amount <= 0n)
|
|
20
|
+
throw new Error("Amount must be greater than 0");
|
|
21
|
+
return await sdk.vault.deposit(assetId, amount, autoWait);
|
|
22
|
+
}, [sdk]);
|
|
23
|
+
const withdraw = useCallback(async (assetId, amount, autoWait) => {
|
|
24
|
+
if (!sdk)
|
|
25
|
+
throw new Error("SDK not available");
|
|
26
|
+
if (!assetId?.trim())
|
|
27
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
28
|
+
if (amount <= 0n)
|
|
29
|
+
throw new Error("Amount must be greater than 0");
|
|
30
|
+
return await sdk.vault.withdraw(assetId, amount, autoWait);
|
|
31
|
+
}, [sdk]);
|
|
32
|
+
const getBalance = useCallback(async (assetId) => {
|
|
33
|
+
if (!sdk)
|
|
34
|
+
throw new Error("SDK not available");
|
|
35
|
+
if (!assetId?.trim())
|
|
36
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
37
|
+
return await sdk.vault.getBalance(assetId);
|
|
38
|
+
}, [sdk]);
|
|
39
|
+
const getAllowance = useCallback(async (assetId) => {
|
|
40
|
+
if (!sdk)
|
|
41
|
+
throw new Error("SDK not available");
|
|
42
|
+
if (!assetId?.trim())
|
|
43
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
44
|
+
return await sdk.vault.getAllowance(assetId);
|
|
45
|
+
}, [sdk]);
|
|
46
|
+
const needsApproval = useCallback(async (assetId, amount) => {
|
|
47
|
+
if (!sdk)
|
|
48
|
+
throw new Error("SDK not available");
|
|
49
|
+
if (!assetId?.trim())
|
|
50
|
+
throw new Error("Asset ID is required and cannot be empty");
|
|
51
|
+
if (amount <= 0n)
|
|
52
|
+
throw new Error("Amount must be greater than 0");
|
|
53
|
+
return await sdk.vault.needsApproval(assetId, amount);
|
|
54
|
+
}, [sdk]);
|
|
55
|
+
return {
|
|
56
|
+
// Token operations
|
|
57
|
+
approve,
|
|
58
|
+
deposit,
|
|
59
|
+
withdraw,
|
|
60
|
+
// Balance and allowance queries
|
|
61
|
+
getBalance,
|
|
62
|
+
getAllowance,
|
|
63
|
+
needsApproval,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=useVault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVault.js","sourceRoot":"","sources":["../../../src/hooks/useVault/useVault.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type MonacoContextValue, type MonacoProviderProps } from "./types";
|
|
2
|
+
export declare const MonacoProvider: ({ children, clientId, network, seiRpcUrl, wsUrl, tokenLifecycle: tokenLifecycleConfig }: MonacoProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare const useMonacoContext: () => MonacoContextValue;
|
|
4
|
+
//# sourceMappingURL=MonacoProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,yFAAyF,mBAAmB,4CAsG1I,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,kBAQnC,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { MonacoSDK } from "@0xmonaco/core";
|
|
3
|
+
import { createContext, useContext, useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { useWalletClient } from "wagmi";
|
|
5
|
+
import { useTokenLifecycle } from "../hooks";
|
|
6
|
+
import { loadAuthState } from "../utils";
|
|
7
|
+
import { AuthenticationStatus } from "./types";
|
|
8
|
+
const MonacoContext = createContext(null);
|
|
9
|
+
export const MonacoProvider = ({ children, clientId, network, seiRpcUrl, wsUrl, tokenLifecycle: tokenLifecycleConfig }) => {
|
|
10
|
+
const { data: walletClient } = useWalletClient();
|
|
11
|
+
const [sdk, setSdk] = useState(null);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
// Global authentication state (shared across all components)
|
|
14
|
+
const [authenticationStatus, setAuthenticationStatus] = useState(AuthenticationStatus.UNAUTHENTICATED);
|
|
15
|
+
// Token lifecycle management
|
|
16
|
+
const tokenLifecycle = useTokenLifecycle(sdk, tokenLifecycleConfig);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const initializeSDK = async () => {
|
|
19
|
+
if (!walletClient) {
|
|
20
|
+
setSdk(null);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
setError(null);
|
|
24
|
+
const sdkConfig = {
|
|
25
|
+
walletClient,
|
|
26
|
+
network,
|
|
27
|
+
seiRpcUrl,
|
|
28
|
+
wsUrl
|
|
29
|
+
};
|
|
30
|
+
const newSdk = new MonacoSDK(sdkConfig);
|
|
31
|
+
setSdk(newSdk);
|
|
32
|
+
};
|
|
33
|
+
initializeSDK().catch((err) => {
|
|
34
|
+
// Normalize error to "Error" type and clear SDK on failure
|
|
35
|
+
const normalizedError = err instanceof Error ? err : new Error(String(err));
|
|
36
|
+
setError(normalizedError);
|
|
37
|
+
setSdk(null);
|
|
38
|
+
});
|
|
39
|
+
}, [network, walletClient, seiRpcUrl, wsUrl]);
|
|
40
|
+
// Restore cached tokens when the provider mounts
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!sdk)
|
|
43
|
+
return;
|
|
44
|
+
const persistTokens = tokenLifecycleConfig?.persistTokens ?? true;
|
|
45
|
+
if (!persistTokens)
|
|
46
|
+
return;
|
|
47
|
+
const cachedAuthState = loadAuthState();
|
|
48
|
+
if (!cachedAuthState)
|
|
49
|
+
return;
|
|
50
|
+
// Check if the token is expired
|
|
51
|
+
if (tokenLifecycle.isTokenExpired(cachedAuthState)) {
|
|
52
|
+
// Set the auth state first so refreshAuth has a refresh token to use
|
|
53
|
+
sdk.setAuthState(cachedAuthState);
|
|
54
|
+
tokenLifecycle.initializeTokens(cachedAuthState);
|
|
55
|
+
// Attempt to refresh
|
|
56
|
+
tokenLifecycle.refreshTokens().then((newAuthState) => {
|
|
57
|
+
if (newAuthState) {
|
|
58
|
+
// Refresh succeeded, SDK auth state is already updated by refreshAuth
|
|
59
|
+
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATED);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Refresh failed, clear tokens and SDK state
|
|
63
|
+
tokenLifecycle.clearTokens();
|
|
64
|
+
sdk.logout().catch(() => { }); // Ignore errors, we're already in cleanup mode
|
|
65
|
+
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
66
|
+
}
|
|
67
|
+
}).catch((err) => {
|
|
68
|
+
const normalizedError = err instanceof Error ? err : new Error(String(err));
|
|
69
|
+
setError(normalizedError);
|
|
70
|
+
tokenLifecycle.clearTokens();
|
|
71
|
+
sdk.logout().catch(() => { }); // Ignore errors, we're already in cleanup mode
|
|
72
|
+
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Token is still valid, restore it
|
|
77
|
+
sdk.setAuthState(cachedAuthState);
|
|
78
|
+
tokenLifecycle.initializeTokens(cachedAuthState);
|
|
79
|
+
setAuthenticationStatus(AuthenticationStatus.AUTHENTICATED);
|
|
80
|
+
}
|
|
81
|
+
}, [sdk, tokenLifecycle, tokenLifecycleConfig?.persistTokens]);
|
|
82
|
+
const contextValue = useMemo(() => ({
|
|
83
|
+
sdk,
|
|
84
|
+
clientId,
|
|
85
|
+
error,
|
|
86
|
+
// Global authentication state
|
|
87
|
+
authenticationStatus,
|
|
88
|
+
// Token lifecycle management
|
|
89
|
+
tokenLifecycle,
|
|
90
|
+
// Global authentication state setters
|
|
91
|
+
setAuthenticationStatus,
|
|
92
|
+
setError,
|
|
93
|
+
}), [sdk, clientId, error, authenticationStatus, tokenLifecycle]);
|
|
94
|
+
return _jsx(MonacoContext.Provider, { value: contextValue, children: children });
|
|
95
|
+
};
|
|
96
|
+
export const useMonacoContext = () => {
|
|
97
|
+
const context = useContext(MonacoContext);
|
|
98
|
+
if (!context) {
|
|
99
|
+
throw new Error("useMonacoContext must be used within a MonacoProvider. " + "Make sure to wrap your app with <MonacoProvider>.");
|
|
100
|
+
}
|
|
101
|
+
return context;
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=MonacoProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { MonacoSDK, Network } from "@0xmonaco/types";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
import type { TokenLifecycleConfig, UseTokenLifecycleReturn } from "../hooks";
|
|
4
|
+
export declare enum AuthenticationStatus {
|
|
5
|
+
/** User is not authenticated */
|
|
6
|
+
UNAUTHENTICATED = "unauthenticated",
|
|
7
|
+
/** Authentication is in progress */
|
|
8
|
+
AUTHENTICATING = "authenticating",
|
|
9
|
+
/** User is successfully authenticated */
|
|
10
|
+
AUTHENTICATED = "authenticated"
|
|
11
|
+
}
|
|
12
|
+
export interface MonacoContextValue {
|
|
13
|
+
/** Monaco SDK instance */
|
|
14
|
+
sdk: MonacoSDK | null;
|
|
15
|
+
/** Client ID for authentication */
|
|
16
|
+
clientId: string;
|
|
17
|
+
/** Any error that occurred (SDK initialization, authentication, etc.) */
|
|
18
|
+
error: Error | null;
|
|
19
|
+
/** Current authentication status */
|
|
20
|
+
authenticationStatus: AuthenticationStatus;
|
|
21
|
+
/** Token lifecycle manager */
|
|
22
|
+
tokenLifecycle: UseTokenLifecycleReturn;
|
|
23
|
+
/** Function to update authentication status */
|
|
24
|
+
setAuthenticationStatus: (status: AuthenticationStatus) => void;
|
|
25
|
+
/** Function to update error */
|
|
26
|
+
setError: (error: Error | null) => void;
|
|
27
|
+
}
|
|
28
|
+
export interface MonacoProviderProps {
|
|
29
|
+
/** Child components */
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
/** Client ID for authentication */
|
|
32
|
+
clientId: string;
|
|
33
|
+
/**
|
|
34
|
+
* Network to use - can be a preset ("local", "testnet", "mainnet") or a custom API URL.
|
|
35
|
+
*
|
|
36
|
+
* For custom API URLs, pass the full URL as a string (e.g., "https://my-custom-monaco-api.com")
|
|
37
|
+
*/
|
|
38
|
+
network: Network;
|
|
39
|
+
/** WebSocket URL for Monaco (required) */
|
|
40
|
+
wsUrl: string;
|
|
41
|
+
/** RPC URL for Sei blockchain interactions (required) */
|
|
42
|
+
seiRpcUrl: string;
|
|
43
|
+
/** Token lifecycle configuration options */
|
|
44
|
+
tokenLifecycle?: TokenLifecycleConfig;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1D,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,SAAS,GAAG,IAAI,CAAC;IACtB,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;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export var AuthenticationStatus;
|
|
2
|
+
(function (AuthenticationStatus) {
|
|
3
|
+
/** User is not authenticated */
|
|
4
|
+
AuthenticationStatus["UNAUTHENTICATED"] = "unauthenticated";
|
|
5
|
+
/** Authentication is in progress */
|
|
6
|
+
AuthenticationStatus["AUTHENTICATING"] = "authenticating";
|
|
7
|
+
/** User is successfully authenticated */
|
|
8
|
+
AuthenticationStatus["AUTHENTICATED"] = "authenticated";
|
|
9
|
+
})(AuthenticationStatus || (AuthenticationStatus = {}));
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/provider/types.ts"],"names":[],"mappings":"AAIA,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
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@0xmonaco/react",
|
|
3
|
+
"version": "0.0.0-develop-20260120180031",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@0xmonaco/core": "0.0.0-develop-20260120180031",
|
|
13
|
+
"@0xmonaco/types": "0.0.0-develop-20260120180031"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@types/react": "^19.1.12",
|
|
17
|
+
"typescript": "5.9.2",
|
|
18
|
+
"react": "^18.3.1",
|
|
19
|
+
"wagmi": "^2.17.5",
|
|
20
|
+
"viem": "^2.31.7"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
24
|
+
"wagmi": "^2.17.5",
|
|
25
|
+
"viem": "^2.31.7"
|
|
26
|
+
},
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"default": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -b",
|
|
35
|
+
"dev": "tsc --watch",
|
|
36
|
+
"clean": "rm -rf dist",
|
|
37
|
+
"lint": "eslint src --ext .ts,.tsx"
|
|
38
|
+
}
|
|
39
|
+
}
|