UNPKG

@nexuspay/sdk

Version:

🚀 Ultra-simple cross-chain wallet SDK - Initialize with just projectName + apiKey. Bulletproof gasless transactions across EVM/SVM chains with ANY social identifier support

109 lines (108 loc) • 4.11 kB
import { jsx as _jsx } from "react/jsx-runtime"; /** * NexusProvider - Ultra-Simple Cross-Chain Wallet Provider * Provides access to simplified SDK features with React state management */ import { createContext, useState, useCallback, useEffect } from 'react'; import { NexusSDK } from '../../core/NexusSDK.js'; // Create the context export const NexusContext = createContext(undefined); export const NexusProvider = ({ config, children }) => { // State management const [sdk, setSdk] = useState(null); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); // Initialize SDK useEffect(() => { try { const sdkInstance = new NexusSDK(config); setSdk(sdkInstance); } catch (err) { setError({ code: 'SDK_INIT_ERROR', message: err instanceof Error ? err.message : 'Failed to initialize SDK', }); } }, [config]); // Error handling const handleError = useCallback((err) => { const nexusError = { code: err.code || 'UNKNOWN_ERROR', message: err.message || 'An unknown error occurred', details: err.details, statusCode: err.statusCode, retryable: err.retryable || false, suggestions: err.suggestions || [], }; setError(nexusError); return nexusError; }, []); const clearError = useCallback(() => { setError(null); }, []); // Wrapper for async operations const withLoading = useCallback(async (operation) => { if (!sdk) { throw new Error('SDK not initialized'); } setIsLoading(true); setError(null); try { const result = await operation(); return result; } catch (err) { const nexusError = handleError(err); throw nexusError; } finally { setIsLoading(false); } }, [sdk, handleError]); // ==================== SIMPLIFIED WALLET OPERATIONS ==================== const createWallet = useCallback(async (socialId, socialType, chains) => { return withLoading(() => sdk.createWallet({ socialId, socialType, chains })); }, [sdk, withLoading]); const getWallet = useCallback(async (socialId, socialType) => { return withLoading(() => sdk.getWallet(socialId, socialType)); }, [sdk, withLoading]); const getWalletBalances = useCallback(async (socialId, socialType) => { return withLoading(() => sdk.getWalletBalances(socialId, socialType)); }, [sdk, withLoading]); // ==================== SIMPLIFIED TRANSACTION OPERATIONS ==================== const sendTransaction = useCallback(async (data) => { return withLoading(() => sdk.sendTransaction(data)); }, [sdk, withLoading]); const transferTokens = useCallback(async (data) => { return withLoading(() => sdk.transferTokens(data)); }, [sdk, withLoading]); // ==================== SIMPLIFIED CROSS-CHAIN OPERATIONS ==================== const bridgeTokens = useCallback(async (data) => { return withLoading(() => sdk.bridgeTokens(data)); }, [sdk, withLoading]); // ==================== ANALYTICS & MONITORING ==================== const getAnalytics = useCallback(async (days) => { return withLoading(() => sdk.getAnalytics(days)); }, [sdk, withLoading]); const getPaymasterBalances = useCallback(async () => { return withLoading(() => sdk.getPaymasterBalances()); }, [sdk, withLoading]); // ==================== CONTEXT VALUE ==================== const contextValue = { sdk, isLoading, error, createWallet, getWallet, getWalletBalances, sendTransaction, transferTokens, bridgeTokens, getAnalytics, getPaymasterBalances, clearError, }; return (_jsx(NexusContext.Provider, { value: contextValue, children: children })); }; export default NexusProvider;