import type * as tg from "generic-type-guard"; import type { IframeEvent, IframeEventMap, IframeQuery, IframeQueryMap, IframeResponseEventMap } from '../Events/IframeEvent'; import type {IframeQueryWrapper} from "../Events/IframeEvent"; export function sendToWorkadventure(content: IframeEvent) { window.parent.postMessage(content, "*") } let queryNumber = 0; export const answerPromises = new Map)) => void, // eslint-disable-next-line @typescript-eslint/no-explicit-any reject: (reason?: any) => void }>(); export function queryWorkadventure(content: IframeQuery): Promise { return new Promise((resolve, reject) => { window.parent.postMessage({ id: queryNumber, query: content } as IframeQueryWrapper, "*"); answerPromises.set(queryNumber, { resolve, reject }); queryNumber++; }); } type GuardedType> = Guard extends tg.TypeGuard ? T : never export interface IframeCallback> { typeChecker: Guard, callback: (payloadData: T) => void } export interface IframeCallbackContribution extends IframeCallback { type: Key } /** * !! be aware that the implemented attributes (addMethodsAtRoot and subObjectIdentifier) must be readonly * * */ export abstract class IframeApiContribution>, }> { abstract callbacks: T["callbacks"] }