import { AppContext } from "./app-context.js"; import { IdService } from "./base-service.js"; import { Option } from "./option.js"; import { Result } from "./result.js"; export interface EventoEnDecoder { encode(args: REQ): Promise>; decode(data: unknown): Promise>; } export interface EventoSendProvider { start?(trigger: HandleTriggerCtx): Promise>; send(trigger: HandleTriggerCtx, data: IS): Promise>; done?(trigger: HandleTriggerCtx): Promise>; } export interface ActionStat { startTime: Date; doneTime: Date; } export interface SendStatItem extends ActionStat { readonly item: Result; } export interface SendStat extends ActionStat { items: SendStatItem[]; } export type RequestStat = ActionStat; export interface TriggerStats { readonly request: RequestStat; readonly encode: ActionStat; readonly handlers: { readonly handler: EventoHandler; readonly total: ActionStat; readonly validated: ActionStat; readonly handled: ActionStat; }[]; readonly send: SendStat; } export declare class EventoSend { readonly provider: EventoSendProvider; constructor(provider: EventoSendProvider); start(trigger: HandleTriggerCtx): Promise>; done(trigger: HandleTriggerCtx): Promise>; send(trigger: HandleTriggerCtx, data: IS): Promise>>; } export interface TriggerCtxBase { ctx: AppContext; encoder: EventoEnDecoder; } export type ReadonlyTriggerCtxBase = Readonly> & { readonly id: string; readonly send: EventoSend; readonly stats: TriggerStats; }; export type TriggerCtxBaseParams = Partial, "send">> & Partial, "ctx" | "encoder">> & { send: EventoSendProvider; stats?: TriggerStats; idService?: IdService; id?: string; }; export type TriggerCtxParams = TriggerCtxBaseParams & { request?: INREQ; enRequest?: unknown; }; export type TriggerCtx = (ReadonlyTriggerCtxBase & { request: INREQ; }) | (ReadonlyTriggerCtxBase & { enRequest: unknown; }) | (ReadonlyTriggerCtxBase & { enRequest: unknown; request: INREQ; }); export type TriggerResult = Omit, "send"> & { readonly send: EventoSend; readonly stats: TriggerStats; readonly id: string; } & Partial>; export declare class TriggerResultError extends Error { readonly ctx: TriggerResult; constructor(message: string, ctx: TriggerResult); } export interface ValidateTriggerCtx extends ReadonlyTriggerCtxBase { readonly request?: INREQ; readonly enRequest: unknown; } export interface MutableHandleTriggerCtx { request: INREQ; enRequest: unknown; validated: REQ; error?: Error; } export type HandleTriggerCtx = Readonly> & ReadonlyTriggerCtxBase; export declare const EventoResult: { readonly Continue: "continue"; readonly Stop: "stop"; }; export type EventoResultType = (typeof EventoResult)[keyof typeof EventoResult]; export declare enum EventoOp { Push = "push", Unshift = "unshift", Position = "position" } export declare enum EventoType { WildCard = "wildcard", Regular = "regular", Error = "error" } export interface EventoHandler { readonly type?: EventoType; readonly hash: string; handle(trigger: HandleTriggerCtx): Promise>; validate?(trigger: ValidateTriggerCtx): Promise>>; post?(trigger: HandleTriggerCtx): Promise; } export interface EventoHandlerOpSimple { readonly type: EventoType; readonly op: EventoOp.Push | EventoOp.Unshift; readonly handler: EventoHandler; } export interface EventoHandlerOpPosition { readonly type: EventoType; readonly op: EventoOp.Position; readonly handler: EventoHandler; readonly idx: number; } export type EventoHandlerOp = EventoHandlerOpSimple | EventoHandlerOpPosition; export declare class Evento { private actions; private wildcards; private errors; private encoder; constructor(encoder: EventoEnDecoder); handlers(): { actions: EventoHandler[]; wildcards: EventoHandler[]; }; push(...hdls: (EventoHandler | EventoHandler[])[]): (() => void)[]; unshift(...hdls: (EventoHandler | EventoHandler[])[]): (() => void)[]; register(...hdls: EventoHandlerOp[]): (() => void)[]; trigger(ictx: TriggerCtxParams): Promise>>; } //# sourceMappingURL=evento.d.ts.map