// 定义消息类型,限制只能是这四种 export type MessageType = "request" | "response" | "event" | "init"; // 所有消息都必须有的基础字段 export interface BaseMessage { id: string; // 唯一标识,用于匹配请求和响应 type: MessageType; // 消息类型 namespace: string; // 命名空间,防止不同应用的消息冲突 timestamp: number; // 时间戳,用于调试和过期检查 } // 请求消息:调用对方注册的方法 export interface RequestMessage extends BaseMessage { type: "request"; // 固定为 request 类型 method: string; // 要调用的方法名 params?: any; // 方法参数(可选) } // 响应消息:返回方法调用的结果 export interface ResponseMessage extends BaseMessage { type: "response"; // 固定为 response 类型 result?: any; // 成功时的返回值(可选) error?: string; // 失败时的错误信息(可选) } // 事件消息:发送事件通知 export interface EventMessage extends BaseMessage { type: "event"; // 固定为 event 类型 event: string; // 事件名称 data?: any; // 事件数据(可选) } // 初始化消息:建立 MessageChannel 连接 export interface InitMessage extends BaseMessage { type: "init"; // 固定为 init 类型 channelId: string; // 通道ID,用于标识这个连接 } // 联合类型:所有消息类型的集合 export type BridgeMessage = RequestMessage | ResponseMessage | EventMessage | InitMessage; // 待处理请求:存储等待响应的请求 export interface PendingRequest { resolve: (value: any) => void; // 成功时调用的函数 reject: (error: Error) => void; // 失败时调用的函数 } // 事件回调函数:处理收到的事件 export type EventCallback = (data?: any) => void; // 方法处理器:处理收到的请求 export type MethodHandler = (params?: any) => any | Promise; // 桥接器配置选项 export interface BridgeOptions { namespace?: string; // 命名空间,默认为 "default" debug?: boolean; // 是否开启调试日志,默认为 false iframe?: HTMLIFrameElement; // iframe 元素,传入表示宿主页面,不传表示客户端页面 // 安全配置 security?: { strictOrigin?: boolean; // 是否严格验证源,默认为 true allowedOrigins?: string[]; // 允许的源列表,仅在 strictOrigin 为 false 时有效 }; }