UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

151 lines • 8.88 kB
"use strict"; 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