event-driven
Version:
makes building event-driven-architecture easy
47 lines (46 loc) • 1.98 kB
TypeScript
import { JetStreamClient, JsMsg } from 'nats';
import { Types } from 'mongoose';
import { Event } from '../backend';
export interface EventConfig {
clientGroup: string;
js: JetStreamClient;
parentIds: Types.ObjectId[];
durableName?: string;
}
export interface SubscriberConfig {
clientGroup: string;
js: JetStreamClient;
batch: number;
expires: number;
}
interface ConvertedMsg<ParentEvent extends Event<string>> {
jsMsg: JsMsg;
parentId: Types.ObjectId;
msgData: ParentEvent['data'];
retryingDurableName: string | undefined;
}
export declare const getDurableName: (clientGroup: string, subject: string, i: number, type: 'PULL' | 'GROUP') => string;
export declare const convertJsMsg: <ParentEvent extends Event<string>>(jsMsg: JsMsg) => ConvertedMsg<ParentEvent>;
export declare const filterConvertedMsgs: (clientGroup: string, subject: string, eventHandlerOrder: number, showError: boolean, durableName: string, maxRetryCount: number) => <ParentEvent extends Event<string>>(args: ConvertedMsg<ParentEvent>) => boolean;
export declare const groupByFn: <T, K extends string | number | symbol>(list: T[], getKey: (item: T) => K) => T[][];
export interface SubscriberEvent<ParentEvent extends Event<string>> {
input: ParentEvent['data'];
ack: () => void;
fail: (error: Error) => Promise<void>;
config: EventConfig;
}
export interface SubscriberGroupedEvent<ParentEvent extends Event<string>> {
inputs: ParentEvent['data'][];
ack: () => void;
fail: (error: Error) => Promise<void>;
config: EventConfig;
}
export declare const autoAckOrFail: <T extends SubscriberEvent<Event<string>>>(fn: (args: {
config: EventConfig;
input: T["input"];
}) => any) => (events: T[]) => Promise<void[]>;
export declare const autoGroupAckOrFail: <T extends SubscriberGroupedEvent<Event<string>>>(fn: (args: {
config: EventConfig;
inputs: T["inputs"];
}) => any) => (events: T[]) => Promise<void[]>;
export {};