/** * Growth Service API client for the admin dashboard. * Uses @bytelyst/api-client shared package. * * Replaces direct Cosmos DB calls for invitations, referrals, and promos. * Calls consolidated platform-service on port 4003. */ import { createApiClient } from '@bytelyst/api-client'; const growthApi = createApiClient({ baseUrl: `${process.env.PLATFORM_SERVICE_URL || 'http://localhost:4003'}/api`, defaultHeaders: { 'x-product-id': process.env.PRODUCT_ID || 'lysnrai', }, }); // ── Invitations ────────────────────────────────────────────────── export async function listInvitations(limit = 100, offset = 0) { return growthApi.fetch<{ invitations: unknown[]; count: number }>( `/invitations?limit=${limit}&offset=${offset}` ); } export async function getInvitation(id: string) { return growthApi.fetch(`/invitations/${id}`); } export async function createInvitation(body: Record) { return growthApi.fetch('/invitations', { method: 'POST', body: JSON.stringify(body), }); } export async function updateInvitation(id: string, body: Record) { return growthApi.fetch(`/invitations/${id}`, { method: 'PUT', body: JSON.stringify(body), }); } export async function deleteInvitation(id: string) { return growthApi.fetch(`/invitations/${id}`, { method: 'DELETE' }); } export async function countInvitations() { return growthApi.fetch<{ count: number }>('/invitations/count'); } export async function bulkCreateInvitations(body: unknown[]) { return growthApi.fetch<{ total: number; created: number; failed: number; invitations: unknown[]; errors: { index: number; error: string }[]; }>('/invitations/bulk', { method: 'POST', body: JSON.stringify(body), }); } // ── Referrals ──────────────────────────────────────────────────── export async function listReferrals(limit = 100, offset = 0) { return growthApi.fetch<{ referrals: unknown[]; count: number }>( `/referrals?limit=${limit}&offset=${offset}` ); } export async function getReferralStats() { return growthApi.fetch<{ total: number; completed: number; rewarded: number }>( '/referrals/stats' ); } // ── Promos ─────────────────────────────────────────────────────── export async function listPromos(active?: boolean) { const qs = active !== undefined ? `?active=${active}` : ''; return growthApi.fetch<{ promos: unknown[] }>(`/promos${qs}`); } export async function createPromo(body: Record) { return growthApi.fetch('/promos', { method: 'POST', body: JSON.stringify(body), }); } export async function validatePromo(code: string) { return growthApi.fetch<{ valid: boolean; promo: unknown }>('/promos/validate', { method: 'POST', body: JSON.stringify({ code }), }); } export async function deactivatePromo(id: string) { return growthApi.fetch(`/promos/${id}/deactivate`, { method: 'PUT' }); }