vulcain-corejs
Version:
Vulcain micro-service framework
78 lines (77 loc) • 2.53 kB
TypeScript
import { IContainer } from '../di/resolvers';
import { Domain } from '../schemas/schema';
import { HandlerFactory, CommonRequestData, CommonMetadata, CommonRequestResponse, CommonActionMetadata, IManager, ServiceHandlerMetadata } from './common';
import { RequestContext } from '../servers/requestContext';
import * as RX from 'rx';
import { EventHandlerFactory } from './eventHandlerFactory';
export interface ActionData extends CommonRequestData {
data: any;
service: string;
status?: "Error" | "Success" | "Pending";
taskId?: string;
startedAt: string;
}
export interface ConsumeEventMetadata {
subscribeToDomain?: string;
subscribeToAction?: string;
subscribeToSchema?: string;
filter?: (observable: RX.Observable<EventData>) => RX.Observable<EventData>;
}
export interface EventMetadata extends CommonMetadata {
subscribeToDomain?: string;
}
export declare enum EventNotificationMode {
always = 0,
successOnly = 1,
never = 2,
}
export interface ActionHandlerMetadata extends ServiceHandlerMetadata {
async?: boolean;
eventMode?: EventNotificationMode;
}
export interface ActionMetadata extends CommonActionMetadata {
async?: boolean;
eventMode?: EventNotificationMode;
}
export interface ActionResponse<T> extends CommonRequestResponse<T> {
correlationId: string;
startedAt: string;
completedAt?: string;
service: string;
taskId?: string;
status: "Error" | "Success" | "Pending";
commandMode?: string;
}
/**
* Response for event
*
* @export
* @interface EventData
* @extends {ActionResponse<any>}
*/
export interface EventData extends ActionResponse<any> {
}
export declare class CommandManager implements IManager {
container: IContainer;
private messageBus;
private _domain;
private _hostname;
private _service;
private _initialized;
static commandHandlersFactory: HandlerFactory;
static eventHandlersFactory: EventHandlerFactory;
/**
* Get the current domain model
* @returns {Domain}
*/
domain: Domain;
serviceName: string;
constructor(container: IContainer);
private createResponse(ctx, command, error?);
private validateRequestData(info, command);
getMetadata(command: CommonRequestData): ActionMetadata;
runAsync(command: ActionData, ctx: RequestContext): Promise<ActionResponse<any>>;
consumeTaskAsync(command: ActionData): Promise<void>;
subscribeToEvents(): void;
bindEventHandler(metadata: ConsumeEventMetadata): void;
}