/**
 * NPL.ts — Paracraft / NPL（神经并行语言）通信桥接模块
 *
 * 提供 Keepwork 前端与 Paracraft 引擎之间的双向消息通信能力：
 * - `NPLUtil`：静态工具集（postMessage 监听、系统检测、微信检测）
 * - `NPLJS`：高级 NPL 通信类，带消息 ID 回调和加载握手
 * - `ParacraftEvent`：Keepwork↔Paracraft 事件总线（前缀隔离）
 *
 * ## 使用前提
 * 打开 HTML 时需在 URL 中带以下参数之一（由 Paracraft /open 命令自动注入）：
 * - `?asWebviewInParacraftClient=true`
 * - `?asIframeInWebParacraft=true`
 *
 * ## 快速上手
 * ```ts
 * // 初始化监听（由 index.ts 自动调用）
 * NPLUtil.initializeMessageListeners();
 *
 * // 高级通信
 * window.NPLJSInstance = new NPLJS();
 * window.paracraftEvent = new ParacraftEvent(window.NPLJSInstance);
 * ```
 *
 * ## 消息前缀约定
 * - 进入方向（Paracraft → Keepwork）：`@keepwork_`
 * - 发出方向（Keepwork → Paracraft）：`@webparacraft_`
 */
/**
 * 从 URL search 参数读取指定参数值。
 * @param name - 参数名
 * @returns 参数值，不存在时返回空字符串
 */
declare function getQueryString(name: string): string;
/** 微信浏览器检测结果 */
interface WxEnv {
    isWeChat: boolean;
    isMiniProgram: boolean;
    isWorkWeChat: boolean;
    isAnyWeChat: boolean;
}
/**
 * 检测当前是否运行在微信系列环境中。
 * 非浏览器环境（SSR）返回全 false。
 */
declare function isWeChatBrowser(): WxEnv;
/**
 * 获取当前运行平台标识。
 * 优先读取 `window.paracraft_platform`，然后 URL 参数，最后 UA 检测。
 */
declare function getSystem(): string;
/**
 * NPL 底层通信对象。
 * 根据当前平台（iOS/macOS/Windows WebView/Emscripten/Android）选择对应的通信机制。
 */
declare const NPL: {
    /**
     * 向 Paracraft 发送 NPL 消息（跨平台派发）。
     *
     * @param filename - NPL 文件名（作为消息路由 key）
     * @param msg      - 消息体（任意可序列化对象）
     */
    activate: (filename: string, msg: unknown) => void;
    /**
     * 注册指定文件名的消息接收回调。
     *
     * @param callback - 消息回调函数
     * @param params   - 包含 filename 的参数对象
     */
    this: (callback: (msg: unknown) => void, params?: {
        filename?: string;
    }) => void;
    /**
     * 接收来自 Paracraft 的 NPL 消息并派发给已注册的回调。
     *
     * @param filename - NPL 文件名（消息路由 key）
     * @param msg      - 消息体
     */
    receive: (filename: string, msg: unknown) => void;
};
/**
 * 初始化全局 window.message 监听器（Emscripten/iframe 环境）。
 *
 * 仅当非 WebView / Android / iOS 原生环境（或处于微信环境）时注册，
 * 防止与原生通道冲突。由 `index.ts` 在 SDK 加载时自动调用。
 */
declare function initializeMessageListeners(): void;
/**
 * NPLUtil — NPL 通信静态工具集。
 * 暴露底层 NPL 对象和初始化方法，供外部直接调用。
 */
declare class NPLUtil {
    static readonly allMsg: Record<string, (msg: unknown) => void>;
    static readonly NPL: {
        /**
         * 向 Paracraft 发送 NPL 消息（跨平台派发）。
         *
         * @param filename - NPL 文件名（作为消息路由 key）
         * @param msg      - 消息体（任意可序列化对象）
         */
        activate: (filename: string, msg: unknown) => void;
        /**
         * 注册指定文件名的消息接收回调。
         *
         * @param callback - 消息回调函数
         * @param params   - 包含 filename 的参数对象
         */
        this: (callback: (msg: unknown) => void, params?: {
            filename?: string;
        }) => void;
        /**
         * 接收来自 Paracraft 的 NPL 消息并派发给已注册的回调。
         *
         * @param filename - NPL 文件名（消息路由 key）
         * @param msg      - 消息体
         */
        receive: (filename: string, msg: unknown) => void;
    };
    static readonly initializeMessageListeners: typeof initializeMessageListeners;
    static readonly getSystem: typeof getSystem;
    static readonly getQueryString: typeof getQueryString;
    static readonly isWeChatBrowser: typeof isWeChatBrowser;
}
/** NPLJS 消息体结构 */
interface NPLJSMessage {
    msgid?: string;
    msgname?: string;
    msgdata?: unknown;
    request_reply?: boolean;
    response_reply?: boolean;
}
/**
 * NPLJS — 高级 NPL 通信类，提供消息 ID 回调、加载握手、消息订阅/发布。
 *
 * 通常以单例形式使用：
 * ```ts
 * window.NPLJSInstance = new NPLJS();
 * window.NPLJSInstance.OnLoad(() => { console.log('ready'); });
 * ```
 */
