nats-micro
Version:
NATS micro compatible extra-lightweight microservice library
58 lines (57 loc) • 1.76 kB
TypeScript
import { MaybePromise, PartialBy } from './types.js';
export type Headers = Iterable<[string, string]>;
export type HandlerInfo = {
microservice?: string;
method: string;
};
export type RequestContext = Record<string, unknown>;
export interface Request<T> {
data: T;
subject: string;
headers?: Headers;
handler: HandlerInfo;
context?: RequestContext;
}
export declare const noResponse: unique symbol;
export type ResponseData<R> = {
data: R | symbol;
headers: [string, string][];
};
export type Response<R> = {
get closeWaiter(): Promise<ResponseData<R>>;
get isClosed(): boolean;
setHeaders: (headers: Headers) => void;
send: (data: R) => void;
sendNoResponse: () => void;
};
export type Handler<T, R, RR = MaybePromise<void>> = (req: Request<T>, res: Response<R>) => RR;
export type MicroserviceSubject = {
microservice: string;
instance?: string;
};
export type RawSubject = string;
export type MethodSubject = MicroserviceSubject & {
method: string;
};
export type Subject = RawSubject | MethodSubject;
export type Message<T> = {
data: T;
headers?: Headers;
};
export type MessageReplyTo<T> = Message<T> & {
replyTo: RawSubject;
};
export type MessageMaybeReplyTo<T> = PartialBy<MessageReplyTo<T>, 'replyTo'>;
export type MessageHandler<T> = (data: MessageMaybeReplyTo<T>, subject: string) => void;
export type BrokerResponse<T> = Message<T> & {
subject: string;
error?: Error;
};
export type RequestOptions = Pick<Message<unknown>, 'headers'> & {
timeout?: number;
};
export type RequestManyOptions = RequestOptions & {
limit?: number;
};
export type SendOptions = Omit<MessageMaybeReplyTo<never>, 'data'>;
export declare const headersPrefixContext = "context-";