From dcbaa6bb2e16aeff171839fd48b1da93adf684ae Mon Sep 17 00:00:00 2001 From: Ion Caza Date: Thu, 17 Sep 2020 23:02:20 -0400 Subject: [PATCH] refactor: break out mail code (#10) Co-authored-by: Jef LeCompte --- src/index.js | 46 +++++++++++++--------------------------------- src/mailer.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 33 deletions(-) create mode 100644 src/mailer.js diff --git a/src/index.js b/src/index.js index 0b2d023..1e29058 100644 --- a/src/index.js +++ b/src/index.js @@ -1,42 +1,24 @@ +const mailer = require("./mailer") + const puppeteer = require("puppeteer"); const opn = require("opn"); -const nodemailer = require("nodemailer"); const timeout = 5000; const waitForTimeout = 1000; -const cartLink = - "https://store.nvidia.com/store/nvidia/en_US/buy/productID.5438481700/clearCart.yes/nextPage.QuickBuyCartPage"; - -const emailUsername = process.env.EMAIL_USERNAME; -const emailPassword = process.env.EMAIL_PASSWORD; - -const transporter = nodemailer.createTransport({ - service: "gmail", - auth: { - user: emailUsername, - pass: emailPassword, - }, -}); - -const mailOptions = { - from: emailUsername, - to: emailUsername, - subject: "NVIDIA - BUY NOW", - text: cartLink, -}; - async function buy() { const links = [ { name: "nvidia.com", url: "https://www.nvidia.com/en-us/geforce/buy/", - oosText: "out of stock" + oosText: ["out of stock"], + cartUrl: "https://store.nvidia.com/store/nvidia/en_US/buy/productID.5438481700/clearCart.yes/nextPage.QuickBuyCartPage" } ,{ name: "nvidia.com 2", url: "https://www.nvidia.com/en-us/shop/geforce/?page=1&limit=9&locale=en-us&search=3080", - oosText: ["out of stock"] + oosText: ["out of stock"], + cartUrl: "https://store.nvidia.com/store/nvidia/en_US/buy/productID.5438481700/clearCart.yes/nextPage.QuickBuyCartPage" } ,{ name: "bestbuy.com", @@ -116,16 +98,14 @@ async function goto(link) { } else { console.log("*** IN STOCK AT " + link.name.toUpperCase() + ", BUY NOW ***"); await page.screenshot({ path: `nvidia-${Date.now()}.png` }); - opn(link.url); - if (emailUsername && emailPassword) { - transporter.sendMail(mailOptions, function (error, info) { - if (error) { - console.log(error); - } else { - console.log("email sent: " + info.response); - } - }); + let clickUrl; + if (link.cartUrl) { + clickUrl = link.cartUrl + } else { + clickUrl = link.url } + opn(clickUrl); + mailer.send(clickUrl) } await browser.close(); diff --git a/src/mailer.js b/src/mailer.js new file mode 100644 index 0000000..a5f1ea8 --- /dev/null +++ b/src/mailer.js @@ -0,0 +1,34 @@ +const nodemailer = require("nodemailer"); + +const emailUsername = process.env.EMAIL_USERNAME; +const emailPassword = process.env.EMAIL_PASSWORD; + +const transporter = nodemailer.createTransport({ + service: "gmail", + auth: { + user: emailUsername, + pass: emailPassword, + }, +}); + +let mailOptions = { + from: emailUsername, + to: emailUsername, + subject: "NVIDIA - BUY NOW", + text: '', +}; + +function send(text) { + mailOptions.text = text; + if (emailUsername && emailPassword) { + transporter.sendMail(mailOptions, function (error, info) { + if (error) { + console.log(error); + } else { + console.log("email sent: " + info.response); + } + }); + } +} + +module.exports = { send } \ No newline at end of file