@phnq/message
Version:
Asynchronous, incremental messaging client and server
48 lines (47 loc) • 1.31 kB
TypeScript
export declare enum MessageType {
Request = "request",
Response = "response",
Multi = "multi",
End = "end",
Error = "error",
Anomaly = "anomaly"
}
interface Message<T> {
t: MessageType;
c: number;
s: string;
p: T;
z?: string;
}
export interface RequestMessage<T = Record<string, unknown>> extends Message<T> {
t: MessageType.Request;
}
export interface SingleResponseMessage<R> extends Message<R> {
t: MessageType.Response;
}
export interface MultiResponseMessage<R> extends Message<R> {
t: MessageType.Multi;
}
export interface EndMessage extends Message<'END'> {
t: MessageType.End;
}
export interface AnomalyMessage extends Message<{
message: string;
info: unknown;
requestPayload: unknown;
}> {
t: MessageType.Anomaly;
}
export interface ErrorMessage extends Message<{
message: string;
requestPayload: unknown;
}> {
t: MessageType.Error;
}
export type ResponseMessage<R> = SingleResponseMessage<R> | MultiResponseMessage<R> | EndMessage | ErrorMessage | AnomalyMessage;
export interface MessageTransport<T, R> {
send(message: RequestMessage<T> | ResponseMessage<R>): Promise<void>;
onReceive(receive: (message: RequestMessage<T> | ResponseMessage<R>) => void): void;
close(): Promise<void>;
}
export {};