tuain-bpm-lib
Version:
Servicio de gestión de manejo de procesos de la plataforma Tuain
161 lines (146 loc) • 4.64 kB
JavaScript
const axios = require('axios');
const {
process: {
emmiterTypes: {
taskStart: TASKSTART, taskComplete: TASKCOMPLETE, taskClose: TASKCLOSE,
eventClose: EVENTCLOSE, eventComplete: EVENTCOMPLETE,
},
},
} = require('../../../config');
async function defineEmmiters() {
this.callbackSets = {
[TASKSTART]: {},
[TASKCOMPLETE]: {},
[TASKCLOSE]: {},
[EVENTCLOSE]: {},
[EVENTCOMPLETE]: {},
};
// Funciones de evaluación de destinos de gateways
this.gatewayDestinationValidations = {};
// Control de temporizadores
this.refreshTimer = null;
this.currentTimers = [];
}
async function execCustomCallback(eventType, eventName, eventObject) {
const callbackFunction = this.callbackSets?.[eventType]?.[eventName] ?? null;
const callbackResult = (callbackFunction) ? await callbackFunction(eventObject) : null;
return callbackResult;
}
async function callWebhook(webhook, eventData) {
try {
const response = await axios.post(webhook, {
data: { ...eventData },
});
this.logger.log({
level: 'info',
label: 'procEventEmmiter',
action: 'callWebHook',
message: `Consumo webhook ${webhook}: ${response?.status ?? '200'}/${response?.data ?? ''}`,
});
} catch (error) {
this.logger.log({
level: 'error',
label: 'procEventEmmiter',
action: 'callWebHook',
message: `Error consumiendo webhook ${error}`,
});
}
}
function subscribeTaskStart(name, callback) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'subscribeTaskStart',
message: `Se registra subscripción al inicio de la tarea ${name}`,
});
this.callbackSets[TASKSTART][name] = callback;
}
function subscribeTaskCompletion(name, callback) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'subscribeTaskCompletion',
message: `Se registra subscripción a la finalización de la tarea ${name}`,
});
this.callbackSets[TASKCOMPLETE][name] = callback;
}
function subscribeEvent(name, callback) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'subscribeEvent',
message: `Se registra subscripción a la ocurrencia del evento ${name}`,
});
this.callbackSets[EVENTCOMPLETE][name] = callback;
}
function externalSubscribeTaskStart(name, webhook) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'externalSubscribeTaskStart',
message: `Se registra subscripción externa al inicio de la tarea ${name}`,
});
this.subscribeTaskStart(name, eventData => callWebhook(webhook, eventData));
}
function externalSubscribeTaskCompletion(name, webhook) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'externalSubscribeTaskCompletion',
message: `Se registra subscripción externa a la finalizaciópn de la tarea ${name}`,
});
this.subscribeTaskCompletion(name, eventData => callWebhook(webhook, eventData));
}
function externalSubscribeEvent(name, webhook) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'externalSubscribeEvent',
message: `Se registra subscripción externa a la ocurrencia del evento ${name}`,
});
this.subscribeEvent(name, eventData => callWebhook(webhook, eventData));
}
function taskClosure(name, callback) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'taskClosure',
message: `Se registra callback de acción de cierre de la tarea ${name}`,
});
this.callbackSets[TASKCLOSE][name] = callback;
}
function eventClosure(name, callback) {
this.logger.log({
level: 'silly',
label: 'eventEmmiters',
action: 'eventClosure',
message: `Se registra callback de acción de cierre del evento ${name}`,
});
this.callbackSets[EVENTCLOSE][name] = callback;
}
function defineGatewayDestinationCallback(name, destination, callback) {
if (!this.gatewayDestinationValidations[name]) {
this.gatewayDestinationValidations[name] = {};
}
const gatewayValidations = this.gatewayDestinationValidations[name];
gatewayValidations[destination] = callback;
}
function getGatewayValudationFunction(name, destination) {
return this.gatewayDestinationValidations?.[name]?.[destination] ?? null;
}
module.exports = {
methods: {
defineEmmiters,
execCustomCallback,
subscribeTaskStart,
subscribeTaskCompletion,
taskClosure,
subscribeEvent,
eventClosure,
externalSubscribeTaskStart,
externalSubscribeTaskCompletion,
externalSubscribeEvent,
defineGatewayDestinationCallback,
getGatewayValudationFunction,
},
};