From 8bcc0bd30132caa053a5acf6db4772a38f2a99ca Mon Sep 17 00:00:00 2001 From: Josh Worden Date: Wed, 20 May 2026 11:31:45 -0500 Subject: [PATCH] Send notification emails via @mindful-web/marko-web-mindful-email Drops the @sendgrid/mail dependency in favor of the unified Mindful email backend introduced in parameter1/mindful-web#210. SENDGRID_API_KEY and SENDGRID_FROM are replaced by MINDFUL_EMAIL_API_KEY and EMAIL_FROM. --- README.md | 7 +- docker-compose.yml | 4 +- services/graphql/package.json | 2 +- services/graphql/src/env.js | 3 +- services/graphql/src/mailer.js | 35 +++----- yarn.lock | 157 ++++++++++++++++++++------------- 6 files changed, 119 insertions(+), 89 deletions(-) diff --git a/README.md b/README.md index b58ef8fb..0afb7617 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ PLATFORM_URI=https://some.domain PLATFORM_LOGO=https://cdn.some.domain/some/path/to/some.img NOTIFICATION_TO=developer@southcomm.com -SENDGRID_FROM=root@localhost -SENDGRID_API_KEY=some-api-key +EMAIL_FROM=root@localhost +MINDFUL_EMAIL_API_KEY=some-api-key DEBUG=express:* MONGOOSE_DEBUG=1 @@ -57,5 +57,6 @@ TENANT_KEY= PLATFORM_URI= PLATFORM_LOGO= NOTIFICATION_TO= -SENDGRID_API_KEY= +EMAIL_FROM= +MINDFUL_EMAIL_API_KEY= ``` diff --git a/docker-compose.yml b/docker-compose.yml index 8578178b..0bfd4b2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,8 +55,8 @@ services: AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} MONGO_DSN: ${MONGO_DSN-mongodb://mongo/cuf} NOTIFICATION_TO: ${NOTIFICATION_TO-support@parameter1.com} - SENDGRID_API_KEY: ${SENDGRID_API_KEY} - SENDGRID_FROM: ${SENDGRID_FROM-no-reply@parameter1.com} + EMAIL_FROM: ${EMAIL_FROM-no-reply@parameter1.com} + MINDFUL_EMAIL_API_KEY: ${MINDFUL_EMAIL_API_KEY} FETCH_TIMEOUT: ${FETCH_TIMEOUT-30000} # Tenant-specific BASE4_API_URL: ${BASE4_API_URL} diff --git a/services/graphql/package.json b/services/graphql/package.json index 26763f99..39676bb4 100644 --- a/services/graphql/package.json +++ b/services/graphql/package.json @@ -12,8 +12,8 @@ }, "dependencies": { "@limit0/graphql-custom-types": "^1.0.1", + "@mindful-web/marko-web-mindful-email": "^1.60.0", "@parameter1/base-cms-db": "^2.45.0", - "@sendgrid/mail": "^6.3.1", "apollo-link-context": "^1.0.9", "apollo-link-error": "^1.1.1", "apollo-link-http": "^1.5.5", diff --git a/services/graphql/src/env.js b/services/graphql/src/env.js index fe4b1c52..ccbd416b 100644 --- a/services/graphql/src/env.js +++ b/services/graphql/src/env.js @@ -30,8 +30,7 @@ module.exports = cleanEnv(process.env, { AWS_S3_BUCKET: nonemptystr({ desc: 'The AWS S3 Bucket name to use for file uploads.', default: 'p1-cms-cuf-uploads' }), MONGO_DSN: nonemptystr({ desc: 'The MongoDB DSN to connect to.', default: 'mongodb://mongo/cuf' }), NOTIFICATION_TO: email({ desc: 'The email address notifications are sent to.' }), - SENDGRID_API_KEY: nonemptystr({ desc: 'The SendGrid API key for sending email.' }), - SENDGRID_FROM: nonemptystr({ desc: 'The from name to use when sending email via SendGrid, e.g. Foo ', default: 'no-reply@parameter1.com' }), + EMAIL_FROM: nonemptystr({ desc: 'The from name to use when sending email, e.g. Foo ', default: 'no-reply@parameter1.com' }), // Tenant-specific settings BASE4_API_URL: url({ desc: 'The management uri for the related platform tenant.' }), GRAPHQL_URI: url({ desc: 'The URI to access the BaseCMS GraphQL instance' }), diff --git a/services/graphql/src/mailer.js b/services/graphql/src/mailer.js index 2748aba4..03ce03a4 100644 --- a/services/graphql/src/mailer.js +++ b/services/graphql/src/mailer.js @@ -1,28 +1,13 @@ -const sgMail = require('@sendgrid/mail'); +const sendMail = require('@mindful-web/marko-web-mindful-email'); const render = require('./templates'); const { - SENDGRID_API_KEY, - SENDGRID_FROM, + EMAIL_FROM, NOTIFICATION_TO, LOGO_URL, CONTACT_URL, CONTACT_TEXT, } = require('./env'); -const send = ({ to, subject, html }) => { - const payload = { - to, - from: SENDGRID_FROM, - subject, - html, - }; - - sgMail.setApiKey(SENDGRID_API_KEY); - const promise = sgMail.send(payload); - promise.catch((e) => { throw e; }); - return promise; -}; - const common = { contactUrl: CONTACT_URL, contactText: CONTACT_TEXT, @@ -33,14 +18,22 @@ module.exports = { async notify(submission = {}, { req }) { const subject = 'A new company update requires review'; const html = await render('notify', { ...common, uri: `http://${req.get('host')}`, submission }); - const to = NOTIFICATION_TO; - return send({ to, subject, html }); + return sendMail({ + to: NOTIFICATION_TO, + from: EMAIL_FROM, + subject, + html, + }); }, async thank(submission, { req }) { const subject = 'Your requested updates have been received'; const html = await render('thankYou', { ...common, uri: `http://${req.get('host')}`, submission }); const { name, email } = submission; - const to = `${name} <${email}>`; - return send({ to, subject, html }); + return sendMail({ + to: `${name} <${email}>`, + from: EMAIL_FROM, + subject, + html, + }); }, }; diff --git a/yarn.lock b/yarn.lock index eabbffc2..acdf7bb5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1889,6 +1889,23 @@ dependencies: base64-url "^2.2.0" +"@mindful-web/env@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@mindful-web/env/-/env-1.0.0.tgz#3d5ddb0f57cc2ac410fbeceabdd3836ddb851e28" + integrity sha512-smfVw+iOraLbelFJ990UfmTm0/prfrISFyhZqCrZ35Co4pkERC55oXwoAth+IYxwWpP//BSOi9x4sGpva8QodQ== + dependencies: + envalid "^6.0.2" + validator "^13.9.0" + +"@mindful-web/marko-web-mindful-email@^1.60.0": + version "1.60.0" + resolved "https://registry.yarnpkg.com/@mindful-web/marko-web-mindful-email/-/marko-web-mindful-email-1.60.0.tgz#0f9ad502da3659fa192df2838ac9d1ba0abd5d33" + integrity sha512-lHaJvnFQjGnRlQ+Yfy2pCC5p6JLnyil6485gYuZYMlSFWnVwi60R3ONh8tPcyzLe6VF9anWlYAYPWtTBpUZGxA== + dependencies: + "@mindful-web/env" "^1.0.0" + debug "^4.1.1" + node-fetch "^2.6.9" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -2051,31 +2068,6 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@sendgrid/client@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@sendgrid/client/-/client-6.4.0.tgz#d58df30adea5d7d09e747e2b61f9f859deeda798" - integrity sha512-GcO+hKXMQiwN0xMGfPITArlj4Nab1vZsrsRLmsJlcXGZV1V1zQC6XuAWJv6MGDd0hr/jKaXmCJ1XMYkxIRQHFw== - dependencies: - "@sendgrid/helpers" "^6.4.0" - "@types/request" "^2.0.3" - request "^2.88.0" - -"@sendgrid/helpers@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@sendgrid/helpers/-/helpers-6.4.0.tgz#f9001cbe2f34e2c264d30fcf71aa5b9c3cde49aa" - integrity sha512-1dDDXauArHyxwTKFFfWvQpsijmwalyLgwoQJ3FRCssFq1RfqYDgFhRg0Xs3v/IXS2jkKWePSWiPORSR4Sysdpw== - dependencies: - chalk "^2.0.1" - deepmerge "^2.1.1" - -"@sendgrid/mail@^6.3.1": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@sendgrid/mail/-/mail-6.4.0.tgz#21d022f7fae57dcdc5910eeca5ed318df21e5f51" - integrity sha512-pVzbqbxhZ4FUN6iSIksRLtyXRPurrcee1i0noPDStDCLlHVwUR+TofeeKIFWGpIvbbk5UR6S6iV/U5ie8Kdblw== - dependencies: - "@sendgrid/client" "^6.4.0" - "@sendgrid/helpers" "^6.4.0" - "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -2103,11 +2095,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/caseless@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" - integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== - "@types/connect@*": version "3.4.32" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" @@ -2258,16 +2245,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/request@^2.0.3": - version "2.48.3" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.3.tgz#970b8ed2317568c390361d29c555a95e74bd6135" - integrity sha512-3Wo2jNYwqgXcIz/rrq18AdOZUQB8cQ34CXZo+LUwPJNpvRAL86+Kc2wwI8mqpz9Cr1V+enIox5v+WZhy/p3h8w== - dependencies: - "@types/caseless" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - "@types/serve-static@*": version "1.13.3" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" @@ -2281,11 +2258,6 @@ resolved "https://registry.yarnpkg.com/@types/symlink-or-copy/-/symlink-or-copy-1.2.0.tgz#4151a81b4052c80bc2becbae09f3a9ec010a9c7a" integrity sha512-Lja2xYuuf2B3knEsga8ShbOdsfNOtzT73GyJmZyY7eGl2+ajOqrs8yM5ze0fsSoYwvA6bw7/Qr7OZ7PEEmYwWg== -"@types/tough-cookie@*": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" - integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== - "@types/ws@^6.0.0": version "6.0.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.3.tgz#b772375ba59d79066561c8d87500144d674ba6b3" @@ -2673,6 +2645,13 @@ ansi-styles@^3.0.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansi-to-html@^0.6.6: version "0.6.13" resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.13.tgz#c72eae8b63e5ca0643aab11bfc6e6f2217425833" @@ -5228,6 +5207,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -5446,12 +5433,19 @@ color-convert@^1.3.0, color-convert@^1.8.2, color-convert@^1.9.0, color-convert@ dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -6133,11 +6127,6 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" - integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== - deepmerge@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" @@ -6353,6 +6342,11 @@ dotenv@^6.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" @@ -7485,6 +7479,16 @@ envalid@^4.1.4: meant "^1.0.1" validator "^10.11.0" +envalid@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/envalid/-/envalid-6.0.2.tgz#7139770e089acc945c0e47b5075d72915d8683e8" + integrity sha512-ChJb9a5rjwZ/NkcXfBrzEl5cFZaGLg38N7MlWJkv5qsmSypX2WJe28LkoAWcklC60nKZXYKRlBbsjuJSjYw0Xg== + dependencies: + chalk "^3.0.0" + dotenv "^8.2.0" + meant "^1.0.1" + validator "^13.0.0" + err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -8347,15 +8351,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -9066,6 +9061,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -11324,6 +11324,13 @@ node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0, node resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== +node-fetch@^2.6.9: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-gyp@^5.0.2: version "5.0.5" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" @@ -14433,6 +14440,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + symbol-observable@^1.0.2, symbol-observable@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -14807,6 +14821,11 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" @@ -15203,6 +15222,11 @@ validator@^10.11.0, validator@^10.8.0: resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== +validator@^13.0.0, validator@^13.9.0: + version "13.15.35" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.35.tgz#81cf455c51f15b69d8d340be5914f3fab00dbf7f" + integrity sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -15343,6 +15367,11 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -15417,6 +15446,14 @@ whatwg-mimetype@^2.2.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"