From ebb06680907fbe088b53bd9998aa2d9468a6d6e5 Mon Sep 17 00:00:00 2001 From: EmyRukundo Date: Tue, 2 Jul 2019 09:42:11 +0200 Subject: [PATCH] ft-add-notification-when-article-blocked --- src/api/controllers/articlesController.js | 18 +++++- src/api/controllers/auth.js | 43 +++++-------- src/helpers/MailTemplate.helper.js | 44 ------------- src/helpers/NotifyAuthorOnArticleBlock.js | 40 ++++++++++++ src/helpers/emailTemplete.js | 10 +-- src/helpers/emailTempleteUnBlock.js | 41 ++++++++++++ src/helpers/emailTempleteblock.js | 42 +++++++++++++ src/helpers/emailverifiyTemplete.js | 48 ++++++++++++++ src/helpers/mailer/SendAnyEmail.js | 22 +++++++ src/helpers/mailer/index.js | 3 - src/helpers/mailer/sendMail.js | 46 -------------- src/helpers/notifications/Notify.js | 2 +- .../notifications/NotifyForBookmarks.js | 2 +- .../seeders/20190618062925-test-user.js | 17 +++++ .../seeders/20190620204605-articles-test.js | 2 +- test/mailTemplate.test.js | 15 ----- test/sendMail.test.js | 23 ------- yarn.lock | 62 +++++++++---------- 18 files changed, 279 insertions(+), 201 deletions(-) delete mode 100644 src/helpers/MailTemplate.helper.js create mode 100644 src/helpers/NotifyAuthorOnArticleBlock.js create mode 100644 src/helpers/emailTempleteUnBlock.js create mode 100644 src/helpers/emailTempleteblock.js create mode 100644 src/helpers/emailverifiyTemplete.js create mode 100644 src/helpers/mailer/SendAnyEmail.js delete mode 100644 src/helpers/mailer/index.js delete mode 100644 src/helpers/mailer/sendMail.js delete mode 100644 test/mailTemplate.test.js delete mode 100644 test/sendMail.test.js diff --git a/src/api/controllers/articlesController.js b/src/api/controllers/articlesController.js index afba7c3..1ec3bfb 100644 --- a/src/api/controllers/articlesController.js +++ b/src/api/controllers/articlesController.js @@ -4,11 +4,15 @@ import models from '../../sequelize/models'; import readTime from '../../helpers/ReadTime.helper'; import eventEmitter from '../../helpers/notifications/EventEmitter'; import findUser from '../../helpers/FindUser'; +import AuthorNotifier from '../../helpers/NotifyAuthorOnArticleBlock'; +const { + notifyAuthorblock, notifyAuthorUnblock +} = AuthorNotifier; const { - Article, User, + Article, LikeDislike, ReportedArticles, BlockedArticles, @@ -431,6 +435,9 @@ class articlesController { const reporterUsername = await ReportedArticles.findOne({ where: { slug } }); + const { dataValues: { email, lastName } } = await User.findOne({ + where: { id: article.authorId } + }); const username = !reporterUsername ? null : reporterUsername.dataValues.username; @@ -449,6 +456,7 @@ class articlesController { { blocked: true }, { where: { id: responce.articleId } } ); + await notifyAuthorblock({ email, lastName }); res.status(201).send({ status: 201, data: { @@ -466,9 +474,15 @@ class articlesController { */ static async unBlockArticle(req, res) { const { slug } = req.params; - const { id } = await Article.findOne({ where: { slug } }); + const { id, authorId } = await Article.findOne({ where: { slug } }); + + const { dataValues: { email, lastName } } = await User.findOne({ + where: { id: authorId } + }); + BlockedArticles.destroy({ where: { articleId: id } }).then(async () => { await Article.update({ blocked: false }, { where: { slug } }); + await notifyAuthorUnblock({ email, lastName, slug }); res.status(200).send({ status: 200, data: { diff --git a/src/api/controllers/auth.js b/src/api/controllers/auth.js index 4f13b8e..4370f7d 100644 --- a/src/api/controllers/auth.js +++ b/src/api/controllers/auth.js @@ -1,12 +1,12 @@ import jwt from 'jsonwebtoken'; import dotenv from 'dotenv'; -import nodemailer from 'nodemailer'; import { omit } from 'lodash'; import tokenHelper from '../../helpers/Token.helper'; -import Mailhelper from '../../helpers/SendMail.helper'; import HashHelper from '../../helpers/hashHelper'; import db from '../../sequelize/models/index'; import templete from '../../helpers/emailTemplete'; +import verifyTemplete from '../../helpers/emailverifiyTemplete'; +import sendEmail from '../../helpers/mailer/SendAnyEmail'; const { generateToken, decodeToken } = tokenHelper; const { User, Blacklist, Opt } = db; @@ -59,14 +59,17 @@ class AuthController { userId: newUser.id, type: 'inapp' }); - Mailhelper.sendMail({ - to: newUser.email, - names: `${newUser.firstName} ${newUser.lastName}`, - subject: 'Welcome to Authorshaven', - message: 'Thank you for choosing Authorshaven', - token + const htmlToSend = verifyTemplete.sendVerification(`${newUser.firstName} ${newUser.lastName}`, newUser.email, token); + sendEmail({ email: newUser.email }, htmlToSend, 'Welcome to Authorshaven').then(() => { + res.status(201).send({ + status: 201, + data: { + message: `Reset link sent to your email <${newUser.email}>`, + email: `${newUser.email}`, + token + } + }); }); - res.status(201).json({ status: 201, message: 'We have sent an email to you to verify your account', @@ -210,32 +213,14 @@ class AuthController { const { firstName, lastName, email } = user.dataValues; const link = `${process.env.BASE_URL}/api/auth/reset/${token}`; const mail = { - firstName, - lastName, - link, - email + firstName, lastName, link, email }; - - const transport = nodemailer.createTransport({ - service: 'gmail', - auth: { - user: process.env.AUTHOSHAVEN_USER, - pass: process.env.AUTHOSHAVEN_PASS - } - }); const htmlToSend = templete.getPasswordResetTemplete( mail.firstName, mail.lastName, mail.link ); - const mailOptions = { - from: 'Authors Haven', - to: `${mail.email}`, - subject: ' Password Reset', - text: 'Hello there', - html: htmlToSend - }; - transport.sendMail(mailOptions, async () => { + sendEmail(mail, htmlToSend, 'Password Reset').then(() => { res.status(201).send({ status: 201, data: { diff --git a/src/helpers/MailTemplate.helper.js b/src/helpers/MailTemplate.helper.js deleted file mode 100644 index 95f659f..0000000 --- a/src/helpers/MailTemplate.helper.js +++ /dev/null @@ -1,44 +0,0 @@ -import dotenv from 'dotenv'; - -dotenv.config(); - -const mailTemplate = ({ - to, - token, - names -}) => { - const template = ` -
-
-
- Authors Haven - Team Tesla -
-
-
-
-

- Well ${names}, congratulations for choosing AuthorsHaven. - To verify that ${to} is your email, could you please click this link below to verify your AuthorsHaven's account? -
- Click here to verify your account -
- Here there is the link below where you can visit Andela and get more information about what's Andela - -

- Visit Andela's website -
-
-
- Andela, Team @Tesla - Cohort 5 -
-
-
- Copyright, 2019
- Andela, Team Tesla -
-
- `; - return template; -}; - -export default mailTemplate; diff --git a/src/helpers/NotifyAuthorOnArticleBlock.js b/src/helpers/NotifyAuthorOnArticleBlock.js new file mode 100644 index 0000000..0f4b07d --- /dev/null +++ b/src/helpers/NotifyAuthorOnArticleBlock.js @@ -0,0 +1,40 @@ +import sendEmail from './mailer/SendAnyEmail'; +import Template from './emailTempleteblock'; +import TemplateUnblock from './emailTempleteUnBlock'; + +/** + * @author EmyRukundo + * @class AuthController + * @description this class performs the whole authentication + */ +class notifyAuthor { + /** + * + * @param {Object} data - Request object + * @param {Object} res - Response object + * @returns {Object} - Response object + */ + static async notifyAuthorblock(data) { + const mail = { + lastName: data.lastName, email: data.email + }; + const htmlToSend = Template.articleBlockedTemplate(mail.lastName); + await sendEmail(mail, htmlToSend, 'Notification'); + } + + /** + * + * @param {Object} data - Request object + * @param {Object} res - Response object + * @returns {Object} - Response object + */ + static async notifyAuthorUnblock(data) { + const link = `${process.env.BASE_URL}/api/articles/${data.slug}`; + const mailUnblock = { + lastName: data.lastName, email: data.email + }; + const htmlToSendU = TemplateUnblock.articleUnBlockedTemplate(mailUnblock.lastName, link); + await sendEmail(mailUnblock, htmlToSendU, 'Congratulation'); + } +} +export default notifyAuthor; diff --git a/src/helpers/emailTemplete.js b/src/helpers/emailTemplete.js index 57491a6..d7799f9 100644 --- a/src/helpers/emailTemplete.js +++ b/src/helpers/emailTemplete.js @@ -2,19 +2,19 @@ * @class ResetPassword * @description Authentication based class * */ -class Templete { +class Template { /** * Verify token middleware * @param {String} firstname - Request * @param {String} lastname - Response - * @param {String} token -EmailTemplete + * @param {String} token -EmailTemplate * @returns {String} The response String */ static getPasswordResetTemplete(firstname, lastname, token) { return `
-
+
Authors Haven
@@ -23,7 +23,7 @@ class Templete { You Recently requested a password reset for your Authors Haven Account, Click the the Button below to reset it.
- +

If you did not request a password reset please ignore this email or reply to let us know. @@ -45,4 +45,4 @@ class Templete { } } -export default Templete; +export default Template; diff --git a/src/helpers/emailTempleteUnBlock.js b/src/helpers/emailTempleteUnBlock.js new file mode 100644 index 0000000..df13fad --- /dev/null +++ b/src/helpers/emailTempleteUnBlock.js @@ -0,0 +1,41 @@ +/** + * @class ResetPassword + * @description Authentication based class + * */ +class TemplateUnblock { +/** + * Verify token middleware + * @param {String} lastname - Request + * @param {string} link - Article link + * @returns {String} The response String + */ + static articleUnBlockedTemplate(lastname, link) { + return ` +
+
+
+ Authors Haven +
+
+

+

Dear ${lastname}


+ Congratulation!! Your article is unblocked on our site, you can visit your article here ${link}
+
+

+ Visit Andela's website +
+
+
+ Authors Haven +
+
+
+ Copyright, 2019
+ Authors Haven +
+
+ `; + } +} + +export default TemplateUnblock; diff --git a/src/helpers/emailTempleteblock.js b/src/helpers/emailTempleteblock.js new file mode 100644 index 0000000..d5ba4d2 --- /dev/null +++ b/src/helpers/emailTempleteblock.js @@ -0,0 +1,42 @@ +/** + * @class ResetPassword + * @description Authentication based class + * */ +class Template { +/** + * Verify token middleware + * @param {String} lastname - Request + * @param {String} token -EmailTemplate + * @returns {String} The response String + */ + static articleBlockedTemplate(lastname) { + return ` +
+
+
+ Authors Haven +
+
+

+

Dear ${lastname}


+ Your article is blocked on our site because it doesn't follow our terms and conditions
+
+ If you feel it's just a mistake, you can contact administrator +

+ Visit Andela's website +
+
+
+ Authors Haven +
+
+
+ Copyright, 2019
+ Authors Haven +
+
+ `; + } +} + +export default Template; diff --git a/src/helpers/emailverifiyTemplete.js b/src/helpers/emailverifiyTemplete.js new file mode 100644 index 0000000..cc56578 --- /dev/null +++ b/src/helpers/emailverifiyTemplete.js @@ -0,0 +1,48 @@ +/** + * @class Template + * @description Authentication based class + * */ +class Template { + /** + * Verifiy Template + * @param {String} names -EmailTemplate + * @param {String} to -EmailTemplate + * @param {String} token -EmailTemplate + * @returns {String} The response String + */ + static sendVerification(names, to, token) { + return ` +
+
+
+ Authors Haven - Team Tesla +
+
+
+
+

+ Well ${names}, congratulations for choosing AuthorsHaven. + To verify that ${to} is your email, could you please click this link below to verify your AuthorsHaven's account? +
+ Click here to verify your account +
+ Here there is the link below where you can visit Andela and get more information about what's Andela + +

+ Visit Andela's website +
+
+
+ Andela, Team @Tesla - Cohort 5 +
+
+
+ Copyright, 2019
+ Andela, Team Tesla +
+
+ `; + } +} + +export default Template; diff --git a/src/helpers/mailer/SendAnyEmail.js b/src/helpers/mailer/SendAnyEmail.js new file mode 100644 index 0000000..d9d11bd --- /dev/null +++ b/src/helpers/mailer/SendAnyEmail.js @@ -0,0 +1,22 @@ +import dotenv from 'dotenv'; +import nodemailer from 'nodemailer'; + +dotenv.config(); +const sendEmail = async (mail, htmlToSend, subject) => { + const transport = nodemailer.createTransport({ + service: 'gmail', + auth: { + user: process.env.AUTHOSHAVEN_USER, + pass: process.env.AUTHOSHAVEN_PASS + } + }); + const mailOptions = { + from: 'Authors Haven', + to: `${mail.email}`, + subject, + text: '', + html: htmlToSend + }; + transport.sendMail(mailOptions, async () => true); +}; +export default sendEmail; diff --git a/src/helpers/mailer/index.js b/src/helpers/mailer/index.js deleted file mode 100644 index e2fcb1e..0000000 --- a/src/helpers/mailer/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import sendMail from './sendMail'; - -export default sendMail; diff --git a/src/helpers/mailer/sendMail.js b/src/helpers/mailer/sendMail.js deleted file mode 100644 index 0538a51..0000000 --- a/src/helpers/mailer/sendMail.js +++ /dev/null @@ -1,46 +0,0 @@ -import dotenv from 'dotenv'; -import mailer from 'nodemailer'; -import template from './templates/notification'; - -dotenv.config(); - -export default async (to, action, data) => { - const { AUTHOSHAVEN_USER, AUTHOSHAVEN_PASS } = process.env; - const transport = mailer.createTransport({ - service: 'gmail', - auth: { - user: AUTHOSHAVEN_USER, - pass: AUTHOSHAVEN_PASS - } - }); - const notifier = template(data); - const message = { - to, - from: `Authors Haven <${process.env.AUTHOSHAVEN_USER}>`, - subject: notifier.subject, - text: 'Authors Haven', - html: ` -
-
-
- Authors Haven - Team Tesla -
-
- ${notifier.html} -
-
-
- Andela, Team Tesla - Cohort 5 -
-
-
- Copyright, 2019
- Andela, Team Tesla -
-
- `, - }; - - const response = await transport.sendMail(message); - return response; -}; diff --git a/src/helpers/notifications/Notify.js b/src/helpers/notifications/Notify.js index dac3da6..a4fe757 100644 --- a/src/helpers/notifications/Notify.js +++ b/src/helpers/notifications/Notify.js @@ -1,5 +1,5 @@ import db from '../../sequelize/models'; -import sendMail from '../mailer'; +import sendMail from '../mailer/SendAnyEmail'; import eventEmitter from './EventEmitter'; const { Notification, Opt, User } = db; diff --git a/src/helpers/notifications/NotifyForBookmarks.js b/src/helpers/notifications/NotifyForBookmarks.js index 32bd3a5..ba34a16 100644 --- a/src/helpers/notifications/NotifyForBookmarks.js +++ b/src/helpers/notifications/NotifyForBookmarks.js @@ -1,5 +1,5 @@ import db from '../../sequelize/models'; -import sendMail from '../mailer'; +import sendMail from '../mailer/SendAnyEmail'; import eventEmitter from './EventEmitter'; const { Notification, Opt, User } = db; diff --git a/src/sequelize/seeders/20190618062925-test-user.js b/src/sequelize/seeders/20190618062925-test-user.js index a8f7dba..1651c34 100644 --- a/src/sequelize/seeders/20190618062925-test-user.js +++ b/src/sequelize/seeders/20190618062925-test-user.js @@ -171,5 +171,22 @@ module.exports = { updatedAt: new Date(), roles: ['admin', 'moderator'] }, + { + firstName: 'SuperEmy', + lastName: 'SuperEmy', + username: 'EmyRukundo', + email: 'rukundoemma@gmail.com', + password: 'EmyRukundo00', + bio: '', + image: '', + dateOfBirth: '12/12/1900', + gender: '', + provider: '', + socialId: '', + verified: true, + createdAt: new Date(), + updatedAt: new Date(), + roles: ['admin', 'moderator'] + }, ], {}), }; diff --git a/src/sequelize/seeders/20190620204605-articles-test.js b/src/sequelize/seeders/20190620204605-articles-test.js index 47e5738..d04fca1 100644 --- a/src/sequelize/seeders/20190620204605-articles-test.js +++ b/src/sequelize/seeders/20190620204605-articles-test.js @@ -4,7 +4,7 @@ module.exports = { slug: '73H7812', title: 'How to survive at Andela', description: 'YoYo', - authorId: 1, + authorId: 11, blocked: false, body: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.', diff --git a/test/mailTemplate.test.js b/test/mailTemplate.test.js deleted file mode 100644 index 3d56767..0000000 --- a/test/mailTemplate.test.js +++ /dev/null @@ -1,15 +0,0 @@ -import { expect } from 'chai'; -import mailTemplate from '../src/helpers/MailTemplate.helper'; - -const mailTo = 'elie.mugenzi@andela.com'; -const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoyLCJmaXJzdE5hbWUiOiJFbGllIiwibGFzdE5hbWUiOiJNdWdlbnppIiwiZW1haWwiOiJlbGllQGdtYWlsLmNvbSIsInBhc3N3b3JkIjoiJDJiJDA4JEc1ZHBOTlhQamtwUnp6MnhQaDRQVi5pWUtLZmhTYnNuREM5QnRwZk9VenhjdFZBb1RmTEgyIiwidXNlcm5hbWUiOiJlbGllIiwiYmlvIjpudWxsLCJnZW5kZXIiOiJNIiwidmVyaWZpZ'; -const names = 'Elie Mugenzi'; - -describe('Mail Template Tests', () => { - const template = mailTemplate({ - to: mailTo, - token, - names - }); - expect(template).to.be.a('string'); -}); diff --git a/test/sendMail.test.js b/test/sendMail.test.js deleted file mode 100644 index ab0d6c6..0000000 --- a/test/sendMail.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import { expect } from 'chai'; -import sendMail from '../src/helpers/mailer'; - -describe('Should send email successfully', () => { - const email = 'eliemugenzi@gmail.com'; - const action = 'Greeting'; - const data = { - resource: 'articles', - action: 'comment', - user: { - id: 1, - email: 'eliemugenzi@gmail.com', - username: 'eliemugenzi' - }, - inAppMessage: 'Hello Elie', - emailMessage: 'Hello Elie' - }; - - it('Can send email', async () => { - const response = await sendMail(email, action, data); - expect(response).to.be.an('object'); - }); -}); diff --git a/yarn.lock b/yarn.lock index a4c95e8..2d25288 100644 --- a/yarn.lock +++ b/yarn.lock @@ -678,9 +678,9 @@ integrity sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A== "@hapi/hoek@8.x.x": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.0.1.tgz#9712fa2ad124ac64668ab06ba847b1eaf83a03fd" - integrity sha512-cctMYH5RLbElaUpZn3IJaUj9QNQD8iXDnl7xNY6KB1aFD2ciJrwpo3kvZowIT75uA+silJFDnSR2kGakALUymg== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.0.2.tgz#f63a5ff00e891a4e7aa98f11119f9515c6672032" + integrity sha512-O6o6mrV4P65vVccxymuruucb+GhP2zl9NLCG8OdoFRS8BEGw3vwpPp20wpAtpbQQxz1CEUtmxJGgWhjq1XA3qw== "@hapi/joi@^15.0.3": version "15.1.0" @@ -1414,6 +1414,11 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +confusing-browser-globals@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.7.tgz#5ae852bd541a910e7ffb2dbb864a2d21a36ad29b" + integrity sha512-cgHI1azax5ATrZ8rJ+ODDML9Fvu67PimB6aNxBrc/QwSaDaM9eTfIEUHx3bBLJJ82ioSb+/5zfsMCCEJax3ByQ== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1772,9 +1777,9 @@ ejs@^2.6.1: integrity sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q== electron-to-chromium@^1.3.164: - version "1.3.180" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.180.tgz#8e8c6be930d137e88cf2946ad2ec6521d24ba70e" - integrity sha512-jwI82/63GeH7f08IR+4v/tbGM4DMAApMZO0SXLcC0np4lcqWjQBl0MIHkfXEqesLc55+NhVVX8g7eFlamEWoNQ== + version "1.3.183" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.183.tgz#d6ecf177d3388ae5913844ea46b4b4c9cc726e52" + integrity sha512-WbKCYs7yAFOfpuoa2pK5kbOngriUtlPC+8mcQW5L/686wv04w7hYXfw5ScDrsl9kixFw1SPsALEob5V/gtlDxw== emoji-regex@^7.0.1: version "7.0.3" @@ -1885,13 +1890,13 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= eslint-config-airbnb-base@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" - integrity sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw== + version "13.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943" + integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w== dependencies: - eslint-restricted-globals "^0.1.1" + confusing-browser-globals "^1.0.5" object.assign "^4.1.0" - object.entries "^1.0.4" + object.entries "^1.1.0" eslint-import-resolver-node@^0.3.2: version "0.3.2" @@ -1926,11 +1931,6 @@ eslint-plugin-import@^2.17.3: read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-restricted-globals@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" - integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -3931,7 +3931,7 @@ object.assign@4.1.0, object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.0.4: +object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== @@ -4465,9 +4465,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: - version "1.1.33" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.33.tgz#5533d9384ca7aab86425198e10e8053ebfeab661" - integrity sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" + integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== pstree.remy@^1.1.6: version "1.1.7" @@ -4850,9 +4850,9 @@ semver@4.3.2: integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= semver@^6.0.0, semver@^6.1.1: - version "6.1.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.3.tgz#ef997a1a024f67dd48a7f155df88bb7b5c6c3fc7" - integrity sha512-aymF+56WJJMyXQHcd4hlK4N75rwj5RQpfW8ePlQnJsTYOBLlLbcIErR/G1s9SkIvKBqOudR3KAx4wEqP+F1hNQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== send@0.17.1: version "0.17.1" @@ -4873,15 +4873,15 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -sequelize-pool@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-2.2.0.tgz#fd4eb05ccefb5df5c23d2cc6fd934c20fd9c5dab" - integrity sha512-N/cYyxNHShfANGXAhHtMExjWNr+eYCS4/pF5fs5fvPYxn1VgUhEX8kDmVV5bNS0gZwt55fjU9Sgg48k3Dy/uMg== +sequelize-pool@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-2.3.0.tgz#64f1fe8744228172c474f530604b6133be64993d" + integrity sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA== sequelize@^5.8.7: - version "5.9.0" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.9.0.tgz#8c5e6e681a8ef451aa6148ac9fb7a25f27ad4ccc" - integrity sha512-MQ5OFIhqs3IlJb//JbYlJ3LE3x+eG2j/AlzA8YbdP45fppLLqI8k7ivWHsPXh4VuEWBuoX5mUkM5zqdkM9KJOg== + version "5.9.1" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.9.1.tgz#11a5da77c0bc5179bf85b3324b4d761cf89f4acc" + integrity sha512-3vGl4zKWh+J0nMeH7UEy1Puxg6H4rpTnD2ilP3EFPWvL9ynm/f5ClJKkfkl7y1gReIiWV6QXB8iEREyxxwUcDA== dependencies: bluebird "^3.5.0" cls-bluebird "^2.1.0" @@ -4893,7 +4893,7 @@ sequelize@^5.8.7: moment-timezone "^0.5.21" retry-as-promised "^3.1.0" semver "^6.1.1" - sequelize-pool "^2.2.0" + sequelize-pool "^2.3.0" toposort-class "^1.0.1" uuid "^3.2.1" validator "^10.11.0"