/** * Game Iframe SDK - Main Entry Point * * @packageDocumentation * @module game-iframe-sdk * * Architecture: * - types.ts: Type definitions * - mappers.ts: Data transformation/mapping * - EventEmitter.ts: Simple typed event emitter * - MessageHandler.ts: Handle incoming messages from iframe * - MessageSender.ts: Send messages to iframe * - GameIframeSDK.ts: Main SDK (composes above layers) * - useGameIframeSDK.ts: React hook * * @example Browser/Vanilla JS * ```typescript * import { GameIframeSDK } from 'game-iframe-sdk'; * * const sdk = new GameIframeSDK({ * iframeOrigin: 'http://senaai.vn:1357', * debug: true * }); * * sdk.setIframe(document.getElementById('gameIframe')); * * sdk.on('gameReady', () => { * sdk.sendGameData({ game_id: 'xxx', user_id: 'yyy', questions: [...] }); * }); * ``` * * @example React * ```tsx * import { useGameIframeSDK } from 'game-iframe-sdk'; * * function GamePlayer() { * const iframeRef = useRef(null); * * const { isReady, sendGameData } = useGameIframeSDK({ * iframeRef, * iframeOrigin: 'http://senaai.vn:1357', * onAnswerReport: (data) => submitToServer(data), * }); * * return