/**
* SenaGame SDK Loader
*
* Ready-to-use interface for game developers.
* Handles SDK iframe creation, communication, and lifecycle.
*
* Usage:
* ```html
*
*
* ```
*
* @version 1.0.0
*/
export interface SenaGameConfig {
/** Path to SDK iframe HTML file (can be versioned) */
iframePath: string;
/** Game mode: 'live' | 'preview' */
mode: 'live' | 'preview';
/** Game code for identification */
gameCode: string;
/** Enable debug logging */
debug?: boolean;
/** Timeout for SDK initialization (ms) */
timeout?: number;
/** Custom iframe style */
iframeStyle?: string;
onReady?: (sdk: SenaGameSDK) => void;
onDataReady?: (payload: DataReadyPayload) => void;
onAnswerResult?: (result: AnswerResultPayload) => void;
onGameComplete?: (result: GameCompletePayload) => void;
onSessionStart?: (session: SessionStartPayload) => void;
onError?: (error: Error) => void;
}
export interface GameItem {
id: string;
question: string;
options?: string[];
answer?: string | number;
[key: string]: any;
}
export interface GameData {
items: GameItem[];
[key: string]: any;
}
export interface AnswerPayload {
questionId: string;
selectedAnswer: string | number | string[];
timeSpent?: number;
}
export interface DataReadyPayload {
items: GameItem[];
totalQuestions: number;
completedCount: number;
resumeData?: Array<{
id: string;
result: 0 | 1;
}>;
}
export interface AnswerResultPayload {
questionId: string;
isCorrect: boolean;
correctAnswer: string | number;
score: number;
currentScore: number;
totalAnswered: number;
}
export interface GameCompletePayload {
success: boolean;
finalScore: number;
correctCount: number;
totalQuestions: number;
wrongCount: number;
total: number;
}
export interface SessionStartPayload {
assignmentId: number;
userId: string;
gameId: string;
startedAt: string;
}
export declare class SenaGameSDK {
private config;
private iframe;
private isReady;
private isDataReady;
private pendingMessages;
private initPromise;
private initResolver;
private timeoutId;
/** SDK version */
static readonly VERSION = "1.0.0";
constructor(config: SenaGameConfig);
/**
* Push game data to SDK
*/
pushData(data: any): void;
/**
* Submit an answer
*/
submitAnswer(answer: AnswerPayload): void;
/**
* Complete the game
*/
completeGame(): void;
/**
* Get current status
*/
getStatus(): void;
/**
* Wait for SDK to be ready
*/
ready(): Promise;
/**
* Check if SDK is ready
*/
get sdkReady(): boolean;
/**
* Check if data is ready
*/
get dataReady(): boolean;
/**
* Destroy the SDK instance
*/
destroy(): void;
private _init;
private _createIframe;
private _send;
private _handleMessage;
private _onSDKReady;
private _onDataReady;
private _onAnswerResult;
private _onGameComplete;
private _onSessionStart;
private _error;
private _log;
}
export default SenaGameSDK;
//# sourceMappingURL=SenaGameSDK.d.ts.map