reflink-sdk
Version:
SDK for interacting with the Reflink Solana program via Anchor.
496 lines (495 loc) • 14.6 kB
JavaScript
"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,
};
}