Explorar el Código

Allow invalid Message-IDs to be forwarded

Will Browning hace 3 años
padre
commit
154600c6c1

+ 1 - 0
app/CustomMailDriver/Mime/Crypto/OpenPGPEncrypter.php

@@ -162,6 +162,7 @@ class OpenPGPEncrypter
         $encryptedBody = $this->pgpEncryptString($signed, $this->recipientKey);
         $encryptedBody = $this->pgpEncryptString($signed, $this->recipientKey);
 
 
         $headers->setHeaderBody('Parameterized', 'Content-Type', 'multipart/encrypted');
         $headers->setHeaderBody('Parameterized', 'Content-Type', 'multipart/encrypted');
+        $headers->setHeaderParameter('Content-Type', 'micalg', null);
         $headers->setHeaderParameter('Content-Type', 'protocol', 'application/pgp-encrypted');
         $headers->setHeaderParameter('Content-Type', 'protocol', 'application/pgp-encrypted');
         $headers->setHeaderParameter('Content-Type', 'boundary', $boundary);
         $headers->setHeaderParameter('Content-Type', 'boundary', $boundary);
 
 

+ 0 - 106
app/CustomMailDriver/Mime/Part/TextPart.php

@@ -1,106 +0,0 @@
-<?php
-
-namespace App\CustomMailDriver\Mime\Part;
-
-use Symfony\Component\Mime\Exception\InvalidArgumentException;
-use Symfony\Component\Mime\Header\Headers;
-use Symfony\Component\Mime\Part\AbstractPart;
-
-class TextPart extends AbstractPart
-{
-    /** @internal */
-    protected $_headers;
-
-    private static $encoders = [];
-
-    private $body;
-    private $boundary;
-    private $charset;
-    private $subtype;
-    /**
-     * @var ?string
-     */
-    private $disposition;
-    private $name;
-    private $encoding;
-    private $seekable;
-
-    /**
-     * @param resource|string $body
-     */
-    public function __construct($body, ?string $boundary, ?string $charset = 'utf-8', string $subtype = 'plain', string $encoding = null)
-    {
-        unset($this->_headers);
-
-        parent::__construct();
-
-        if (!\is_string($body) && !\is_resource($body)) {
-            throw new \TypeError(sprintf('The body of "%s" must be a string or a resource (got "%s").', self::class, get_debug_type($body)));
-        }
-
-        $this->body = $body;
-        $this->boundary = $boundary;
-        $this->charset = $charset;
-        $this->subtype = $subtype;
-        $this->seekable = \is_resource($body) ? stream_get_meta_data($body)['seekable'] && 0 === fseek($body, 0, \SEEK_CUR) : null;
-
-        if (null === $encoding) {
-            $this->encoding = $this->chooseEncoding();
-        } else {
-            if ('quoted-printable' !== $encoding && 'base64' !== $encoding && '8bit' !== $encoding) {
-                throw new InvalidArgumentException(sprintf('The encoding must be one of "quoted-printable", "base64", or "8bit" ("%s" given).', $encoding));
-            }
-            $this->encoding = $encoding;
-        }
-    }
-
-    public function getMediaType(): string
-    {
-        return 'text';
-    }
-
-    public function getMediaSubtype(): string
-    {
-        return $this->subtype;
-    }
-
-    public function bodyToString(): string
-    {
-        return $this->getEncoder()->encodeString($this->getBody(), $this->charset);
-    }
-
-    public function bodyToIterable(): iterable
-    {
-        if (null !== $this->seekable) {
-            if ($this->seekable) {
-                rewind($this->body);
-            }
-            yield from $this->getEncoder()->encodeByteStream($this->body);
-        } else {
-            yield $this->getEncoder()->encodeString($this->body);
-        }
-    }
-
-    public function getPreparedHeaders(): Headers
-    {
-        $headers = parent::getPreparedHeaders();
-
-        $headers->setHeaderBody('Parameterized', 'Content-Type', $this->getMediaType().'/'.$this->getMediaSubtype());
-        if ($this->charset) {
-            $headers->setHeaderParameter('Content-Type', 'charset', $this->charset);
-        }
-        if ($this->name && 'form-data' !== $this->disposition) {
-            $headers->setHeaderParameter('Content-Type', 'name', $this->name);
-        }
-        $headers->setHeaderBody('Text', 'Content-Transfer-Encoding', $this->encoding);
-
-        if (!$headers->has('Content-Disposition') && null !== $this->disposition) {
-            $headers->setHeaderBody('Parameterized', 'Content-Disposition', $this->disposition);
-            if ($this->name) {
-                $headers->setHeaderParameter('Content-Disposition', 'name', $this->name);
-            }
-        }
-
-        return $headers;
-    }
-}

