"use strict"; /** * Game API Client Kit * Standardized API client for communicating with Game Backend */ Object.defineProperty(exports, "__esModule", { value: true }); exports.GameApiClient = void 0; class GameApiClient { constructor(config) { this.config = config; } async request(method, endpoint, body) { const url = `${this.config.baseUrl}${endpoint}`; const headers = { 'Content-Type': 'application/json', ...(this.config.getHeaders ? this.config.getHeaders() : {}) }; try { const res = await fetch(url, { method, headers, body: body ? JSON.stringify(body) : undefined }); if (!res.ok) { const errorBody = await res.text(); let errorMessage = `API Error ${res.status}: ${res.statusText}`; let errorCode; try { const jsonError = JSON.parse(errorBody); // Capture error code from response if (jsonError.code !== undefined) { errorCode = jsonError.code; } if (jsonError.message) errorMessage += ` - ${jsonError.message}`; else if (jsonError.error) errorMessage += ` - ${jsonError.error}`; } catch (e) { if (errorBody && errorBody.length < 200) errorMessage += ` - ${errorBody}`; } // Throw error object with code and message const error = new Error(errorMessage); error.code = errorCode; error.httpStatus = res.status; throw error; } return await res.json(); } catch (error) { console.error('[GameApiClient] Request failed:', error); throw error; } } async getGameWithProgress(assignmentId, studentId, refresh = false) { return this.request('GET', `/submissions/live/init/${assignmentId}/${studentId}${refresh ? '?refresh=1' : ''}`); } async startLiveSession(assignmentId, studentId, refresh = false) { return this.request('POST', `/submissions/live/start${refresh ? '?refresh=1' : ''}`, { assignment_id: assignmentId, student_id: studentId }); } async submitAnswer(assignmentId, studentId, questionId, answer, timeSpent = 5, isTimeout = false) { return this.request('POST', '/submissions/live/answer', { assignment_id: assignmentId, student_id: studentId, question_id: questionId, selected_answer: answer, time_spent: timeSpent, is_timeout: isTimeout }); } async completeSession(assignmentId, studentId) { return this.request('POST', '/submissions/live/complete', { assignment_id: assignmentId, student_id: studentId }); } async getLeaderboard(assignmentId, studentId) { return this.request('GET', `/submissions/leaderboard/${assignmentId}?student_id=${studentId}`); } } exports.GameApiClient = GameApiClient; //# sourceMappingURL=api.js.map