UNPKG

@just-in/core

Version:

A TypeScript-first framework for building adaptive digital health interventions.

70 lines 2.9 kB
"use strict"; 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