import {AcknowledgableEvent} from "./AcknowledgableEvent"; export enum EventType { Normal, TimeBased, Acknowledge, } export interface BaseEvent { type: EventType } export interface NormalEvent extends BaseEvent { type: EventType.Normal } export interface AcknowledgeEvent extends BaseEvent { type: EventType.Acknowledge, isAcknowledged(): boolean, handleUnacknowledgement(): void } export type HandlerEvents = NormalEvent | AcknowledgeEvent export interface TimedEvent extends BaseEvent { type: EventType.TimeBased, configuration: EventConfiguration, cronExpression: string, execute: () => void } export type EventConfiguration = { name: string, maxExecutions?: number, } export type EventEntry = { method: (event: T) => void, persistent?: boolean }