@shopify/app-bridge-core
Version:
**[Join our team and work on libraries like this one.](https://www.shopify.ca/careers)**
118 lines (117 loc) • 2.9 kB
TypeScript
import type { AnyAction, ActionCallback, Unsubscribe } from './actions/types';
import type { TransportDispatch, Dispatcher } from './client/types';
declare global {
interface Window {
MobileWebView?: {
postMessage(message?: string): void;
};
}
}
export declare enum Context {
Modal = "Modal",
Main = "Main"
}
/**
* @deprecated Not to be used, use `MessageEvent` instead.
* @internal
*/
export interface HandlerData {
data: AnyAction;
}
/**
* @internal
*/
export interface MessageEvent<T = any> {
origin: string;
data: T;
source?: any;
}
/**
* @internal
*/
export interface HostFrame {
addEventListener(type: 'message', listener: (event: MessageEvent) => any): void;
postMessage(message: any, origin: string): void;
}
/**
* @internal
*/
export interface FrameWindow {
postMessage(message: any, origin: string): void;
/**
* Only needed when Web is loaded inside unframed mode on mobile
*/
location?: {
replace(url: string): void;
};
}
/**
* @internal
*/
export interface Frame {
host: HostFrame | null;
window: FrameWindow | null;
}
/**
* @internal
*/
export type Handler = (event: MessageEvent) => void;
/**
* @internal
*/
export interface MessageTransport {
dispatch(message: TransportDispatch): void;
hostFrame: HostFrame;
localOrigin: string;
subscribe(handler: Handler): () => void;
}
export interface ContextualMessageTransport extends MessageTransport {
context: Context;
frameWindow: FrameWindow | null;
dispatch(message: any): void;
}
/**
* Create a MessageTransport from a Frame.
* @remarks
* Used on the host-side to create a postMessage MessageTransport.
* @beta
*/
export declare function fromFrame(frame: Frame, localOrigin: string, context: Context): ContextualMessageTransport;
/**
* Create a MessageTransport from a parent window.
* @remarks
* Used on the client-side to create a postMessage MessageTransport.
* @internalremarks
* In unframed mode, message should be dispatched via MobileWebView.postMessage instead of postMessage.
* @beta
*/
export declare function fromWindow(contentWindow: Window, localOrigin: string): MessageTransport;
/**
* @internal
*/
export interface ActionListener {
id?: string;
callback(data: any): void;
}
/**
* @internal
*/
export interface ActionListenersMap {
[index: string]: ActionListener[];
}
/**
* @internal
*/
export interface Subscribe {
(callback: ActionCallback, id?: string): Unsubscribe;
(eventNameSpace: string, callback: ActionCallback, id?: string): Unsubscribe;
}
/**
* @internal
*/
export interface TransportListener {
createSubscribeHandler(dispatcher?: Dispatcher): Subscribe;
handleMessage(message: any): void;
handleActionDispatch(action: AnyAction): boolean;
}
export declare function createTransportListener(): TransportListener;