import { Observable } from "rxjs"; export interface RemoteObservable { subscribe(observer: (t: T) => void): Promise; } export interface RemoteSubscription { unsubscribe(): Promise; } declare type ObservableType = T extends null | undefined ? T : T extends object & { subscribe(onfulfilled: infer F): any; } ? F extends ((value: infer V, ...args: any) => any) ? V : never : T; declare type Methods = { [P in keyof T as T[P] extends ((...args: any[]) => Promise) ? P : never]: T[P]; }; declare type Events = { [P in keyof T as T[P] extends Observable ? P : never]: RemoteObservable>; }; export declare type Proxied = Methods & Events; export declare function markProxied(value: T | Proxied): Proxied; export {};