@rewaa/event-broker
Version:
A broker for all the events that Rewaa will ever produce or consume
73 lines (72 loc) • 2.2 kB
TypeScript
import { ConsumeOptions, IBatchEmitOptions, IEmitOptions, IFailedEmitBatchMessage } from "../types";
export interface OutboxConfig {
/**
* saving (insert or update) the events to the consumer service's outbox table
*/
save: (outboxData: OutboxData<any>) => Promise<void>;
/**
* gets events usings ids from outbox table on consumer service
* @param ids ulids of the events to get
*/
getOutboxEvents: (ids: string[]) => Promise<OutboxEvent[]>;
/**
* An optional name of the queue that processes the outbox events
*/
consumerName?: string;
/**
* Optional consume options for the outbox queue
*/
consumeOptions?: {
fifo?: ConsumeOptions;
nonFifo?: ConsumeOptions;
};
}
export interface OutboxData<T extends any> {
events: OutboxEvent[];
config: T;
}
export declare enum OutboxEventStatus {
Error = "Error",
Pending = "Pending",
Processed = "Processed",
Failed = "Failed",
PartiallyProcessed = "PartiallyProcessed"
}
export interface OutboxEvent {
/**
* ulid
*/
id: string;
topicName: string;
payload?: any;
options: Omit<IEmitOptions, "outboxData">;
isBatch: boolean;
error?: unknown;
failureResponse?: OutboxEventFailureResponse[];
status: OutboxEventStatus;
[key: string]: any;
}
export interface OutboxEventFailureResponse {
id?: string;
code?: string;
message: any;
}
export interface OutboxEventPayload {
/**
* ulid array
*/
ids: string[];
isFifo: boolean;
isBatch: boolean;
}
export interface IOutbox {
updateEvents: (events: OutboxEvent[]) => Promise<void>;
handleEvent: (event: OutboxEvent, errorReason?: unknown) => OutboxEvent;
handleBatchEvent: (event: OutboxEvent, response: IFailedEmitBatchMessage[], errorReason?: unknown) => OutboxEvent;
createEvent: (eventName: string, options: IEmitOptions | IBatchEmitOptions, payload?: any, isBatch?: boolean) => Promise<OutboxEvent>;
/**
* gets events usings ids from outbox table on consumer service
* @param ids ulids of the events
*/
getOutboxEvents: (ids: string[]) => Promise<OutboxEvent[]>;
}