+ 51 - 0
app/CustomMailDriver/Validation/MessageIDValidation.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace Egulias\EmailValidator\Validation;
+
+use Egulias\EmailValidator\EmailLexer;
+use Egulias\EmailValidator\MessageIDParser;
+use Egulias\EmailValidator\Result\InvalidEmail;
+use Egulias\EmailValidator\Result\Reason\ExceptionFound;
+
+class MessageIDValidation implements EmailValidation
+{
+    /**
+     * @var array
+     */
+    private $warnings = [];
+
+    /**
+     * @var ?InvalidEmail
+     */
+    private $error;
+
+    public function isValid(string $email, EmailLexer $emailLexer): bool
+    {
+        $parser = new MessageIDParser($emailLexer);
+        try {
+            $result = $parser->parse($email);
+            $this->warnings = $parser->getWarnings();
+            // Allow invalid message-ids to be forwarded
+            // if ($result->isInvalid()) {
+            //     /** @psalm-suppress PropertyTypeCoercion */
+            //     $this->error = $result;
+            //     return false;
+            // }
+        } catch (\Exception $invalid) {
+            $this->error = new InvalidEmail(new ExceptionFound($invalid), '');
+            return false;
+        }
+
+        return true;
+    }
+
+    public function getWarnings(): array
+    {
+        return $this->warnings;
+    }
+
+    public function getError(): ?InvalidEmail
+    {
+        return $this->error;
+    }
+}

+ 3 - 3
app/Http/Controllers/Api/AliasController.php

@@ -21,9 +21,9 @@ class AliasController extends Controller
                 $direction = strpos($sort, '-') === 0 ? 'desc' : 'asc';
                 $direction = strpos($sort, '-') === 0 ? 'desc' : 'asc';
 
 
                 return $query->orderBy(ltrim($sort, '-'), $direction);
                 return $query->orderBy(ltrim($sort, '-'), $direction);
-            }, function ($query) {
-                return $query->latest();
-            })
+                }, function ($query) {
+                    return $query->latest();
+                })
             ->when($request->input('filter.active'), function ($query, $value) {
             ->when($request->input('filter.active'), function ($query, $value) {
                 $active = $value === 'true' ? true : false;
                 $active = $value === 'true' ? true : false;
 
 

+ 1 - 1
app/Mail/ForwardEmail.php

@@ -181,7 +181,7 @@ class ForwardEmail extends Mailable implements ShouldQueue, ShouldBeEncrypted
 
 
                 if ($this->originalSenderHeader) {
                 if ($this->originalSenderHeader) {
                     $message->getHeaders()
                     $message->getHeaders()
-                            ->addTextHeader('Sender', base64_decode($this->originalSenderHeader));
+                            ->addMailboxHeader('Sender', base64_decode($this->originalSenderHeader));
                 }
                 }
 
 
                 if ($this->emailInlineAttachments) {
                 if ($this->emailInlineAttachments) {

+ 2 - 0
composer.json

@@ -40,9 +40,11 @@
             "dont-discover": []
             "dont-discover": []
         }
         }
     },
     },
+    "exclude-from-classmap": ["vendor/egulias/email-validator/src/Validation/MessageIDValidation.php"],
     "autoload": {
     "autoload": {
         "psr-4": {
         "psr-4": {
             "App\\": "app/",
             "App\\": "app/",
+            "Egulias\\EmailValidator\\Validation\\": "app/CustomMailDriver/Validation/",
             "Database\\Factories\\": "database/factories/",
             "Database\\Factories\\": "database/factories/",
             "Database\\Seeders\\": "database/seeders/"
             "Database\\Seeders\\": "database/seeders/"
         }
         }

+ 21 - 21
composer.lock

@@ -4194,16 +4194,16 @@
         },
         },
         {
         {
             "name": "phpoffice/phpspreadsheet",
             "name": "phpoffice/phpspreadsheet",
-            "version": "1.23.0",
+            "version": "1.24.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
-                "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e"
+                "reference": "ebe8745c92a7cac4514d040758393b5399633b83"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/21e4cf62699eebf007db28775f7d1554e612ed9e",
-                "reference": "21e4cf62699eebf007db28775f7d1554e612ed9e",
+                "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/ebe8745c92a7cac4514d040758393b5399633b83",
+                "reference": "ebe8745c92a7cac4514d040758393b5399633b83",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -4231,15 +4231,15 @@
             },
             },
             "require-dev": {
             "require-dev": {
                 "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
                 "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
-                "dompdf/dompdf": "^1.0",
+                "dompdf/dompdf": "^1.0 || ^2.0",
                 "friendsofphp/php-cs-fixer": "^3.2",
                 "friendsofphp/php-cs-fixer": "^3.2",
                 "jpgraph/jpgraph": "^4.0",
                 "jpgraph/jpgraph": "^4.0",
-                "mpdf/mpdf": "8.0.17",
+                "mpdf/mpdf": "8.1.1",
                 "phpcompatibility/php-compatibility": "^9.3",
                 "phpcompatibility/php-compatibility": "^9.3",
                 "phpstan/phpstan": "^1.1",
                 "phpstan/phpstan": "^1.1",
                 "phpstan/phpstan-phpunit": "^1.0",
                 "phpstan/phpstan-phpunit": "^1.0",
                 "phpunit/phpunit": "^8.5 || ^9.0",
                 "phpunit/phpunit": "^8.5 || ^9.0",
-                "squizlabs/php_codesniffer": "^3.6",
+                "squizlabs/php_codesniffer": "^3.7",
                 "tecnickcom/tcpdf": "^6.4"
                 "tecnickcom/tcpdf": "^6.4"
             },
             },
             "suggest": {
             "suggest": {
@@ -4292,9 +4292,9 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
                 "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
-                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.23.0"
+                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.24.0"
             },
             },
-            "time": "2022-04-24T13:53:10+00:00"
+            "time": "2022-07-09T13:49:09+00:00"
         },
         },
         {
         {
             "name": "phpoption/phpoption",
             "name": "phpoption/phpoption",
@@ -5086,16 +5086,16 @@
         },
         },
         {
         {
             "name": "psy/psysh",
             "name": "psy/psysh",
-            "version": "v0.11.6",
+            "version": "v0.11.7",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/bobthecow/psysh.git",
                 "url": "https://github.com/bobthecow/psysh.git",
-                "reference": "3f5b5f8aaa979fbd0d1783173f4c82ad529fe621"
+                "reference": "77fc7270031fbc28f9a7bea31385da5c4855cb7a"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3f5b5f8aaa979fbd0d1783173f4c82ad529fe621",
-                "reference": "3f5b5f8aaa979fbd0d1783173f4c82ad529fe621",
+                "url": "https://api.github.com/repos/bobthecow/psysh/zipball/77fc7270031fbc28f9a7bea31385da5c4855cb7a",
+                "reference": "77fc7270031fbc28f9a7bea31385da5c4855cb7a",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -5156,9 +5156,9 @@
             ],
             ],
             "support": {
             "support": {
                 "issues": "https://github.com/bobthecow/psysh/issues",
                 "issues": "https://github.com/bobthecow/psysh/issues",
-                "source": "https://github.com/bobthecow/psysh/tree/v0.11.6"
+                "source": "https://github.com/bobthecow/psysh/tree/v0.11.7"
             },
             },
