UNPKG

penpal

Version:

A promise-based library for communicating with iframes via postMessage.

104 lines (103 loc) 2.67 kB
import { ErrorCode, MessageType, Resolution } from './enums'; /** * An ACK handshake message. */ export declare type AckMessage = { penpal: MessageType.Ack; methodNames: string[]; }; /** * A mapped type to convert non async methods into async methods and exclude any non function properties. */ export declare type AsyncMethodReturns<T, K extends keyof T = FunctionPropertyNames<T>> = { [KK in K]: T[KK] extends (...args: any[]) => PromiseLike<any> ? T[KK] : T[KK] extends (...args: infer A) => infer R ? (...args: A) => Promise<R> : T[KK]; }; /** * A method call message. */ export declare type CallMessage = { penpal: MessageType.Call; id: number; methodName: string; args: any[]; }; /** * Methods that may be called that will invoke methods on the remote window. */ export declare type CallSender = { [index: string]: Function; }; export declare type Connection<TCallSender extends object = CallSender> = { /** * A promise which will be resolved once a connection has been established. */ promise: Promise<AsyncMethodReturns<TCallSender>>; /** * A method that, when called, will disconnect any messaging channels. * You may call this even before a connection has been established. */ destroy: Function; }; /** * A mapped type to extract only object properties which are functions. */ export declare type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never; }[keyof T]; /** * Methods to expose to the remote window. */ export declare type Methods = { [index: string]: Function; }; /** * A Penpal-specific error. */ export declare type PenpalError = Error & { code: ErrorCode; }; /** * A method response message. */ export declare type ReplyMessage = { penpal: MessageType.Reply; id: number; resolution: Resolution; returnValue: any; returnValueIsError?: boolean; }; /** * A SYN-ACK handshake message. */ export declare type SynAckMessage = { penpal: MessageType.SynAck; methodNames: string[]; }; /** * A SYN handshake message. */ export declare type SynMessage = { penpal: MessageType.Syn; }; export declare type WindowsInfo = { /** * A friendly name for the local window. */ localName: 'Parent' | 'Child'; /** * The local window. */ local: Window; /** * The remote window. */ remote: Window; /** * Origin that should be used for sending messages to the remote window. */ originForSending: string; /** * Origin that should be used for receiving messages from the remote window. */ originForReceiving: string; };