Amba-Agent-App/lib/services/referralService.ts
2026-01-16 00:22:35 +03:00

74 lines
1.8 KiB
TypeScript

import { callEndpoint } from "../api/client";
import { referralEndpoints } from "../api/referralEndpoints";
export type ReferralReason = "signup" | "transaction" | "event";
export interface ApplyReferralPayload {
referralCode: string;
uid: string;
referralReason: ReferralReason;
contextId: string;
}
export interface ApplyReferralResult {
success: boolean;
message?: string;
error?: string;
}
export async function applyReferral(
payload: ApplyReferralPayload
): Promise<ApplyReferralResult> {
const trimmedCode = payload.referralCode.trim();
if (!trimmedCode) {
return { success: false, error: "Referral code is required" };
}
const body = {
referralCode: trimmedCode,
uid: payload.uid,
referralReason: payload.referralReason,
contextId: payload.contextId,
};
try {
console.log("[ReferralService] Applying referral via API client", body);
const res = await callEndpoint<any, typeof body>(referralEndpoints.apply, {
body,
headers: {
"source-app": "amba-pay",
},
});
const message =
(res && (res.message || res.successMessage)) ||
"Referral applied successfully";
console.log("[ReferralService] Referral applied successfully", res);
return { success: true, message };
} catch (error) {
console.error("[ReferralService] Error calling referral API", error);
let parsedError: string | undefined;
if (error instanceof Error) {
try {
const parsed = JSON.parse(error.message);
if (parsed && typeof parsed.message === "string") {
parsedError = parsed.message;
}
} catch {
// ignore JSON parse failure, fall back to message
parsedError = error.message;
}
}
return {
success: false,
error: parsedError || "Failed to apply referral code",
};
}
}