-            "time": "2022-07-03T16:40:23+00:00"
+            "time": "2022-07-07T13:49:11+00:00"
         },
         },
         {
         {
             "name": "ralouphie/getallheaders",
             "name": "ralouphie/getallheaders",
@@ -9179,16 +9179,16 @@
         },
         },
         {
         {
             "name": "friendsofphp/php-cs-fixer",
             "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.8.0",
+            "version": "v3.9.2",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
                 "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
-                "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3"
+                "reference": "9b23c42f4d063f9e3aad823500e0940348b5ed63"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3",
-                "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3",
+                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/9b23c42f4d063f9e3aad823500e0940348b5ed63",
+                "reference": "9b23c42f4d063f9e3aad823500e0940348b5ed63",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -9256,7 +9256,7 @@
             "description": "A tool to automatically fix PHP code style",
             "description": "A tool to automatically fix PHP code style",
             "support": {
             "support": {
                 "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
                 "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
-                "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0"
+                "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.9.2"
             },
             },
             "funding": [
             "funding": [
                 {
                 {
@@ -9264,7 +9264,7 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2022-03-18T17:20:59+00:00"
+            "time": "2022-07-11T17:53:00+00:00"
         },
         },
         {
         {
             "name": "hamcrest/hamcrest-php",
             "name": "hamcrest/hamcrest-php",

+ 1 - 1
config/mail.php

@@ -41,7 +41,7 @@ return [
             'encryption' => env('MAIL_ENCRYPTION', 'tls'),
             'encryption' => env('MAIL_ENCRYPTION', 'tls'),
             'username' => env('MAIL_USERNAME'),
             'username' => env('MAIL_USERNAME'),
             'password' => env('MAIL_PASSWORD'),
             'password' => env('MAIL_PASSWORD'),
-            'timeout' => null,
+            'timeout' => 60,
             'local_domain' => env('MAIL_EHLO_DOMAIN'),
             'local_domain' => env('MAIL_EHLO_DOMAIN'),
             'verify_peer' => env('MAIL_VERIFY_PEER', false),
             'verify_peer' => env('MAIL_VERIFY_PEER', false),
         ],
         ],

+ 139 - 124
package-lock.json

@@ -57,9 +57,9 @@
             }
             }
         },
         },
         "node_modules/@babel/compat-data": {
         "node_modules/@babel/compat-data": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
-            "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+            "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
             "engines": {
             "engines": {
                 "node": ">=6.9.0"
                 "node": ">=6.9.0"
             }
             }
@@ -301,9 +301,9 @@
             }
             }
         },
         },
         "node_modules/@babel/helper-module-transforms": {
         "node_modules/@babel/helper-module-transforms": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
-            "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz",
+            "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==",
             "dependencies": {
             "dependencies": {
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-module-imports": "^7.18.6",
                 "@babel/helper-module-imports": "^7.18.6",
@@ -311,8 +311,8 @@
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/template": "^7.18.6",
                 "@babel/template": "^7.18.6",
-                "@babel/traverse": "^7.18.6",
-                "@babel/types": "^7.18.6"
+                "@babel/traverse": "^7.18.8",
+                "@babel/types": "^7.18.8"
             },
             },
             "engines": {
             "engines": {
                 "node": ">=6.9.0"
                 "node": ">=6.9.0"
@@ -515,9 +515,9 @@
             }
             }
         },
         },
         "node_modules/@babel/parser": {
         "node_modules/@babel/parser": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
-            "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz",
+            "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==",
             "bin": {
             "bin": {
                 "parser": "bin/babel-parser.js"
                 "parser": "bin/babel-parser.js"
             },
             },
@@ -1025,9 +1025,9 @@
             }
             }
         },
         },
         "node_modules/@babel/plugin-transform-classes": {
         "node_modules/@babel/plugin-transform-classes": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz",
-            "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz",
+            "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==",
             "dependencies": {
             "dependencies": {
                 "@babel/helper-annotate-as-pure": "^7.18.6",
                 "@babel/helper-annotate-as-pure": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
@@ -1118,9 +1118,9 @@
             }
             }
         },
         },
         "node_modules/@babel/plugin-transform-for-of": {
         "node_modules/@babel/plugin-transform-for-of": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz",
-            "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+            "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
             "dependencies": {
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.18.6"
                 "@babel/helper-plugin-utils": "^7.18.6"
             },
             },
