@syncable/core
Version:
32 lines (31 loc) • 1.1 kB
TypeScript
import { Observable } from 'rxjs';
import { RPCData } from './rpc-call';
import { IRPCDefinition } from './rpc-definition';
import { RPCMethod } from './rpc-method-decorator';
export declare type RPCPeerType<TLocalDefinition extends IRPCDefinition> = {
[TName in TLocalDefinition['name']]: RPCMethod<Extract<TLocalDefinition, {
name: TName;
}>>;
};
export interface IRPCAdapter {
incoming$: Observable<RPCData>;
connect$: Observable<void>;
send(outgoing: RPCData): Promise<void>;
}
export declare class RPCPeer<TRemoteDefinition extends IRPCDefinition = IRPCDefinition> {
private adapter;
private requestHandlersMap;
private incomingSubscription;
constructor(adapter: IRPCAdapter);
call<TName extends TRemoteDefinition['name']>(name: TName, ...args: Extract<TRemoteDefinition, {
name: TName;
}>['args']): Promise<Extract<TRemoteDefinition, {
name: TName;
}>['return']>;
dispose(): void;
private onIncoming;
private handleRequest;
private _handleRequest;
private handleResponse;
private callLocalMethod;
}