UNPKG

@imsaeedafzal/queue-event

Version:

Queue Event

139 lines 5.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.scheduleJobAtDateTime = exports.enqueue = exports.deleteEvent = exports.createEvent = exports.initializeQueueEventManager = void 0; const qstash_1 = require("@upstash/qstash"); let qstashClient = null; const initializeQueueEventManager = (config) => { if (!config.token) { throw new Error("Token is required for queue initialization"); } qstashClient = new qstash_1.Client({ token: config.token, }); }; exports.initializeQueueEventManager = initializeQueueEventManager; const createEvent = async (eventInput, url, authorizationToken, delay = 0) => { if (!qstashClient) { throw new Error("Queue manager not initialized. Call initializeQueueManager first."); } try { const result = await qstashClient.publishJSON({ url: url, body: eventInput, delay: delay, headers: { Authorization: `Bearer ${authorizationToken}`, }, }); if (!result) { throw new Error("Failed to enqueue message"); } return result; } catch (error) { if (error instanceof Error) { if (error.message.includes("Queue manager not initialized")) { throw error; } throw new Error(`Failed to create queue event: ${error.message}`); } throw new Error("Failed to create queue event: Unknown error"); } }; exports.createEvent = createEvent; const deleteEvent = async (messageId) => { if (!qstashClient) { throw new Error("Queue manager not initialized. Call initializeQueueManager first."); } try { // First delete the existing message if it exists return await qstashClient.messages.delete(messageId); } catch (error) { if (error instanceof Error) { if (error.message.includes("Queue manager not initialized")) { throw error; } throw new Error(`Failed to delete event: ${error.message}`); } throw new Error("Failed to delete event: Unknown error"); } }; exports.deleteEvent = deleteEvent; const enqueue = async (queueName, queueMessageInput, url, authorizationToken, parallelism = 10) => { if (!qstashClient) { throw new Error("Queue manager not initialized. Call initializeQueueManager first."); } try { const queue = qstashClient.queue({ queueName }); await queue.upsert({ parallelism: parallelism, }); const result = await queue.enqueueJSON({ url: url, body: queueMessageInput, headers: { Authorization: "Bearer " + authorizationToken, }, }); if (!result) { throw new Error("Failed to enqueue message"); } return result; } catch (error) { if (error instanceof Error) { if (error.message.includes("Queue manager not initialized")) { throw error; } throw new Error(`Failed to enqueue message: ${error.message}`); } throw new Error("Failed to enqueue message: Unknown error"); } }; exports.enqueue = enqueue; const scheduleJobAtDateTime = async (jobInput, url, executionDateTime, authorizationToken) => { try { if (!qstashClient) { throw new Error("Queue manager not initialized. Call initializeQueueManager first."); } // Validate that the date is in the future if (executionDateTime.getTime() <= Date.now()) { throw new Error("Execution date must be in the future"); } const cronExpression = createOneTimeCronExpression(executionDateTime); const result = await qstashClient.schedules.create({ destination: url, cron: cronExpression, body: jobInput, headers: { Authorization: "Bearer " + authorizationToken, }, }); if (!result) { throw new Error("Failed to schedule job"); } return result; } catch (error) { if (error instanceof Error) { throw new Error(`Failed to schedule job at datetime: ${error.message}`); } throw new Error("Failed to schedule job at datetime: Unknown error"); } }; exports.scheduleJobAtDateTime = scheduleJobAtDateTime; /** * Creates a one-time cron expression for a specific date and time * @param dateTime - The target date and time for execution * @returns A cron expression that will trigger once at the specified time */ const createOneTimeCronExpression = (dateTime) => { const minutes = dateTime.getUTCMinutes(); const hours = dateTime.getUTCHours(); const dayOfMonth = dateTime.getUTCDate(); const month = dateTime.getUTCMonth() + 1; // getUTCMonth() returns 0-11 const dayOfWeek = dateTime.getUTCDay(); return `${minutes} ${hours} ${dayOfMonth} ${month} ${dayOfWeek}`; }; //# sourceMappingURL=queueManager.js.map