@@ -1286,9 +1286,9 @@
             }
             }
         },
         },
         "node_modules/@babel/plugin-transform-parameters": {
         "node_modules/@babel/plugin-transform-parameters": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz",
-            "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+            "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
             "dependencies": {
             "dependencies": {
                 "@babel/helper-plugin-utils": "^7.18.6"
                 "@babel/helper-plugin-utils": "^7.18.6"
             },
             },
@@ -1605,18 +1605,18 @@
             }
             }
         },
         },
         "node_modules/@babel/traverse": {
         "node_modules/@babel/traverse": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
-            "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz",
+            "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==",
             "dependencies": {
             "dependencies": {
                 "@babel/code-frame": "^7.18.6",
                 "@babel/code-frame": "^7.18.6",
-                "@babel/generator": "^7.18.6",
+                "@babel/generator": "^7.18.7",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-function-name": "^7.18.6",
                 "@babel/helper-function-name": "^7.18.6",
                 "@babel/helper-hoist-variables": "^7.18.6",
                 "@babel/helper-hoist-variables": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
-                "@babel/parser": "^7.18.6",
-                "@babel/types": "^7.18.6",
+                "@babel/parser": "^7.18.8",
+                "@babel/types": "^7.18.8",
                 "debug": "^4.1.0",
                 "debug": "^4.1.0",
                 "globals": "^11.1.0"
                 "globals": "^11.1.0"
             },
             },
@@ -1625,9 +1625,9 @@
             }
             }
         },
         },
         "node_modules/@babel/types": {
         "node_modules/@babel/types": {
-            "version": "7.18.7",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz",
-            "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz",
+            "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==",
             "dependencies": {
             "dependencies": {
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "to-fast-properties": "^2.0.0"
                 "to-fast-properties": "^2.0.0"
@@ -2032,9 +2032,9 @@
             }
             }
         },
         },
         "node_modules/@vue/compiler-sfc": {
         "node_modules/@vue/compiler-sfc": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.3.tgz",
-            "integrity": "sha512-/9SO6KeR1ljo+j4Tdkl9zsFG2yY4NQ9p3GKdPVCU99bmkNkTW8g9Tq8SMEvhOfo+RhBC0PdDAOmibl+N37f5YA==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.4.tgz",
+            "integrity": "sha512-WCaF33mlKLSvHDKvOD6FzTa5CI2FlMTeJf3MxJsNP0KDgRoI6RdXhHo9dtvCqV4Sywf9Owm17wTLT1Ymu/WsOQ==",
             "dependencies": {
             "dependencies": {
                 "@babel/parser": "^7.18.4",
                 "@babel/parser": "^7.18.4",
                 "postcss": "^8.4.14",
                 "postcss": "^8.4.14",
@@ -2976,9 +2976,9 @@
             }
             }
         },
         },
         "node_modules/caniuse-lite": {
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001363",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz",
-            "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==",
+            "version": "1.0.30001365",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001365.tgz",
+            "integrity": "sha512-VDQZ8OtpuIPMBA4YYvZXECtXbddMCUFJk1qu8Mqxfm/SZJNSr1cy4IuLCOL7RJ/YASrvJcYg1Zh+UEUQ5m6z8Q==",
             "funding": [
             "funding": [
                 {
                 {
                     "type": "opencollective",
                     "type": "opencollective",
@@ -3394,11 +3394,11 @@
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
         },
         },
         "node_modules/core-js-compat": {
         "node_modules/core-js-compat": {
-            "version": "3.23.3",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz",
-            "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==",
+            "version": "3.23.4",
+            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz",
+            "integrity": "sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==",
             "dependencies": {
             "dependencies": {
-                "browserslist": "^4.21.0",
+                "browserslist": "^4.21.1",
                 "semver": "7.0.0"
                 "semver": "7.0.0"
             },
             },
             "funding": {
             "funding": {
@@ -4018,9 +4018,9 @@
             "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
             "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
         },
         },
         "node_modules/electron-to-chromium": {
         "node_modules/electron-to-chromium": {
-            "version": "1.4.182",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.182.tgz",
-            "integrity": "sha512-OpEjTADzGoXABjqobGhpy0D2YsTncAax7IkER68ycc4adaq0dqEG9//9aenKPy7BGA90bqQdLac0dPp6uMkcSg=="
+            "version": "1.4.186",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.186.tgz",
+            "integrity": "sha512-YoVeFrGd/7ROjz4R9uPoND1K/hSRC/xADy9639ZmIZeJSaBnKdYx3I6LMPsY7CXLpK7JFgKQVzeZ/dk2br6Eaw=="
         },
         },
         "node_modules/elliptic": {
         "node_modules/elliptic": {
             "version": "6.5.4",
             "version": "6.5.4",
@@ -5543,9 +5543,9 @@
             }
             }
         },
         },
         "node_modules/lilconfig": {
         "node_modules/lilconfig": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
-            "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+            "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
             "engines": {
             "engines": {
                 "node": ">=10"
                 "node": ">=10"
             }
             }
@@ -5595,6 +5595,15 @@
                 "node": "^12.20.0 || >=14"
                 "node": "^12.20.0 || >=14"
             }
             }
         },
         },
