up
All checks were successful
Deploy to Production / deploy (push) Successful in 8s

This commit is contained in:
lubukhu
2026-01-24 13:35:11 +07:00
parent 6c3e93636e
commit 65fd0158a3
145 changed files with 10262 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
/**
* 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<T> = (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<SdkReadyPayload>;
/**
* Push data (preview mode)
*/
pushData(payload: SdkPushDataPayload): Promise<SdkDataReadyPayload>;
/**
* Check answer - returns local result immediately
* Also triggers server sync in background
*/
checkAnswer(questionId: string, choice: any, timeSpent?: number): Promise<SdkAnswerResultPayload>;
/**
* Get final result
*/
getFinalResult(): Promise<SdkFinalResultPayload>;
/**
* Retry sync for a question
*/
retrySync(questionId: string): Promise<SdkSyncStatusPayload>;
/**
* Subscribe to events
*/
on<K extends keyof GameBridgeEvents>(event: K, handler: EventHandler<GameBridgeEvents[K]>): () => void;
/**
* Unsubscribe from events
*/
off<K extends keyof GameBridgeEvents>(event: K, handler: EventHandler<GameBridgeEvents[K]>): 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