@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
144 lines (143 loc) • 9.65 kB
TypeScript
import { Container } from 'inversify';
import { BaseError, EngineEventType, FlowNodeInstance, FlowNodeInstanceResult, LogLevel, Logger, Model, ProcessInstanceState, ProcessModelFacade, RuntimeExpressionParameters, Subscription } from '@5minds/processcube_engine_sdk';
import { InternalIdentity as Identity, ProcessInstanceInternal as ProcessInstanceFromRepo, ProcessStartOptionsInternal } from '../Contracts/InternalDataModels/index';
import { EventMessageInternal, OnKillProcessCallback, OnProcessEndedCallback, OnProcessErrorCallback, OnProcessKilledCallback, OnProcessOwnerChangedCallback, OnProcessStartedCallback } from '../Contracts/InternalMessages/index';
import { CorrelationDatabaseAdapter, FlowNodeInstanceDatabaseAdapter, ProcessInstanceDatabaseAdapter } from '../Tools/DatabaseAdaptersSequelize';
import { EventMiddlewareHandler } from '../Tools/EventMiddlewareHandler';
import { IamService, IdentityService } from '../Tools/Iam/index';
import { ProcessDefinitionMediator } from '../Tools/ProcessDefinitionMediator';
import { DataObjectFacade } from './Facades/DataObjectFacade';
import { FlowNodeHandlerFactory } from './FlowNodeHandler/FlowNodeHandlerFactory';
import { ProcessTokenService } from './index';
export type ProcessInstanceFactory = (args: {
parentProcessInstance?: ProcessInstance;
processInstanceId?: string;
}) => ProcessInstance;
export type FlowNodeExpressionConfig = {
expression: string;
dataContract?: string;
currentToken: object;
allowNonObjectResults: boolean;
previousFlowNode?: Model.Base.FlowNode;
currentFlowNode?: Model.Base.FlowNode;
dataObjectId?: string;
additionalProperties?: {
[key: string]: any;
};
};
type FlowNodeInstanceResumingGroup = {
nonActivityFlowNodeInstances: Array<FlowNodeInstance>;
defaultActivityFlowNodeInstances: Array<FlowNodeInstance>;
multiInstanceActivityFlowNodeInstances: {
[activityExecutionId: string]: Array<FlowNodeInstance>;
};
};
type FlowNodeExpressionBuilderConfig = Omit<FlowNodeExpressionConfig, 'expression'>;
export declare class ProcessInstance {
protected readonly container: Container;
protected readonly correlationDatabaseAdapter: CorrelationDatabaseAdapter;
protected readonly dataObjectFacade: DataObjectFacade;
protected readonly eventMiddlewareHandler: EventMiddlewareHandler;
protected readonly flowNodeHandlerFactory: FlowNodeHandlerFactory;
protected readonly flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter;
protected readonly iamService: IamService;
protected readonly identityService: IdentityService;
protected readonly processInstanceDatabaseAdapter: ProcessInstanceDatabaseAdapter;
protected readonly processDefinitionMediator: ProcessDefinitionMediator;
protected readonly processTokenService: ProcessTokenService;
protected processDefinitionId: string;
protected processDefinitionHash: string;
protected processModelId: string;
protected processModelName: string;
protected processModelVersion: string;
protected correlationId: string;
protected parentProcessInstance: ProcessInstance;
protected processInstanceId: string;
protected state: ProcessInstanceState;
protected owner: Identity;
protected initialTokenPayload: {};
protected startedByRootAccessToken: boolean;
protected embeddedProcessModelId?: string;
protected correlationMetaData: {};
protected processInstanceMetaData: {};
protected processModelFacade: ProcessModelFacade;
protected logger: Logger;
private ownerChangedSubscription;
private correlationMetadataChangedSubscription;
private startedAt;
private finishedAt;
constructor(container: Container, correlationDatabaseAdapter: CorrelationDatabaseAdapter, dataObjectFacade: DataObjectFacade, eventMiddlewareHandler: EventMiddlewareHandler, flowNodeHandlerFactory: FlowNodeHandlerFactory, flowNodeInstanceDatabaseAdapter: FlowNodeInstanceDatabaseAdapter, identityService: IdentityService, iamService: IamService, processDefinitionMediator: ProcessDefinitionMediator, processInstanceDatabaseAdapter: ProcessInstanceDatabaseAdapter, processTokenService: ProcessTokenService, parentProcessInstance?: ProcessInstance, processInstanceId?: string);
getState(): ProcessInstanceState;
getProcessInstanceId(): string;
getCorrelationId(): string;
getDataObjectFacade(): DataObjectFacade;
getProcessDefinitionId(): string;
getProcessDefinitionHash(): string;
getProcessModelId(): string;
getEmbeddedProcessModelId(): string;
getProcessModelName(): string;
getProcessModelVersion(): string;
getParentProcessInstance(): ProcessInstance | undefined;
getProcessModelFacade(): ProcessModelFacade;
getProcessTokenService(): ProcessTokenService;
getOwner(): Identity;
getInitialPayload(): Record<string, any>;
getCorrelationMetaData(): Record<string, string>;
getProcessInstanceMetaData(): Record<string, string>;
getStartedByRootAccessToken(): boolean;
getStartedAt(): Date;
getFinishedAt(): Date;
getContainer(): Container;
isEmbeddedSubprocess(): boolean;
execute<TToken extends object>(identity: Identity, options: ProcessStartOptionsInternal<TToken>): Promise<EventMessageInternal>;
resume(identity: Identity, processInstance: ProcessInstanceFromRepo, flowNodeInstances: Array<FlowNodeInstance>, parentDataObjectFacade?: DataObjectFacade, parentProcessModelFacade?: ProcessModelFacade): Promise<EventMessageInternal>;
kill(killerIdentity: Identity): void;
ensureOwnerHasClaim(claimName: string, claimValue?: string): void;
setCorrelationMetadataValue(key: string, rawValue: string, flowNode: Model.Base.FlowNode, flowNodeInstanceId: string, currentToken?: object): Promise<string>;
setProcessInstanceMetadataValue(key: string, rawValue: string, flowNode: Model.Base.FlowNode, flowNodeInstanceId: string, currentToken?: object): Promise<string>;
executeRuntimeExpression<TExpectedResult>(config: FlowNodeExpressionConfig): Promise<TExpectedResult>;
onProcessStarted(callback: OnProcessStartedCallback): Subscription;
onProcessEnded(callback: OnProcessEndedCallback): Subscription;
onProcessEndEventReached(endEventId: string, callback: OnProcessEndedCallback): Subscription;
onTerminateEndEventReached(callback: OnProcessErrorCallback): Subscription;
onProcessError(callback: OnProcessErrorCallback): Subscription;
onKillProcess(callback: OnKillProcessCallback): Subscription;
onProcessKilled(callback: OnProcessKilledCallback): Subscription;
onOwnerChanged(callback: OnProcessOwnerChangedCallback): Subscription;
buildRuntimeExpressionDataForFlowNodeInstance(config: FlowNodeExpressionBuilderConfig): RuntimeExpressionParameters;
protected configure<TToken extends object>(identity: Identity, options: ProcessStartOptionsInternal<TToken>, processInstanceData?: ProcessInstanceFromRepo): Promise<void>;
protected save(options: ProcessStartOptionsInternal<object>): Promise<void>;
protected executeProcess<TToken extends object>(options: ProcessStartOptionsInternal<TToken>): Promise<FlowNodeInstanceResult>;
protected resumeProcess(flowNodeInstances: Array<FlowNodeInstance>, flowNodeInstancesToResume?: Array<FlowNodeInstance>): Promise<FlowNodeInstanceResult>;
protected resumeProcessFromStart(allFlowNodeInstances: Array<FlowNodeInstance>): Promise<void>;
protected resumeProcessAtExitPoints(allFlowNodeInstances: Array<FlowNodeInstance>, flowNodeInstancesToResume: Array<FlowNodeInstance>): Promise<void>;
protected buildResumptionPromises(allFlowNodeInstances: Array<FlowNodeInstance>, flowNodeInstancesToResume: Array<FlowNodeInstance>): Promise<void>;
protected finish(): Promise<FlowNodeInstanceResult>;
protected finishWithError(error: BaseError): Promise<void>;
protected cleanup(): Promise<void>;
protected terminateSubprocesses(): Promise<void>;
protected changeOwner(newOwner: Identity, eventId: string): void;
protected updateCorrelationMetadata(newMetadata: Record<string, any>): void;
protected sendProcessStartingNotification(): void;
protected sendProcessResumedNotification(): void;
protected sendProcessOwnerChangedNotification(): void;
protected sendFinishedNotification(resultToken: FlowNodeInstanceResult, finalFlowNode: Model.Base.FlowNode): void;
protected sendErrorNotification(error: BaseError): void;
protected sendTerminationNotification(error: BaseError): void;
protected logProcessStarting<TPayload extends object>(payload?: TPayload): void;
protected logProcessStarted<TPayload extends object>(payload?: TPayload): void;
protected logProcessResumed<TPayload extends object>(payload?: TPayload): void;
protected logProcessFinished<TPayload extends object>(payload?: TPayload): void;
protected logProcessError(error: Error): void;
protected logProcessTerminated<TPayload extends object>(payload?: TPayload): void;
protected writeLog<TPayload extends object>(event: EngineEventType, logLevel: LogLevel, payload?: TPayload): void;
private checkForFlowNodeInstancesWithMultipleSuccessors;
protected getFlowNodeInstancesToResume(allFlowNodeInstances: Array<FlowNodeInstance>): Array<FlowNodeInstance>;
private retrieveCorrelationMetadata;
private getNotificationPayload;
private getEventType;
protected groupFlowNodeInstancesByResumingStrategy(flowNodeInstancesToResume: Array<FlowNodeInstance>): FlowNodeInstanceResumingGroup;
private isActivity;
private seedDataObjectsWithIntialValues;
}
export {};