declare class NPLJS {
    private m_msg_callbacks;
    private m_ready;
    private m_msgid;
    private m_msgid_callbacks;
    private m_loaded;
    private m_onload_callback;
    private m_onload_timerid;
    constructor();
    /** 是否已与 Paracraft WebView 建立连接。 */
    IsLoaded(): boolean;
    /**
     * 触发加载握手流程（向 Paracraft 发送 'load' 消息，等待确认）。
     * 若已加载则立即返回。
     */
    Load(): void;
    /** @private 处理 Paracraft 返回的 load 确认消息。 */
    private HandleLoadMsg;
    /**
     * 注册加载完成回调（若已加载则立即触发）。
     * @param callback - 连接建立后的回调
     */
    OnLoad(callback: () => void): void;
    /** @private 生成自增消息 ID（格式：`js_N`）。 */
    private GetNextMsgId;
    /** @private 发送原始 NPL 消息到 NPLJS 文件。 */
    private Send;
    /**
     * 发送命名消息（可选回调）。
     *
     * @param msgname - 消息名
     * @param msgdata - 消息数据
     * @param msgid   - 消息 ID（可选，用于回调关联）
     * @param callback - 收到响应时触发的回调
     */
    SendMsg(msgname: string, msgdata?: unknown, msgid?: string, callback?: (data: unknown) => void): void;
    /**
     * 接收并派发来自 Paracraft 的 NPLJS 消息。
     * @private
     */
    RecvMsg(msg: NPLJSMessage): void;
    /**
     * 订阅指定消息名（可同时有多个订阅者）。
     * @param msgname  - 消息名
     * @param callback - 回调函数
     */
    OnMsg(msgname: string, callback: (data: unknown, msgid?: string) => void): void;
    /**
     * 取消订阅指定消息名的回调。
     * @param msgname  - 消息名
     * @param callback - 要取消的回调
     */
    OffMsg(msgname: string, callback: (data: unknown, msgid?: string) => void): void;
    /** @private 派发消息给所有订阅者。 */
    private EmitMsg;
    /**
     * 检测 WebView 环境并在就绪时调用 Load()。
     * 仅在 Windows + Edge 环境下执行，最多重试 3 次（每次间隔 1s）。
     * @private
     */
    private CheckLoadWebview;
    /**
     * 注册 NPLJS 文件的消息接收回调（构造函数内自动调用）。
     * @private
     */
    private registerNPLJSReceive;
}
/**
 * ParacraftEvent — Keepwork ↔ Paracraft 事件总线。
 *
 * 通过消息前缀隔离，防止与其他 postMessage 用途冲突：
 * - 进入方向（Paracraft → Keepwork）使用前缀 `@keepwork_`
 * - 发出方向（Keepwork → Paracraft）使用前缀 `@webparacraft_`
 *
 * @param npljsInstance - 可选的 NPLJS 实例；不提供时回退到 window.NPLJSInstance
 */
declare class ParacraftEvent {
    private npljsInstance;
    private asIframeInWebParacraft;
    private asWebviewInParacraftClient;
    /** 进入消息前缀（Paracraft → Keepwork） */
    readonly eventPrefix = "@keepwork_";
    /** 发出消息前缀（Keepwork → Paracraft） */
    readonly msgPrefix = "@webparacraft_";
    private events;
    constructor(npljsInstance?: NPLJS);
    /** 获取当前有效的 NPLJS 实例（优先构造时注入，回退 window.NPLJSInstance）。 */
    getNPLJSInstance(): NPLJS | null;
    /** 是否需要通过 NPLJS 发送出站消息（处于 iframe 或 WebView 模式）。 */
    outGoingMsgNeedToBeSent(): boolean;
    /**
     * 订阅来自 Paracraft 的事件消息。
     *
     * @param name     - 事件名（不含前缀）
     * @param callback - 事件处理回调
     */
    onMsg(name: string, callback: (data: unknown) => void): void;
    /**
     * 向 Paracraft 发送消息事件。
     *
     * @param name - 事件名（不含前缀）
     * @param data - 消息数据
     */
    sendMsg(name: string, data?: unknown): void;
    /**
     * window message 事件监听器（在构造函数中绑定）。
     * 仅处理带 eventPrefix 前缀的消息。
     */
    messageListener(event: MessageEvent): void;
}
export { NPL, NPLUtil, NPLJS, ParacraftEvent };
//# sourceMappingURL=NPL.d.ts.map