const path = require("path"); require("dotenv").config({ path: path.resolve( process.cwd(), `.env.${process.env.NODE_ENV || "development"}` ), }); const twilio = require("twilio"); const { phone } = require("phone"); const queries = require("../graphql-client/queries"); const logger = require("../utils/logger"); const client = twilio( process.env.TWILIO_AUTH_TOKEN, process.env.TWILIO_AUTH_KEY ); const { admin } = require("../firebase/firebase-handler"); const gqlClient = require("../graphql-client/graphql-client").client; exports.send = (req, res) => { const { to, messagingServiceSid, body, conversationid, selectedMedia, imexshopid, } = req.body; logger.log("sms-outbound", "DEBUG", req.user.email, null, { messagingServiceSid: messagingServiceSid, to: phone(to).phoneNumber, mediaUrl: selectedMedia.map((i) => i.src), text: body, conversationid, isoutbound: true, userid: req.user.email, image: req.body.selectedMedia.length > 0, image_path: req.body.selectedMedia.length > 0 ? selectedMedia.map((i) => i.src) : [], }); if ( !!to && !!messagingServiceSid && (!!body || !!selectedMedia.length > 0) && !!conversationid ) { client.messages .create({ body: body, messagingServiceSid: messagingServiceSid, to: phone(to).phoneNumber, mediaUrl: selectedMedia.map((i) => i.src), }) .then((message) => { let newMessage = { msid: message.sid, text: body, conversationid, isoutbound: true, userid: req.user.email, image: req.body.selectedMedia.length > 0, image_path: req.body.selectedMedia.length > 0 ? selectedMedia.map((i) => i.src) : [], }; gqlClient .request(queries.INSERT_MESSAGE, { msg: newMessage, conversationid }) .then((r2) => { //console.log("Responding GQL Message ID", JSON.stringify(r2)); logger.log("sms-outbound-success", "DEBUG", req.user.email, null, { msid: message.sid, conversationid, }); const data = { type: "messaging-outbound", conversationid: newMessage.conversationid || "", }; admin.messaging().send({ topic: `${imexshopid}-messaging`, data, }); res.sendStatus(200); }) .catch((e2) => { logger.log("sms-outbound-error", "ERROR", req.user.email, null, { msid: message.sid, conversationid, error: e2, }); //res.json({ success: false, message: e2 }); }); }) .catch((e1) => { //res.json({ success: false, message: error }); logger.log("sms-outbound-error", "ERROR", req.user.email, null, { conversationid, error: e1, }); }); } else { logger.log("sms-outbound-error", "ERROR", req.user.email, null, { type: "missing-parameters", messagingServiceSid: messagingServiceSid, to: phone(to).phoneNumber, text: body, conversationid, isoutbound: true, userid: req.user.email, image: req.body.selectedMedia.length > 0, image_path: req.body.selectedMedia.length > 0 ? selectedMedia.map((i) => i.src) : [], }); res .status(400) .json({ success: false, message: "Missing required parameter(s)." }); } };