Frontend
Components
API Client Documentation

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:

  • User
  • Event
  • Conference
  • Speaker
  • AgendaItem
  • Quest
  • QuestTask
  • QuestSubmission
  • NotificationJob
  • QuestNotificationTemplate
  • And more...