UNPKG

reflink-sdk

Version:

SDK for interacting with the Reflink Solana program via Anchor.

496 lines (495 loc) 14.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useReflinkSDK = useReflinkSDK; const react_1 = require("react"); const reflink_sdk_1 = __importDefault(require("./reflink-sdk")); // Adjust path as needed /** * React hook for using ReflinkSDK within React components * * @param connection - Solana connection object * @param wallet - Wallet adapter that implements signTransaction and publicKey * @param programId - Optional custom program ID * @returns An object containing the SDK instance and helper methods */ function useReflinkSDK(connection, wallet, // Should match the Wallet type expected by ReflinkSDK programId) { // State for SDK initialization const [state, setState] = (0, react_1.useState)({ loading: true, error: null, sdk: null, }); // Initialize SDK when dependencies change (0, react_1.useEffect)(() => { // Only initialize if we have both connection and wallet if (!connection || !wallet || !wallet.publicKey) { setState({ loading: false, error: new Error("Missing connection or wallet"), sdk: null, }); return; } try { const sdk = new reflink_sdk_1.default(connection, wallet, programId); setState({ loading: false, error: null, sdk, }); } catch (error) { setState({ loading: false, error: error instanceof Error ? error : new Error("Unknown error initializing SDK"), sdk: null, }); } }, [connection, wallet, programId]); // Register affiliate function const registerAffiliate = async () => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.registerAffiliate(); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error registering affiliate"), txSignature: null, }; } }; // Register merchant function const registerMerchant = async (commissionBps) => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.registerMerchant(commissionBps); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error registering merchant"), txSignature: null, }; } }; // Process SOL referral function const processReferralSol = async (merchantPubkey, affiliatePubkey, merchantWallet, affiliateWallet, amount) => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.processReferralSol(merchantPubkey, affiliatePubkey, merchantWallet, affiliateWallet, amount); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error processing SOL referral"), txSignature: null, }; } }; // Process token referral function const processReferralToken = async (merchantPubkey, affiliatePubkey, merchantTokenAccount, affiliateTokenAccount, tokenMint, amount) => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.processReferralToken(merchantPubkey, affiliatePubkey, merchantTokenAccount, affiliateTokenAccount, tokenMint, amount); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error processing token referral"), txSignature: null, }; } }; // Update merchant commission function const updateMerchantCommission = async (merchantPubkey, newCommissionBps) => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.updateMerchantCommission(merchantPubkey, newCommissionBps); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error updating merchant commission"), txSignature: null, }; } }; // Toggle merchant status function const toggleMerchantStatus = async (merchantPubkey) => { const result = { loading: true, error: null, txSignature: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const txSignature = await state.sdk.toggleMerchantStatus(merchantPubkey); return { loading: false, error: null, txSignature, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error toggling merchant status"), txSignature: null, }; } }; // Get affiliate data function const getAffiliateData = async (affiliatePubkey) => { const result = { loading: true, error: null, data: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const data = await state.sdk.getAffiliateData(affiliatePubkey); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error fetching affiliate data"), data: null, }; } }; // Get merchant data function const getMerchantData = async (merchantPubkey) => { const result = { loading: true, error: null, data: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const data = await state.sdk.getMerchantData(merchantPubkey); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error fetching merchant data"), data: null, }; } }; // Get referral data function const getReferralData = async (referralPubkey) => { const result = { loading: true, error: null, data: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const data = await state.sdk.getReferralData(referralPubkey); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error fetching referral data"), data: null, }; } }; // Get affiliate referrals function const getAffiliateReferrals = async (affiliatePubkey) => { const result = { loading: true, error: null, data: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const data = await state.sdk.getAffiliateReferrals(affiliatePubkey); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error fetching affiliate referrals"), data: null, }; } }; // Get merchant referrals function const getMerchantReferrals = async (merchantPubkey) => { const result = { loading: true, error: null, data: null, }; if (!state.sdk) { return { ...result, loading: false, error: new Error("SDK not initialized"), }; } try { const data = await state.sdk.getMerchantReferrals(merchantPubkey); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error fetching merchant referrals"), data: null, }; } }; // Find affiliate PDA const findAffiliatePDA = async (authority) => { if (!state.sdk) { return { loading: false, error: new Error("SDK not initialized"), data: null, }; } try { const data = await state.sdk.findAffiliatePDA(authority); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error finding affiliate PDA"), data: null, }; } }; // Find merchant PDA const findMerchantPDA = async (authority) => { if (!state.sdk) { return { loading: false, error: new Error("SDK not initialized"), data: null, }; } try { const data = await state.sdk.findMerchantPDA(authority); return { loading: false, error: null, data, }; } catch (error) { return { loading: false, error: error instanceof Error ? error : new Error("Error finding merchant PDA"), data: null, }; } }; // Utility functions const solToLamports = (sol) => { if (!state.sdk) { throw new Error("SDK not initialized"); } return state.sdk.solToLamports(sol); }; const lamportsToSol = (lamports) => { if (!state.sdk) { throw new Error("SDK not initialized"); } return state.sdk.lamportsToSol(lamports); }; return { ...state, // Core operations registerAffiliate, registerMerchant, processReferralSol, processReferralToken, updateMerchantCommission, toggleMerchantStatus, // Data fetching getAffiliateData, getMerchantData, getReferralData, getAffiliateReferrals, getMerchantReferrals, // PDAs findAffiliatePDA, findMerchantPDA, // Utilities solToLamports, lamportsToSol, }; }