diff --git a/.env.example b/.env.example index 28218ca..2d8aa1d 100644 --- a/.env.example +++ b/.env.example @@ -10,10 +10,10 @@ CLUSTER_NAME=docker-cluster # ElasticApi key name NEXT_PUBLIC_ELASTIC_API_KEY_NAME=cm2d_api_key -# AWS SES credentials -AWS_ACCESS_KEY_ID=your_access_key_id_here -AWS_SECRET_ACCESS_KEY=your_secret_access_key_here -AWS_REGION=your_aws_region_here - -# The email address that sends the email -EMAIL_SOURCE=your_email_source_here +# Mailer +NODEMAILER_HOST=ex4.mail.ovh.net +NODEMAILER_PORT=587 +NODEMAILER_USER=user +NODEMAILER_PASSWORD=password +NODEMAILER_FROM=example@email.com +NODEMAILER_BASEURL=http://localhost:3000 diff --git a/README.md b/README.md index 6a857e1..97d2ccc 100644 --- a/README.md +++ b/README.md @@ -70,14 +70,16 @@ Il est maintenant possible de se connecter en utilisant l'adresse email et le mo ## Les variables d'environnement NextJS -| Nom de la variable | Description | -| --------------------- | ----------------------------------------------------------------------- | -| ELASTIC_HOST | L'URL du serveur Elasticsearch, ici configuré pour une instance locale. | -| ELASTIC_PASSWORD | Le mot de passe à utiliser pour se connecter à Elasticsearch. | -| AWS_ACCESS_KEY_ID | Votre ID de clé d'accès AWS pour AWS SES. | -| AWS_SECRET_ACCESS_KEY | Votre clé d'accès secrète AWS pour AWS SES. | -| AWS_REGION | La région AWS dans laquelle AWS SES est configuré. | -| EMAIL_SOURCE | L'adresse e-mail utilisée pour envoyer les e-mails. | +| Nom de la variable | Description | +| ------------------- | ---------------------------------------------------------------------------- | +| ELASTIC_HOST | L'URL du serveur Elasticsearch, ici configuré pour une instance locale. | +| ELASTIC_PASSWORD | Le mot de passe à utiliser pour se connecter à Elasticsearch. | +| NODEMAILER_HOST | Le host domain pour se connecter au SMTP. | +| NODEMAILER_PORT | Le port pour se connecter au SMTP. | +| NODEMAILER_USER | Identifiant pour l'authentification au SMTP. | +| NODEMAILER_PASSWORD | Mot de passe pour l'authentification au SMTP. | +| NODEMAILER_FROM | L'adresse e-mail utilisée pour envoyer les e-mails. | +| NODEMAILER_BASEURL | L'URL courante de l'application pour construire les liens envoyés par email. | ## Initialisation de l'environnement ELK @@ -180,39 +182,43 @@ Continous mode Date field for continous mode : `@timestamp` Delay : `60s` +## Docker production +### Créer les images docker -### Docker production - -## Créer les images docker ``` docker build -t cm2d-elasticsearch docker/elasticsearch docker build -t cm2d-kibana docker/kibana docker build --build-arg NEXT_PUBLIC_ELASTIC_API_KEY_NAME=${NEXT_PUBLIC_ELASTIC_API_KEY_NAME} -t cm2d-webapp webapp-next ``` -## Créer les réseaux docker +### Créer les réseaux docker + ``` docker network create elastic docker network create webapp ``` -## Elasticsearch +### Elasticsearch + ``` docker run -d -p 9200:9200 -p 9300:9300 --net elastic -v es_data:/usr/share/elasticsearch/data -v certs:/usr/share/elasticsearch/config/certs -e ELASTIC_PASSWORD=${ELASTIC_PASSWORD} --name elasticsearch cm2d-elasticsearch ``` -## Attacher le réseau webapp à Elasticsearch +### Attacher le réseau webapp à Elasticsearch + ``` docker network connect webapp elasticsearch ``` -## Kibana +### Kibana + ``` docker run -d -p 5601:5601 --net elastic -v kibana_data:/usr/share/kibana/data -v certs:/usr/share/kibana/config/certs -e ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD} --name kibana cm2d-kibana ``` -## Webapp +### Webapp + ``` docker run -d -p 3000:3000 --net webapp -v certs:/app/certs --env-file ${path_fichier_environnement} --name webapp cm2d-webapp -``` \ No newline at end of file +``` diff --git a/docker-compose.yaml b/docker-compose.yaml index 240eac3..4cef533 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -22,13 +22,13 @@ services: resources: limits: memory: 4G - + kibana: build: docker/kibana container_name: kibana ports: - 5601:5601 - depends_on: + depends_on: - elasticsearch volumes: - kibana_data:/usr/share/kibana/data @@ -47,7 +47,7 @@ services: depends_on: - elasticsearch ports: - - "3000:3000" + - '3000:3000' volumes: - certs:/app/certs networks: @@ -55,10 +55,12 @@ services: environment: - ELASTIC_HOST=${ELASTIC_HOST} - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - - AWS_REGION=${AWS_REGION} - - EMAIL_SOURCE=${EMAIL_SOURCE} + - NODEMAILER_HOST=${NODEMAILER_HOST} + - NODEMAILER_PORT=${NODEMAILER_PORT} + - NODEMAILER_USER=${NODEMAILER_USER} + - NODEMAILER_PASSWORD=${NODEMAILER_PASSWORD} + - NODEMAILER_FROM=${NODEMAILER_FROM} + - NODEMAILER_BASEURL=${NODEMAILER_BASEURL} volumes: certs: diff --git a/webapp-next/.env.example b/webapp-next/.env.example index 714d707..e5c2180 100644 --- a/webapp-next/.env.example +++ b/webapp-next/.env.example @@ -8,10 +8,10 @@ OPENAI_API_KEY=xxx # ElasticApi key name NEXT_PUBLIC_ELASTIC_API_KEY_NAME=cm2d_api_key -# AWS SES credentials -AWS_ACCESS_KEY_ID=your_access_key_id_here -AWS_SECRET_ACCESS_KEY=your_secret_access_key_here -AWS_REGION=your_aws_region_here - -# The email address that sends the email -EMAIL_SOURCE=your_email_source_here +# Mailer +NODEMAILER_HOST=ex4.mail.ovh.net +NODEMAILER_PORT=587 +NODEMAILER_USER=user +NODEMAILER_PASSWORD=password +NODEMAILER_FROM=example@email.com +NODEMAILER_BASEURL=http://localhost:3000 \ No newline at end of file diff --git a/webapp-next/Dockerfile b/webapp-next/Dockerfile index b76e926..a8db76b 100644 --- a/webapp-next/Dockerfile +++ b/webapp-next/Dockerfile @@ -21,10 +21,12 @@ FROM node:16-alpine3.17 AS builder ARG ELASTIC_HOST ARG ELASTIC_PASSWORD ARG NEXT_PUBLIC_ELASTIC_API_KEY_NAME -ARG AWS_ACCESS_KEY_ID -ARG AWS_SECRET_ACCESS_KEY -ARG AWS_REGION -ARG EMAIL_SOURCE +ARG NODEMAILER_HOST +ARG NODEMAILER_PORT +ARG NODEMAILER_USER +ARG NODEMAILER_PASSWORD +ARG NODEMAILER_FROM +ARG NODEMAILER_BASEURL WORKDIR /app COPY --from=deps /app/node_modules ./node_modules diff --git a/webapp-next/package.json b/webapp-next/package.json index 5b80f73..25adcec 100644 --- a/webapp-next/package.json +++ b/webapp-next/package.json @@ -22,7 +22,6 @@ "@types/react": "18.2.6", "@types/react-dom": "18.2.4", "@uidotdev/usehooks": "^2.1.1", - "aws-sdk": "^2.1392.0", "chart.js": "^4.3.0", "chartjs-adapter-moment": "^1.0.1", "date-fns": "^2.30.0", @@ -32,6 +31,7 @@ "js-cookie": "^3.0.5", "moment": "^2.29.4", "next": "13.4.1", + "nodemailer": "^6.9.5", "openai": "^3.2.1", "react": "18.2.0", "react-chartjs-2": "^5.2.0", diff --git a/webapp-next/pages/api/auth/index.ts b/webapp-next/pages/api/auth/index.ts index 1905fef..3c1bc46 100644 --- a/webapp-next/pages/api/auth/index.ts +++ b/webapp-next/pages/api/auth/index.ts @@ -1,18 +1,14 @@ -import { generateCode, getCodeEmailHtml, ELASTIC_API_KEY_NAME } from '@/utils/tools'; +import { sendMail } from '@/utils/mailter'; +import { + generateCode, + getCodeEmailHtml, + ELASTIC_API_KEY_NAME +} from '@/utils/tools'; import { Client } from '@elastic/elasticsearch'; import fs from 'fs'; import type { NextApiRequest, NextApiResponse } from 'next'; import path from 'path'; const tmpCodes = require('../../../utils/codes'); -import AWS from 'aws-sdk'; - -AWS.config.update({ - accessKeyId: process.env.AWS_ACCESS_KEY_ID, - secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, - region: process.env.AWS_REGION -}); - -const ses = new AWS.SES({ apiVersion: '2012-10-17' }); export default async function handler( req: NextApiRequest, @@ -28,9 +24,7 @@ export default async function handler( password }, tls: { - ca: fs.readFileSync( - path.resolve(process.cwd(), './certs/ca/ca.crt') - ), + ca: fs.readFileSync(path.resolve(process.cwd(), './certs/ca/ca.crt')), rejectUnauthorized: false } }); @@ -53,25 +47,12 @@ export default async function handler( } else { tmpCodes[username] = { code: generateCode(), apiKey: securityToken }; - await ses - .sendEmail({ - Destination: { - ToAddresses: [username] - }, - Message: { - Body: { - Text: { - Data: `Code de vérification : ${tmpCodes[username].code}` - }, - Html: { Data: getCodeEmailHtml(tmpCodes[username].code) } - }, - Subject: { - Data: `Votre code d\'authentification` - } - }, - Source: process.env.EMAIL_SOURCE as string - }) - .promise(); + await sendMail( + "Votre code d'authentification", + username, + getCodeEmailHtml(tmpCodes[username].code), + `Code de vérification : ${tmpCodes[username].code}` + ); res.status(200).send({ response: 'ok' }); } diff --git a/webapp-next/utils/mailter.ts b/webapp-next/utils/mailter.ts new file mode 100644 index 0000000..b33b89d --- /dev/null +++ b/webapp-next/utils/mailter.ts @@ -0,0 +1,33 @@ +var nodemailer = require('nodemailer'); + +export async function sendMail( + subject: string, + toEmail: string, + html: string, + text: string +) { + var transporter = nodemailer.createTransport({ + host: process.env.NODEMAILER_HOST, + port: process.env.NODEMAILER_PORT, + auth: { + user: process.env.NODEMAILER_USER, + pass: process.env.NODEMAILER_PASSWORD + } + }); + + var mailOptions = { + from: process.env.NODEMAILER_FROM, + to: toEmail, + subject: subject, + html, + text + }; + + transporter.sendMail(mailOptions, function (error: any) { + if (error) { + throw new Error(error); + } else { + return true; + } + }); +} diff --git a/webapp-next/yarn.lock b/webapp-next/yarn.lock index d1f4c9b..3a24a7b 100644 --- a/webapp-next/yarn.lock +++ b/webapp-next/yarn.lock @@ -1467,22 +1467,6 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-sdk@^2.1392.0: - version "2.1392.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1392.0.tgz#280d7cdee5b24c7242c1ba32479ba467d83b073d" - integrity sha512-WWY3S4wyBzt+pkRcQ7il/wW6FvFvlkkXBXY34ZvuWd91fvI0ovuq1tmqq4eVlvLacblzUkGHgq7TejwpU67OIg== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.5.0" - axe-core@^4.6.2: version "4.7.0" resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz" @@ -1516,11 +1500,6 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - big-integer@^1.6.44: version "1.6.51" resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" @@ -1548,15 +1527,6 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - bundle-name@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz" @@ -2158,11 +2128,6 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -2515,16 +2480,6 @@ human-signals@^4.3.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore@^5.2.0: version "5.2.4" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" @@ -2551,7 +2506,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2572,7 +2527,7 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -is-arguments@^1.0.4, is-arguments@^1.1.1: +is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -2643,13 +2598,6 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -2735,7 +2683,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.9: version "1.1.10" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== @@ -2778,11 +2726,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" @@ -2793,11 +2736,6 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== - js-cookie@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" @@ -3006,6 +2944,11 @@ next@13.4.1: "@next/swc-win32-ia32-msvc" "13.4.1" "@next/swc-win32-x64-msvc" "13.4.1" +nodemailer@^6.9.5: + version "6.9.5" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.5.tgz#eaeae949c62ec84ef1e9128df89fc146a1017aca" + integrity sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" @@ -3233,21 +3176,11 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0: version "2.3.0" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -3432,16 +3365,6 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.1.3" is-regex "^1.1.4" -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - scheduler@^0.23.0: version "0.23.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" @@ -3769,14 +3692,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - use-callback-ref@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz" @@ -3797,22 +3712,6 @@ use-sync-external-store@^1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - warning@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -3841,7 +3740,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" -which-typed-array@^1.1.2, which-typed-array@^1.1.9: +which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== @@ -3870,19 +3769,6 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -xml2js@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" - integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"