@varity-labs/ui-kit 2.0.0-beta.6 → 2.0.0-beta.8

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 (242) hide show
  1. package/README.md +14 -16
  2. package/dist/components/PaymentWidget/PaymentWidget.d.ts +7 -19
  3. package/dist/components/PaymentWidget/PaymentWidget.d.ts.map +1 -1
  4. package/dist/components/PaymentWidget/PaymentWidget.js +10 -176
  5. package/dist/components/PaymentWidget/PaymentWidget.js.map +1 -1
  6. package/dist/components/PaymentWidget/useSeamlessPayment.d.ts +8 -34
  7. package/dist/components/PaymentWidget/useSeamlessPayment.d.ts.map +1 -1
  8. package/dist/components/PaymentWidget/useSeamlessPayment.js +12 -158
  9. package/dist/components/PaymentWidget/useSeamlessPayment.js.map +1 -1
  10. package/dist/components/PaymentWidget/useVarityPayment.d.ts +5 -6
  11. package/dist/components/PaymentWidget/useVarityPayment.d.ts.map +1 -1
  12. package/dist/components/PaymentWidget/useVarityPayment.js +11 -147
  13. package/dist/components/PaymentWidget/useVarityPayment.js.map +1 -1
  14. package/dist/providers/PrivyStack.d.ts +14 -9
  15. package/dist/providers/PrivyStack.d.ts.map +1 -1
  16. package/dist/providers/PrivyStack.js +2 -4
  17. package/dist/providers/PrivyStack.js.map +1 -1
  18. package/dist/providers/VarityDashboardProvider.d.ts +2 -2
  19. package/dist/providers/VarityDashboardProvider.d.ts.map +1 -1
  20. package/dist/providers/VarityDashboardProvider.js +3 -26
  21. package/dist/providers/VarityDashboardProvider.js.map +1 -1
  22. package/dist/providers/WalletSyncProvider.d.ts +3 -7
  23. package/dist/providers/WalletSyncProvider.d.ts.map +1 -1
  24. package/dist/providers/WalletSyncProvider.js +6 -14
  25. package/dist/providers/WalletSyncProvider.js.map +1 -1
  26. package/package.json +5 -6
  27. package/dist/components/Analytics/__tests__/DataTable.test.d.ts +0 -2
  28. package/dist/components/Analytics/__tests__/DataTable.test.d.ts.map +0 -1
  29. package/dist/components/Analytics/__tests__/DataTable.test.js +0 -113
  30. package/dist/components/Analytics/__tests__/DataTable.test.js.map +0 -1
  31. package/dist/components/Dashboard/__tests__/EmptyState.test.d.ts +0 -2
  32. package/dist/components/Dashboard/__tests__/EmptyState.test.d.ts.map +0 -1
  33. package/dist/components/Dashboard/__tests__/EmptyState.test.js +0 -81
  34. package/dist/components/Dashboard/__tests__/EmptyState.test.js.map +0 -1
  35. package/dist/components/Dashboard/__tests__/KPICard.test.d.ts +0 -2
  36. package/dist/components/Dashboard/__tests__/KPICard.test.d.ts.map +0 -1
  37. package/dist/components/Dashboard/__tests__/KPICard.test.js +0 -78
  38. package/dist/components/Dashboard/__tests__/KPICard.test.js.map +0 -1
  39. package/dist/components/InAppWallet/EmailLoginButton.d.ts +0 -27
  40. package/dist/components/InAppWallet/EmailLoginButton.d.ts.map +0 -1
  41. package/dist/components/InAppWallet/EmailLoginButton.js +0 -84
  42. package/dist/components/InAppWallet/EmailLoginButton.js.map +0 -1
  43. package/dist/components/InAppWallet/InAppWalletProvider.d.ts +0 -54
  44. package/dist/components/InAppWallet/InAppWalletProvider.d.ts.map +0 -1
  45. package/dist/components/InAppWallet/InAppWalletProvider.js +0 -225
  46. package/dist/components/InAppWallet/InAppWalletProvider.js.map +0 -1
  47. package/dist/components/InAppWallet/OnboardingFlow.d.ts +0 -25
  48. package/dist/components/InAppWallet/OnboardingFlow.d.ts.map +0 -1
  49. package/dist/components/InAppWallet/OnboardingFlow.js +0 -159
  50. package/dist/components/InAppWallet/OnboardingFlow.js.map +0 -1
  51. package/dist/components/InAppWallet/SocialLoginButtons.d.ts +0 -28
  52. package/dist/components/InAppWallet/SocialLoginButtons.d.ts.map +0 -1
  53. package/dist/components/InAppWallet/SocialLoginButtons.js +0 -128
  54. package/dist/components/InAppWallet/SocialLoginButtons.js.map +0 -1
  55. package/dist/components/InAppWallet/index.d.ts +0 -15
  56. package/dist/components/InAppWallet/index.d.ts.map +0 -1
  57. package/dist/components/InAppWallet/index.js +0 -14
  58. package/dist/components/InAppWallet/index.js.map +0 -1
  59. package/dist/components/Payments/CheckoutModal.d.ts +0 -19
  60. package/dist/components/Payments/CheckoutModal.d.ts.map +0 -1
  61. package/dist/components/Payments/CheckoutModal.js +0 -194
  62. package/dist/components/Payments/CheckoutModal.js.map +0 -1
  63. package/dist/components/Payments/SubscriptionWidget.d.ts +0 -17
  64. package/dist/components/Payments/SubscriptionWidget.d.ts.map +0 -1
  65. package/dist/components/Payments/SubscriptionWidget.js +0 -89
  66. package/dist/components/Payments/SubscriptionWidget.js.map +0 -1
  67. package/dist/components/Payments/constants.d.ts +0 -59
  68. package/dist/components/Payments/constants.d.ts.map +0 -1
  69. package/dist/components/Payments/constants.js +0 -145
  70. package/dist/components/Payments/constants.js.map +0 -1
  71. package/dist/components/Payments/index.d.ts +0 -10
  72. package/dist/components/Payments/index.d.ts.map +0 -1
  73. package/dist/components/Payments/index.js +0 -12
  74. package/dist/components/Payments/index.js.map +0 -1
  75. package/dist/components/Payments/types.d.ts +0 -119
  76. package/dist/components/Payments/types.d.ts.map +0 -1
  77. package/dist/components/Payments/types.js +0 -27
  78. package/dist/components/Payments/types.js.map +0 -1
  79. package/dist/components/Payments/usePayments.d.ts +0 -33
  80. package/dist/components/Payments/usePayments.d.ts.map +0 -1
  81. package/dist/components/Payments/usePayments.js +0 -249
  82. package/dist/components/Payments/usePayments.js.map +0 -1
  83. package/dist/components/Privy/__tests__/InitScreens.test.d.ts +0 -2
  84. package/dist/components/Privy/__tests__/InitScreens.test.d.ts.map +0 -1
  85. package/dist/components/Privy/__tests__/InitScreens.test.js +0 -74
  86. package/dist/components/Privy/__tests__/InitScreens.test.js.map +0 -1
  87. package/dist/components/SIWE/AuthStatus.d.ts +0 -15
  88. package/dist/components/SIWE/AuthStatus.d.ts.map +0 -1
  89. package/dist/components/SIWE/AuthStatus.js +0 -47
  90. package/dist/components/SIWE/AuthStatus.js.map +0 -1
  91. package/dist/components/SIWE/ProtectedRoute.d.ts +0 -17
  92. package/dist/components/SIWE/ProtectedRoute.d.ts.map +0 -1
  93. package/dist/components/SIWE/ProtectedRoute.js +0 -52
  94. package/dist/components/SIWE/ProtectedRoute.js.map +0 -1
  95. package/dist/components/SIWE/SIWEButton.d.ts +0 -22
  96. package/dist/components/SIWE/SIWEButton.d.ts.map +0 -1
  97. package/dist/components/SIWE/SIWEButton.js +0 -106
  98. package/dist/components/SIWE/SIWEButton.js.map +0 -1
  99. package/dist/components/SIWE/SIWEModal.d.ts +0 -19
  100. package/dist/components/SIWE/SIWEModal.d.ts.map +0 -1
  101. package/dist/components/SIWE/SIWEModal.js +0 -75
  102. package/dist/components/SIWE/SIWEModal.js.map +0 -1
  103. package/dist/components/SIWE/SIWEProvider.d.ts +0 -38
  104. package/dist/components/SIWE/SIWEProvider.d.ts.map +0 -1
  105. package/dist/components/SIWE/SIWEProvider.js +0 -227
  106. package/dist/components/SIWE/SIWEProvider.js.map +0 -1
  107. package/dist/components/SIWE/index.d.ts +0 -15
  108. package/dist/components/SIWE/index.d.ts.map +0 -1
  109. package/dist/components/SIWE/index.js +0 -10
  110. package/dist/components/SIWE/index.js.map +0 -1
  111. package/dist/core/VarityClient.d.ts +0 -76
  112. package/dist/core/VarityClient.d.ts.map +0 -1
  113. package/dist/core/VarityClient.js +0 -99
  114. package/dist/core/VarityClient.js.map +0 -1
  115. package/dist/core/config.d.ts +0 -136
  116. package/dist/core/config.d.ts.map +0 -1
  117. package/dist/core/config.js +0 -156
  118. package/dist/core/config.js.map +0 -1
  119. package/dist/hooks/useAnalytics.d.ts +0 -94
  120. package/dist/hooks/useAnalytics.d.ts.map +0 -1
  121. package/dist/hooks/useAnalytics.js +0 -116
  122. package/dist/hooks/useAnalytics.js.map +0 -1
  123. package/dist/hooks/useAuth.d.ts +0 -71
  124. package/dist/hooks/useAuth.d.ts.map +0 -1
  125. package/dist/hooks/useAuth.js +0 -198
  126. package/dist/hooks/useAuth.js.map +0 -1
  127. package/dist/hooks/useDashboard.d.ts +0 -110
  128. package/dist/hooks/useDashboard.d.ts.map +0 -1
  129. package/dist/hooks/useDashboard.js +0 -201
  130. package/dist/hooks/useDashboard.js.map +0 -1
  131. package/dist/hooks/useVarityAPI.d.ts +0 -88
  132. package/dist/hooks/useVarityAPI.d.ts.map +0 -1
  133. package/dist/hooks/useVarityAPI.js +0 -138
  134. package/dist/hooks/useVarityAPI.js.map +0 -1
  135. package/dist/hooks/useWalletAuth.d.ts +0 -108
  136. package/dist/hooks/useWalletAuth.d.ts.map +0 -1
  137. package/dist/hooks/useWalletAuth.js +0 -415
  138. package/dist/hooks/useWalletAuth.js.map +0 -1
  139. package/dist/hooks/web3/index.d.ts +0 -5
  140. package/dist/hooks/web3/index.d.ts.map +0 -1
  141. package/dist/hooks/web3/index.js +0 -6
  142. package/dist/hooks/web3/index.js.map +0 -1
  143. package/dist/hooks/web3/useAddressValidation.d.ts +0 -37
  144. package/dist/hooks/web3/useAddressValidation.d.ts.map +0 -1
  145. package/dist/hooks/web3/useAddressValidation.js +0 -59
  146. package/dist/hooks/web3/useAddressValidation.js.map +0 -1
  147. package/dist/hooks/web3/useBlockExplorer.d.ts +0 -37
  148. package/dist/hooks/web3/useBlockExplorer.d.ts.map +0 -1
  149. package/dist/hooks/web3/useBlockExplorer.js +0 -59
  150. package/dist/hooks/web3/useBlockExplorer.js.map +0 -1
  151. package/dist/hooks/web3/useUSDCFormat.d.ts +0 -34
  152. package/dist/hooks/web3/useUSDCFormat.d.ts.map +0 -1
  153. package/dist/hooks/web3/useUSDCFormat.js +0 -43
  154. package/dist/hooks/web3/useUSDCFormat.js.map +0 -1
  155. package/dist/hooks/web3/useVarityWallet.d.ts +0 -48
  156. package/dist/hooks/web3/useVarityWallet.d.ts.map +0 -1
  157. package/dist/hooks/web3/useVarityWallet.js +0 -70
  158. package/dist/hooks/web3/useVarityWallet.js.map +0 -1
  159. package/dist/modules/cache/index.d.ts +0 -12
  160. package/dist/modules/cache/index.d.ts.map +0 -1
  161. package/dist/modules/cache/index.js +0 -13
  162. package/dist/modules/cache/index.js.map +0 -1
  163. package/dist/providers/ChainContext.d.ts +0 -65
  164. package/dist/providers/ChainContext.d.ts.map +0 -1
  165. package/dist/providers/ChainContext.js +0 -92
  166. package/dist/providers/ChainContext.js.map +0 -1
  167. package/dist/providers/VarityProvider.d.ts +0 -32
  168. package/dist/providers/VarityProvider.d.ts.map +0 -1
  169. package/dist/providers/VarityProvider.js +0 -56
  170. package/dist/providers/VarityProvider.js.map +0 -1
  171. package/dist/providers/WalletContext.d.ts +0 -68
  172. package/dist/providers/WalletContext.d.ts.map +0 -1
  173. package/dist/providers/WalletContext.js +0 -98
  174. package/dist/providers/WalletContext.js.map +0 -1
  175. package/dist/providers/index.d.ts +0 -48
  176. package/dist/providers/index.d.ts.map +0 -1
  177. package/dist/providers/index.js +0 -53
  178. package/dist/providers/index.js.map +0 -1
  179. package/dist/types/api-extensions.d.ts +0 -92
  180. package/dist/types/api-extensions.d.ts.map +0 -1
  181. package/dist/types/api-extensions.js +0 -7
  182. package/dist/types/api-extensions.js.map +0 -1
  183. package/dist/wallets/SimpleSmartWallet.d.ts +0 -68
  184. package/dist/wallets/SimpleSmartWallet.d.ts.map +0 -1
  185. package/dist/wallets/SimpleSmartWallet.js +0 -74
  186. package/dist/wallets/SimpleSmartWallet.js.map +0 -1
  187. package/dist/wallets/SmartWalletProvider.d.ts +0 -217
  188. package/dist/wallets/SmartWalletProvider.d.ts.map +0 -1
  189. package/dist/wallets/SmartWalletProvider.js +0 -366
  190. package/dist/wallets/SmartWalletProvider.js.map +0 -1
  191. package/dist/wallets/config.d.ts +0 -222
  192. package/dist/wallets/config.d.ts.map +0 -1
  193. package/dist/wallets/config.js +0 -206
  194. package/dist/wallets/config.js.map +0 -1
  195. package/dist/wallets/index.d.ts +0 -9
  196. package/dist/wallets/index.d.ts.map +0 -1
  197. package/dist/wallets/index.js +0 -9
  198. package/dist/wallets/index.js.map +0 -1
  199. package/dist/web3/AddressDisplay/AddressDisplay.d.ts +0 -33
  200. package/dist/web3/AddressDisplay/AddressDisplay.d.ts.map +0 -1
  201. package/dist/web3/AddressDisplay/AddressDisplay.js +0 -42
  202. package/dist/web3/AddressDisplay/AddressDisplay.js.map +0 -1
  203. package/dist/web3/AddressInput/AddressInput.d.ts +0 -36
  204. package/dist/web3/AddressInput/AddressInput.d.ts.map +0 -1
  205. package/dist/web3/AddressInput/AddressInput.js +0 -54
  206. package/dist/web3/AddressInput/AddressInput.js.map +0 -1
  207. package/dist/web3/AmountInput/AmountInput.d.ts +0 -41
  208. package/dist/web3/AmountInput/AmountInput.d.ts.map +0 -1
  209. package/dist/web3/AmountInput/AmountInput.js +0 -74
  210. package/dist/web3/AmountInput/AmountInput.js.map +0 -1
  211. package/dist/web3/BalanceDisplay/BalanceDisplay.d.ts +0 -30
  212. package/dist/web3/BalanceDisplay/BalanceDisplay.d.ts.map +0 -1
  213. package/dist/web3/BalanceDisplay/BalanceDisplay.js +0 -35
  214. package/dist/web3/BalanceDisplay/BalanceDisplay.js.map +0 -1
  215. package/dist/web3/BlockExplorerLink/BlockExplorerLink.d.ts +0 -41
  216. package/dist/web3/BlockExplorerLink/BlockExplorerLink.d.ts.map +0 -1
  217. package/dist/web3/BlockExplorerLink/BlockExplorerLink.js +0 -46
  218. package/dist/web3/BlockExplorerLink/BlockExplorerLink.js.map +0 -1
  219. package/dist/web3/ConnectWallet/ConnectWallet.d.ts +0 -35
  220. package/dist/web3/ConnectWallet/ConnectWallet.d.ts.map +0 -1
  221. package/dist/web3/ConnectWallet/ConnectWallet.js +0 -58
  222. package/dist/web3/ConnectWallet/ConnectWallet.js.map +0 -1
  223. package/dist/web3/DisconnectButton/DisconnectButton.d.ts +0 -30
  224. package/dist/web3/DisconnectButton/DisconnectButton.d.ts.map +0 -1
  225. package/dist/web3/DisconnectButton/DisconnectButton.js +0 -48
  226. package/dist/web3/DisconnectButton/DisconnectButton.js.map +0 -1
  227. package/dist/web3/WalletBalance/WalletBalance.d.ts +0 -27
  228. package/dist/web3/WalletBalance/WalletBalance.d.ts.map +0 -1
  229. package/dist/web3/WalletBalance/WalletBalance.js +0 -49
  230. package/dist/web3/WalletBalance/WalletBalance.js.map +0 -1
  231. package/dist/web3/WalletDropdown/WalletDropdown.d.ts +0 -29
  232. package/dist/web3/WalletDropdown/WalletDropdown.d.ts.map +0 -1
  233. package/dist/web3/WalletDropdown/WalletDropdown.js +0 -93
  234. package/dist/web3/WalletDropdown/WalletDropdown.js.map +0 -1
  235. package/dist/web3/WalletInfo/WalletInfo.d.ts +0 -31
  236. package/dist/web3/WalletInfo/WalletInfo.d.ts.map +0 -1
  237. package/dist/web3/WalletInfo/WalletInfo.js +0 -41
  238. package/dist/web3/WalletInfo/WalletInfo.js.map +0 -1
  239. package/dist/web3/index.d.ts +0 -11
  240. package/dist/web3/index.d.ts.map +0 -1
  241. package/dist/web3/index.js +0 -14
  242. package/dist/web3/index.js.map +0 -1
