@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.
Files changed (166) hide show
  1. package/README.md +381 -0
  2. package/dist/hooks/index.d.ts +12 -0
  3. package/dist/hooks/index.d.ts.map +1 -0
  4. package/dist/hooks/index.js +12 -0
  5. package/dist/hooks/index.js.map +1 -0
  6. package/dist/hooks/useAuth/index.d.ts +3 -0
  7. package/dist/hooks/useAuth/index.d.ts.map +1 -0
  8. package/dist/hooks/useAuth/index.js +2 -0
  9. package/dist/hooks/useAuth/index.js.map +1 -0
  10. package/dist/hooks/useAuth/types.d.ts +31 -0
  11. package/dist/hooks/useAuth/types.d.ts.map +1 -0
  12. package/dist/hooks/useAuth/types.js +2 -0
  13. package/dist/hooks/useAuth/types.js.map +1 -0
  14. package/dist/hooks/useAuth/useAuth.d.ts +3 -0
  15. package/dist/hooks/useAuth/useAuth.d.ts.map +1 -0
  16. package/dist/hooks/useAuth/useAuth.js +150 -0
  17. package/dist/hooks/useAuth/useAuth.js.map +1 -0
  18. package/dist/hooks/useFees/index.d.ts +3 -0
  19. package/dist/hooks/useFees/index.d.ts.map +1 -0
  20. package/dist/hooks/useFees/index.js +2 -0
  21. package/dist/hooks/useFees/index.js.map +1 -0
  22. package/dist/hooks/useFees/types.d.ts +6 -0
  23. package/dist/hooks/useFees/types.d.ts.map +1 -0
  24. package/dist/hooks/useFees/types.js +2 -0
  25. package/dist/hooks/useFees/types.js.map +1 -0
  26. package/dist/hooks/useFees/useFees.d.ts +3 -0
  27. package/dist/hooks/useFees/useFees.d.ts.map +1 -0
  28. package/dist/hooks/useFees/useFees.js +15 -0
  29. package/dist/hooks/useFees/useFees.js.map +1 -0
  30. package/dist/hooks/useMarket/index.d.ts +3 -0
  31. package/dist/hooks/useMarket/index.d.ts.map +1 -0
  32. package/dist/hooks/useMarket/index.js +2 -0
  33. package/dist/hooks/useMarket/index.js.map +1 -0
  34. package/dist/hooks/useMarket/types.d.ts +24 -0
  35. package/dist/hooks/useMarket/types.d.ts.map +1 -0
  36. package/dist/hooks/useMarket/types.js +2 -0
  37. package/dist/hooks/useMarket/types.js.map +1 -0
  38. package/dist/hooks/useMarket/useMarket.d.ts +3 -0
  39. package/dist/hooks/useMarket/useMarket.d.ts.map +1 -0
  40. package/dist/hooks/useMarket/useMarket.js +44 -0
  41. package/dist/hooks/useMarket/useMarket.js.map +1 -0
  42. package/dist/hooks/useMonaco/index.d.ts +3 -0
  43. package/dist/hooks/useMonaco/index.d.ts.map +1 -0
  44. package/dist/hooks/useMonaco/index.js +2 -0
  45. package/dist/hooks/useMonaco/index.js.map +1 -0
  46. package/dist/hooks/useMonaco/types.d.ts +14 -0
  47. package/dist/hooks/useMonaco/types.d.ts.map +1 -0
  48. package/dist/hooks/useMonaco/types.js +2 -0
  49. package/dist/hooks/useMonaco/types.js.map +1 -0
  50. package/dist/hooks/useMonaco/useMonaco.d.ts +3 -0
  51. package/dist/hooks/useMonaco/useMonaco.d.ts.map +1 -0
  52. package/dist/hooks/useMonaco/useMonaco.js +14 -0
  53. package/dist/hooks/useMonaco/useMonaco.js.map +1 -0
  54. package/dist/hooks/useOrderbook/index.d.ts +3 -0
  55. package/dist/hooks/useOrderbook/index.d.ts.map +1 -0
  56. package/dist/hooks/useOrderbook/index.js +2 -0
  57. package/dist/hooks/useOrderbook/index.js.map +1 -0
  58. package/dist/hooks/useOrderbook/types.d.ts +28 -0
  59. package/dist/hooks/useOrderbook/types.d.ts.map +1 -0
  60. package/dist/hooks/useOrderbook/types.js +2 -0
  61. package/dist/hooks/useOrderbook/types.js.map +1 -0
  62. package/dist/hooks/useOrderbook/useOrderbook.d.ts +4 -0
  63. package/dist/hooks/useOrderbook/useOrderbook.d.ts.map +1 -0
  64. package/dist/hooks/useOrderbook/useOrderbook.js +32 -0
  65. package/dist/hooks/useOrderbook/useOrderbook.js.map +1 -0
  66. package/dist/hooks/useProfile/index.d.ts +3 -0
  67. package/dist/hooks/useProfile/index.d.ts.map +1 -0
  68. package/dist/hooks/useProfile/index.js +2 -0
  69. package/dist/hooks/useProfile/index.js.map +1 -0
  70. package/dist/hooks/useProfile/types.d.ts +14 -0
  71. package/dist/hooks/useProfile/types.d.ts.map +1 -0
  72. package/dist/hooks/useProfile/types.js +2 -0
  73. package/dist/hooks/useProfile/types.js.map +1 -0
  74. package/dist/hooks/useProfile/useProfile.d.ts +3 -0
  75. package/dist/hooks/useProfile/useProfile.d.ts.map +1 -0
  76. package/dist/hooks/useProfile/useProfile.js +46 -0
  77. package/dist/hooks/useProfile/useProfile.js.map +1 -0
  78. package/dist/hooks/useTokenLifecycle/index.d.ts +3 -0
  79. package/dist/hooks/useTokenLifecycle/index.d.ts.map +1 -0
  80. package/dist/hooks/useTokenLifecycle/index.js +2 -0
  81. package/dist/hooks/useTokenLifecycle/index.js.map +1 -0
  82. package/dist/hooks/useTokenLifecycle/types.d.ts +24 -0
  83. package/dist/hooks/useTokenLifecycle/types.d.ts.map +1 -0
  84. package/dist/hooks/useTokenLifecycle/types.js +2 -0
  85. package/dist/hooks/useTokenLifecycle/types.js.map +1 -0
  86. package/dist/hooks/useTokenLifecycle/useTokenLifecycle.d.ts +21 -0
  87. package/dist/hooks/useTokenLifecycle/useTokenLifecycle.d.ts.map +1 -0
  88. package/dist/hooks/useTokenLifecycle/useTokenLifecycle.js +126 -0
  89. package/dist/hooks/useTokenLifecycle/useTokenLifecycle.js.map +1 -0
  90. package/dist/hooks/useTokenLifecycle/utils.d.ts +8 -0
  91. package/dist/hooks/useTokenLifecycle/utils.d.ts.map +1 -0
  92. package/dist/hooks/useTokenLifecycle/utils.js +16 -0
  93. package/dist/hooks/useTokenLifecycle/utils.js.map +1 -0
  94. package/dist/hooks/useTrade/index.d.ts +3 -0
  95. package/dist/hooks/useTrade/index.d.ts.map +1 -0
  96. package/dist/hooks/useTrade/index.js +2 -0
  97. package/dist/hooks/useTrade/index.js.map +1 -0
  98. package/dist/hooks/useTrade/types.d.ts +29 -0
  99. package/dist/hooks/useTrade/types.d.ts.map +1 -0
  100. package/dist/hooks/useTrade/types.js +2 -0
  101. package/dist/hooks/useTrade/types.js.map +1 -0
  102. package/dist/hooks/useTrade/useTrade.d.ts +3 -0
  103. package/dist/hooks/useTrade/useTrade.d.ts.map +1 -0
  104. package/dist/hooks/useTrade/useTrade.js +89 -0
  105. package/dist/hooks/useTrade/useTrade.js.map +1 -0
  106. package/dist/hooks/useTradeFeed/index.d.ts +3 -0
  107. package/dist/hooks/useTradeFeed/index.d.ts.map +1 -0
  108. package/dist/hooks/useTradeFeed/index.js +3 -0
  109. package/dist/hooks/useTradeFeed/index.js.map +1 -0
  110. package/dist/hooks/useTradeFeed/types.d.ts +15 -0
  111. package/dist/hooks/useTradeFeed/types.d.ts.map +1 -0
  112. package/dist/hooks/useTradeFeed/types.js +2 -0
  113. package/dist/hooks/useTradeFeed/types.js.map +1 -0
  114. package/dist/hooks/useTradeFeed/useTradeFeed.d.ts +9 -0
  115. package/dist/hooks/useTradeFeed/useTradeFeed.d.ts.map +1 -0
  116. package/dist/hooks/useTradeFeed/useTradeFeed.js +47 -0
  117. package/dist/hooks/useTradeFeed/useTradeFeed.js.map +1 -0
  118. package/dist/hooks/useUserMovements/index.d.ts +3 -0
  119. package/dist/hooks/useUserMovements/index.d.ts.map +1 -0
  120. package/dist/hooks/useUserMovements/index.js +3 -0
  121. package/dist/hooks/useUserMovements/index.js.map +1 -0
  122. package/dist/hooks/useUserMovements/types.d.ts +17 -0
  123. package/dist/hooks/useUserMovements/types.d.ts.map +1 -0
  124. package/dist/hooks/useUserMovements/types.js +2 -0
  125. package/dist/hooks/useUserMovements/types.js.map +1 -0
  126. package/dist/hooks/useUserMovements/useUserMovements.d.ts +12 -0
  127. package/dist/hooks/useUserMovements/useUserMovements.d.ts.map +1 -0
  128. package/dist/hooks/useUserMovements/useUserMovements.js +92 -0
  129. package/dist/hooks/useUserMovements/useUserMovements.js.map +1 -0
  130. package/dist/hooks/useVault/index.d.ts +3 -0
  131. package/dist/hooks/useVault/index.d.ts.map +1 -0
  132. package/dist/hooks/useVault/index.js +2 -0
  133. package/dist/hooks/useVault/index.js.map +1 -0
  134. package/dist/hooks/useVault/types.d.ts +16 -0
  135. package/dist/hooks/useVault/types.d.ts.map +1 -0
  136. package/dist/hooks/useVault/types.js +2 -0
  137. package/dist/hooks/useVault/types.js.map +1 -0
  138. package/dist/hooks/useVault/useVault.d.ts +3 -0
  139. package/dist/hooks/useVault/useVault.d.ts.map +1 -0
  140. package/dist/hooks/useVault/useVault.js +66 -0
  141. package/dist/hooks/useVault/useVault.js.map +1 -0
  142. package/dist/index.d.ts +4 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +4 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/provider/MonacoProvider.d.ts +4 -0
  147. package/dist/provider/MonacoProvider.d.ts.map +1 -0
  148. package/dist/provider/MonacoProvider.js +103 -0
  149. package/dist/provider/MonacoProvider.js.map +1 -0
  150. package/dist/provider/index.d.ts +3 -0
  151. package/dist/provider/index.d.ts.map +1 -0
  152. package/dist/provider/index.js +3 -0
  153. package/dist/provider/index.js.map +1 -0
  154. package/dist/provider/types.d.ts +46 -0
  155. package/dist/provider/types.d.ts.map +1 -0
  156. package/dist/provider/types.js +10 -0
  157. package/dist/provider/types.js.map +1 -0
  158. package/dist/utils/index.d.ts +2 -0
  159. package/dist/utils/index.d.ts.map +1 -0
  160. package/dist/utils/index.js +2 -0
  161. package/dist/utils/index.js.map +1 -0
  162. package/dist/utils/tokenStorage.d.ts +39 -0
  163. package/dist/utils/tokenStorage.d.ts.map +1 -0
  164. package/dist/utils/tokenStorage.js +103 -0
  165. package/dist/utils/tokenStorage.js.map +1 -0
  166. package/package.json +39 -0
@@ -0,0 +1,2 @@
1
+ export { useVault } from "./useVault";
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useVault/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { UseVaultReturn } from "./types";
2
+ export declare const useVault: () => UseVaultReturn;
3
+ //# sourceMappingURL=useVault.d.ts.map
@@ -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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"}
@@ -0,0 +1,4 @@
1
+ export * from "./hooks";
2
+ export * from "./provider";
3
+ export * from "./utils";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from "./hooks";
2
+ export * from "./provider";
3
+ export * from "./utils";
4
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ export * from "./MonacoProvider";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,3 @@
1
+ export * from "./MonacoProvider";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export * from "./tokenStorage";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export * from "./tokenStorage";
2
+ //# sourceMappingURL=index.js.map
@@ -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
+ }