import type { IframeEvent, IframeEventMap, IframeResponseEventMap } from '../Events/IframeEvent'; import type * as tg from "generic-type-guard"; export type PossibleSubobjects = "zone" | "chat" | "ui" export function sendToWorkadventure(content: IframeEvent) { window.parent.postMessage(content, "*") } type GuardedType> = Guard extends tg.TypeGuard ? T : never export function apiCallback>(callbackData: IframeCallbackContribution) { return callbackData } export interface IframeCallbackContribution, T = GuardedType> { type: keyof IframeResponseEventMap, typeChecker: Guard, callback: (payloadData: T) => void } /** * !! be aware that the implemented attributes (addMethodsAtRoot and subObjectIdentifier) must be readonly * * */ export abstract class IframeApiContribution>>, readonly subObjectIdentifier: PossibleSubobjects, readonly addMethodsAtRoot: boolean | undefined }> { abstract callbacks: T["callbacks"] /** * @deprecated this is only there for backwards compatibility on new apis this should be set to false or ignored */ addMethodsAtRoot = false abstract readonly subObjectIdentifier: T["subObjectIdentifier"] }