@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
171 lines • 8.35 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initialize = initialize;
exports.triggerMessageEvent = triggerMessageEvent;
exports.triggerMessageStartEvent = triggerMessageStartEvent;
exports.triggerSignalEvent = triggerSignalEvent;
exports.triggerSignalStartEvent = triggerSignalStartEvent;
const dayjs_1 = __importDefault(require("dayjs"));
const uuid = __importStar(require("uuid"));
const processcube_engine_sdk_1 = require("@5minds/processcube_engine_sdk");
const IocRegistrations_1 = require("../../Contracts/IocRegistrations");
let container;
const logger = new processcube_engine_sdk_1.Logger('extensions:trigger_events');
let messageEventService;
let signalEventService;
function initialize(iocContainer) {
container = iocContainer;
messageEventService = container.get(IocRegistrations_1.IocRegistrationKeys.core.services.MessageEventService);
signalEventService = container.get(IocRegistrations_1.IocRegistrationKeys.core.services.SignalEventService);
}
async function triggerMessageEvent(messageName, payload, processInstanceId, identity, correlationId, messageChannel, givenEventId, resolver) {
const identityToUse = await getInternalIdentity(identity);
const eventId = givenEventId ?? uuid.v4();
ensureHasClaim(identityToUse, processcube_engine_sdk_1.claims.canTriggerSignals);
logger.debug(`Received "triggerMessageEvent" from Extension (Event ID: ${eventId}) for message ${messageName}, directed at Process Instance "${processInstanceId}" through channel "${messageChannel}"`);
throwAndConfirmEventNonBlocking(async () => {
await messageEventService.throwMessage({
messageReference: messageName,
currentToken: payload,
targetProcessInstanceId: processInstanceId,
identity: identity,
correlationId: correlationId,
messageChannel,
}, true);
}, eventId, resolver, correlationId, processInstanceId);
return eventId;
}
async function triggerMessageStartEvent(messageName, payload, identity, correlationId, messageChannel, givenEventId, resolver) {
const identityToUse = await getInternalIdentity(identity);
const eventId = givenEventId ?? uuid.v4();
ensureHasClaim(identityToUse, processcube_engine_sdk_1.claims.canTriggerMessages);
logger.debug(`Received "triggerMessageStartEvent" from Extension (Event ID: ${eventId}) for message ${messageName} through channel "${messageChannel}"`);
throwAndConfirmEventNonBlocking(async () => {
await messageEventService.throwStartMessage({
messageReference: messageName,
currentToken: payload,
identity: identity,
correlationId: correlationId,
messageChannel: messageChannel,
}, true);
}, eventId, resolver, correlationId);
return eventId;
}
async function triggerSignalEvent(signalName, payload, processInstanceId, identity, correlationId, signalChannel, givenEventId, resolver) {
const identityToUse = await getInternalIdentity(identity);
const eventId = givenEventId ?? uuid.v4();
ensureHasClaim(identityToUse, processcube_engine_sdk_1.claims.canTriggerSignals);
logger.debug(`Received "triggerSignalEvent" from Extension (Event ID: ${eventId}) for message "${signalName}" directed at Process Instance "${processInstanceId}" through channel "${signalChannel}"`);
throwAndConfirmEventNonBlocking(async () => {
await signalEventService.throwSignal({
signalReference: signalName,
currentToken: payload,
targetProcessInstanceId: processInstanceId,
identity: identity,
correlationId: correlationId,
signalChannel: signalChannel,
}, true, eventId);
}, eventId, resolver, correlationId, processInstanceId);
return eventId;
}
async function triggerSignalStartEvent(signalName, payload, identity, correlationId, signalChannel, givenEventId, resolver) {
const identityToUse = await getInternalIdentity(identity);
const eventId = givenEventId ?? uuid.v4();
ensureHasClaim(identityToUse, processcube_engine_sdk_1.claims.canTriggerSignals);
logger.debug(`Received "triggerSignalStartEvent" from Extension (Event ID: ${eventId}) for message ${signalName} through channel "${signalChannel}"`);
throwAndConfirmEventNonBlocking(async () => {
await signalEventService.throwStartSignal({
signalReference: signalName,
currentToken: payload,
identity: identity,
correlationId: correlationId,
signalChannel: signalChannel,
}, true);
}, eventId, resolver, correlationId);
return eventId;
}
function throwAndConfirmEventNonBlocking(eventThrower, eventId, resolver, correlationId, processInstanceId) {
eventThrower().then(() => {
logger.debug(`Event with ID ${eventId} was successfully processed. Sending confirmation back to extension.`, { eventId, correlationId, processInstanceId });
logEventAcknowledgement(eventId, correlationId, processInstanceId);
if (resolver != null) {
resolver(eventId);
}
});
}
async function logEventAcknowledgement(eventId, correlationId, processInstanceId) {
const eventMiddlewareHandler = container.get(IocRegistrations_1.IocRegistrationKeys.internal.EventMiddlewareHandler);
await eventMiddlewareHandler.triggerEvent({
eventType: processcube_engine_sdk_1.EngineEventType.OnEventProcessed,
eventId: eventId,
timestamp: dayjs_1.default.utc().toDate(),
logLevel: processcube_engine_sdk_1.LogLevel.info,
correlationId: correlationId,
processInstanceId: processInstanceId,
processModelId: undefined,
processModelName: undefined,
processDefinitionHash: undefined,
processDefinitionId: undefined,
}, {
correlationId: correlationId,
correlationMetadata: {
correlationId: correlationId,
},
processInstanceMetadata: {
processInstanceId: processInstanceId,
},
allowNonObjectResults: false,
});
}
async function getInternalIdentity(identity) {
const identityService = container.get(IocRegistrations_1.IocRegistrationKeys.internal.IdentityService);
if (!identity) {
return identityService.getIdentityForExtensionAdapters();
}
return identityService.getIdentity({ token: identity.token, userId: identity.userId });
}
function ensureHasClaim(identity, claimName) {
const iamService = container.get(IocRegistrations_1.IocRegistrationKeys.internal.IamService);
const isSuperAdmin = iamService.checkIfUserIsSuperAdmin(identity);
if (isSuperAdmin) {
return;
}
iamService.ensureHasClaim(identity, claimName);
}
//# sourceMappingURL=TriggerEvents.js.map