Files
sentence1/G102-sequence/sdk/package/dist/kit/api.js
lubukhu 65fd0158a3
All checks were successful
Deploy to Production / deploy (push) Successful in 8s
up
2026-01-24 13:35:11 +07:00

86 lines
3.3 KiB
JavaScript

"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