import { Observable } from "rxjs"; import { ServiceChecker, SpiderMesh } from "./SpiderMesh.js"; import { RpcOptions, SpiderMeshNode } from "./types.js"; export type IsUnknown = unknown extends T ? ([T] extends [unknown] ? A : B) : B; export type RemoteServiceOptions = Partial> & { service: string; }; export type Unwrap = Awaited extends Observable ? Observable : (T extends Promise ? Promise : Promise); export type Fallbackable = Fn extends (...args: infer A) => infer R ? ((...args: A) => IsUnknown, FallbackValue | Unwrap>) : undefined; export type FunctionOnly = T extends (...args: any[]) => any ? Fallback : never; export declare class RemoteServiceLinker { private sm; private options; constructor(sm: SpiderMesh, options: RemoteServiceOptions); watch(): Observable; get nodes(): import("./types.js").NodeRef[]; set(options: Omit>, 'service' | 'method' | 'args'>): Mapper; wait(checker?: ServiceChecker, stop$?: Observable): Promise; static link(sm: SpiderMesh, options: RemoteServiceOptions): Mapper; } export type Mapper = RemoteServiceLinker & ({ [K in keyof Service as FunctionOnly]: Fallbackable; } & { [key in keyof Service as FunctionOnly]: Service[key] extends ((...args: any) => any) ? ((...args: Parameters) => Observable<{ node: SpiderMeshNode; data: Awaited>; } | { node: SpiderMeshNode; error: Error; }>) : never; }); export type RemoteService = Mapper;