API Client Documentation
Overview
The API client (src/lib/api.ts) is a centralized service for all backend API communications. It handles authentication, error handling, and request/response transformations.
Class: ApiClient
Authentication
All requests automatically include the JWT token from localStorage:
Authorization: Bearer ${authToken}Error Handling
- 401 Unauthorized: Automatically logs out user and redirects to login
- Other errors: Throws error with server message when available
Core Methods
User Management
getUsers(options?: {
page?: number;
limit?: number;
sort_by?: string;
sort_order?: "asc" | "desc";
search?: string;
roles?: string[];
ecosystems?: string[];
topics?: string[];
}): Promise<PaginatedResponse<User>>Conference Management
getConferences(params?: {
page?: number;
limit?: number;
status?: string;
featured?: boolean;
public?: boolean;
}): Promise<ConferencesResponse>
createConference(conferenceData): Promise<Conference>
updateConference(id: number, conferenceData): Promise<Conference>
deleteConference(id: number): Promise<void>
getConferenceById(id: number): Promise<Conference>
getConferenceBySlug(slug: string): Promise<Conference>
uploadConferenceAttendees(conferenceId: number, file: File): Promise<{message: string, uploaded_count: number}>Event Management
getEvents(params?: {
page?: number;
limit?: number;
status?: string;
featured?: boolean;
search?: string;
conference_id?: number;
}): Promise<EventsResponse>
createEvent(eventData): Promise<Event>
updateEvent(id: number, eventData): Promise<Event>
deleteEvent(id: number): Promise<void>
getEvent(id: number): Promise<Event>
importLumaEvent(url: string): Promise<Event>
importAllLumaEvents(): Promise<{...}>
mapEventToConference(eventId: number, conferenceId: number | null): Promise<Event>Speaker Management
getSpeakers(params?: {
page?: number;
limit?: number;
search?: string;
featured?: boolean;
conference_id?: number;
}): Promise<SpeakersResponse>
createSpeaker(speakerData): Promise<Speaker>
updateSpeaker(id: number, speakerData): Promise<Speaker>
deleteSpeaker(id: number): Promise<void>
getSpeaker(id: number): Promise<Speaker>
mapSpeakerToConference(speakerId: number, conferenceId: number | null): Promise<Speaker>Agenda Management
getAgendaItems(conferenceId: number): Promise<AgendaResponse>
getAgendaItem(id: number): Promise<AgendaItem>
createAgendaItem(agendaData): Promise<AgendaItem>
updateAgendaItem(id: number, agendaData): Promise<AgendaItem>
deleteAgendaItem(id: number): Promise<void>Quest Management
getQuests(params?: {
limit?: number;
offset?: number;
page?: number;
}): Promise<QuestsResponse>
getQuestById(id: string): Promise<QuestDetailResponse>
createQuest(questData): Promise<{message: string, id: string}>
updateQuest(questId: string, updates): Promise<{message: string, quest_id: string}>
deleteQuest(id: string): Promise<{message: string}>
toggleQuestActive(id: string, isActive: boolean): Promise<Quest>
// Quest Tasks
createQuestTask(questId: string, taskData): Promise<{message: string, id: string, task: QuestTask}>
updateQuestTask(taskId: string, taskData): Promise<{message: string, task: QuestTask}>
deleteQuestTask(taskId: string): Promise<{message: string}>
// Quest Submissions
getQuestPendingSubmissions(questId: string, params?): Promise<QuestSubmissionsResponse>
approveQuestSubmission(userQuestTaskId: string, message?: string): Promise<{...}>
rejectQuestSubmission(userQuestTaskId: string, message?: string): Promise<{...}>
// Quest Participants
getQuestParticipants(questId: string, filters?): Promise<{participants: [...], summary: {...}}>
approveQuestRegistration(requestId: string, message?: string): Promise<{...}>
rejectQuestRegistration(requestId: string, message?: string): Promise<{...}>
assignRewardCodes(requestId: string, codes: string[], assignedBy: string): Promise<{message: string}>
// Quest Reminders
getQuestReminderTemplates(questId: string): Promise<{data: QuestNotificationTemplate[], meta: any}>
createQuestReminderTemplate(questId: string, template): Promise<QuestNotificationTemplate>
updateQuestReminderTemplate(questId: string, templateId: string, template): Promise<QuestNotificationTemplate>
deleteQuestReminderTemplate(questId: string, templateId: string): Promise<void>
setQuestReminderTemplateDefault(questId: string, templateId: string): Promise<void>
sendQuestReminder(questId: string, data: SendQuestReminderRequest): Promise<QuestReminderJobsResponse>Notification Management
sendNotification(params: {
selection_criteria: {...};
notification_payload: {...};
schedule?: Schedule;
custom_variables?: Record<string, string>;
}): Promise<{message: string, job_id: string, ...}>
getNotificationJobs(params?): Promise<{data: NotificationJob[], meta: {...}}>
getNotificationJob(jobId: string): Promise<NotificationJob>
getNotificationJobStats(jobId: string): Promise<{...}>
cancelNotificationJob(jobId: string, reason?: string): Promise<{...}>
rescheduleNotificationJob(jobId: string, schedule: Schedule): Promise<{...}>
getNotificationJobUsers(params): Promise<{data: [...], meta: {...}}>
sendNotificationWithExcel(file: File, notificationPayload, schedule?): Promise<{...}>
getNotificationFilterValues(): Promise<{
roles: string[];
ecosystems: string[];
topics: string[];
locations: string[];
}>
getTemplateVariables(): Promise<{
built_in_variables: [...];
custom_variables: {...};
usage: {...};
}>File Upload
uploadImage(file: File): Promise<{
filename: string;
image_url: string;
message: string;
size: number;
success: boolean;
}>
uploadVideo(file: File): Promise<{
filename: string;
video_url: string;
message: string;
size: number;
success: boolean;
}>Authentication
login(email: string, password: string): Promise<{token: string, user: any}>Usage Example
import { apiClient } from "@/lib/api";
// Get users
const users = await apiClient.getUsers({
page: 1,
limit: 10,
search: "john",
roles: ["admin"]
});
// Create event
const newEvent = await apiClient.createEvent({
title: "Blockchain Conference",
date: "2024-01-01",
// ... other fields
});Type Definitions
All TypeScript interfaces are exported from src/lib/api.ts:
UserEventConferenceSpeakerAgendaItemQuestQuestTaskQuestSubmissionNotificationJobQuestNotificationTemplate- And more...