@just-in/core
Version:
A TypeScript-first framework for building adaptive digital health interventions.
70 lines • 2.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTaskByName = exports.registerTask = void 0;
exports.executeTask = executeTask;
const handler_type_1 = require("./handler.type");
const logger_manager_1 = require("../logger/logger-manager");
const steps_helpers_1 = require("./steps.helpers");
const result_recorder_1 = require("./result-recorder");
const tasks = new Map();
/**
* Registers a Task by its name, setting its type to `TASK` in the process.
* @param {TaskRegistration} task - The task to register, with the `type` set to `TASK`.
*/
const registerTask = (task) => {
tasks.set(task.name, { ...task, type: handler_type_1.HandlerType.TASK });
logger_manager_1.Log.info(`Task "${task.name}" registered successfully.`);
};
exports.registerTask = registerTask;
/**
* Retrieves a Task by its name.
* @param {string} name - The name of the Task to retrieve.
* @returns {Task | undefined} - The Task if found, or undefined otherwise.
*/
const getTaskByName = (name) => {
return tasks.get(name);
};
exports.getTaskByName = getTaskByName;
/**
* Executes a Task for a specific user and event.
*
* @param task - The Task to execute.
* @param event - The triggering event.
* @param user - The user for whom the Task is being executed.
*/
async function executeTask(task, event, user) {
const results = [];
try {
logger_manager_1.Log.info(`Executing task "${task.name}" for user "${user.id}" in event "${event.eventType}".`);
const shouldActivateResult = await (0, steps_helpers_1.executeStep)(handler_type_1.TaskStep.SHOULD_ACTIVATE, async () => Promise.resolve(task.shouldActivate(user, event)));
if (shouldActivateResult.result.status === 'success') {
results.push(shouldActivateResult);
const actionResult = await (0, steps_helpers_1.executeStep)(handler_type_1.TaskStep.DO_ACTION, async () => Promise.resolve(task.doAction(user, event, shouldActivateResult.result)));
results.push(actionResult);
}
else {
logger_manager_1.Log.dev(`Task "${task.name}" for user "${user.id}" in event "${event.eventType}" did not activate.`);
return;
}
}
catch (error) {
logger_manager_1.Log.error(`Error executing task "${task.name}" for user "${user.id}": ${error}`);
results.push({
step: 'unknown',
result: { status: 'error', error },
timestamp: new Date(),
});
}
finally {
if (results.length > 0) {
await (0, result_recorder_1.handleTaskResult)({
event,
name: task.name,
steps: results,
user,
});
}
logger_manager_1.Log.info(`Completed execution of task "${task.name}" for user "${user.id}".`);
}
}
//# sourceMappingURL=task.manager.js.map