+        "node_modules/lint-staged/node_modules/lilconfig": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+            "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+            "dev": true,
+            "engines": {
+                "node": ">=10"
+            }
+        },
         "node_modules/lint-staged/node_modules/supports-color": {
         "node_modules/lint-staged/node_modules/supports-color": {
             "version": "9.2.2",
             "version": "9.2.2",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
@@ -6139,9 +6148,9 @@
             }
             }
         },
         },
         "node_modules/node-releases": {
         "node_modules/node-releases": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
-            "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+            "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
         },
         },
         "node_modules/normalize-path": {
         "node_modules/normalize-path": {
             "version": "3.0.0",
             "version": "3.0.0",
@@ -7636,9 +7645,9 @@
             }
             }
         },
         },
         "node_modules/rxjs": {
         "node_modules/rxjs": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-            "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+            "version": "7.5.6",
+            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
+            "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
             "dev": true,
             "dev": true,
             "dependencies": {
             "dependencies": {
                 "tslib": "^2.1.0"
                 "tslib": "^2.1.0"
@@ -8241,9 +8250,9 @@
             }
             }
         },
         },
         "node_modules/tailwindcss": {
         "node_modules/tailwindcss": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz",
-            "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==",
+            "version": "3.1.6",
+            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.6.tgz",
+            "integrity": "sha512-7skAOY56erZAFQssT1xkpk+kWt2NrO45kORlxFPXUt3CiGsVPhH1smuH5XoDH6sGPXLyBv+zgCKA2HWBsgCytg==",
             "dependencies": {
             "dependencies": {
                 "arg": "^5.0.2",
                 "arg": "^5.0.2",
                 "chokidar": "^3.5.3",
                 "chokidar": "^3.5.3",
@@ -8266,7 +8275,7 @@
                 "postcss-selector-parser": "^6.0.10",
                 "postcss-selector-parser": "^6.0.10",
                 "postcss-value-parser": "^4.2.0",
                 "postcss-value-parser": "^4.2.0",
                 "quick-lru": "^5.1.1",
                 "quick-lru": "^5.1.1",
-                "resolve": "^1.22.0"
+                "resolve": "^1.22.1"
             },
             },
             "bin": {
             "bin": {
                 "tailwind": "lib/cli.js",
                 "tailwind": "lib/cli.js",
@@ -8637,11 +8646,11 @@
             "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
             "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
         },
         },
         "node_modules/vue": {
         "node_modules/vue": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.3.tgz",
-            "integrity": "sha512-7MTirXG7LYJi3r2jeYy7EiXIhEE85uP3kBwSxqwDsvIfy/l7+qR4U6ajw8ji1KoP+wYYg7ZY28TBTf3P3Fa4Nw==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.4.tgz",
+            "integrity": "sha512-8KGyyzFSj/FrKj1y7jyEpv8J4osgZx6Lk1lVzh1aP4BqsXZhATH1r0gdJNz00MMyBhK0/m2cNoPuOZ1NzeiUEw==",
             "dependencies": {
             "dependencies": {
-                "@vue/compiler-sfc": "2.7.3",
+                "@vue/compiler-sfc": "2.7.4",
                 "csstype": "^3.1.0"
                 "csstype": "^3.1.0"
             }
             }
         },
         },
