diff --git a/lib/models/account.js b/lib/models/account.js index ba4abc58..beb38343 100644 --- a/lib/models/account.js +++ b/lib/models/account.js @@ -34,7 +34,7 @@ AND effective_end_date IS NULL AND pending=0`; const updatePaymentInfoSql = `UPDATE account_subscriptions -SET last4 = ?, exp_month = ?, exp_year = ?, card_type = ? +SET last4 = ?, stripe_payment_method_id=?, exp_month = ?, exp_year = ?, card_type = ? WHERE account_sid = ? AND effective_end_date IS NULL`; @@ -206,10 +206,10 @@ class Account extends Model { } static async updatePaymentInfo(logger, account_sid, pm) { - const {card} = pm; + const {id, card} = pm; const last4_encrypted = encrypt(card.last4); await promisePool.execute(updatePaymentInfoSql, - [last4_encrypted, card.exp_month, card.exp_year, card.brand, account_sid]); + [last4_encrypted, id, card.exp_month, card.exp_year, card.brand, account_sid]); } static async provisionPendingSubscription(logger, account_sid, products, payment_method, subscription_id) { diff --git a/lib/routes/api/forgot-password.js b/lib/routes/api/forgot-password.js index 8f1f92b0..816fcbb5 100644 --- a/lib/routes/api/forgot-password.js +++ b/lib/routes/api/forgot-password.js @@ -6,6 +6,7 @@ const {validateEmail, emailSimpleText} = require('../../utils/email-utils'); const {promisePool} = require('../../db'); const {cacheClient} = require('../../helpers'); const sysError = require('../error'); +const { assert } = require('@jambonz/lamejs/src/js/common'); const sql = `SELECT * from users user LEFT JOIN accounts AS acc ON acc.account_sid = user.account_sid @@ -26,7 +27,8 @@ function createOauthEmailText(provider) { } function createResetEmailText(link) { - const baseUrl = 'http://localhost:3001'; + assert(process.env.JAMBONZ_BASE_URL, 'process.env.JAMBONZ_BASE_URL is missing'); + const baseUrl = process.env.JAMBONZ_BASE_URL; return `Hi there! diff --git a/lib/routes/api/register.js b/lib/routes/api/register.js index 300cf066..f36d6d2d 100644 --- a/lib/routes/api/register.js +++ b/lib/routes/api/register.js @@ -16,8 +16,9 @@ const insertUserSql = `INSERT into users (user_sid, account_sid, name, email, provider, provider_userid, email_validated) values (?, ?, ?, ?, ?, ?, 1)`; const insertUserLocalSql = `INSERT into users -(user_sid, account_sid, name, email, email_activation_code, email_validated, provider, hashed_password) -values (?, ?, ?, ?, ?, 0, 'local', ?)`; +(user_sid, account_sid, name, email, email_activation_code, email_validated, provider, +hashed_password, service_provider_sid) +values (?, ?, ?, ?, ?, 0, 'local', ?, ?)`; const insertAccountSql = `INSERT into accounts (account_sid, service_provider_sid, name, is_active, webhook_secret, trial_end_date) values (?, ?, ?, ?, ?, CURDATE() + INTERVAL 21 DAY)`; @@ -36,7 +37,7 @@ const insertSignupHistorySql = `INSERT into signup_history values (?, ?)`; const addLocalUser = async(logger, user_sid, account_sid, - name, email, email_activation_code, passwordHash) => { + name, email, email_activation_code, passwordHash, service_provider_sid) => { const [r] = await promisePool.execute(insertUserLocalSql, [ user_sid, @@ -44,7 +45,8 @@ const addLocalUser = async(logger, user_sid, account_sid, name, email, email_activation_code, - passwordHash + passwordHash, + service_provider_sid ]); debug({r}, 'Result from adding user'); }; @@ -145,7 +147,7 @@ router.post('/', async(req, res) => { const user = await doGithubAuth(logger, req.body); logger.info({user}, 'retrieved user details from github'); Object.assign(userProfile, { - name: user.name, + name: user.email, email: user.email, email_validated: user.email_validated, avatar_url: user.avatar_url, @@ -157,7 +159,7 @@ router.post('/', async(req, res) => { const user = await doGoogleAuth(logger, req.body); logger.info({user}, 'retrieved user details from google'); Object.assign(userProfile, { - name: user.name || user.email, + name: user.email || user.email, email: user.email, email_validated: user.verified_email, picture: user.picture, @@ -170,7 +172,7 @@ router.post('/', async(req, res) => { logger.info({user}, 'retrieved user details for local provider'); debug({user}, 'retrieved user details for local provider'); Object.assign(userProfile, { - name: user.name, + name: user.email, email: user.email, provider: 'local', email_activation_code: user.email_activation_code @@ -280,7 +282,8 @@ router.post('/', async(req, res) => { const passwordHash = await generateHashedPassword(req.body.password); debug(`hashed password: ${passwordHash}`); await addLocalUser(logger, userProfile.user_sid, userProfile.account_sid, - userProfile.name, userProfile.email, userProfile.email_activation_code, passwordHash); + userProfile.name, userProfile.email, userProfile.email_activation_code, + passwordHash, req.body.service_provider_sid); debug('added local user'); } else { @@ -327,7 +330,7 @@ router.post('/', async(req, res) => { await addLocalUser(logger, userProfile.user_sid, userProfile.account_sid, userProfile.name, userProfile.email, userProfile.email_activation_code, - passwordHash); + passwordHash, req.body.service_provider_sid); /* note: we deactivate the old user once the new email is validated */ } @@ -349,6 +352,8 @@ router.post('/', async(req, res) => { const token = jwt.sign({ user_sid: userProfile.user_sid, account_sid: userProfile.account_sid, + service_provider_sid: req.body.service_provider_sid, + scope: 'account', email: userProfile.email, name: userProfile.name }, process.env.JWT_SECRET, { expiresIn }); diff --git a/lib/routes/api/users.js b/lib/routes/api/users.js index 45a655b3..655627fe 100644 --- a/lib/routes/api/users.js +++ b/lib/routes/api/users.js @@ -338,8 +338,8 @@ router.put('/:user_sid', async(req, res) => { //if (req.user.user_sid && req.user.user_sid !== user_sid) return res.sendStatus(403); if (!hasAdminAuth && - !(hasAccountAuth && req.user.account_sid === user[0].account_sid) && - !(hasServiceProviderAuth && req.user.service_provider_sid === user[0].service_provider_sid) && + !(hasAccountAuth && user[0] && req.user.account_sid === user[0].account_sid) && + !(hasServiceProviderAuth && user[0] && req.user.service_provider_sid === user[0].service_provider_sid) && (req.user.user_sid && req.user.user_sid !== user_sid)) { return res.sendStatus(403); } diff --git a/lib/utils/email-utils.js b/lib/utils/email-utils.js index e15d8b83..829e0bea 100644 --- a/lib/utils/email-utils.js +++ b/lib/utils/email-utils.js @@ -47,12 +47,14 @@ const sendEmailByCustomVendor = async(logger, from, to, subject, text) => { }; const sendEmailByMailgun = async(logger, from, to, subject, text) => { + if (!process.env.MAILGUN_API_KEY) throw new Error('MAILGUN_API_KEY env variable is not defined!'); + if (!process.env.MAILGUN_DOMAIN) throw new Error('MAILGUN_DOMAIN env variable is not defined!'); + const mg = mailgun.client({ username: 'api', - key: process.env.MAILGUN_API_KEY + key: process.env.MAILGUN_API_KEY, + ...(process.env.MAILGUN_URL && {url: process.env.MAILGUN_URL}) }); - if (!process.env.MAILGUN_API_KEY) throw new Error('MAILGUN_API_KEY env variable is not defined!'); - if (!process.env.MAILGUN_DOMAIN) throw new Error('MAILGUN_DOMAIN env variable is not defined!'); try { const res = await mg.messages.create(process.env.MAILGUN_DOMAIN, { diff --git a/lib/utils/free_plans.json b/lib/utils/free_plans.json index 4dca62bd..eeb2e7ce 100644 --- a/lib/utils/free_plans.json +++ b/lib/utils/free_plans.json @@ -2,7 +2,7 @@ "trial": [ { "category": "voice_call_session", - "quantity": 20 + "quantity": 5 }, { "category": "device", diff --git a/package-lock.json b/package-lock.json index dd1939a2..07cc878c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "helmet": "^5.1.0", "ibm-watson": "^7.1.2", "jsonwebtoken": "^9.0.0", - "mailgun.js": "^3.7.3", + "mailgun.js": "^9.1.2", "microsoft-cognitiveservices-speech-sdk": "^1.24.1", "mysql2": "^2.3.3", "nocache": "3.0.4", @@ -3521,19 +3521,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -3694,14 +3681,6 @@ "node": ">=0.10" } }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "engines": { - "node": ">= 6" - } - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4662,19 +4641,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", - "engines": { - "node": "^10.17.0 || >=12.3.0" - }, - "peerDependenciesMeta": { - "domexception": { - "optional": true - } - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -6445,14 +6411,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", @@ -6461,57 +6419,6 @@ "graceful-fs": "^4.1.9" } }, - "node_modules/ky": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", - "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky?sponsor=1" - } - }, - "node_modules/ky-universal": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", - "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", - "dependencies": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" - }, - "engines": { - "node": ">=10.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" - }, - "peerDependencies": { - "ky": ">=0.17.0", - "web-streams-polyfill": ">=2.0.0" - }, - "peerDependenciesMeta": { - "web-streams-polyfill": { - "optional": true - } - } - }, - "node_modules/ky-universal/node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", - "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" - }, - "engines": { - "node": "^10.17 || >=12.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6599,32 +6506,36 @@ } }, "node_modules/mailgun.js": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mailgun.js/-/mailgun.js-3.7.3.tgz", - "integrity": "sha512-DHP9v6dNPRM2puOx4HVJVjQKWzgzpQ5Fh1ICW632qaDVgd/QqGRhOjCoHe12JJqrFkhgDvXBhENYeZDHYdkJHQ==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mailgun.js/-/mailgun.js-9.1.2.tgz", + "integrity": "sha512-CuJe7m175FclZuMAaGElpkwSnb3a2d1Q0JPdIFuTuvynREcd9PSYpy1q0F+GLTlhK2UjUKd3JkJJacv5aRRHyA==", "dependencies": { + "axios": "^1.3.3", "base-64": "^1.0.0", - "bluebird": "^3.7.2", - "ky": "^0.25.1", - "ky-universal": "^0.8.2", - "url": "^0.11.0", - "url-join": "0.0.1", - "web-streams-polyfill": "^3.0.1", - "webpack-merge": "^5.4.0" + "url-join": "^4.0.1" } }, - "node_modules/mailgun.js/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "node_modules/mailgun.js/node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, - "node_modules/mailgun.js/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "node_modules/mailgun.js/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, "node_modules/make-dir": { @@ -7850,15 +7761,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -8394,17 +8296,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9207,9 +9098,9 @@ } }, "node_modules/url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "node_modules/url-parse": { "version": "1.5.10", @@ -9320,31 +9211,11 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/websocket": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", @@ -9463,11 +9334,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -12447,16 +12313,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, "cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -12584,11 +12440,6 @@ "assert-plus": "^1.0.0" } }, - "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -13329,11 +13180,6 @@ "reusify": "^1.0.4" } }, - "fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==" - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -14650,11 +14496,6 @@ "safe-buffer": "^5.0.1" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, "klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", @@ -14663,31 +14504,6 @@ "graceful-fs": "^4.1.9" } }, - "ky": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", - "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==" - }, - "ky-universal": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", - "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", - "requires": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" - }, - "dependencies": { - "node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", - "requires": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" - } - } - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -14766,32 +14582,33 @@ } }, "mailgun.js": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/mailgun.js/-/mailgun.js-3.7.3.tgz", - "integrity": "sha512-DHP9v6dNPRM2puOx4HVJVjQKWzgzpQ5Fh1ICW632qaDVgd/QqGRhOjCoHe12JJqrFkhgDvXBhENYeZDHYdkJHQ==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mailgun.js/-/mailgun.js-9.1.2.tgz", + "integrity": "sha512-CuJe7m175FclZuMAaGElpkwSnb3a2d1Q0JPdIFuTuvynREcd9PSYpy1q0F+GLTlhK2UjUKd3JkJJacv5aRRHyA==", "requires": { + "axios": "^1.3.3", "base-64": "^1.0.0", - "bluebird": "^3.7.2", - "ky": "^0.25.1", - "ky-universal": "^0.8.2", - "url": "^0.11.0", - "url-join": "0.0.1", - "web-streams-polyfill": "^3.0.1", - "webpack-merge": "^5.4.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + "url-join": "^4.0.1" + }, + "dependencies": { + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } } } @@ -15688,11 +15505,6 @@ "side-channel": "^1.0.4" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" - }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -16076,14 +15888,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -16679,9 +16483,9 @@ } }, "url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "url-parse": { "version": "1.5.10", @@ -16778,25 +16582,11 @@ } } }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, "websocket": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", @@ -16896,11 +16686,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index e8be3f90..db9a7733 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "helmet": "^5.1.0", "ibm-watson": "^7.1.2", "jsonwebtoken": "^9.0.0", - "mailgun.js": "^3.7.3", + "mailgun.js": "^9.1.2", "microsoft-cognitiveservices-speech-sdk": "^1.24.1", "mysql2": "^2.3.3", "nocache": "3.0.4",