@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
JavaScript
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;