import { IAuthenData } from "../types/AuthData"; import { IMiniAppWrapper } from "./IMiniAppWrapper"; export enum WuffiMiniAppAction { REQUEST_AUTH_DATA = "REQUEST_AUTH_DATA", SEND_AUTH_DATA = "SEND_AUTH_DATA", CLOSE_GAME = "CLOSE_GAME", NAVIGATE_TO_BUY_MORE_TREATS = "NAVIGATE_TO_BUY_MORE_TREATS", } export class MiniAppWrapper implements IMiniAppWrapper { requestAuthData(): Promise { return new Promise((resolve, reject) => { window.parent.postMessage( { action: WuffiMiniAppAction.REQUEST_AUTH_DATA }, "*" ); window.addEventListener("message", function authListener(event) { if ( event.data && event.data.action === WuffiMiniAppAction.SEND_AUTH_DATA ) { window.removeEventListener("message", authListener); // Clean up listener resolve(event.data.payload); } }); setTimeout(() => reject(new Error("Auth data request timeout")), 5000); }); } closeMiniApp(): Promise { window.parent.postMessage({ action: WuffiMiniAppAction.CLOSE_GAME }, "*"); return Promise.resolve(); } navigateToBuyMoreTreats(): Promise { window.parent.postMessage( { action: WuffiMiniAppAction.NAVIGATE_TO_BUY_MORE_TREATS }, "*" ); return Promise.resolve(); } } export const miniAppWrapper = new MiniAppWrapper();