import { Adaptor, AdaptorPackageData } from './adaptor.mjs'; type LogFunc = (...data: unknown[]) => void; type RemoteCallableFunc = (data: any) => Promise; interface RemoteFuncRecords { [key: string]: RemoteCallableFunc; } type FuncMapWithConfig = { [K in keyof T]: T[K] extends (data: infer Arg) => Promise ? (data: Arg, config?: { timeoutMs?: number; targetDeviceId?: string; }) => Promise : never; }; type RegisteredFunc = T extends (data: infer Arg) => infer Ret ? (data: Arg, ctx: { /** * 对方的设备 id */ deviceId: string; }) => Ret : never; declare class Remote< /** * MF means my functions */ MF extends RemoteFuncRecords, /** * OF means others functions */ OF extends RemoteFuncRecords> { private adaptor; debug: boolean; private log; /** * (调用对方函数时的)默认超时时间,单位 ms * @default 30000 */ private defaultTimeoutMs; private map; private deviceIdValue; /** * 设备 id 应该唯一,用于区分不同设备。 * 你可以在任何时候修改(更新)它。 * @default '' */ get deviceId(): string; set deviceId(deviceId: string); constructor(adaptor: Adaptor, config?: { /** * 设备 id 应该唯一,用于区分不同设备。 * 你可以在任何时候修改(更新)它。 * @default '' */ deviceId?: string; /** * (调用对方函数时的)默认超时时间,单位 ms * @default 30000 */ defaultTimeoutMs?: number; debug?: boolean; /** * 格式化 AdaptorPackageData 的函数, * 用于调试时输出日志。 * @default JSON.stringify */ log?: LogFunc; }); /** * 调用其他端的方法;会等待对方响应。 * 不能直接使用该方法,应该使用 proxy。 * @WARNING 不能用于响应其他端。 */ private callAsync; /** * 注册方法,供对方调用; */ register(name: K, callback: RegisteredFunc): void; _: FuncMapWithConfig; self: MF; } declare function isRemoteAdaptorData(data: unknown): data is AdaptorPackageData; export { Remote, isRemoteAdaptorData };