/** * Game Bridge * Wrapper đơn giản cho game developers để giao tiếp với SDK Iframe * * Usage: * ```typescript * import { GameBridge } from 'game-iframe-sdk/game-bridge'; * * const bridge = new GameBridge({ * sdkIframeUrl: 'https://sdk.sena.tech/sdk-iframe.html', * debug: true, * }); * * // Init * await bridge.init({ * mode: 'preview', * game_code: 'G001', * }); * * // Listen for data * bridge.on('dataReady', (data) => { * renderGame(data.items); * }); * * // Check answer * bridge.checkAnswer('q1', userChoice).then(result => { * showFeedback(result.correct); * }); * ``` */ import { SdkInitPayload, SdkPushDataPayload, SdkReadyPayload, SdkDataReadyPayload, SdkAnswerResultPayload, SdkSyncStatusPayload, SdkSyncErrorPayload, SdkFinalResultPayload, SdkErrorPayload } from '../sdk-iframe/types'; export interface GameBridgeConfig { sdkIframeUrl: string; debug?: boolean; timeout?: number; } export interface GameBridgeEvents { ready: SdkReadyPayload; dataReady: SdkDataReadyPayload; answerResult: SdkAnswerResultPayload; syncStatus: SdkSyncStatusPayload; syncError: SdkSyncErrorPayload; finalResult: SdkFinalResultPayload; error: SdkErrorPayload; } type EventHandler = (data: T) => void; export declare class GameBridge { private config; private sdkIframe; private sdkOrigin; private isReady; private handlers; private pendingRequests; private requestCounter; constructor(config: GameBridgeConfig); /** * Create SDK Iframe and initialize */ init(payload: SdkInitPayload): Promise; /** * Push data (preview mode) */ pushData(payload: SdkPushDataPayload): Promise; /** * Check answer - returns local result immediately * Also triggers server sync in background */ checkAnswer(questionId: string, choice: any, timeSpent?: number): Promise; /** * Get final result */ getFinalResult(): Promise; /** * Retry sync for a question */ retrySync(questionId: string): Promise; /** * Subscribe to events */ on(event: K, handler: EventHandler): () => void; /** * Unsubscribe from events */ off(event: K, handler: EventHandler): void; /** * Check if SDK is ready */ isSdkReady(): boolean; /** * Destroy bridge and cleanup */ destroy(): void; private setupMessageListener; private handleMessage; private emit; private sendRequest; private log; } /** * Get or create GameBridge instance */ export declare function getGameBridge(config?: GameBridgeConfig): GameBridge; /** * Destroy GameBridge instance */ export declare function destroyGameBridge(): void; export {}; //# sourceMappingURL=GameBridge.d.ts.map