import { IdType, KeyType, MARKER } from './common';
export declare enum MessageType {
    HandshakeRequest = "handshake-request",
    HandshakeResponse = "handshake-response",
    Call = "call",
    Response = "response",
    Error = "error",
    Event = "event",
    Callback = "callback"
}
export interface Message<T extends MessageType> {
    type: typeof MARKER;
    action: T;
    sessionId: IdType;
}
export interface HandshakeRequestMessage extends Message<MessageType.HandshakeRequest> {
}
export interface HandshakeResponseMessage extends Message<MessageType.HandshakeResponse> {
}
export interface CallMessage<A extends Array<any>> extends Message<MessageType.Call> {
    requestId: IdType;
    methodName: KeyType;
    args: A;
}
export interface ResponseMessage<R> extends Message<MessageType.Response> {
    requestId: IdType;
    result?: R;
    error?: string;
}
export interface CallbackMessage<A extends Array<any>> extends Message<MessageType.Callback> {
    requestId: IdType;
    callbackId: IdType;
    args: A;
}
export interface EventMessage<P> extends Message<MessageType.Event> {
    eventName: KeyType;
    payload: P;
}
export declare function createHandshakeRequestMessage(sessionId: IdType): HandshakeRequestMessage;
export declare function createHandshakeResponseMessage(sessionId: IdType): HandshakeResponseMessage;
export declare function createCallMessage<A extends Array<any>>(sessionId: IdType, requestId: IdType, methodName: KeyType, args: A): CallMessage<A>;
export declare function createResponsMessage<R>(sessionId: IdType, requestId: IdType, result: R, error?: string): ResponseMessage<R>;
export declare function createCallbackMessage<A extends Array<any>>(sessionId: IdType, requestId: IdType, callbackId: IdType, args: A): CallbackMessage<A>;
export declare function createEventMessage<P>(sessionId: IdType, eventName: KeyType, payload: P): EventMessage<P>;
export declare function isMessage(m: any): m is Message<any>;
export declare function isHandshakeRequestMessage(m: Message<any>): m is HandshakeRequestMessage;
export declare function isHandshakeResponseMessage(m: Message<any>): m is HandshakeResponseMessage;
export declare function isCallMessage(m: Message<any>): m is CallMessage<any[]>;
export declare function isResponseMessage(m: Message<any>): m is ResponseMessage<any>;
export declare function isCallbackMessage(m: Message<any>): m is CallbackMessage<any>;
export declare function isEventMessage(m: Message<any>): m is EventMessage<any>;