@@ -8758,9 +8767,9 @@
             }
             }
         },
         },
         "node_modules/vue-template-compiler": {
         "node_modules/vue-template-compiler": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.3.tgz",
-            "integrity": "sha512-QKcV4vj9akZ2zSD1+F7tci3aXpRe5DXU3TZ/ZWJPE9gInXD5UoV+Q2PrCaplj4IGIK8JXRHYaSvOXkOn7tg9Og==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.4.tgz",
+            "integrity": "sha512-FgaeXI80FzhtDEsixq3WBrHLWpU2gzLb2DFusm62TrmCQyETsnUp0kTLpbExrTUw7g5YOnRf+xkh73nuEX+jGQ==",
             "dependencies": {
             "dependencies": {
                 "de-indent": "^1.0.2",
                 "de-indent": "^1.0.2",
                 "he": "^1.2.0"
                 "he": "^1.2.0"
@@ -9319,9 +9328,9 @@
             }
             }
         },
         },
         "@babel/compat-data": {
         "@babel/compat-data": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
-            "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ=="
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+            "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ=="
         },
         },
         "@babel/core": {
         "@babel/core": {
             "version": "7.18.6",
             "version": "7.18.6",
@@ -9501,9 +9510,9 @@
             }
             }
         },
         },
         "@babel/helper-module-transforms": {
         "@babel/helper-module-transforms": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
-            "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz",
+            "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==",
             "requires": {
             "requires": {
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-module-imports": "^7.18.6",
                 "@babel/helper-module-imports": "^7.18.6",
@@ -9511,8 +9520,8 @@
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/template": "^7.18.6",
                 "@babel/template": "^7.18.6",
-                "@babel/traverse": "^7.18.6",
-                "@babel/types": "^7.18.6"
+                "@babel/traverse": "^7.18.8",
+                "@babel/types": "^7.18.8"
             }
             }
         },
         },
         "@babel/helper-optimise-call-expression": {
         "@babel/helper-optimise-call-expression": {
@@ -9663,9 +9672,9 @@
             }
             }
         },
         },
         "@babel/parser": {
         "@babel/parser": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
-            "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw=="
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz",
+            "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA=="
         },
         },
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
             "version": "7.18.6",
             "version": "7.18.6",
