@aurum-sdk/hooks 0.2.3-canary.3 → 0.2.3
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/package.json +4 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aurum-sdk/hooks",
|
|
3
|
-
"version": "0.2.3
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "React hooks for Aurum SDK",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"dist",
|
|
22
|
+
"!dist/**/*.map",
|
|
22
23
|
"README.md"
|
|
23
24
|
],
|
|
24
25
|
"peerDependencies": {
|
|
@@ -31,8 +32,8 @@
|
|
|
31
32
|
}
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@aurum-sdk/core": "^0.2.3
|
|
35
|
-
"@aurum-sdk/types": "^0.2.3
|
|
35
|
+
"@aurum-sdk/core": "^0.2.3",
|
|
36
|
+
"@aurum-sdk/types": "^0.2.3"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
38
39
|
"@testing-library/react": "^16.0.0",
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/AurumContext.ts","../src/AurumProvider.tsx","../src/hooks/useAurum.ts","../src/hooks/useAccount.ts","../src/hooks/useConnect.ts","../src/hooks/useDisconnect.ts","../src/hooks/useChain.ts"],"names":["createContext","useContext","useState","useRef","useCallback","useEffect","useMemo","useSyncExternalStore","error"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { Aurum } from '@aurum-sdk/core';\nimport type { WalletId, WalletName } from '@aurum-sdk/types';\n\nexport interface AccountState {\n publicAddress: string | undefined;\n walletName: WalletName | undefined;\n walletId: WalletId | undefined;\n email: string | undefined;\n isConnected: boolean;\n isInitializing: boolean;\n}\n\ninterface AurumContextValue {\n aurum: Aurum;\n isReady: boolean;\n subscribe: (callback: () => void) => () => void;\n getSnapshot: () => AccountState;\n getServerSnapshot: () => AccountState;\n}\n\nexport const initialAccountState: AccountState = {\n publicAddress: undefined,\n walletName: undefined,\n walletId: undefined,\n email: undefined,\n isConnected: false,\n isInitializing: true,\n};\n\nexport const AurumContext = createContext<AurumContextValue | null>(null);\n\nexport function useAurumContext(): AurumContextValue {\n const context = useContext(AurumContext);\n if (!context) {\n throw new Error('useAurumContext must be used within a AurumProvider');\n }\n return context;\n}\n","'use client';\n\nimport { useRef, useEffect, useCallback, useState, useMemo, type ReactNode } from 'react';\nimport { AurumContext, initialAccountState, type AccountState } from '@src/AurumContext';\nimport type { Aurum } from '@aurum-sdk/core';\n\ninterface AurumProviderProps {\n aurum: Aurum;\n children: ReactNode;\n}\n\nexport function AurumProvider({ aurum, children }: AurumProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const accountStateRef = useRef<AccountState>(initialAccountState);\n const listenersRef = useRef<Set<() => void>>(new Set());\n\n // Notify all subscribers of state changes\n const notifyListeners = useCallback(() => {\n listenersRef.current.forEach((listener) => listener());\n }, []);\n\n // Sync state from SDK\n const syncState = useCallback(async () => {\n try {\n const userInfo = await aurum.getUserInfo();\n const isConnected = await aurum.isConnected();\n\n const newState: AccountState = {\n publicAddress: userInfo?.publicAddress,\n walletName: userInfo?.walletName,\n walletId: userInfo?.walletId,\n email: userInfo?.email,\n isConnected,\n isInitializing: false,\n };\n\n accountStateRef.current = newState;\n notifyListeners();\n } catch {\n accountStateRef.current = {\n ...initialAccountState,\n isInitializing: false,\n };\n notifyListeners();\n }\n }, [aurum, notifyListeners]);\n\n // Initialize SDK and set up event listeners\n useEffect(() => {\n let mounted = true;\n\n const initialize = async () => {\n await aurum.whenReady();\n if (!mounted) return;\n\n setIsReady(true);\n await syncState();\n };\n\n initialize();\n\n // Subscribe to provider events for account changes\n const handleAccountsChanged = () => {\n if (mounted) syncState();\n };\n\n const handleChainChanged = () => {\n if (mounted) syncState();\n };\n\n aurum.rpcProvider?.on?.('accountsChanged', handleAccountsChanged);\n aurum.rpcProvider?.on?.('chainChanged', handleChainChanged);\n\n return () => {\n mounted = false;\n aurum.rpcProvider?.removeListener?.('accountsChanged', handleAccountsChanged);\n aurum.rpcProvider?.removeListener?.('chainChanged', handleChainChanged);\n };\n }, [aurum, syncState]);\n\n // Subscribe function for useSyncExternalStore\n const subscribe = useCallback((callback: () => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n // Get current snapshot for useSyncExternalStore\n const getSnapshot = useCallback(() => {\n return accountStateRef.current;\n }, []);\n\n // Server snapshot - always returns initial state\n const getServerSnapshot = useCallback(() => {\n return initialAccountState;\n }, []);\n\n const contextValue = useMemo(\n () => ({\n aurum,\n isReady,\n subscribe,\n getSnapshot,\n getServerSnapshot,\n }),\n [aurum, isReady, subscribe, getSnapshot, getServerSnapshot],\n );\n\n return <AurumContext.Provider value={contextValue}>{children}</AurumContext.Provider>;\n}\n","'use client';\n\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access the raw Aurum SDK instance.\n *\n * @example\n * ```tsx\n * const { aurum, isReady } = useAurum();\n *\n * if (isReady) {\n * const chainId = await aurum.getChainId();\n * }\n * ```\n */\nexport function useAurum() {\n const { aurum, isReady } = useAurumContext();\n return { aurum, isReady };\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access connected user information.\n *\n * @example\n * ```tsx\n * const { publicAddress, walletName, isConnected, isInitializing } = useAccount();\n *\n * if (isInitializing) return <div>Loading...</div>;\n *\n * if (isConnected) {\n * return <div>Connected: {publicAddress}</div>;\n * }\n * ```\n */\nexport function useAccount() {\n const { subscribe, getSnapshot, getServerSnapshot } = useAurumContext();\n\n const account = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n return {\n publicAddress: account.publicAddress,\n walletName: account.walletName,\n walletId: account.walletId,\n email: account.email,\n isConnected: account.isConnected,\n isInitializing: account.isInitializing,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\nimport type { WalletId, WalletConnectSessionResult } from '@aurum-sdk/types';\n\n/**\n * Connect to a wallet.\n *\n * @example\n * ```tsx\n * const { connect, emailAuthStart, emailAuthVerify, getWalletConnectSession, isPending, error } = useConnect();\n *\n * // Open wallet selection modal\n * await connect();\n *\n * // Or connect directly to a specific wallet\n * await connect(WalletId.MetaMask);\n *\n * // Or use headless email auth\n * const { flowId } = await emailAuthStart('user@example.com');\n * const { address, email } = await emailAuthVerify(flowId, '123456');\n *\n * // Or use headless WalletConnect\n * const { uri, waitForConnection } = await getWalletConnectSession();\n * // Display your own QR code with `uri`\n * const address = await waitForConnection();\n * ```\n */\nexport function useConnect() {\n const { aurum } = useAurumContext();\n\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const connect = useCallback(\n async (walletId?: WalletId) => {\n setIsPending(true);\n setError(null);\n\n try {\n const address = await aurum.connect(walletId);\n return address;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('User rejected connection');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const emailAuthStart = useCallback(\n async (email: string) => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.emailAuthStart(email);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to start email auth');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const emailAuthVerify = useCallback(\n async (flowId: string, otp: string) => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.emailAuthVerify(flowId, otp);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to verify email');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const getWalletConnectSession = useCallback(async (): Promise<WalletConnectSessionResult> => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.getWalletConnectSession();\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get WalletConnect session');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n }, [aurum]);\n\n return {\n connect,\n emailAuthStart,\n emailAuthVerify,\n getWalletConnectSession,\n isPending,\n error,\n };\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Disconnect the current wallet.\n *\n * @example\n * ```tsx\n * const { disconnect } = useDisconnect();\n *\n * return <button onClick={disconnect}>Disconnect</button>;\n * ```\n */\nexport function useDisconnect() {\n const { aurum } = useAurumContext();\n\n const disconnect = useCallback(async () => {\n await aurum.disconnect();\n }, [aurum]);\n\n return { disconnect };\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport type { Chain } from 'viem';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access chain information and switch chains.\n *\n * @example\n * ```tsx\n * import { sepolia } from 'viem/chains';\n *\n * const { chainId, switchChain, error } = useChain();\n *\n * return (\n * <div>\n * <p>Chain ID: {chainId}</p>\n * <button onClick={() => switchChain(sepolia.id, sepolia)}>\n * Switch to Sepolia\n * </button>\n * </div>\n * );\n * ```\n */\nexport function useChain() {\n const { aurum, isReady } = useAurumContext();\n const [chainId, setChainId] = useState<number | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n // Fetch initial chain ID when ready\n useEffect(() => {\n if (!isReady) return;\n\n const fetchChainId = async () => {\n try {\n const id = await aurum.getChainId();\n setChainId(id);\n } catch {\n // Not connected or error fetching chain ID\n setChainId(null);\n }\n };\n\n fetchChainId();\n\n // Listen for chain changes\n const handleChainChanged = (newChainId: number | string) => {\n setChainId(Number(newChainId));\n };\n\n aurum.rpcProvider?.on?.('chainChanged', handleChainChanged);\n\n return () => {\n aurum.rpcProvider?.removeListener?.('chainChanged', handleChainChanged);\n };\n }, [aurum, isReady]);\n\n const switchChain = useCallback(\n async (targetChainId: number | string | `0x${string}`, chain?: Chain) => {\n if (!targetChainId) {\n throw new Error('chainId is required');\n }\n setError(null);\n\n try {\n await aurum.switchChain(targetChainId as `0x${string}` | string | number, chain);\n // Chain ID will be updated via the chainChanged event listener\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to switch chain');\n setError(error);\n throw error;\n }\n },\n [aurum],\n );\n\n return { chainId, switchChain, error };\n}\n"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/AurumContext.ts","../src/AurumProvider.tsx","../src/hooks/useAurum.ts","../src/hooks/useAccount.ts","../src/hooks/useConnect.ts","../src/hooks/useDisconnect.ts","../src/hooks/useChain.ts"],"names":["useState","useCallback","error","useEffect"],"mappings":";;;;AAuBO,IAAM,mBAAA,GAAoC;AAAA,EAC/C,aAAA,EAAe,MAAA;AAAA,EACf,UAAA,EAAY,MAAA;AAAA,EACZ,QAAA,EAAU,MAAA;AAAA,EACV,KAAA,EAAO,MAAA;AAAA,EACP,WAAA,EAAa,KAAA;AAAA,EACb,cAAA,EAAgB;AAClB,CAAA;AAEO,IAAM,YAAA,GAAe,cAAwC,IAAI,CAAA;AAEjE,SAAS,eAAA,GAAqC;AACnD,EAAA,MAAM,OAAA,GAAU,WAAW,YAAY,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACA,EAAA,OAAO,OAAA;AACT;AC7BO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,QAAA,EAAS,EAAuB;AACrE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,eAAA,GAAkB,OAAqB,mBAAmB,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,MAAA,iBAAwB,IAAI,GAAA,EAAK,CAAA;AAGtD,EAAA,MAAM,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAC,QAAA,KAAa,UAAU,CAAA;AAAA,EACvD,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,SAAA,GAAY,YAAY,YAAY;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,WAAA,EAAY;AACzC,MAAA,MAAM,WAAA,GAAc,MAAM,KAAA,CAAM,WAAA,EAAY;AAE5C,MAAA,MAAM,QAAA,GAAyB;AAAA,QAC7B,eAAe,QAAA,EAAU,aAAA;AAAA,QACzB,YAAY,QAAA,EAAU,UAAA;AAAA,QACtB,UAAU,QAAA,EAAU,QAAA;AAAA,QACpB,OAAO,QAAA,EAAU,KAAA;AAAA,QACjB,WAAA;AAAA,QACA,cAAA,EAAgB;AAAA,OAClB;AAEA,MAAA,eAAA,CAAgB,OAAA,GAAU,QAAA;AAC1B,MAAA,eAAA,EAAgB;AAAA,IAClB,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,CAAgB,OAAA,GAAU;AAAA,QACxB,GAAG,mBAAA;AAAA,QACH,cAAA,EAAgB;AAAA,OAClB;AACA,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,eAAe,CAAC,CAAA;AAG3B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,GAAU,IAAA;AAEd,IAAA,MAAM,aAAa,YAAY;AAC7B,MAAA,MAAM,MAAM,SAAA,EAAU;AACtB,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,MAAM,SAAA,EAAU;AAAA,IAClB,CAAA;AAEA,IAAA,UAAA,EAAW;AAGX,IAAA,MAAM,wBAAwB,MAAM;AAClC,MAAA,IAAI,SAAS,SAAA,EAAU;AAAA,IACzB,CAAA;AAEA,IAAA,MAAM,qBAAqB,MAAM;AAC/B,MAAA,IAAI,SAAS,SAAA,EAAU;AAAA,IACzB,CAAA;AAEA,IAAA,KAAA,CAAM,WAAA,EAAa,EAAA,GAAK,iBAAA,EAAmB,qBAAqB,CAAA;AAChE,IAAA,KAAA,CAAM,WAAA,EAAa,EAAA,GAAK,cAAA,EAAgB,kBAAkB,CAAA;AAE1D,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,GAAU,KAAA;AACV,MAAA,KAAA,CAAM,WAAA,EAAa,cAAA,GAAiB,iBAAA,EAAmB,qBAAqB,CAAA;AAC5E,MAAA,KAAA,CAAM,WAAA,EAAa,cAAA,GAAiB,cAAA,EAAgB,kBAAkB,CAAA;AAAA,IACxE,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,SAAS,CAAC,CAAA;AAGrB,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,QAAA,KAAyB;AACtD,IAAA,YAAA,CAAa,OAAA,CAAQ,IAAI,QAAQ,CAAA;AACjC,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAAA,IACtC,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,OAAO,eAAA,CAAgB,OAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAA,OAAO,mBAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,OAAO;AAAA,MACL,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,aAAa,iBAAiB;AAAA,GAC5D;AAEA,EAAA,2BAAQ,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,cAAe,QAAA,EAAS,CAAA;AAC/D;;;AC9FO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,eAAA,EAAgB;AAC3C,EAAA,OAAO,EAAE,OAAO,OAAA,EAAQ;AAC1B;ACAO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAa,iBAAA,KAAsB,eAAA,EAAgB;AAEtE,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,SAAA,EAAW,WAAA,EAAa,iBAAiB,CAAA;AAE9E,EAAA,OAAO;AAAA,IACL,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,gBAAgB,OAAA,CAAQ;AAAA,GAC1B;AACF;ACHO,SAAS,UAAA,GAAa;AAC3B,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,eAAA,EAAgB;AAElC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,OAAA,GAAUC,WAAAA;AAAA,IACd,OAAO,QAAA,KAAwB;AAC7B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AAC5C,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,0BAA0B,CAAA;AAC/E,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,cAAA,GAAiBD,WAAAA;AAAA,IACrB,OAAO,KAAA,KAAkB;AACvB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,cAAA,CAAe,KAAK,CAAA;AAC/C,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,4BAA4B,CAAA;AACjF,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,eAAA,GAAkBD,WAAAA;AAAA,IACtB,OAAO,QAAgB,GAAA,KAAgB;AACrC,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,eAAA,CAAgB,QAAQ,GAAG,CAAA;AACtD,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,GAAA,EAAK;AACZ,QAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,wBAAwB,CAAA;AAC7E,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,uBAAA,GAA0BD,YAAY,YAAiD;AAC3F,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,uBAAA,EAAwB;AACnD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,GAAA,EAAK;AACZ,MAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,qCAAqC,CAAA;AAC1F,MAAA,QAAA,CAASA,MAAK,CAAA;AACd,MAAA,MAAMA,MAAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;ACrGO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,eAAA,EAAgB;AAElC,EAAA,MAAM,UAAA,GAAaD,YAAY,YAAY;AACzC,IAAA,MAAM,MAAM,UAAA,EAAW;AAAA,EACzB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,EAAE,UAAA,EAAW;AACtB;ACEO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,eAAA,EAAgB;AAC3C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAuB,IAAI,CAAA;AAGrD,EAAAG,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,eAAe,YAAY;AAC/B,MAAA,IAAI;AACF,QAAA,MAAM,EAAA,GAAK,MAAM,KAAA,CAAM,UAAA,EAAW;AAClC,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MACf,CAAA,CAAA,MAAQ;AAEN,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,YAAA,EAAa;AAGb,IAAA,MAAM,kBAAA,GAAqB,CAAC,UAAA,KAAgC;AAC1D,MAAA,UAAA,CAAW,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,KAAA,CAAM,WAAA,EAAa,EAAA,GAAK,cAAA,EAAgB,kBAAkB,CAAA;AAE1D,IAAA,OAAO,MAAM;AACX,MAAA,KAAA,CAAM,WAAA,EAAa,cAAA,GAAiB,cAAA,EAAgB,kBAAkB,CAAA;AAAA,IACxE,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAEnB,EAAA,MAAM,WAAA,GAAcF,WAAAA;AAAA,IAClB,OAAO,eAAgD,KAAA,KAAkB;AACvE,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACvC;AACA,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,CAAM,WAAA,CAAY,aAAA,EAAkD,KAAK,CAAA;AAAA,MAEjF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAMC,SAAQ,GAAA,YAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,MAAM,wBAAwB,CAAA;AAC7E,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,MAAMA,MAAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,WAAA,EAAa,KAAA,EAAM;AACvC","file":"index.mjs","sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { Aurum } from '@aurum-sdk/core';\nimport type { WalletId, WalletName } from '@aurum-sdk/types';\n\nexport interface AccountState {\n publicAddress: string | undefined;\n walletName: WalletName | undefined;\n walletId: WalletId | undefined;\n email: string | undefined;\n isConnected: boolean;\n isInitializing: boolean;\n}\n\ninterface AurumContextValue {\n aurum: Aurum;\n isReady: boolean;\n subscribe: (callback: () => void) => () => void;\n getSnapshot: () => AccountState;\n getServerSnapshot: () => AccountState;\n}\n\nexport const initialAccountState: AccountState = {\n publicAddress: undefined,\n walletName: undefined,\n walletId: undefined,\n email: undefined,\n isConnected: false,\n isInitializing: true,\n};\n\nexport const AurumContext = createContext<AurumContextValue | null>(null);\n\nexport function useAurumContext(): AurumContextValue {\n const context = useContext(AurumContext);\n if (!context) {\n throw new Error('useAurumContext must be used within a AurumProvider');\n }\n return context;\n}\n","'use client';\n\nimport { useRef, useEffect, useCallback, useState, useMemo, type ReactNode } from 'react';\nimport { AurumContext, initialAccountState, type AccountState } from '@src/AurumContext';\nimport type { Aurum } from '@aurum-sdk/core';\n\ninterface AurumProviderProps {\n aurum: Aurum;\n children: ReactNode;\n}\n\nexport function AurumProvider({ aurum, children }: AurumProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const accountStateRef = useRef<AccountState>(initialAccountState);\n const listenersRef = useRef<Set<() => void>>(new Set());\n\n // Notify all subscribers of state changes\n const notifyListeners = useCallback(() => {\n listenersRef.current.forEach((listener) => listener());\n }, []);\n\n // Sync state from SDK\n const syncState = useCallback(async () => {\n try {\n const userInfo = await aurum.getUserInfo();\n const isConnected = await aurum.isConnected();\n\n const newState: AccountState = {\n publicAddress: userInfo?.publicAddress,\n walletName: userInfo?.walletName,\n walletId: userInfo?.walletId,\n email: userInfo?.email,\n isConnected,\n isInitializing: false,\n };\n\n accountStateRef.current = newState;\n notifyListeners();\n } catch {\n accountStateRef.current = {\n ...initialAccountState,\n isInitializing: false,\n };\n notifyListeners();\n }\n }, [aurum, notifyListeners]);\n\n // Initialize SDK and set up event listeners\n useEffect(() => {\n let mounted = true;\n\n const initialize = async () => {\n await aurum.whenReady();\n if (!mounted) return;\n\n setIsReady(true);\n await syncState();\n };\n\n initialize();\n\n // Subscribe to provider events for account changes\n const handleAccountsChanged = () => {\n if (mounted) syncState();\n };\n\n const handleChainChanged = () => {\n if (mounted) syncState();\n };\n\n aurum.rpcProvider?.on?.('accountsChanged', handleAccountsChanged);\n aurum.rpcProvider?.on?.('chainChanged', handleChainChanged);\n\n return () => {\n mounted = false;\n aurum.rpcProvider?.removeListener?.('accountsChanged', handleAccountsChanged);\n aurum.rpcProvider?.removeListener?.('chainChanged', handleChainChanged);\n };\n }, [aurum, syncState]);\n\n // Subscribe function for useSyncExternalStore\n const subscribe = useCallback((callback: () => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n // Get current snapshot for useSyncExternalStore\n const getSnapshot = useCallback(() => {\n return accountStateRef.current;\n }, []);\n\n // Server snapshot - always returns initial state\n const getServerSnapshot = useCallback(() => {\n return initialAccountState;\n }, []);\n\n const contextValue = useMemo(\n () => ({\n aurum,\n isReady,\n subscribe,\n getSnapshot,\n getServerSnapshot,\n }),\n [aurum, isReady, subscribe, getSnapshot, getServerSnapshot],\n );\n\n return <AurumContext.Provider value={contextValue}>{children}</AurumContext.Provider>;\n}\n","'use client';\n\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access the raw Aurum SDK instance.\n *\n * @example\n * ```tsx\n * const { aurum, isReady } = useAurum();\n *\n * if (isReady) {\n * const chainId = await aurum.getChainId();\n * }\n * ```\n */\nexport function useAurum() {\n const { aurum, isReady } = useAurumContext();\n return { aurum, isReady };\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access connected user information.\n *\n * @example\n * ```tsx\n * const { publicAddress, walletName, isConnected, isInitializing } = useAccount();\n *\n * if (isInitializing) return <div>Loading...</div>;\n *\n * if (isConnected) {\n * return <div>Connected: {publicAddress}</div>;\n * }\n * ```\n */\nexport function useAccount() {\n const { subscribe, getSnapshot, getServerSnapshot } = useAurumContext();\n\n const account = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n return {\n publicAddress: account.publicAddress,\n walletName: account.walletName,\n walletId: account.walletId,\n email: account.email,\n isConnected: account.isConnected,\n isInitializing: account.isInitializing,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\nimport type { WalletId, WalletConnectSessionResult } from '@aurum-sdk/types';\n\n/**\n * Connect to a wallet.\n *\n * @example\n * ```tsx\n * const { connect, emailAuthStart, emailAuthVerify, getWalletConnectSession, isPending, error } = useConnect();\n *\n * // Open wallet selection modal\n * await connect();\n *\n * // Or connect directly to a specific wallet\n * await connect(WalletId.MetaMask);\n *\n * // Or use headless email auth\n * const { flowId } = await emailAuthStart('user@example.com');\n * const { address, email } = await emailAuthVerify(flowId, '123456');\n *\n * // Or use headless WalletConnect\n * const { uri, waitForConnection } = await getWalletConnectSession();\n * // Display your own QR code with `uri`\n * const address = await waitForConnection();\n * ```\n */\nexport function useConnect() {\n const { aurum } = useAurumContext();\n\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const connect = useCallback(\n async (walletId?: WalletId) => {\n setIsPending(true);\n setError(null);\n\n try {\n const address = await aurum.connect(walletId);\n return address;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('User rejected connection');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const emailAuthStart = useCallback(\n async (email: string) => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.emailAuthStart(email);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to start email auth');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const emailAuthVerify = useCallback(\n async (flowId: string, otp: string) => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.emailAuthVerify(flowId, otp);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to verify email');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n },\n [aurum],\n );\n\n const getWalletConnectSession = useCallback(async (): Promise<WalletConnectSessionResult> => {\n setIsPending(true);\n setError(null);\n\n try {\n const result = await aurum.getWalletConnectSession();\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get WalletConnect session');\n setError(error);\n throw error;\n } finally {\n setIsPending(false);\n }\n }, [aurum]);\n\n return {\n connect,\n emailAuthStart,\n emailAuthVerify,\n getWalletConnectSession,\n isPending,\n error,\n };\n}\n","'use client';\n\nimport { useCallback } from 'react';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Disconnect the current wallet.\n *\n * @example\n * ```tsx\n * const { disconnect } = useDisconnect();\n *\n * return <button onClick={disconnect}>Disconnect</button>;\n * ```\n */\nexport function useDisconnect() {\n const { aurum } = useAurumContext();\n\n const disconnect = useCallback(async () => {\n await aurum.disconnect();\n }, [aurum]);\n\n return { disconnect };\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport type { Chain } from 'viem';\nimport { useAurumContext } from '@src/AurumContext';\n\n/**\n * Access chain information and switch chains.\n *\n * @example\n * ```tsx\n * import { sepolia } from 'viem/chains';\n *\n * const { chainId, switchChain, error } = useChain();\n *\n * return (\n * <div>\n * <p>Chain ID: {chainId}</p>\n * <button onClick={() => switchChain(sepolia.id, sepolia)}>\n * Switch to Sepolia\n * </button>\n * </div>\n * );\n * ```\n */\nexport function useChain() {\n const { aurum, isReady } = useAurumContext();\n const [chainId, setChainId] = useState<number | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n // Fetch initial chain ID when ready\n useEffect(() => {\n if (!isReady) return;\n\n const fetchChainId = async () => {\n try {\n const id = await aurum.getChainId();\n setChainId(id);\n } catch {\n // Not connected or error fetching chain ID\n setChainId(null);\n }\n };\n\n fetchChainId();\n\n // Listen for chain changes\n const handleChainChanged = (newChainId: number | string) => {\n setChainId(Number(newChainId));\n };\n\n aurum.rpcProvider?.on?.('chainChanged', handleChainChanged);\n\n return () => {\n aurum.rpcProvider?.removeListener?.('chainChanged', handleChainChanged);\n };\n }, [aurum, isReady]);\n\n const switchChain = useCallback(\n async (targetChainId: number | string | `0x${string}`, chain?: Chain) => {\n if (!targetChainId) {\n throw new Error('chainId is required');\n }\n setError(null);\n\n try {\n await aurum.switchChain(targetChainId as `0x${string}` | string | number, chain);\n // Chain ID will be updated via the chainChanged event listener\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to switch chain');\n setError(error);\n throw error;\n }\n },\n [aurum],\n );\n\n return { chainId, switchChain, error };\n}\n"]}
|