From a7f2453a5bfa226365d3c33e8fa765e4001ca7a5 Mon Sep 17 00:00:00 2001 From: engelhartrueben Date: Thu, 10 Oct 2024 11:24:45 -0400 Subject: [PATCH] redo job workflow --- .../service-vendors/twilio/index.js | 37 ++++++++++++++ src/workers/jobs.js | 48 +++++++------------ 2 files changed, 54 insertions(+), 31 deletions(-) diff --git a/src/extensions/service-vendors/twilio/index.js b/src/extensions/service-vendors/twilio/index.js index 53605e493..321b0e661 100644 --- a/src/extensions/service-vendors/twilio/index.js +++ b/src/extensions/service-vendors/twilio/index.js @@ -138,6 +138,42 @@ export function errorDescription(errorCode) { }; } +export const addDeactivatedPhoneNumbers = async ( + organization, + date +) => { + const { accountSid, authToken } = await getMessageServiceConfig( + "twilio", + organization + ); + + const client = Twilio(accountSid, authToken); + + const addDeactivatedNumberToDataBase = async number => { + return await r.knex("deactivated_numbers").insert({ + date_deactivated: date, + phone_number: number + }) + } + + try { + // gets link to AWS bucket : 2 min expiration + const url = await client.messaging.v1 + .deactivations() + .fetch({ date }); + + // fetchs text file of deactivated numbers + const textList = await fetch(url.redirectTo).split("\n"); + + // add each number to the db + textList.map(number => { + addDeactivatedNumberToDataBase(number); + }); + } catch (err) { + throw Error(err); + } +} + export function addServerEndpoints(addPostRoute) { addPostRoute( "/twilio/:orgId?", @@ -1208,6 +1244,7 @@ export const fullyConfigured = async (organization, serviceManagerData) => { export default { syncMessagePartProcessing: !!process.env.JOBS_SAME_PROCESS, + addDeactivatedPhoneNumbers, addServerEndpoints, headerValidator, convertMessagePartsToMessage, diff --git a/src/workers/jobs.js b/src/workers/jobs.js index 883bf6869..7e6e76876 100644 --- a/src/workers/jobs.js +++ b/src/workers/jobs.js @@ -1461,40 +1461,26 @@ export async function deletePhoneNumbers(job) { * @returns { array } - Array of deactivated numbers */ export const addDeactivatedPhoneNumbers = async (job) => { - const regex = new RegExp('\d{4}-\d{2}-\d{2}'); - const { date } = JSON.parse(job.payload); - - let list; - - if (typeof(date) == "string" && !regex.test(date)) { - log.error("fetchDeactivatedPhoneNumbers: BAD FORMAT (date)"); - return []; - } - - if (!job.organization_id) { - log.error("fetchDeactivatedPhoneNumbers: organization_id is required"); - return []; - } - - const { authToken, accountSid } = await getMessageServiceConfig( - "twilio", - job.organization_id - ); - - const client = twilio(accountSid, authToken); try { - // gets link to AWS bucket : 2 min expiration - const url = await client.messaging.v1 - .deactivations() - .fetch({ date: date }); + const regex = new RegExp('\d{4}-\d{2}-\d{2}'); + const { date, organization_id } = JSON.parse(job.payload); + + let list; - // fetchs text file of deactivated numbers - const fetchTextList = fetch(url.redirectTo); + if (typeof(date) == "string" && !regex.test(date)) { + throw Error("fetchDeactivatedPhoneNumbers: BAD FORMAT (date)"); + } + + if (!organization_id) { + throw Error("fetchDeactivatedPhoneNumbers: organization_id is required"); + } - // returns array of deactivated numbers - list = (await (await fetchTextList).text()).split("\n"); - log.info(`${job.id} - Gathered deactivated number(s) from ${job.data}`); + // TO DO: add call to twilio service vender addDeactivatedPhoneNumbers + log.info(`${job.id} - Gathered deactivated number(s) for ${date}`); } catch (err) { - log.error(`fetchDeactivatedPhoneNumbers JOB ${job.id} FAILED: ${err}`); + log.error(`JOB ${job.id} FAILED: ${err.message}`, err); + console.log(`JOB ${job.id} full job error`, err); + } finally { + await defensivelyDeleteJob(job); } } \ No newline at end of file