@@ -9984,9 +9993,9 @@
             }
             }
         },
         },
         "@babel/plugin-transform-classes": {
         "@babel/plugin-transform-classes": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz",
-            "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz",
+            "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==",
             "requires": {
             "requires": {
                 "@babel/helper-annotate-as-pure": "^7.18.6",
                 "@babel/helper-annotate-as-pure": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
@@ -10041,9 +10050,9 @@
             }
             }
         },
         },
         "@babel/plugin-transform-for-of": {
         "@babel/plugin-transform-for-of": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz",
-            "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+            "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
             "requires": {
             "requires": {
                 "@babel/helper-plugin-utils": "^7.18.6"
                 "@babel/helper-plugin-utils": "^7.18.6"
             }
             }
@@ -10143,9 +10152,9 @@
             }
             }
         },
         },
         "@babel/plugin-transform-parameters": {
         "@babel/plugin-transform-parameters": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz",
-            "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+            "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
             "requires": {
             "requires": {
                 "@babel/helper-plugin-utils": "^7.18.6"
                 "@babel/helper-plugin-utils": "^7.18.6"
             }
             }
@@ -10373,26 +10382,26 @@
             }
             }
         },
         },
         "@babel/traverse": {
         "@babel/traverse": {
-            "version": "7.18.6",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
-            "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz",
+            "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==",
             "requires": {
             "requires": {
                 "@babel/code-frame": "^7.18.6",
                 "@babel/code-frame": "^7.18.6",
-                "@babel/generator": "^7.18.6",
+                "@babel/generator": "^7.18.7",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-environment-visitor": "^7.18.6",
                 "@babel/helper-function-name": "^7.18.6",
                 "@babel/helper-function-name": "^7.18.6",
                 "@babel/helper-hoist-variables": "^7.18.6",
                 "@babel/helper-hoist-variables": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
                 "@babel/helper-split-export-declaration": "^7.18.6",
-                "@babel/parser": "^7.18.6",
-                "@babel/types": "^7.18.6",
+                "@babel/parser": "^7.18.8",
+                "@babel/types": "^7.18.8",
                 "debug": "^4.1.0",
                 "debug": "^4.1.0",
                 "globals": "^11.1.0"
                 "globals": "^11.1.0"
             }
             }
         },
         },
         "@babel/types": {
         "@babel/types": {
-            "version": "7.18.7",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz",
-            "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==",
+            "version": "7.18.8",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz",
+            "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==",
             "requires": {
             "requires": {
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "@babel/helper-validator-identifier": "^7.18.6",
                 "to-fast-properties": "^2.0.0"
                 "to-fast-properties": "^2.0.0"
@@ -10762,9 +10771,9 @@
             }
             }
         },
         },
         "@vue/compiler-sfc": {
         "@vue/compiler-sfc": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.3.tgz",
-            "integrity": "sha512-/9SO6KeR1ljo+j4Tdkl9zsFG2yY4NQ9p3GKdPVCU99bmkNkTW8g9Tq8SMEvhOfo+RhBC0PdDAOmibl+N37f5YA==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.4.tgz",
+            "integrity": "sha512-WCaF33mlKLSvHDKvOD6FzTa5CI2FlMTeJf3MxJsNP0KDgRoI6RdXhHo9dtvCqV4Sywf9Owm17wTLT1Ymu/WsOQ==",
             "requires": {
             "requires": {
                 "@babel/parser": "^7.18.4",
                 "@babel/parser": "^7.18.4",
                 "postcss": "^8.4.14",
                 "postcss": "^8.4.14",
@@ -11519,9 +11528,9 @@
             }
             }
         },
         },
         "caniuse-lite": {
         "caniuse-lite": {
-            "version": "1.0.30001363",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz",
-            "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg=="
+            "version": "1.0.30001365",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001365.tgz",
+            "integrity": "sha512-VDQZ8OtpuIPMBA4YYvZXECtXbddMCUFJk1qu8Mqxfm/SZJNSr1cy4IuLCOL7RJ/YASrvJcYg1Zh+UEUQ5m6z8Q=="
         },
         },
         "chalk": {
         "chalk": {
             "version": "4.1.2",
             "version": "4.1.2",
@@ -11824,11 +11833,11 @@
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
         },
         },
         "core-js-compat": {
         "core-js-compat": {
-            "version": "3.23.3",
-            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz",
-            "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==",
+            "version": "3.23.4",
+            "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz",
+            "integrity": "sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==",
             "requires": {
             "requires": {
-                "browserslist": "^4.21.0",
+                "browserslist": "^4.21.1",
                 "semver": "7.0.0"
                 "semver": "7.0.0"
             },
             },
             "dependencies": {
             "dependencies": {
@@ -12286,9 +12295,9 @@
             "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
             "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
         },
         },
         "electron-to-chromium": {
         "electron-to-chromium": {
-            "version": "1.4.182",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.182.tgz",
-            "integrity": "sha512-OpEjTADzGoXABjqobGhpy0D2YsTncAax7IkER68ycc4adaq0dqEG9//9aenKPy7BGA90bqQdLac0dPp6uMkcSg=="
+            "version": "1.4.186",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.186.tgz",
+            "integrity": "sha512-YoVeFrGd/7ROjz4R9uPoND1K/hSRC/xADy9639ZmIZeJSaBnKdYx3I6LMPsY7CXLpK7JFgKQVzeZ/dk2br6Eaw=="
         },
         },
         "elliptic": {
         "elliptic": {
             "version": "6.5.4",
             "version": "6.5.4",
@@ -13376,9 +13385,9 @@
             }
             }
         },
         },
         "lilconfig": {
         "lilconfig": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
-            "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg=="
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+            "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg=="
         },
         },
         "lines-and-columns": {
         "lines-and-columns": {
             "version": "1.2.4",
             "version": "1.2.4",
@@ -13413,6 +13422,12 @@
                     "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==",
                     "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==",
                     "dev": true
                     "dev": true
                 },
                 },
