@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
151 lines • 8.88 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProcessDefinitionApiServiceProxyConfiguration = exports.ProcessDefinitionApiService = void 0;
const inversify_1 = require("inversify");
const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk");
const index_1 = require("../../Contracts/index");
const index_2 = require("../../Core/index");
const Configurator_1 = __importDefault(require("../../Tools/Configurator"));
const index_3 = require("../../Tools/DatabaseAdaptersSequelize/index");
const index_4 = require("../../Tools/Iam/index");
const ProcessDefinitionMediator_1 = require("../../Tools/ProcessDefinitionMediator");
const NotificationService_1 = require("./NotificationService");
const ProcessDefinitionMapper_1 = __importDefault(require("./lib/ProcessDefinitionMapper"));
let ProcessDefinitionApiService = class ProcessDefinitionApiService {
coreAccess;
iamService;
logger;
notificationService;
processDefinitionMediator;
processInstanceDatabaseAdapter;
identityService;
internalIdentity;
config;
constructor(coreAccess, iamService, notificationService, processDefinitionMediator, processInstanceDatabaseAdapter, identityService) {
this.coreAccess = coreAccess;
this.iamService = iamService;
this.logger = new processcube_engine_sdk_1.Logger('api:process_definition_service');
this.notificationService = notificationService;
this.processDefinitionMediator = processDefinitionMediator;
this.processInstanceDatabaseAdapter = processInstanceDatabaseAdapter;
this.identityService = identityService;
this.config = Configurator_1.default.application();
}
initialize() {
this.internalIdentity = this.identityService.getInternalIdentity();
}
async getAll(identity, includeXml = false, includeCount = true, offset, limit) {
if (!limit || limit <= 0) {
limit = this.config.defaultResponseLimit;
}
const processDefinitionList = await this.processDefinitionMediator.getAll(identity, offset, limit, includeCount);
return {
processDefinitions: processDefinitionList.map((entry) => (0, ProcessDefinitionMapper_1.default)(entry, includeXml)),
totalCount: processDefinitionList.length,
};
}
async getById(identity, processDefinitionId, includeXml = false) {
const processDefinition = await this.processDefinitionMediator.getByName(identity, processDefinitionId);
const publicProcessDefinition = (0, ProcessDefinitionMapper_1.default)(processDefinition, includeXml);
return publicProcessDefinition;
}
async getByProcessModelId(identity, processModelId, includeXml = false) {
const processDefinition = await this.processDefinitionMediator.getByProcessModelId(identity, processModelId);
const publicProcessDefinition = (0, ProcessDefinitionMapper_1.default)(processDefinition, includeXml);
return publicProcessDefinition;
}
async persistProcessDefinitions(identity, xml, overwriteExisting) {
this.ensureHasClaim(identity, processcube_engine_sdk_1.claims.canWriteProcessModel);
await this.processDefinitionMediator.persistProcessDefinitions(identity, xml, overwriteExisting);
}
async deleteById(identity, processDefinitionId, deleteAllRelatedData) {
this.ensureHasClaim(identity, processcube_engine_sdk_1.claims.canDeleteProcessModel);
if (deleteAllRelatedData) {
await this.stopRunningProcessInstancesForProcessDefinition(identity, processDefinitionId);
}
this.logger.trace(`Deleting process definition ${processDefinitionId}`);
await this.processDefinitionMediator.deleteById(processDefinitionId, deleteAllRelatedData);
this.logger.info(`Deleted process definition ${processDefinitionId}`);
}
async stopRunningProcessInstancesForProcessDefinition(identity, processDefinitionId) {
this.logger.trace(`Retrieving list of running process instances for definition ${processDefinitionId}`);
const processInstances = await this.processInstanceDatabaseAdapter.getProcessInstancesByProcessDefinitionIdAndState(processDefinitionId, processcube_engine_sdk_1.ProcessInstanceState.running);
this.logger.trace(`Ensure that user can stop running process instances for definition ${processDefinitionId}`);
this.ensureProcessDefinitionIsNotInUse(identity, processDefinitionId, processInstances);
this.logger.trace(`Terminating all running process instances for definition ${processDefinitionId}`);
for (const processInstance of processInstances) {
await this.terminateProcessInstance(processInstance.processInstanceId);
}
this.logger.info(`Terminated all running process instances for definition ${processDefinitionId}`);
}
ensureProcessDefinitionIsNotInUse(identity, processDefinitionId, processInstances) {
const isSuperAdmin = this.iamService.checkIfUserIsSuperAdmin(identity);
if (isSuperAdmin) {
return;
}
const processIsInUse = processInstances.some((processInstance) => processInstance.ownerId !== identity.userId);
if (processIsInUse) {
throw new processcube_engine_sdk_1.ForbiddenError(`Cannot delete Process \`${processDefinitionId}\`, because it is currently being executed by another user.`);
}
}
async terminateProcessInstance(processInstanceId) {
await new Promise(async (resolve) => {
this.notificationService.onProcessTerminated(async (message) => {
if (message.processInstanceId === processInstanceId) {
resolve();
}
}, true, this.internalIdentity);
await this.coreAccess.killProcessInstance(this.internalIdentity, processInstanceId);
});
}
ensureHasClaim(identity, claimName) {
const isSuperAdmin = this.iamService.checkIfUserIsSuperAdmin(identity);
if (isSuperAdmin) {
return;
}
this.iamService.ensureHasClaim(identity, claimName);
}
};
exports.ProcessDefinitionApiService = ProcessDefinitionApiService;
__decorate([
(0, inversify_1.postConstruct)(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], ProcessDefinitionApiService.prototype, "initialize", null);
exports.ProcessDefinitionApiService = ProcessDefinitionApiService = __decorate([
(0, inversify_1.injectable)(),
__param(0, (0, inversify_1.inject)(index_1.IocRegistrationKeys.core.services.CoreAccess)),
__param(1, (0, inversify_1.inject)(index_1.IocRegistrationKeys.internal.IamService)),
__param(2, (0, inversify_1.inject)(index_1.IocRegistrationKeys.api.services.NotificationService)),
__param(3, (0, inversify_1.inject)(index_1.IocRegistrationKeys.internal.ProcessDefinitionMediator)),
__param(4, (0, inversify_1.inject)(index_1.IocRegistrationKeys.internal.ProcessInstanceDatabaseAdapter)),
__param(5, (0, inversify_1.inject)(index_1.IocRegistrationKeys.internal.IdentityService)),
__metadata("design:paramtypes", [index_2.CoreAccessService,
index_4.IamService,
NotificationService_1.NotificationService,
ProcessDefinitionMediator_1.ProcessDefinitionMediator,
index_3.ProcessInstanceDatabaseAdapter,
index_4.IdentityService])
], ProcessDefinitionApiService);
exports.ProcessDefinitionApiServiceProxyConfiguration = {
proxyKey: index_1.IocRegistrationKeys.api.services.ProcessDefinitionServiceProxy,
targetKey: index_1.IocRegistrationKeys.api.services.ProcessDefinitionService,
target: ProcessDefinitionApiService,
};
//# sourceMappingURL=ProcessDefinitionService.js.map