This commit is contained in:
59
G102-sequence/sdk/package/dist/sdk-iframe/SdkIframeCore.d.ts
vendored
Normal file
59
G102-sequence/sdk/package/dist/sdk-iframe/SdkIframeCore.d.ts
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* SDK Iframe Core
|
||||
* Chạy trong hidden iframe riêng biệt
|
||||
*
|
||||
* Responsibilities:
|
||||
* - Receive data từ parent (preview mode)
|
||||
* - Fetch data từ API (live mode)
|
||||
* - Store answers securely
|
||||
* - Verify answers locally (fast feedback)
|
||||
* - Sync với server (background)
|
||||
* - Report results
|
||||
*/
|
||||
interface SdkIframeConfig {
|
||||
debug?: boolean;
|
||||
allowedOrigins?: string[];
|
||||
}
|
||||
export declare class SdkIframeCore {
|
||||
private config;
|
||||
private boundMessageHandler;
|
||||
private mode;
|
||||
private gameCode;
|
||||
private assignmentId;
|
||||
private studentId;
|
||||
private apiBaseUrl;
|
||||
private authToken;
|
||||
private originalItems;
|
||||
private clientItems;
|
||||
private sanitizedItems;
|
||||
private userAnswers;
|
||||
private completedQuestions;
|
||||
private isInitialized;
|
||||
private parentOrigin;
|
||||
constructor(config?: SdkIframeConfig);
|
||||
private setupMessageListener;
|
||||
private handleMessage;
|
||||
private isAllowedOrigin;
|
||||
private handleInit;
|
||||
private handlePushData;
|
||||
private handleCheckAnswer;
|
||||
/**
|
||||
* Submit answer to server and wait for result (Live mode)
|
||||
*/
|
||||
private submitAnswerToServer;
|
||||
private handleGetResult;
|
||||
private handleRetrySync;
|
||||
private processData;
|
||||
private fetchLiveData;
|
||||
private sendToParent;
|
||||
private sendError;
|
||||
private log;
|
||||
destroy(): void;
|
||||
}
|
||||
declare global {
|
||||
interface Window {
|
||||
SdkIframe: SdkIframeCore;
|
||||
}
|
||||
}
|
||||
export {};
|
||||
//# sourceMappingURL=SdkIframeCore.d.ts.map
|
||||
1
G102-sequence/sdk/package/dist/sdk-iframe/SdkIframeCore.d.ts.map
vendored
Normal file
1
G102-sequence/sdk/package/dist/sdk-iframe/SdkIframeCore.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"SdkIframeCore.d.ts","sourceRoot":"","sources":["../../src/sdk-iframe/SdkIframeCore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoCH,UAAU,eAAe;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAMD,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,mBAAmB,CAAgD;IAC3E,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,SAAS,CAAc;IAG/B,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,GAAE,eAAoB;IAcxC,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,eAAe;YAWT,UAAU;IA0CxB,OAAO,CAAC,cAAc;YAkBR,iBAAiB;IA8H/B;;OAEG;YACW,oBAAoB;IA2ClC,OAAO,CAAC,eAAe;YAuBT,eAAe;IA6C7B,OAAO,CAAC,WAAW;YAuCL,aAAa;IAyC3B,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,GAAG;IAsBX,OAAO,IAAI,IAAI;CASlB;AAMD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,SAAS,EAAE,aAAa,CAAC;KAC5B;CACJ"}
|
||||
7
G102-sequence/sdk/package/dist/sdk-iframe/index.d.ts
vendored
Normal file
7
G102-sequence/sdk/package/dist/sdk-iframe/index.d.ts
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* SDK Iframe exports
|
||||
*/
|
||||
import { SdkIframeCore } from './SdkIframeCore';
|
||||
export * from './types';
|
||||
export { SdkIframeCore };
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
1
G102-sequence/sdk/package/dist/sdk-iframe/index.d.ts.map
vendored
Normal file
1
G102-sequence/sdk/package/dist/sdk-iframe/index.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk-iframe/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
||||
1
G102-sequence/sdk/package/dist/sdk-iframe/index.html
vendored
Normal file
1
G102-sequence/sdk/package/dist/sdk-iframe/index.html
vendored
Normal file
@@ -0,0 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Sena SDK Iframe</title><style>body{margin:0;padding:0;display:none}</style></head><body><script type="module">import"./SdkIframeCore.js";console.log("[SdkIframe] Loaded")</script><script defer="defer" src="sdk-e4180185b9b6b9a02ad3.js"></script></body></html>
|
||||
1
G102-sequence/sdk/package/dist/sdk-iframe/sdk-e4180185b9b6b9a02ad3.js
vendored
Normal file
1
G102-sequence/sdk/package/dist/sdk-iframe/sdk-e4180185b9b6b9a02ad3.js
vendored
Normal file
File diff suppressed because one or more lines are too long
110
G102-sequence/sdk/package/dist/sdk-iframe/types.d.ts
vendored
Normal file
110
G102-sequence/sdk/package/dist/sdk-iframe/types.d.ts
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* SDK Iframe Message Types
|
||||
* Shared types cho SDK Iframe và Game Bridge
|
||||
*/
|
||||
export declare const SDK_MESSAGE_TYPES: {
|
||||
readonly SDK_INIT: "SDK_INIT";
|
||||
readonly SDK_PUSH_DATA: "SDK_PUSH_DATA";
|
||||
readonly SDK_CHECK_ANSWER: "SDK_CHECK_ANSWER";
|
||||
readonly SDK_GET_RESULT: "SDK_GET_RESULT";
|
||||
readonly SDK_RETRY_SYNC: "SDK_RETRY_SYNC";
|
||||
readonly SDK_READY: "SDK_READY";
|
||||
readonly SDK_DATA_READY: "SDK_DATA_READY";
|
||||
readonly SDK_ANSWER_RESULT: "SDK_ANSWER_RESULT";
|
||||
readonly SDK_SYNC_STATUS: "SDK_SYNC_STATUS";
|
||||
readonly SDK_SYNC_ERROR: "SDK_SYNC_ERROR";
|
||||
readonly SDK_FINAL_RESULT: "SDK_FINAL_RESULT";
|
||||
readonly SDK_ERROR: "SDK_ERROR";
|
||||
};
|
||||
export type SdkMessageType = typeof SDK_MESSAGE_TYPES[keyof typeof SDK_MESSAGE_TYPES];
|
||||
/** SDK_INIT - Khởi tạo SDK */
|
||||
export interface SdkInitPayload {
|
||||
mode: 'preview' | 'live' | 'dev';
|
||||
game_code: string;
|
||||
assignment_id?: string | number;
|
||||
student_id?: string;
|
||||
api_base_url?: string;
|
||||
auth_token?: string;
|
||||
}
|
||||
/** SDK_PUSH_DATA - Push data (preview mode) */
|
||||
export interface SdkPushDataPayload {
|
||||
data: any[];
|
||||
completed_question_ids?: Array<{
|
||||
id: string;
|
||||
result: 0 | 1;
|
||||
}>;
|
||||
}
|
||||
/** SDK_CHECK_ANSWER - Check đáp án */
|
||||
export interface SdkCheckAnswerPayload {
|
||||
question_id: string;
|
||||
choice: any;
|
||||
time_spent?: number;
|
||||
}
|
||||
/** SDK_READY - SDK sẵn sàng */
|
||||
export interface SdkReadyPayload {
|
||||
mode: 'preview' | 'live' | 'dev';
|
||||
game_code: string;
|
||||
}
|
||||
/** SDK_DATA_READY - Data đã sẵn sàng (sanitized) */
|
||||
export interface SdkDataReadyPayload {
|
||||
items: any[];
|
||||
total_questions: number;
|
||||
completed_count: number;
|
||||
resume_data?: Array<{
|
||||
id: string;
|
||||
result: 0 | 1;
|
||||
}>;
|
||||
}
|
||||
/** SDK_ANSWER_RESULT - Kết quả verify local */
|
||||
export interface SdkAnswerResultPayload {
|
||||
question_id: string;
|
||||
correct: boolean;
|
||||
score: number;
|
||||
synced: boolean;
|
||||
}
|
||||
/** SDK_SYNC_STATUS - Đã sync server OK */
|
||||
export interface SdkSyncStatusPayload {
|
||||
question_id: string;
|
||||
synced: true;
|
||||
server_result?: {
|
||||
correct: boolean;
|
||||
score: number;
|
||||
};
|
||||
}
|
||||
/** SDK_SYNC_ERROR - Lỗi sync server */
|
||||
export interface SdkSyncErrorPayload {
|
||||
question_id: string;
|
||||
error: string;
|
||||
error_code?: number;
|
||||
retryable: boolean;
|
||||
}
|
||||
/** SDK_FINAL_RESULT - Kết quả cuối cùng */
|
||||
export interface SdkFinalResultPayload {
|
||||
score: number;
|
||||
total: number;
|
||||
correct: number;
|
||||
wrong: number;
|
||||
synced: boolean;
|
||||
details: Array<{
|
||||
question_id: string;
|
||||
choice: any;
|
||||
correct: boolean;
|
||||
synced: boolean;
|
||||
time_spent?: number;
|
||||
}>;
|
||||
}
|
||||
/** SDK_ERROR - Lỗi chung */
|
||||
export interface SdkErrorPayload {
|
||||
code: string;
|
||||
message: string;
|
||||
details?: any;
|
||||
}
|
||||
export interface SdkMessage<T = any> {
|
||||
type: SdkMessageType;
|
||||
payload: T;
|
||||
timestamp: number;
|
||||
request_id?: string;
|
||||
}
|
||||
export declare function createSdkMessage<T>(type: SdkMessageType, payload: T, requestId?: string): SdkMessage<T>;
|
||||
export declare function isSdkMessage(data: any): data is SdkMessage;
|
||||
//# sourceMappingURL=types.d.ts.map
|
||||
1
G102-sequence/sdk/package/dist/sdk-iframe/types.d.ts.map
vendored
Normal file
1
G102-sequence/sdk/package/dist/sdk-iframe/types.d.ts.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk-iframe/types.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user