+                "lilconfig": {
+                    "version": "2.0.5",
+                    "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
+                    "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+                    "dev": true
+                },
                 "supports-color": {
                 "supports-color": {
                     "version": "9.2.2",
                     "version": "9.2.2",
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
@@ -13833,9 +13848,9 @@
             }
             }
         },
         },
         "node-releases": {
         "node-releases": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
-            "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
+            "version": "2.0.6",
+            "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+            "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
         },
         },
         "normalize-path": {
         "normalize-path": {
             "version": "3.0.0",
             "version": "3.0.0",
@@ -14824,9 +14839,9 @@
             }
             }
         },
         },
         "rxjs": {
         "rxjs": {
-            "version": "7.5.5",
-            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-            "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+            "version": "7.5.6",
+            "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
+            "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
             "dev": true,
             "dev": true,
             "requires": {
             "requires": {
                 "tslib": "^2.1.0"
                 "tslib": "^2.1.0"
@@ -15298,9 +15313,9 @@
             }
             }
         },
         },
         "tailwindcss": {
         "tailwindcss": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.4.tgz",
-            "integrity": "sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ==",
+            "version": "3.1.6",
+            "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.6.tgz",
+            "integrity": "sha512-7skAOY56erZAFQssT1xkpk+kWt2NrO45kORlxFPXUt3CiGsVPhH1smuH5XoDH6sGPXLyBv+zgCKA2HWBsgCytg==",
             "requires": {
             "requires": {
                 "arg": "^5.0.2",
                 "arg": "^5.0.2",
                 "chokidar": "^3.5.3",
                 "chokidar": "^3.5.3",
@@ -15323,7 +15338,7 @@
                 "postcss-selector-parser": "^6.0.10",
                 "postcss-selector-parser": "^6.0.10",
                 "postcss-value-parser": "^4.2.0",
                 "postcss-value-parser": "^4.2.0",
                 "quick-lru": "^5.1.1",
                 "quick-lru": "^5.1.1",
-                "resolve": "^1.22.0"
+                "resolve": "^1.22.1"
             },
             },
             "dependencies": {
             "dependencies": {
                 "glob-parent": {
                 "glob-parent": {
@@ -15583,11 +15598,11 @@
             "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
             "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
         },
         },
         "vue": {
         "vue": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.3.tgz",
-            "integrity": "sha512-7MTirXG7LYJi3r2jeYy7EiXIhEE85uP3kBwSxqwDsvIfy/l7+qR4U6ajw8ji1KoP+wYYg7ZY28TBTf3P3Fa4Nw==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.4.tgz",
+            "integrity": "sha512-8KGyyzFSj/FrKj1y7jyEpv8J4osgZx6Lk1lVzh1aP4BqsXZhATH1r0gdJNz00MMyBhK0/m2cNoPuOZ1NzeiUEw==",
             "requires": {
             "requires": {
-                "@vue/compiler-sfc": "2.7.3",
+                "@vue/compiler-sfc": "2.7.4",
                 "csstype": "^3.1.0"
                 "csstype": "^3.1.0"
             }
             }
         },
         },
@@ -15678,9 +15693,9 @@
             }
             }
         },
         },
         "vue-template-compiler": {
         "vue-template-compiler": {
-            "version": "2.7.3",
-            "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.3.tgz",
-            "integrity": "sha512-QKcV4vj9akZ2zSD1+F7tci3aXpRe5DXU3TZ/ZWJPE9gInXD5UoV+Q2PrCaplj4IGIK8JXRHYaSvOXkOn7tg9Og==",
+            "version": "2.7.4",
+            "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.4.tgz",
+            "integrity": "sha512-FgaeXI80FzhtDEsixq3WBrHLWpU2gzLb2DFusm62TrmCQyETsnUp0kTLpbExrTUw7g5YOnRf+xkh73nuEX+jGQ==",
             "requires": {
             "requires": {
                 "de-indent": "^1.0.2",
                 "de-indent": "^1.0.2",
                 "he": "^1.2.0"
                 "he": "^1.2.0"

+ 1 - 0
tests/emails/email.eml

@@ -3,6 +3,7 @@ From: Will <will@anonaddy.com>
 To: <ebay@johndoe.anonaddy.com>
 To: <ebay@johndoe.anonaddy.com>
 Subject: Test Email
 Subject: Test Email
 List-Unsubscribe: <mailto:unsubscribe@example.com>
 List-Unsubscribe: <mailto:unsubscribe@example.com>
+Message-ID: 3edc902304c446bb9cb904623c9e59fb
 Content-Type: multipart/mixed; boundary="----=_Part_10031_1199410393.1550677940425"
 Content-Type: multipart/mixed; boundary="----=_Part_10031_1199410393.1550677940425"
 
 
 ------=_Part_10031_1199410393.1550677940425
 ------=_Part_10031_1199410393.1550677940425