@campusiq/sdk
Version:
Official JavaScript/TypeScript SDK for CampusIQ - A comprehensive school management system API
906 lines (894 loc) • 24.6 kB
TypeScript
declare abstract class BaseResource {
protected client: CampusIQClient;
constructor(client: CampusIQClient);
protected requestGet<T>(endpoint: string, params?: Record<string, any>): Promise<T>;
protected requestPost<T>(endpoint: string, data?: any): Promise<T>;
protected requestPut<T>(endpoint: string, data?: any): Promise<T>;
protected requestPatch<T>(endpoint: string, data?: any): Promise<T>;
protected requestDelete<T>(endpoint: string): Promise<T>;
private sendRequest;
}
interface PaginationParams {
page?: number;
limit?: number;
sort?: string;
order?: 'asc' | 'desc';
}
interface ListResponse<T> {
data: T[];
pagination: {
page: number;
limit: number;
total: number;
totalPages: number;
hasNext: boolean;
hasPrev: boolean;
};
}
interface Student {
id: string;
studentId: string;
firstName: string;
lastName: string;
email: string;
dateOfBirth: string;
grade: string;
status: 'active' | 'inactive' | 'graduated' | 'transferred';
enrollmentDate: string;
parentContact?: {
name: string;
email: string;
phone: string;
};
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
createdAt: string;
updatedAt: string;
}
interface CreateStudentData$1 {
studentId: string;
firstName: string;
lastName: string;
email: string;
dateOfBirth: string;
grade: string;
parentContact?: {
name: string;
email: string;
phone: string;
};
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
}
interface UpdateStudentData$1 {
firstName?: string;
lastName?: string;
email?: string;
grade?: string;
status?: 'active' | 'inactive' | 'graduated' | 'transferred';
parentContact?: {
name: string;
email: string;
phone: string;
};
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
}
interface StudentFilters$1 extends PaginationParams {
grade?: string;
status?: string;
search?: string;
enrollmentDateFrom?: string;
enrollmentDateTo?: string;
}
interface Teacher {
id: string;
teacherId: string;
firstName: string;
lastName: string;
email: string;
department: string;
subjects: string[];
hireDate: string;
status: 'active' | 'inactive' | 'on_leave';
phone?: string;
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
createdAt: string;
updatedAt: string;
}
interface CreateTeacherData$1 {
teacherId: string;
firstName: string;
lastName: string;
email: string;
department: string;
subjects: string[];
hireDate: string;
phone?: string;
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
}
interface UpdateTeacherData$1 {
firstName?: string;
lastName?: string;
email?: string;
department?: string;
subjects?: string[];
status?: 'active' | 'inactive' | 'on_leave';
phone?: string;
address?: {
street: string;
city: string;
state: string;
zipCode: string;
};
}
interface TeacherFilters$1 extends PaginationParams {
department?: string;
status?: string;
search?: string;
subject?: string;
}
interface Course {
id: string;
courseId: string;
name: string;
description: string;
department: string;
credits: number;
teacherId: string;
teacher?: Teacher;
semester: string;
year: number;
schedule: {
days: string[];
startTime: string;
endTime: string;
room: string;
};
capacity: number;
enrolled: number;
status: 'active' | 'inactive' | 'completed';
createdAt: string;
updatedAt: string;
}
interface CreateCourseData$1 {
courseId: string;
name: string;
description: string;
department: string;
credits: number;
teacherId: string;
semester: string;
year: number;
schedule: {
days: string[];
startTime: string;
endTime: string;
room: string;
};
capacity: number;
}
interface UpdateCourseData$1 {
name?: string;
description?: string;
department?: string;
credits?: number;
teacherId?: string;
schedule?: {
days: string[];
startTime: string;
endTime: string;
room: string;
};
capacity?: number;
status?: 'active' | 'inactive' | 'completed';
}
interface CourseFilters$1 extends PaginationParams {
department?: string;
teacherId?: string;
semester?: string;
year?: number;
status?: string;
search?: string;
}
interface Enrollment {
id: string;
studentId: string;
courseId: string;
student?: Student;
course?: Course;
enrollmentDate: string;
status: 'enrolled' | 'dropped' | 'completed';
grade?: string;
credits: number;
createdAt: string;
updatedAt: string;
}
interface CreateEnrollmentData$1 {
studentId: string;
courseId: string;
enrollmentDate?: string;
}
interface UpdateEnrollmentData$1 {
status?: 'enrolled' | 'dropped' | 'completed';
grade?: string;
}
interface EnrollmentFilters$1 extends PaginationParams {
studentId?: string;
courseId?: string;
status?: string;
semester?: string;
year?: number;
search?: string;
}
interface Grade {
id: string;
studentId: string;
courseId: string;
student?: Student;
course?: Course;
assignmentName: string;
assignmentType: 'homework' | 'quiz' | 'exam' | 'project' | 'participation';
points: number;
maxPoints: number;
percentage: number;
letterGrade: string;
gradedDate: string;
comments?: string;
createdAt: string;
updatedAt: string;
}
interface CreateGradeData$1 {
studentId: string;
courseId: string;
assignmentName: string;
assignmentType: 'homework' | 'quiz' | 'exam' | 'project' | 'participation';
points: number;
maxPoints: number;
gradedDate?: string;
comments?: string;
}
interface UpdateGradeData$1 {
assignmentName?: string;
assignmentType?: 'homework' | 'quiz' | 'exam' | 'project' | 'participation';
points?: number;
maxPoints?: number;
gradedDate?: string;
comments?: string;
}
interface GradeFilters$1 extends PaginationParams {
studentId?: string;
courseId?: string;
assignmentType?: string;
gradedDateFrom?: string;
gradedDateTo?: string;
search?: string;
}
interface Attendance {
id: string;
studentId: string;
courseId: string;
student?: Student;
course?: Course;
date: string;
status: 'present' | 'absent' | 'late' | 'excused';
notes?: string;
markedBy: string;
markedAt: string;
createdAt: string;
updatedAt: string;
}
interface CreateAttendanceData$1 {
studentId: string;
courseId: string;
date: string;
status: 'present' | 'absent' | 'late' | 'excused';
notes?: string;
}
interface UpdateAttendanceData$1 {
status?: 'present' | 'absent' | 'late' | 'excused';
notes?: string;
}
interface AttendanceFilters$1 extends PaginationParams {
studentId?: string;
courseId?: string;
status?: string;
dateFrom?: string;
dateTo?: string;
search?: string;
}
interface Webhook {
id: string;
url: string;
events: string[];
secret: string;
status: 'active' | 'inactive';
lastTriggered?: string;
createdAt: string;
updatedAt: string;
}
interface CreateWebhookData$1 {
url: string;
events: string[];
secret?: string;
}
interface UpdateWebhookData$1 {
url?: string;
events?: string[];
status?: 'active' | 'inactive';
}
interface WebhookFilters$1 extends PaginationParams {
status?: string;
event?: string;
search?: string;
}
interface BulkOperation<T> {
success: boolean;
processed: number;
errors: Array<{
index: number;
error: string;
data: T;
}>;
}
interface Statistics {
totalStudents: number;
totalTeachers: number;
totalCourses: number;
totalEnrollments: number;
averageGPA: number;
attendanceRate: number;
}
interface CampusIQConfig {
apiKey: string;
schoolId: string;
environment?: 'production' | 'sandbox';
baseURL?: string;
timeout?: number;
retries?: number;
debug?: boolean;
}
interface CreateStudentData {
firstName: string;
lastName: string;
email: string;
grade: string;
dateOfBirth: string;
enrollmentDate?: string;
address: {
street: string;
city: string;
state: string;
zipCode: string;
country?: string;
};
parentContact: {
name: string;
email: string;
phone: string;
relationship?: string;
};
emergencyContacts?: Array<{
name: string;
email: string;
phone: string;
relationship?: string;
}>;
medicalInfo?: {
allergies?: string[];
medications?: string[];
conditions?: string[];
};
}
interface UpdateStudentData extends Partial<CreateStudentData> {
status?: 'active' | 'inactive' | 'graduated';
}
interface StudentFilters extends PaginationParams {
grade?: string;
status?: 'active' | 'inactive' | 'graduated';
search?: string;
enrollmentDateFrom?: string;
enrollmentDateTo?: string;
}
declare class StudentsResource extends BaseResource {
/**
* List all students with optional filtering and pagination
*/
list(filters?: StudentFilters): Promise<ListResponse<Student>>;
/**
* Get a specific student by ID
*/
get(studentId: string): Promise<Student>;
/**
* Create a new student
*/
create(data: CreateStudentData): Promise<Student>;
/**
* Update an existing student
*/
update(studentId: string, data: UpdateStudentData): Promise<Student>;
/**
* Delete a student
*/
delete(studentId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Get student's enrollment history
*/
getEnrollments(studentId: string, filters?: PaginationParams): Promise<ListResponse<any>>;
/**
* Get student's grades
*/
getGrades(studentId: string, filters?: PaginationParams & {
courseId?: string;
semester?: string;
}): Promise<ListResponse<any>>;
/**
* Get student's attendance records
*/
getAttendance(studentId: string, filters?: PaginationParams & {
courseId?: string;
dateFrom?: string;
dateTo?: string;
}): Promise<ListResponse<any>>;
/**
* Bulk create students
*/
bulkCreate(students: CreateStudentData[]): Promise<{
created: Student[];
errors: any[];
}>;
/**
* Search students by name or email
*/
search(query: string, filters?: Omit<StudentFilters, 'search'>): Promise<ListResponse<Student>>;
}
interface CreateTeacherData {
firstName: string;
lastName: string;
email: string;
department: string;
subjects: string[];
hireDate: string;
qualifications: string[];
address?: {
street: string;
city: string;
state: string;
zipCode: string;
country?: string;
};
phone?: string;
}
interface UpdateTeacherData extends Partial<CreateTeacherData> {
status?: 'active' | 'inactive';
}
interface TeacherFilters extends PaginationParams {
department?: string;
status?: 'active' | 'inactive';
search?: string;
subject?: string;
hireDateFrom?: string;
hireDateTo?: string;
}
declare class TeachersResource extends BaseResource {
/**
* List all teachers with optional filtering and pagination
*/
list(filters?: TeacherFilters): Promise<ListResponse<Teacher>>;
/**
* Get a specific teacher by ID
*/
get(teacherId: string): Promise<Teacher>;
/**
* Create a new teacher
*/
create(data: CreateTeacherData): Promise<Teacher>;
/**
* Update an existing teacher
*/
update(teacherId: string, data: UpdateTeacherData): Promise<Teacher>;
/**
* Delete a teacher
*/
delete(teacherId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Get teacher's courses
*/
getCourses(teacherId: string, filters?: PaginationParams & {
semester?: string;
}): Promise<ListResponse<any>>;
/**
* Get teacher's schedule
*/
getSchedule(teacherId: string, filters?: {
semester?: string;
week?: string;
}): Promise<any>;
/**
* Search teachers by name, email, or department
*/
search(query: string, filters?: Omit<TeacherFilters, 'search'>): Promise<ListResponse<Teacher>>;
}
interface CreateCourseData {
name: string;
code: string;
description: string;
credits: number;
department: string;
teacherId: string;
schedule: {
days: string[];
startTime: string;
endTime: string;
room: string;
};
semester: string;
maxStudents?: number;
prerequisites?: string[];
}
interface UpdateCourseData extends Partial<CreateCourseData> {
status?: 'active' | 'inactive';
}
interface CourseFilters extends PaginationParams {
department?: string;
semester?: string;
teacherId?: string;
status?: 'active' | 'inactive';
search?: string;
credits?: number;
}
declare class CoursesResource extends BaseResource {
/**
* List all courses with optional filtering and pagination
*/
list(filters?: CourseFilters): Promise<ListResponse<Course>>;
/**
* Get a specific course by ID
*/
get(courseId: string): Promise<Course>;
/**
* Create a new course
*/
create(data: CreateCourseData): Promise<Course>;
/**
* Update an existing course
*/
update(courseId: string, data: UpdateCourseData): Promise<Course>;
/**
* Delete a course
*/
delete(courseId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Get course enrollments
*/
getEnrollments(courseId: string, filters?: PaginationParams): Promise<ListResponse<any>>;
/**
* Get course grades
*/
getGrades(courseId: string, filters?: PaginationParams & {
studentId?: string;
}): Promise<ListResponse<any>>;
/**
* Get course attendance
*/
getAttendance(courseId: string, filters?: PaginationParams & {
date?: string;
status?: string;
}): Promise<ListResponse<any>>;
/**
* Search courses by name, code, or description
*/
search(query: string, filters?: Omit<CourseFilters, 'search'>): Promise<ListResponse<Course>>;
}
interface CreateEnrollmentData {
studentId: string;
courseId: string;
semester: string;
enrollmentDate?: string;
}
interface UpdateEnrollmentData {
status?: 'enrolled' | 'dropped' | 'completed';
grade?: string;
}
interface EnrollmentFilters extends PaginationParams {
studentId?: string;
courseId?: string;
semester?: string;
status?: 'enrolled' | 'dropped' | 'completed';
enrollmentDateFrom?: string;
enrollmentDateTo?: string;
}
declare class EnrollmentsResource extends BaseResource {
/**
* List all enrollments with optional filtering and pagination
*/
list(filters?: EnrollmentFilters): Promise<ListResponse<Enrollment>>;
/**
* Get a specific enrollment by ID
*/
get(enrollmentId: string): Promise<Enrollment>;
/**
* Create a new enrollment
*/
create(data: CreateEnrollmentData): Promise<Enrollment>;
/**
* Update an existing enrollment
*/
update(enrollmentId: string, data: UpdateEnrollmentData): Promise<Enrollment>;
/**
* Delete an enrollment
*/
delete(enrollmentId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Bulk enroll students in a course
*/
bulkEnroll(courseId: string, studentIds: string[], semester: string): Promise<{
created: Enrollment[];
errors: any[];
}>;
/**
* Drop a student from a course
*/
drop(enrollmentId: string, reason?: string): Promise<Enrollment>;
/**
* Complete an enrollment (mark as completed)
*/
complete(enrollmentId: string, finalGrade?: string): Promise<Enrollment>;
}
interface CreateGradeData {
studentId: string;
courseId: string;
assignmentName: string;
score: number;
maxScore: number;
weight: number;
category: 'homework' | 'quiz' | 'exam' | 'project' | 'participation';
gradedDate?: string;
notes?: string;
}
interface UpdateGradeData extends Partial<Omit<CreateGradeData, 'studentId' | 'courseId'>> {
}
interface GradeFilters extends PaginationParams {
studentId?: string;
courseId?: string;
category?: 'homework' | 'quiz' | 'exam' | 'project' | 'participation';
gradedDateFrom?: string;
gradedDateTo?: string;
minScore?: number;
maxScore?: number;
}
declare class GradesResource extends BaseResource {
/**
* List all grades with optional filtering and pagination
*/
list(filters?: GradeFilters): Promise<ListResponse<Grade>>;
/**
* Get a specific grade by ID
*/
get(gradeId: string): Promise<Grade>;
/**
* Create a new grade
*/
create(data: CreateGradeData): Promise<Grade>;
/**
* Update an existing grade
*/
update(gradeId: string, data: UpdateGradeData): Promise<Grade>;
/**
* Delete a grade
*/
delete(gradeId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Bulk create grades for multiple students
*/
bulkCreate(grades: CreateGradeData[]): Promise<{
created: Grade[];
errors: any[];
}>;
/**
* Get grade statistics for a course
*/
getCourseStats(courseId: string, filters?: {
category?: string;
}): Promise<{
average: number;
median: number;
highest: number;
lowest: number;
distribution: Record<string, number>;
}>;
/**
* Get grade statistics for a student
*/
getStudentStats(studentId: string, filters?: {
courseId?: string;
semester?: string;
}): Promise<{
gpa: number;
totalCredits: number;
courseGrades: Array<{
courseId: string;
courseName: string;
grade: string;
credits: number;
}>;
}>;
}
interface CreateAttendanceData {
studentId: string;
courseId: string;
date: string;
status: 'present' | 'absent' | 'tardy' | 'excused';
notes?: string;
recordedBy: string;
}
interface UpdateAttendanceData extends Partial<Omit<CreateAttendanceData, 'studentId' | 'courseId' | 'date'>> {
}
interface AttendanceFilters extends PaginationParams {
studentId?: string;
courseId?: string;
status?: 'present' | 'absent' | 'tardy' | 'excused';
startDate?: string;
endDate?: string;
recordedBy?: string;
}
declare class AttendanceResource extends BaseResource {
/**
* List all attendance records with optional filtering and pagination
*/
list(filters?: AttendanceFilters): Promise<ListResponse<Attendance>>;
/**
* Get a specific attendance record by ID
*/
getAttendance(attendanceId: string): Promise<Attendance>;
/**
* Create a new attendance record
*/
createAttendance(data: CreateAttendanceData): Promise<Attendance>;
/**
* Update an existing attendance record
*/
updateAttendance(attendanceId: string, data: UpdateAttendanceData): Promise<Attendance>;
/**
* Delete an attendance record
*/
deleteAttendance(attendanceId: string): Promise<{
success: boolean;
message: string;
}>;
/**
* Bulk create attendance records
*/
bulkCreate(records: CreateAttendanceData[]): Promise<{
created: Attendance[];
errors: any[];
}>;
/**
* Get attendance statistics for a student
*/
getStudentStats(studentId: string, filters?: {
courseId?: string;
startDate?: string;
endDate?: string;
}): Promise<any>;
/**
* Get attendance statistics for a course
*/
getCourseStats(courseId: string, filters?: {
date?: string;
startDate?: string;
endDate?: string;
}): Promise<any>;
/**
* Mark attendance for multiple students
*/
markBulkAttendance(courseId: string, date: string, records: Array<{
studentId: string;
status: 'present' | 'absent' | 'tardy' | 'excused';
notes?: string;
}>): Promise<{
created: Attendance[];
errors: any[];
}>;
}
interface CreateWebhookData {
url: string;
events: string[];
secret?: string;
}
interface UpdateWebhookData extends Partial<CreateWebhookData> {
status?: 'active' | 'inactive';
}
interface WebhookFilters extends PaginationParams {
status?: 'active' | 'inactive';
event?: string;
}
declare class WebhooksResource extends BaseResource {
list(filters?: WebhookFilters): Promise<ListResponse<Webhook>>;
get(webhookId: string): Promise<Webhook>;
create(data: CreateWebhookData): Promise<Webhook>;
update(webhookId: string, data: UpdateWebhookData): Promise<Webhook>;
delete(webhookId: string): Promise<{
success: boolean;
message: string;
}>;
test(webhookId: string): Promise<{
success: boolean;
response: any;
}>;
getLogs(webhookId: string, filters?: PaginationParams & {
startDate?: string;
endDate?: string;
status?: 'success' | 'failed';
}): Promise<ListResponse<any>>;
verifySignature(payload: string, signature: string, secret: string): boolean;
}
declare class CampusIQClient {
readonly apiKey: string;
readonly schoolId: string;
readonly baseURL: string;
readonly version: string;
readonly timeout: number;
readonly debug: boolean;
students: StudentsResource;
teachers: TeachersResource;
courses: CoursesResource;
enrollments: EnrollmentsResource;
grades: GradesResource;
attendance: AttendanceResource;
webhooks: WebhooksResource;
constructor(config: CampusIQConfig);
static verifyWebhook(payload: any, signature: string, secret: string): boolean;
}
declare class CampusIQError extends Error {
readonly statusCode: number;
readonly code: string;
readonly requestId?: string;
constructor(message: string, statusCode?: number, code?: string, requestId?: string);
toJSON(): Record<string, any>;
static isNetworkError(error: any): boolean;
static isAuthenticationError(error: any): boolean;
static isAuthorizationError(error: any): boolean;
static isNotFoundError(error: any): boolean;
static isRateLimitError(error: any): boolean;
static isServerError(error: any): boolean;
}
export { AttendanceResource, BaseResource, CampusIQClient, CampusIQError, CoursesResource, EnrollmentsResource, GradesResource, StudentsResource, TeachersResource, WebhooksResource };
export type { Attendance, AttendanceFilters$1 as AttendanceFilters, BulkOperation, CampusIQConfig, Course, CourseFilters$1 as CourseFilters, CreateAttendanceData$1 as CreateAttendanceData, CreateCourseData$1 as CreateCourseData, CreateEnrollmentData$1 as CreateEnrollmentData, CreateGradeData$1 as CreateGradeData, CreateStudentData$1 as CreateStudentData, CreateTeacherData$1 as CreateTeacherData, CreateWebhookData$1 as CreateWebhookData, Enrollment, EnrollmentFilters$1 as EnrollmentFilters, Grade, GradeFilters$1 as GradeFilters, ListResponse, PaginationParams, Statistics, Student, StudentFilters$1 as StudentFilters, Teacher, TeacherFilters$1 as TeacherFilters, UpdateAttendanceData$1 as UpdateAttendanceData, UpdateCourseData$1 as UpdateCourseData, UpdateEnrollmentData$1 as UpdateEnrollmentData, UpdateGradeData$1 as UpdateGradeData, UpdateStudentData$1 as UpdateStudentData, UpdateTeacherData$1 as UpdateTeacherData, UpdateWebhookData$1 as UpdateWebhookData, Webhook, WebhookFilters$1 as WebhookFilters };