import { IRowan, Processor } from "rowan"; import { Message } from "./message"; import { Disposer } from "./_disposer"; import { Log } from "./log"; import { Wire } from "@viae/core"; export interface IVia extends IRowan { before(processor: Processor): this; request(method: string, path: string, data: any, opts?: SendOptions): Promise; send(msg: Partial>, opts?: SendOptions): Promise; intercept(id: string, handlers: Processor[]): Disposer; createId(): string; readonly log: Log; readonly wire: Wire; on(event: "close", cb: () => void): void; on(event: "open", cb: () => void): void; on(event: "error", cb: (err: Error, ctx: T) => void): void; } export interface SendOptions { id?: string; encoding?: "none" | "msgpack" | "json" | "cbor"; timeout?: number; head?: { [index: string]: any; }; } export interface CallOptions extends SendOptions { method: string; path: string; data?: any; validate?(result: any): result is T; }