@@ -1,415 +0,0 @@
1
- /**
2
- * Wallet Authentication Hook
3
- *
4
- * Provides wallet-based authentication with session management.
5
- * Integrates with Privy for seamless authentication and backend session tokens.
6
- *
7
- * This hook handles:
8
- * - Wallet signature authentication
9
- * - Session token management
10
- * - Auto-login when Privy authenticates
11
- * - Session refresh and expiration handling
12
- * - Multi-device session management
13
- *
14
- * @packageDocumentation
15
- */
16
- import { useState, useEffect, useCallback } from 'react';
17
- import { usePrivy, useWallets } from '@privy-io/react-auth';
18
- import { useActiveAccount } from 'thirdweb/react';
19
- /**
20
- * useWalletAuth - Wallet-based authentication with session management
21
- *
22
- * This hook provides complete wallet authentication functionality:
23
- * - Signs in using wallet signature (EIP-191)
24
- * - Manages session tokens with auto-refresh
25
- * - Handles multi-device sessions
26
- * - Integrates with Privy for embedded wallets
27
- *
28
- * @example
29
- * ```tsx
30
- * import { useWalletAuth } from '@varity-labs/ui-kit';
31
- *
32
- * function MyComponent() {
33
- * const {
34
- * isAuthenticated,
35
- * walletAddress,
36
- * login,
37
- * logout,
38
- * authFetch,
39
- * } = useWalletAuth({
40
- * apiBaseUrl: 'https://api.example.com',
41
- * });
42
- *
43
- * if (!isAuthenticated) {
44
- * return <button onClick={login}>Sign In</button>;
45
- * }
46
- *
47
- * const fetchData = async () => {
48
- * // authFetch automatically includes session token
49
- * const response = await authFetch('/api/v1/data');
50
- * return response.json();
51
- * };
52
- *
53
- * return <p>Connected: {walletAddress}</p>;
54
- * }
55
- * ```
56
- */
57
- export function useWalletAuth(config = {}) {
58
- const { apiBaseUrl = process.env.NEXT_PUBLIC_API_URL ||
59
- process.env.NEXT_PUBLIC_BACKEND_URL ||
60
- 'http://localhost:8000', autoLogin = true, refreshIntervalMinutes = 30, onSessionChange, onAuthError, } = config;
61
- const { authenticated, ready } = usePrivy();
62
- const { wallets } = useWallets();
63
- const activeAccount = useActiveAccount();
64
- const [sessionToken, setSessionToken] = useState(null);
65
- const [walletAddress, setWalletAddress] = useState(null);
66
- const [isAuthenticating, setIsAuthenticating] = useState(false);
67
- const [authError, setAuthError] = useState(null);
68
- const [sessions, setSessions] = useState([]);
69
- // Get wallet address from Privy or thirdweb
70
- const address = wallets?.[0]?.address || activeAccount?.address;
71
- /**
72
- * Verify session is still valid
73
- */
74
- const verifySession = useCallback(async (token) => {
75
- try {
76
- const response = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/session`, {
77
- headers: {
78
- 'X-Session-Token': token,
79
- },
80
- });
81
- return response.status === 200;
82
- }
83
- catch {
84
- return false;
85
- }
86
- }, [apiBaseUrl]);
87
- // Load session from localStorage on mount
88
- useEffect(() => {
89
- const storedToken = localStorage.getItem('wallet_session_token');
90
- const storedAddress = localStorage.getItem('wallet_address');
91
- if (storedToken && storedAddress) {
92
- setSessionToken(storedToken);
93
- setWalletAddress(storedAddress);
94
- // Verify session is still valid
95
- verifySession(storedToken).catch(() => {
96
- // Session invalid, clear storage
97
- localStorage.removeItem('wallet_session_token');
98
- localStorage.removeItem('wallet_address');
99
- setSessionToken(null);
100
- setWalletAddress(null);
101
- });
102
- }
103
- }, [verifySession]);
104
- /**
105
- * Sign message with wallet
106
- */
107
- const signMessage = useCallback(async (message) => {
108
- // Try Privy wallet first
109
- const privyWallet = wallets?.[0];
110
- if (privyWallet && 'signMessage' in privyWallet) {
111
- try {
112
- // Privy wallets support signMessage directly
113
- const signature = await privyWallet.signMessage(message);
114
- return signature;
115
- }
116
- catch (error) {
117
- console.error('Privy wallet signing failed', error);
118
- throw error;
119
- }
120
- }
121
- // Fall back to thirdweb active account
122
- if (activeAccount && 'signMessage' in activeAccount) {
123
- try {
124
- const signature = await activeAccount.signMessage({ message });
125
- return signature;
126
- }
127
- catch (error) {
128
- console.error('Thirdweb wallet signing failed', error);
129
- throw error;
130
- }
131
- }
132
- throw new Error('No wallet available for signing');
133
- }, [wallets, activeAccount]);
134
- /**
135
- * Login with wallet signature
136
- */
137
- const login = useCallback(async () => {
138
- if (!address) {
139
- const error = 'No wallet connected';
140
- setAuthError(error);
141
- onAuthError?.(error);
142
- return;
143
- }
144
- setIsAuthenticating(true);
145
- setAuthError(null);
146
- try {
147
- // Step 1: Get authentication message
148
- const messageResponse = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/message`, {
149
- method: 'POST',
150
- headers: { 'Content-Type': 'application/json' },
151
- body: JSON.stringify({ wallet_address: address }),
152
- });
153
- if (!messageResponse.ok) {
154
- throw new Error('Failed to get authentication message');
155
- }
156
- const { message, nonce } = await messageResponse.json();
157
- // Step 2: Sign message with wallet
158
- const signature = await signMessage(message);
159
- // Step 3: Login with signature
160
- const loginResponse = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/login`, {
161
- method: 'POST',
162
- headers: { 'Content-Type': 'application/json' },
163
- body: JSON.stringify({
164
- wallet_address: address,
165
- signature,
166
- message,
167
- nonce,
168
- user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',
169
- }),
170
- });
171
- if (!loginResponse.ok) {
172
- const errorData = await loginResponse.json().catch(() => ({}));
173
- throw new Error(errorData.detail?.message || errorData.detail || 'Authentication failed');
174
- }
175
- const session = await loginResponse.json();
176
- // Store session
177
- setSessionToken(session.sessionToken);
178
- setWalletAddress(session.walletAddress);
179
- localStorage.setItem('wallet_session_token', session.sessionToken);
180
- localStorage.setItem('wallet_address', session.walletAddress);
181
- onSessionChange?.(session);
182
- console.log('Wallet authentication successful');
183
- }
184
- catch (error) {
185
- console.error('Wallet authentication failed', error);
186
- const errorMessage = error instanceof Error ? error.message : 'Authentication failed';
187
- setAuthError(errorMessage);
188
- onAuthError?.(errorMessage);
189
- // Clear any existing session
190
- setSessionToken(null);
191
- setWalletAddress(null);
192
- localStorage.removeItem('wallet_session_token');
193
- localStorage.removeItem('wallet_address');
194
- }
195
- finally {
196
- setIsAuthenticating(false);
197
- }
198
- // eslint-disable-next-line react-hooks/exhaustive-deps
199
- }, [address, apiBaseUrl, onSessionChange, onAuthError, signMessage]);
200
- /**
201
- * Logout and invalidate session
202
- */
203
- const logout = useCallback(async () => {
204
- if (!sessionToken)
205
- return;
206
- try {
207
- await fetch(`${apiBaseUrl}/api/v1/wallet/auth/logout`, {
208
- method: 'POST',
209
- headers: {
210
- 'X-Session-Token': sessionToken,
211
- },
212
- });
213
- console.log('Logged out successfully');
214
- }
215
- catch (error) {
216
- console.error('Logout failed', error);
217
- }
218
- finally {
219
- // Clear session regardless of API success
220
- setSessionToken(null);
221
- setWalletAddress(null);
222
- localStorage.removeItem('wallet_session_token');
223
- localStorage.removeItem('wallet_address');
224
- onSessionChange?.(null);
225
- }
226
- }, [sessionToken, apiBaseUrl, onSessionChange]);
227
- /**
228
- * Refresh session expiration
229
- */
230
- const refreshSession = useCallback(async () => {
231
- if (!sessionToken)
232
- return;
233
- try {
234
- const response = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/refresh`, {
235
- method: 'POST',
236
- headers: {
237
- 'X-Session-Token': sessionToken,
238
- },
239
- });
240
- if (!response.ok) {
241
- throw new Error('Session refresh failed');
242
- }
243
- const session = await response.json();
244
- console.log('Session refreshed', { expiresAt: new Date(session.expiresAt * 1000) });
245
- }
246
- catch (error) {
247
- console.error('Session refresh failed', error);
248
- // Session might be expired, logout
249
- await logout();
250
- }
251
- }, [sessionToken, apiBaseUrl, logout]);
252
- /**
253
- * Get all active sessions
254
- */
255
- const getSessions = useCallback(async () => {
256
- if (!sessionToken)
257
- return;
258
- try {
259
- const response = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/sessions`, {
260
- headers: {
261
- 'X-Session-Token': sessionToken,
262
- },
263
- });
264
- if (!response.ok) {
265
- throw new Error('Failed to get sessions');
266
- }
267
- const sessionsData = await response.json();
268
- setSessions(sessionsData);
269
- }
270
- catch (error) {
271
- console.error('Failed to get sessions', error);
272
- }
273
- }, [sessionToken, apiBaseUrl]);
274
- /**
275
- * Logout from specific session
276
- */
277
- const logoutFromSession = useCallback(async (targetSessionToken) => {
278
- if (!sessionToken)
279
- return;
280
- try {
281
- await fetch(`${apiBaseUrl}/api/v1/wallet/auth/sessions/${targetSessionToken}`, {
282
- method: 'DELETE',
283
- headers: {
284
- 'X-Session-Token': sessionToken,
285
- },
286
- });
287
- console.log('Session invalidated');
288
- // If we logged out our own session, clear local state
289
- if (targetSessionToken === sessionToken) {
290
- await logout();
291
- }
292
- else {
293
- // Refresh sessions list
294
- await getSessions();
295
- }
296
- }
297
- catch (error) {
298
- console.error('Failed to invalidate session', error);
299
- }
300
- }, [sessionToken, apiBaseUrl, logout, getSessions]);
301
- /**
302
- * Logout from all devices
303
- */
304
- const logoutFromAllDevices = useCallback(async () => {
305
- if (!sessionToken)
306
- return;
307
- try {
308
- await fetch(`${apiBaseUrl}/api/v1/wallet/auth/sessions`, {
309
- method: 'DELETE',
310
- headers: {
311
- 'X-Session-Token': sessionToken,
312
- },
313
- });
314
- console.log('Logged out from all devices');
315
- // Clear local session
316
- await logout();
317
- }
318
- catch (error) {
319
- console.error('Failed to logout from all devices', error);
320
- }
321
- }, [sessionToken, apiBaseUrl, logout]);
322
- /**
323
- * Add additional wallet to session (multi-wallet support)
324
- */
325
- const addWallet = useCallback(async (newWalletAddress) => {
326
- if (!sessionToken)
327
- return;
328
- try {
329
- // Get authentication message for new wallet
330
- const messageResponse = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/message`, {
331
- method: 'POST',
332
- headers: { 'Content-Type': 'application/json' },
333
- body: JSON.stringify({ wallet_address: newWalletAddress }),
334
- });
335
- if (!messageResponse.ok) {
336
- throw new Error('Failed to get authentication message');
337
- }
338
- const { message, nonce } = await messageResponse.json();
339
- // Sign message with new wallet
340
- const signature = await signMessage(message);
341
- // Add wallet to session
342
- const response = await fetch(`${apiBaseUrl}/api/v1/wallet/auth/add-wallet`, {
343
- method: 'POST',
344
- headers: {
345
- 'Content-Type': 'application/json',
346
- 'X-Session-Token': sessionToken,
347
- },
348
- body: JSON.stringify({
349
- new_wallet_address: newWalletAddress,
350
- signature,
351
- message,
352
- nonce,
353
- }),
354
- });
355
- if (!response.ok) {
356
- throw new Error('Failed to add wallet');
357
- }
358
- console.log('Wallet added successfully');
359
- }
360
- catch (error) {
361
- console.error('Failed to add wallet', error);
362
- throw error;
363
- }
364
- },
365
- // eslint-disable-next-line react-hooks/exhaustive-deps
366
- [sessionToken, apiBaseUrl, signMessage]);
367
- /**
368
- * Fetch with auth headers
369
- */
370
- const authFetch = useCallback(async (input, init) => {
371
- const headers = new Headers(init?.headers);
372
- if (sessionToken) {
373
- headers.set('X-Session-Token', sessionToken);
374
- }
375
- return fetch(input, { ...init, headers });
376
- }, [sessionToken]);
377
- // Auto-login when Privy authenticates
378
- useEffect(() => {
379
- if (autoLogin && ready && authenticated && address && !sessionToken && !isAuthenticating) {
380
- console.log('Auto-logging in with wallet', { address });
381
- login().catch((e) => console.error('Auto-login failed', e));
382
- }
383
- }, [autoLogin, ready, authenticated, address, sessionToken, isAuthenticating, login]);
384
- // Auto-refresh session
385
- useEffect(() => {
386
- if (!sessionToken)
387
- return;
388
- const intervalId = setInterval(() => {
389
- refreshSession().catch((e) => console.error('Auto-refresh failed', e));
390
- }, refreshIntervalMinutes * 60 * 1000);
391
- return () => clearInterval(intervalId);
392
- }, [sessionToken, refreshSession, refreshIntervalMinutes]);
393
- return {
394
- // Authentication state
395
- isAuthenticated: !!sessionToken && !!walletAddress,
396
- sessionToken,
397
- walletAddress,
398
- isAuthenticating,
399
- authError,
400
- // Session management
401
- sessions,
402
- // Actions
403
- login,
404
- logout,
405
- refreshSession,
406
- getSessions,
407
- logoutFromSession,
408
- logoutFromAllDevices,
409
- addWallet,
410
- // Utility
411
- authFetch,
412
- };
413
- }
414
- export default useWalletAuth;
415
- //# sourceMappingURL=useWalletAuth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWalletAuth.js","sourceRoot":"","sources":["../../src/hooks/useWalletAuth.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export { useVarityWallet, type UseVarityWalletReturn } from './useVarityWallet';
2
- export { useUSDCFormat, type UseUSDCFormatReturn } from './useUSDCFormat';
3
- export { useAddressValidation, type UseAddressValidationReturn } from './useAddressValidation';
4
- export { useBlockExplorer, type UseBlockExplorerReturn } from './useBlockExplorer';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/web3/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,6 +0,0 @@
1
- // Web3 Hooks
2
- export { useVarityWallet } from './useVarityWallet';
3
- export { useUSDCFormat } from './useUSDCFormat';
4
- export { useAddressValidation } from './useAddressValidation';
5
- export { useBlockExplorer } from './useBlockExplorer';
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/web3/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,eAAe,EAA8B,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,aAAa,EAA4B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAmC,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAA+B,MAAM,oBAAoB,CAAC"}
@@ -1,37 +0,0 @@
1
- export interface UseAddressValidationReturn {
2
- validate: (address: string) => boolean;
3
- normalize: (address: string) => string | null;
4
- isValid: (address: string) => boolean;
5
- }
6
- /**
7
- * Hook for address validation utilities
8
- *
9
- * Provides utilities for validating and normalizing Ethereum addresses:
10
- * - Validate address format
11
- * - Normalize address to checksum format
12
- * - Quick validation check
13
- *
14
- * @returns {UseAddressValidationReturn} Address validation utilities
15
- *
16
- * @example
17
- * ```tsx
18
- * import { useAddressValidation } from '@varity-labs/ui-kit';
19
- *
20
- * function AddressChecker() {
21
- * const { validate, normalize } = useAddressValidation();
22
- *
23
- * const address = "0x1234...";
24
- * const isValid = validate(address);
25
- * const checksumAddress = normalize(address);
26
- *
27
- * return (
28
- * <div>
29
- * <p>Valid: {isValid ? 'Yes' : 'No'}</p>
30
- * <p>Checksum: {checksumAddress}</p>
31
- * </div>
32
- * );
33
- * }
34
- * ```
35
- */
36
- export declare function useAddressValidation(): UseAddressValidationReturn;
37
- //# sourceMappingURL=useAddressValidation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAddressValidation.d.ts","sourceRoot":"","sources":["../../../src/hooks/web3/useAddressValidation.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,IAAI,0BAA0B,CA4BjE"}
@@ -1,59 +0,0 @@
1
- import { useMemo, useCallback } from 'react';
2
- import { isAddress, getAddress } from 'viem';
3
- /**
4
- * Hook for address validation utilities
5
- *
6
- * Provides utilities for validating and normalizing Ethereum addresses:
7
- * - Validate address format
8
- * - Normalize address to checksum format
9
- * - Quick validation check
10
- *
11
- * @returns {UseAddressValidationReturn} Address validation utilities
12
- *
13
- * @example
14
- * ```tsx
15
- * import { useAddressValidation } from '@varity-labs/ui-kit';
16
- *
17
- * function AddressChecker() {
18
- * const { validate, normalize } = useAddressValidation();
19
- *
20
- * const address = "0x1234...";
21
- * const isValid = validate(address);
22
- * const checksumAddress = normalize(address);
23
- *
24
- * return (
25
- * <div>
26
- * <p>Valid: {isValid ? 'Yes' : 'No'}</p>
27
- * <p>Checksum: {checksumAddress}</p>
28
- * </div>
29
- * );
30
- * }
31
- * ```
32
- */
33
- export function useAddressValidation() {
34
- const validate = useCallback((address) => {
35
- try {
36
- return isAddress(address);
37
- }
38
- catch {
39
- return false;
40
- }
41
- }, []);
42
- const normalize = useCallback((address) => {
43
- try {
44
- if (!isAddress(address)) {
45
- return null;
46
- }
47
- return getAddress(address);
48
- }
49
- catch {
50
- return null;
51
- }
52
- }, []);
53
- return useMemo(() => ({
54
- validate,
55
- normalize,
56
- isValid: validate,
57
- }), [validate, normalize]);
58
- }
59
- //# sourceMappingURL=useAddressValidation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAddressValidation.js","sourceRoot":"","sources":["../../../src/hooks/web3/useAddressValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQ7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,OAAe,EAAW,EAAE;QACxD,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,OAAe,EAAiB,EAAE;QAC/D,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ;QACR,SAAS;QACT,OAAO,EAAE,QAAQ;KAClB,CAAC,EACF,CAAC,QAAQ,EAAE,SAAS,CAAC,CACtB,CAAC;AACJ,CAAC"}
@@ -1,37 +0,0 @@
1
- export interface UseBlockExplorerReturn {
2
- getTxUrl: (hash: string, chainId?: number) => string;
3
- getAddressUrl: (address: string, chainId?: number) => string;
4
- getBlockUrl: (block: string, chainId?: number) => string;
5
- openTx: (hash: string, chainId?: number) => void;
6
- openAddress: (address: string, chainId?: number) => void;
7
- openBlock: (block: string, chainId?: number) => void;
8
- }
9
- /**
10
- * Hook for block explorer utilities
11
- *
12
- * Provides utilities for generating block explorer URLs and opening them:
13
- * - Get URLs for transactions, addresses, blocks
14
- * - Open explorer in new tab
15
- *
16
- * @returns {UseBlockExplorerReturn} Block explorer utilities
17
- *
18
- * @example
19
- * ```tsx
20
- * import { useBlockExplorer } from '@varity-labs/ui-kit';
21
- *
22
- * function TransactionView() {
23
- * const { getTxUrl, openTx } = useBlockExplorer();
24
- *
25
- * const txHash = "0xabc...";
26
- * const url = getTxUrl(txHash);
27
- *
28
- * return (
29
- * <button onClick={() => openTx(txHash)}>
30
- * View on Explorer
31
- * </button>
32
- * );
33
- * }
34
- * ```
35
- */
36
- export declare function useBlockExplorer(): UseBlockExplorerReturn;
37
- //# sourceMappingURL=useBlockExplorer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBlockExplorer.d.ts","sourceRoot":"","sources":["../../../src/hooks/web3/useBlockExplorer.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7D,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,IAAI,sBAAsB,CAwDzD"}
@@ -1,59 +0,0 @@
1
- import { useMemo, useCallback } from 'react';
2
- import { getBlockExplorerUrl, DEFAULT_CHAIN } from '../../config/chains';
3
- /**
4
- * Hook for block explorer utilities
5
- *
6
- * Provides utilities for generating block explorer URLs and opening them:
7
- * - Get URLs for transactions, addresses, blocks
8
- * - Open explorer in new tab
9
- *
10
- * @returns {UseBlockExplorerReturn} Block explorer utilities
11
- *
12
- * @example
13
- * ```tsx
14
- * import { useBlockExplorer } from '@varity-labs/ui-kit';
15
- *
16
- * function TransactionView() {
17
- * const { getTxUrl, openTx } = useBlockExplorer();
18
- *
19
- * const txHash = "0xabc...";
20
- * const url = getTxUrl(txHash);
21
- *
22
- * return (
23
- * <button onClick={() => openTx(txHash)}>
24
- * View on Explorer
25
- * </button>
26
- * );
27
- * }
28
- * ```
29
- */
30
- export function useBlockExplorer() {
31
- const defaultChainId = DEFAULT_CHAIN.id;
32
- const getTxUrl = useCallback((hash, chainId = defaultChainId) => {
33
- return getBlockExplorerUrl(chainId, 'tx', hash);
34
- }, [defaultChainId]);
35
- const getAddressUrl = useCallback((address, chainId = defaultChainId) => {
36
- return getBlockExplorerUrl(chainId, 'address', address);
37
- }, [defaultChainId]);
38
- const getBlockUrl = useCallback((block, chainId = defaultChainId) => {
39
- return getBlockExplorerUrl(chainId, 'block', block);
40
- }, [defaultChainId]);
41
- const openTx = useCallback((hash, chainId = defaultChainId) => {
42
- window.open(getTxUrl(hash, chainId), '_blank');
43
- }, [getTxUrl, defaultChainId]);
44
- const openAddress = useCallback((address, chainId = defaultChainId) => {
45
- window.open(getAddressUrl(address, chainId), '_blank');
46
- }, [getAddressUrl, defaultChainId]);
47
- const openBlock = useCallback((block, chainId = defaultChainId) => {
48
- window.open(getBlockUrl(block, chainId), '_blank');
49
- }, [getBlockUrl, defaultChainId]);
50
- return useMemo(() => ({
51
- getTxUrl,
52
- getAddressUrl,
53
- getBlockUrl,
54
- openTx,
55
- openAddress,
56
- openBlock,
57
- }), [getTxUrl, getAddressUrl, getBlockUrl, openTx, openAddress, openBlock]);
58
- }
59
- //# sourceMappingURL=useBlockExplorer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBlockExplorer.js","sourceRoot":"","sources":["../../../src/hooks/web3/useBlockExplorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWzE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,IAAY,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QACzC,OAAO,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,OAAe,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QAC5C,OAAO,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,KAAa,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QAC1C,OAAO,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAY,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,QAAQ,EAAE,cAAc,CAAC,CAC3B,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,OAAe,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC,EACD,CAAC,aAAa,EAAE,cAAc,CAAC,CAChC,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,KAAa,EAAE,OAAO,GAAG,cAAc,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,EACD,CAAC,WAAW,EAAE,cAAc,CAAC,CAC9B,CAAC;IAEF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,QAAQ;QACR,aAAa;QACb,WAAW;QACX,MAAM;QACN,WAAW;QACX,SAAS;KACV,CAAC,EACF,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CACvE,CAAC;AACJ,CAAC"}