Merge remote-tracking branch 'origin/master' into service-worker-notifications
authorOlaf Braun <info@braun-development.de>
Mon, 13 May 2024 13:15:56 +0000 (15:15 +0200)
committerOlaf Braun <info@braun-development.de>
Mon, 13 May 2024 13:15:56 +0000 (15:15 +0200)
# Conflicts:
# ts/WoltLabSuite/Core/Notification/Handler.ts
# wcfsetup/install/files/js/WoltLabSuite/Core/Notification/Handler.js
# wcfsetup/install/files/lib/system/api/composer.json
# wcfsetup/install/files/lib/system/api/composer.lock
# wcfsetup/install/files/lib/system/api/composer/installed.json
# wcfsetup/install/files/lib/system/api/composer/installed.php

16 files changed:
1  2 
com.woltlab.wcf/option.xml
com.woltlab.wcf/templates/headIncludeJavaScript.tpl
ts/WoltLabSuite/Core/Notification/Handler.ts
ts/WoltLabSuite/Core/Ui/User/Menu/Data/Notification.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Ui/User/Menu/Data/Notification.js
wcfsetup/install/files/lib/event/acp/dashboard/box/PHPExtensionCollecting.class.php
wcfsetup/install/files/lib/system/api/composer.json
wcfsetup/install/files/lib/system/api/composer.lock
wcfsetup/install/files/lib/system/api/composer/autoload_classmap.php
wcfsetup/install/files/lib/system/api/composer/autoload_files.php
wcfsetup/install/files/lib/system/api/composer/autoload_psr4.php
wcfsetup/install/files/lib/system/api/composer/autoload_static.php
wcfsetup/install/files/lib/system/api/composer/installed.json
wcfsetup/install/files/lib/system/api/composer/installed.php
wcfsetup/install/files/lib/system/user/notification/UserNotificationHandler.class.php
wcfsetup/setup/db/install.sql

Simple merge
index d16673ed78e6a675708606dd7f1e81fc0b828b2d,ab787195f4573f8a8df96841063a291b26126f17..281e13ab5ecab66e395986eb82c449aa8c9acc06
@@@ -12,7 -12,7 +12,8 @@@ import * as Ajax from "../Ajax"
  import { AjaxCallbackSetup } from "../Ajax/Data";
  import * as Core from "../Core";
  import * as EventHandler from "../Event/Handler";
 +import { serviceWorkerSupported } from "./ServiceWorker";
+ import { updateCounter } from "WoltLabSuite/Core/Ui/User/Menu/Manager";
  
  interface NotificationHandlerOptions {
    icon: string;
index 0000000000000000000000000000000000000000,b1e8438276a56b07045629bb39ece714e3621cfb..f4001607a649383dde54dba1824217ae5a6b6498
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,48 +1,50 @@@
+ <?php
+ namespace wcf\event\acp\dashboard\box;
+ use wcf\event\IPsr14Event;
+ /**
+  * @author Olaf Braun
+  * @copyright 2001-2024 WoltLab GmbH
+  * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+  * @since 6.1
+  */
+ final class PHPExtensionCollecting implements IPsr14Event
+ {
+     /**
+      * @var string[]
+      */
+     private array $extensions = [
+         'ctype',
+         'dom',
+         'exif',
++        'gmp',
+         'intl',
+         'libxml',
+         'mbstring',
++        'openssl',
+         'pdo',
+         'pdo_mysql',
+         'zlib',
+     ];
+     /**
+      * Registers a php extension.
+      */
+     public function register(string $extension): void
+     {
+         if (\in_array($extension, $this->extensions)) {
+             return;
+         }
+         $this->extensions[] = $extension;
+     }
+     /**
+      * @return string[]
+      */
+     public function getExtensions(): array
+     {
+         return $this->extensions;
+     }
+ }
index 8e0777693c868621d33f6beb1407ac96300dc290,a2a4c0fc317a33e91a13fff0d9d6483ed4a5302f..4d60e6920645cab359d5efbd18daaa8f48709644
          }
      },
      "require": {
-         "cuyz/valinor": "^1.6.1",
+         "cuyz/valinor": "^1.8.2",
          "dragonmantank/cron-expression": "^3.3.3",
          "erusev/parsedown": "^1.7.4",
-         "ezyang/htmlpurifier": "^4.16",
-         "guzzlehttp/guzzle": "^7.8.0",
-         "guzzlehttp/psr7": "^2.6.1",
-         "laminas/laminas-diactoros": "^3.2.0",
-         "laminas/laminas-httphandlerrunner": "^2.9.0",
+         "ezyang/htmlpurifier": "^4.17",
+         "guzzlehttp/guzzle": "^7.8.1",
+         "guzzlehttp/psr7": "^2.6.2",
+         "laminas/laminas-diactoros": "^3.3.0",
+         "laminas/laminas-httphandlerrunner": "^2.10.0",
          "laminas/laminas-progressbar": "^2.13",
 +        "minishlink/web-push": "^8.0",
+         "nikic/fast-route": "2.0.0-beta1",
          "paragonie/constant_time_encoding": "^2.6.3",
-         "pelago/emogrifier": "^7.0.0",
+         "pelago/emogrifier": "^7.2.0",
          "psr/clock": "^1.0",
          "psr/event-dispatcher": "^1.0",
          "psr/http-message": "^2.0",
          "psr/http-server-handler": "^1.0.2",
          "psr/http-server-middleware": "^1.0.2",
          "psr/log": "^3.0",
-         "scssphp/scssphp": "^1.11.1",
-         "sebastian/diff": "^5.0.3",
+         "scssphp/scssphp": "^1.12.1",
+         "sebastian/diff": "^5.1.0",
          "symfony/polyfill-php82": "^1.28.0",
          "symfony/polyfill-php83": "^1.28",
 +        "web-token/jwt-library": "^3.3",
          "willdurand/negotiation": "^3.1"
      },
      "replace": {
index 9e438edce87b35d442feda926d43c0d14dd71784,54faaa9bcf84de5783e5b061f58d9a7ba6bf7539..65f56404d7f8b1c6402c79a5cd7dbc34c41527d6
@@@ -4,71 -4,11 +4,71 @@@
          "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
          "This file is @generated automatically"
      ],
-     "content-hash": "626a61f689b7d4fed7efa3b025f9fbc5",
 -    "content-hash": "cd86364a5918a3a7e87306ef7ee615ea",
++    "content-hash": "3bcdf9c6922a05444493ea682a6bce01",
      "packages": [
 +        {
 +            "name": "brick/math",
 +            "version": "0.12.1",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/brick/math.git",
 +                "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
 +                "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": "^8.1"
 +            },
 +            "require-dev": {
 +                "php-coveralls/php-coveralls": "^2.2",
 +                "phpunit/phpunit": "^10.1",
 +                "vimeo/psalm": "5.16.0"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-4": {
 +                    "Brick\\Math\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "description": "Arbitrary-precision arithmetic library",
 +            "keywords": [
 +                "Arbitrary-precision",
 +                "BigInteger",
 +                "BigRational",
 +                "arithmetic",
 +                "bigdecimal",
 +                "bignum",
 +                "bignumber",
 +                "brick",
 +                "decimal",
 +                "integer",
 +                "math",
 +                "mathematics",
 +                "rational"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/brick/math/issues",
 +                "source": "https://github.com/brick/math/tree/0.12.1"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/BenMorel",
 +                    "type": "github"
 +                }
 +            ],
 +            "time": "2023-11-29T23:19:16+00:00"
 +        },
          {
              "name": "cuyz/valinor",
-             "version": "1.6.1",
+             "version": "1.8.2",
              "source": {
                  "type": "git",
                  "url": "https://github.com/CuyZ/Valinor.git",
                      "type": "community_bridge"
                  }
              ],
-             "time": "2023-09-19T10:15:21+00:00"
+             "time": "2024-01-19T12:39:49+00:00"
+         },
+         {
+             "name": "nikic/fast-route",
+             "version": "2.0.0-beta1",
+             "source": {
+                 "type": "git",
+                 "url": "https://github.com/nikic/FastRoute.git",
+                 "reference": "d3ada013d0f683ad2a8d0614fc97917a6ab72ce9"
+             },
+             "dist": {
+                 "type": "zip",
+                 "url": "https://api.github.com/repos/nikic/FastRoute/zipball/d3ada013d0f683ad2a8d0614fc97917a6ab72ce9",
+                 "reference": "d3ada013d0f683ad2a8d0614fc97917a6ab72ce9",
+                 "shasum": ""
+             },
+             "require": {
+                 "php": ">=8.1.0",
+                 "psr/simple-cache": "^2.0 || ^3.0"
+             },
+             "require-dev": {
+                 "lcobucci/coding-standard": "^11.0",
+                 "phpbench/phpbench": "^1.2",
+                 "phpstan/extension-installer": "^1.1",
+                 "phpstan/phpstan": "^1.10",
+                 "phpstan/phpstan-deprecation-rules": "^1.1",
+                 "phpstan/phpstan-phpunit": "^1.3",
+                 "phpstan/phpstan-strict-rules": "^1.5",
+                 "phpunit/phpunit": "^10.3"
+             },
+             "type": "library",
+             "extra": {
+                 "branch-alias": {
+                     "dev-master": "2.0-dev"
+                 }
+             },
+             "autoload": {
+                 "files": [
+                     "src/functions.php"
+                 ],
+                 "psr-4": {
+                     "FastRoute\\": "src/"
+                 }
+             },
+             "notification-url": "https://packagist.org/downloads/",
+             "license": [
+                 "BSD-3-Clause"
+             ],
+             "authors": [
+                 {
+                     "name": "Nikita Popov",
+                     "email": "nikic@php.net"
+                 }
+             ],
+             "description": "Fast request router for PHP",
+             "keywords": [
+                 "router",
+                 "routing"
+             ],
+             "support": {
+                 "issues": "https://github.com/nikic/FastRoute/issues",
+                 "source": "https://github.com/nikic/FastRoute/tree/2.0.0-beta1"
+             },
+             "time": "2024-03-04T23:46:43+00:00"
          },
 +        {
 +            "name": "minishlink/web-push",
 +            "version": "v8.0.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/web-push-libs/web-push-php.git",
 +                "reference": "ec034f1e287cd1e74235e349bd017d71a61e9d8d"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/web-push-libs/web-push-php/zipball/ec034f1e287cd1e74235e349bd017d71a61e9d8d",
 +                "reference": "ec034f1e287cd1e74235e349bd017d71a61e9d8d",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "ext-curl": "*",
 +                "ext-json": "*",
 +                "ext-mbstring": "*",
 +                "ext-openssl": "*",
 +                "guzzlehttp/guzzle": "^7.0.1|^6.2",
 +                "php": ">=8.0",
 +                "spomky-labs/base64url": "^2.0",
 +                "web-token/jwt-key-mgmt": "^2.0|^3.0.2",
 +                "web-token/jwt-signature": "^2.0|^3.0.2",
 +                "web-token/jwt-signature-algorithm-ecdsa": "^2.0|^3.0.2",
 +                "web-token/jwt-util-ecc": "^2.0|^3.0.2"
 +            },
 +            "require-dev": {
 +                "friendsofphp/php-cs-fixer": "^v3.13.2",
 +                "phpstan/phpstan": "^1.9.8",
 +                "phpunit/phpunit": "^9.5.27"
 +            },
 +            "suggest": {
 +                "ext-gmp": "Optional for performance."
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-4": {
 +                    "Minishlink\\WebPush\\": "src"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Louis Lagrange",
 +                    "email": "lagrange.louis@gmail.com",
 +                    "homepage": "https://github.com/Minishlink"
 +                }
 +            ],
 +            "description": "Web Push library for PHP",
 +            "homepage": "https://github.com/web-push-libs/web-push-php",
 +            "keywords": [
 +                "Push API",
 +                "WebPush",
 +                "notifications",
 +                "push",
 +                "web"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/web-push-libs/web-push-php/issues",
 +                "source": "https://github.com/web-push-libs/web-push-php/tree/v8.0.0"
 +            },
 +            "time": "2023-01-10T17:14:44+00:00"
 +        },
          {
              "name": "paragonie/constant_time_encoding",
              "version": "v2.6.3",
              },
              "time": "2022-06-14T06:56:20+00:00"
          },
 +        {
 +            "name": "paragonie/sodium_compat",
 +            "version": "v1.20.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/paragonie/sodium_compat.git",
 +                "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
 +                "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "paragonie/random_compat": ">=1",
 +                "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9"
 +            },
 +            "suggest": {
 +                "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
 +                "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "files": [
 +                    "autoload.php"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "ISC"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Paragon Initiative Enterprises",
 +                    "email": "security@paragonie.com"
 +                },
 +                {
 +                    "name": "Frank Denis",
 +                    "email": "jedisct1@pureftpd.org"
 +                }
 +            ],
 +            "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
 +            "keywords": [
 +                "Authentication",
 +                "BLAKE2b",
 +                "ChaCha20",
 +                "ChaCha20-Poly1305",
 +                "Chapoly",
 +                "Curve25519",
 +                "Ed25519",
 +                "EdDSA",
 +                "Edwards-curve Digital Signature Algorithm",
 +                "Elliptic Curve Diffie-Hellman",
 +                "Poly1305",
 +                "Pure-PHP cryptography",
 +                "RFC 7748",
 +                "RFC 8032",
 +                "Salpoly",
 +                "Salsa20",
 +                "X25519",
 +                "XChaCha20-Poly1305",
 +                "XSalsa20-Poly1305",
 +                "Xchacha20",
 +                "Xsalsa20",
 +                "aead",
 +                "cryptography",
 +                "ecdh",
 +                "elliptic curve",
 +                "elliptic curve cryptography",
 +                "encryption",
 +                "libsodium",
 +                "php",
 +                "public-key cryptography",
 +                "secret-key cryptography",
 +                "side-channel resistant"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/paragonie/sodium_compat/issues",
 +                "source": "https://github.com/paragonie/sodium_compat/tree/v1.20.0"
 +            },
 +            "time": "2023-04-30T00:54:53+00:00"
 +        },
          {
              "name": "pelago/emogrifier",
-             "version": "v7.0.0",
+             "version": "v7.2.0",
              "source": {
                  "type": "git",
                  "url": "https://github.com/MyIntervals/emogrifier.git",
                      "type": "github"
                  }
              ],
-             "time": "2023-05-01T07:48:21+00:00"
+             "time": "2023-12-22T10:55:06+00:00"
          },
 +        {
 +            "name": "spomky-labs/base64url",
 +            "version": "v2.0.4",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/Spomky-Labs/base64url.git",
 +                "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/Spomky-Labs/base64url/zipball/7752ce931ec285da4ed1f4c5aa27e45e097be61d",
 +                "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=7.1"
 +            },
 +            "require-dev": {
 +                "phpstan/extension-installer": "^1.0",
 +                "phpstan/phpstan": "^0.11|^0.12",
 +                "phpstan/phpstan-beberlei-assert": "^0.11|^0.12",
 +                "phpstan/phpstan-deprecation-rules": "^0.11|^0.12",
 +                "phpstan/phpstan-phpunit": "^0.11|^0.12",
 +                "phpstan/phpstan-strict-rules": "^0.11|^0.12"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-4": {
 +                    "Base64Url\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Florent Morselli",
 +                    "homepage": "https://github.com/Spomky-Labs/base64url/contributors"
 +                }
 +            ],
 +            "description": "Base 64 URL Safe Encoding/Decoding PHP Library",
 +            "homepage": "https://github.com/Spomky-Labs/base64url",
 +            "keywords": [
 +                "base64",
 +                "rfc4648",
 +                "safe",
 +                "url"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/Spomky-Labs/base64url/issues",
 +                "source": "https://github.com/Spomky-Labs/base64url/tree/v2.0.4"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/Spomky",
 +                    "type": "github"
 +                },
 +                {
 +                    "url": "https://www.patreon.com/FlorentMorselli",
 +                    "type": "patreon"
 +                }
 +            ],
 +            "time": "2020-11-03T09:10:25+00:00"
 +        },
 +        {
 +            "name": "spomky-labs/pki-framework",
 +            "version": "1.1.1",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/Spomky-Labs/pki-framework.git",
 +                "reference": "86102bdd19379b2c6e5b0feb94fd490d40e7d133"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/86102bdd19379b2c6e5b0feb94fd490d40e7d133",
 +                "reference": "86102bdd19379b2c6e5b0feb94fd490d40e7d133",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "brick/math": "^0.10|^0.11|^0.12",
 +                "ext-mbstring": "*",
 +                "php": ">=8.1"
 +            },
 +            "require-dev": {
 +                "ekino/phpstan-banned-code": "^1.0",
 +                "ext-gmp": "*",
 +                "ext-openssl": "*",
 +                "infection/infection": "^0.27",
 +                "php-parallel-lint/php-parallel-lint": "^1.3",
 +                "phpstan/extension-installer": "^1.3",
 +                "phpstan/phpstan": "^1.8",
 +                "phpstan/phpstan-beberlei-assert": "^1.0",
 +                "phpstan/phpstan-deprecation-rules": "^1.0",
 +                "phpstan/phpstan-phpunit": "^1.1",
 +                "phpstan/phpstan-strict-rules": "^1.3",
 +                "phpunit/phpunit": "^10.1",
 +                "rector/rector": "^0.19",
 +                "roave/security-advisories": "dev-latest",
 +                "symfony/phpunit-bridge": "^6.4|^7.0",
 +                "symfony/string": "^6.4|^7.0",
 +                "symfony/var-dumper": "^6.4|^7.0",
 +                "symplify/easy-coding-standard": "^12.0"
 +            },
 +            "suggest": {
 +                "ext-bcmath": "For better performance (or GMP)",
 +                "ext-gmp": "For better performance (or BCMath)",
 +                "ext-openssl": "For OpenSSL based cyphering"
 +            },
 +            "type": "library",
 +            "autoload": {
 +                "psr-4": {
 +                    "SpomkyLabs\\Pki\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Joni Eskelinen",
 +                    "email": "jonieske@gmail.com",
 +                    "role": "Original developer"
 +                },
 +                {
 +                    "name": "Florent Morselli",
 +                    "email": "florent.morselli@spomky-labs.com",
 +                    "role": "Spomky-Labs PKI Framework developer"
 +                }
 +            ],
 +            "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.",
 +            "homepage": "https://github.com/spomky-labs/pki-framework",
 +            "keywords": [
 +                "DER",
 +                "Private Key",
 +                "ac",
 +                "algorithm identifier",
 +                "asn.1",
 +                "asn1",
 +                "attribute certificate",
 +                "certificate",
 +                "certification request",
 +                "cryptography",
 +                "csr",
 +                "decrypt",
 +                "ec",
 +                "encrypt",
 +                "pem",
 +                "pkcs",
 +                "public key",
 +                "rsa",
 +                "sign",
 +                "signature",
 +                "verify",
 +                "x.509",
 +                "x.690",
 +                "x509",
 +                "x690"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/Spomky-Labs/pki-framework/issues",
 +                "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.1.1"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/Spomky",
 +                    "type": "github"
 +                },
 +                {
 +                    "url": "https://www.patreon.com/FlorentMorselli",
 +                    "type": "patreon"
 +                }
 +            ],
 +            "time": "2024-02-05T20:37:46+00:00"
 +        },
          {
              "name": "symfony/css-selector",
-             "version": "v6.3.2",
+             "version": "v6.4.0",
              "source": {
                  "type": "git",
                  "url": "https://github.com/symfony/css-selector.git",
index 6d8da1b8fd607874b9c2da7c363d2a90a3123d2a,19463abc5b420efceefb8a900eb7df0230a01f38..375c5bcbb80247a7b789b9970e9a0e903bf00568
@@@ -32,8 -29,7 +32,9 @@@ return array
      'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
      'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
      'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
+     'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
      'CuyZ\\Valinor\\' => array($vendorDir . '/cuyz/valinor/src'),
      'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'),
 +    'Brick\\Math\\' => array($vendorDir . '/brick/math/src'),
 +    'Base64Url\\' => array($vendorDir . '/spomky-labs/base64url/src'),
  );
index 2327c6b12580c841186de5490ad18999140e276d,c11532a5260234d9ae9632d3aab03aa1f35228e5..891cfe36de0f3139ba784e05088205deee255f81
@@@ -1,72 -1,9 +1,72 @@@
  {
      "packages": [
 +        {
 +            "name": "brick/math",
 +            "version": "0.12.1",
 +            "version_normalized": "0.12.1.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/brick/math.git",
 +                "reference": "f510c0a40911935b77b86859eb5223d58d660df1"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1",
 +                "reference": "f510c0a40911935b77b86859eb5223d58d660df1",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": "^8.1"
 +            },
 +            "require-dev": {
 +                "php-coveralls/php-coveralls": "^2.2",
 +                "phpunit/phpunit": "^10.1",
 +                "vimeo/psalm": "5.16.0"
 +            },
 +            "time": "2023-11-29T23:19:16+00:00",
 +            "type": "library",
 +            "installation-source": "dist",
 +            "autoload": {
 +                "psr-4": {
 +                    "Brick\\Math\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "description": "Arbitrary-precision arithmetic library",
 +            "keywords": [
 +                "Arbitrary-precision",
 +                "BigInteger",
 +                "BigRational",
 +                "arithmetic",
 +                "bigdecimal",
 +                "bignum",
 +                "bignumber",
 +                "brick",
 +                "decimal",
 +                "integer",
 +                "math",
 +                "mathematics",
 +                "rational"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/brick/math/issues",
 +                "source": "https://github.com/brick/math/tree/0.12.1"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/BenMorel",
 +                    "type": "github"
 +                }
 +            ],
 +            "install-path": "../brick/math"
 +        },
          {
              "name": "cuyz/valinor",
-             "version": "1.6.1",
-             "version_normalized": "1.6.1.0",
+             "version": "1.8.2",
+             "version_normalized": "1.8.2.0",
              "source": {
                  "type": "git",
                  "url": "https://github.com/CuyZ/Valinor.git",
              ],
              "install-path": "../laminas/laminas-stdlib"
          },
 +        {
 +            "name": "minishlink/web-push",
 +            "version": "v8.0.0",
 +            "version_normalized": "8.0.0.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/web-push-libs/web-push-php.git",
 +                "reference": "ec034f1e287cd1e74235e349bd017d71a61e9d8d"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/web-push-libs/web-push-php/zipball/ec034f1e287cd1e74235e349bd017d71a61e9d8d",
 +                "reference": "ec034f1e287cd1e74235e349bd017d71a61e9d8d",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "ext-curl": "*",
 +                "ext-json": "*",
 +                "ext-mbstring": "*",
 +                "ext-openssl": "*",
 +                "guzzlehttp/guzzle": "^7.0.1|^6.2",
 +                "php": ">=8.0",
 +                "spomky-labs/base64url": "^2.0",
 +                "web-token/jwt-key-mgmt": "^2.0|^3.0.2",
 +                "web-token/jwt-signature": "^2.0|^3.0.2",
 +                "web-token/jwt-signature-algorithm-ecdsa": "^2.0|^3.0.2",
 +                "web-token/jwt-util-ecc": "^2.0|^3.0.2"
 +            },
 +            "require-dev": {
 +                "friendsofphp/php-cs-fixer": "^v3.13.2",
 +                "phpstan/phpstan": "^1.9.8",
 +                "phpunit/phpunit": "^9.5.27"
 +            },
 +            "suggest": {
 +                "ext-gmp": "Optional for performance."
 +            },
 +            "time": "2023-01-10T17:14:44+00:00",
 +            "type": "library",
 +            "installation-source": "dist",
 +            "autoload": {
 +                "psr-4": {
 +                    "Minishlink\\WebPush\\": "src"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Louis Lagrange",
 +                    "email": "lagrange.louis@gmail.com",
 +                    "homepage": "https://github.com/Minishlink"
 +                }
 +            ],
 +            "description": "Web Push library for PHP",
 +            "homepage": "https://github.com/web-push-libs/web-push-php",
 +            "keywords": [
 +                "Push API",
 +                "WebPush",
 +                "notifications",
 +                "push",
 +                "web"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/web-push-libs/web-push-php/issues",
 +                "source": "https://github.com/web-push-libs/web-push-php/tree/v8.0.0"
 +            },
 +            "install-path": "../minishlink/web-push"
 +        },
+         {
+             "name": "nikic/fast-route",
+             "version": "2.0.0-beta1",
+             "version_normalized": "2.0.0.0-beta1",
+             "source": {
+                 "type": "git",
+                 "url": "https://github.com/nikic/FastRoute.git",
+                 "reference": "d3ada013d0f683ad2a8d0614fc97917a6ab72ce9"
+             },
+             "dist": {
+                 "type": "zip",
+                 "url": "https://api.github.com/repos/nikic/FastRoute/zipball/d3ada013d0f683ad2a8d0614fc97917a6ab72ce9",
+                 "reference": "d3ada013d0f683ad2a8d0614fc97917a6ab72ce9",
+                 "shasum": ""
+             },
+             "require": {
+                 "php": ">=8.1.0",
+                 "psr/simple-cache": "^2.0 || ^3.0"
+             },
+             "require-dev": {
+                 "lcobucci/coding-standard": "^11.0",
+                 "phpbench/phpbench": "^1.2",
+                 "phpstan/extension-installer": "^1.1",
+                 "phpstan/phpstan": "^1.10",
+                 "phpstan/phpstan-deprecation-rules": "^1.1",
+                 "phpstan/phpstan-phpunit": "^1.3",
+                 "phpstan/phpstan-strict-rules": "^1.5",
+                 "phpunit/phpunit": "^10.3"
+             },
+             "time": "2024-03-04T23:46:43+00:00",
+             "type": "library",
+             "extra": {
+                 "branch-alias": {
+                     "dev-master": "2.0-dev"
+                 }
+             },
+             "installation-source": "dist",
+             "autoload": {
+                 "files": [
+                     "src/functions.php"
+                 ],
+                 "psr-4": {
+                     "FastRoute\\": "src/"
+                 }
+             },
+             "notification-url": "https://packagist.org/downloads/",
+             "license": [
+                 "BSD-3-Clause"
+             ],
+             "authors": [
+                 {
+                     "name": "Nikita Popov",
+                     "email": "nikic@php.net"
+                 }
+             ],
+             "description": "Fast request router for PHP",
+             "keywords": [
+                 "router",
+                 "routing"
+             ],
+             "support": {
+                 "issues": "https://github.com/nikic/FastRoute/issues",
+                 "source": "https://github.com/nikic/FastRoute/tree/2.0.0-beta1"
+             },
+             "install-path": "../nikic/fast-route"
+         },
          {
              "name": "paragonie/constant_time_encoding",
              "version": "v2.6.3",
              },
              "install-path": "../paragonie/constant_time_encoding"
          },
 +        {
 +            "name": "paragonie/sodium_compat",
 +            "version": "v1.20.0",
 +            "version_normalized": "1.20.0.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/paragonie/sodium_compat.git",
 +                "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
 +                "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "paragonie/random_compat": ">=1",
 +                "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8"
 +            },
 +            "require-dev": {
 +                "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9"
 +            },
 +            "suggest": {
 +                "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.",
 +                "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security."
 +            },
 +            "time": "2023-04-30T00:54:53+00:00",
 +            "type": "library",
 +            "installation-source": "dist",
 +            "autoload": {
 +                "files": [
 +                    "autoload.php"
 +                ]
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "ISC"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Paragon Initiative Enterprises",
 +                    "email": "security@paragonie.com"
 +                },
 +                {
 +                    "name": "Frank Denis",
 +                    "email": "jedisct1@pureftpd.org"
 +                }
 +            ],
 +            "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists",
 +            "keywords": [
 +                "Authentication",
 +                "BLAKE2b",
 +                "ChaCha20",
 +                "ChaCha20-Poly1305",
 +                "Chapoly",
 +                "Curve25519",
 +                "Ed25519",
 +                "EdDSA",
 +                "Edwards-curve Digital Signature Algorithm",
 +                "Elliptic Curve Diffie-Hellman",
 +                "Poly1305",
 +                "Pure-PHP cryptography",
 +                "RFC 7748",
 +                "RFC 8032",
 +                "Salpoly",
 +                "Salsa20",
 +                "X25519",
 +                "XChaCha20-Poly1305",
 +                "XSalsa20-Poly1305",
 +                "Xchacha20",
 +                "Xsalsa20",
 +                "aead",
 +                "cryptography",
 +                "ecdh",
 +                "elliptic curve",
 +                "elliptic curve cryptography",
 +                "encryption",
 +                "libsodium",
 +                "php",
 +                "public-key cryptography",
 +                "secret-key cryptography",
 +                "side-channel resistant"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/paragonie/sodium_compat/issues",
 +                "source": "https://github.com/paragonie/sodium_compat/tree/v1.20.0"
 +            },
 +            "install-path": "../paragonie/sodium_compat"
 +        },
          {
              "name": "pelago/emogrifier",
-             "version": "v7.0.0",
-             "version_normalized": "7.0.0.0",
+             "version": "v7.2.0",
+             "version_normalized": "7.2.0.0",
              "source": {
                  "type": "git",
                  "url": "https://github.com/MyIntervals/emogrifier.git",
              ],
              "install-path": "../sebastian/diff"
          },
 +        {
 +            "name": "spomky-labs/base64url",
 +            "version": "v2.0.4",
 +            "version_normalized": "2.0.4.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/Spomky-Labs/base64url.git",
 +                "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/Spomky-Labs/base64url/zipball/7752ce931ec285da4ed1f4c5aa27e45e097be61d",
 +                "reference": "7752ce931ec285da4ed1f4c5aa27e45e097be61d",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "php": ">=7.1"
 +            },
 +            "require-dev": {
 +                "phpstan/extension-installer": "^1.0",
 +                "phpstan/phpstan": "^0.11|^0.12",
 +                "phpstan/phpstan-beberlei-assert": "^0.11|^0.12",
 +                "phpstan/phpstan-deprecation-rules": "^0.11|^0.12",
 +                "phpstan/phpstan-phpunit": "^0.11|^0.12",
 +                "phpstan/phpstan-strict-rules": "^0.11|^0.12"
 +            },
 +            "time": "2020-11-03T09:10:25+00:00",
 +            "type": "library",
 +            "installation-source": "dist",
 +            "autoload": {
 +                "psr-4": {
 +                    "Base64Url\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Florent Morselli",
 +                    "homepage": "https://github.com/Spomky-Labs/base64url/contributors"
 +                }
 +            ],
 +            "description": "Base 64 URL Safe Encoding/Decoding PHP Library",
 +            "homepage": "https://github.com/Spomky-Labs/base64url",
 +            "keywords": [
 +                "base64",
 +                "rfc4648",
 +                "safe",
 +                "url"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/Spomky-Labs/base64url/issues",
 +                "source": "https://github.com/Spomky-Labs/base64url/tree/v2.0.4"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/Spomky",
 +                    "type": "github"
 +                },
 +                {
 +                    "url": "https://www.patreon.com/FlorentMorselli",
 +                    "type": "patreon"
 +                }
 +            ],
 +            "install-path": "../spomky-labs/base64url"
 +        },
 +        {
 +            "name": "spomky-labs/pki-framework",
 +            "version": "1.1.1",
 +            "version_normalized": "1.1.1.0",
 +            "source": {
 +                "type": "git",
 +                "url": "https://github.com/Spomky-Labs/pki-framework.git",
 +                "reference": "86102bdd19379b2c6e5b0feb94fd490d40e7d133"
 +            },
 +            "dist": {
 +                "type": "zip",
 +                "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/86102bdd19379b2c6e5b0feb94fd490d40e7d133",
 +                "reference": "86102bdd19379b2c6e5b0feb94fd490d40e7d133",
 +                "shasum": ""
 +            },
 +            "require": {
 +                "brick/math": "^0.10|^0.11|^0.12",
 +                "ext-mbstring": "*",
 +                "php": ">=8.1"
 +            },
 +            "require-dev": {
 +                "ekino/phpstan-banned-code": "^1.0",
 +                "ext-gmp": "*",
 +                "ext-openssl": "*",
 +                "infection/infection": "^0.27",
 +                "php-parallel-lint/php-parallel-lint": "^1.3",
 +                "phpstan/extension-installer": "^1.3",
 +                "phpstan/phpstan": "^1.8",
 +                "phpstan/phpstan-beberlei-assert": "^1.0",
 +                "phpstan/phpstan-deprecation-rules": "^1.0",
 +                "phpstan/phpstan-phpunit": "^1.1",
 +                "phpstan/phpstan-strict-rules": "^1.3",
 +                "phpunit/phpunit": "^10.1",
 +                "rector/rector": "^0.19",
 +                "roave/security-advisories": "dev-latest",
 +                "symfony/phpunit-bridge": "^6.4|^7.0",
 +                "symfony/string": "^6.4|^7.0",
 +                "symfony/var-dumper": "^6.4|^7.0",
 +                "symplify/easy-coding-standard": "^12.0"
 +            },
 +            "suggest": {
 +                "ext-bcmath": "For better performance (or GMP)",
 +                "ext-gmp": "For better performance (or BCMath)",
 +                "ext-openssl": "For OpenSSL based cyphering"
 +            },
 +            "time": "2024-02-05T20:37:46+00:00",
 +            "type": "library",
 +            "installation-source": "dist",
 +            "autoload": {
 +                "psr-4": {
 +                    "SpomkyLabs\\Pki\\": "src/"
 +                }
 +            },
 +            "notification-url": "https://packagist.org/downloads/",
 +            "license": [
 +                "MIT"
 +            ],
 +            "authors": [
 +                {
 +                    "name": "Joni Eskelinen",
 +                    "email": "jonieske@gmail.com",
 +                    "role": "Original developer"
 +                },
 +                {
 +                    "name": "Florent Morselli",
 +                    "email": "florent.morselli@spomky-labs.com",
 +                    "role": "Spomky-Labs PKI Framework developer"
 +                }
 +            ],
 +            "description": "A PHP framework for managing Public Key Infrastructures. It comprises X.509 public key certificates, attribute certificates, certification requests and certification path validation.",
 +            "homepage": "https://github.com/spomky-labs/pki-framework",
 +            "keywords": [
 +                "DER",
 +                "Private Key",
 +                "ac",
 +                "algorithm identifier",
 +                "asn.1",
 +                "asn1",
 +                "attribute certificate",
 +                "certificate",
 +                "certification request",
 +                "cryptography",
 +                "csr",
 +                "decrypt",
 +                "ec",
 +                "encrypt",
 +                "pem",
 +                "pkcs",
 +                "public key",
 +                "rsa",
 +                "sign",
 +                "signature",
 +                "verify",
 +                "x.509",
 +                "x.690",
 +                "x509",
 +                "x690"
 +            ],
 +            "support": {
 +                "issues": "https://github.com/Spomky-Labs/pki-framework/issues",
 +                "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.1.1"
 +            },
 +            "funding": [
 +                {
 +                    "url": "https://github.com/Spomky",
 +                    "type": "github"
 +                },
 +                {
 +                    "url": "https://www.patreon.com/FlorentMorselli",
 +                    "type": "patreon"
 +                }
 +            ],
 +            "install-path": "../spomky-labs/pki-framework"
 +        },
          {
              "name": "symfony/css-selector",
-             "version": "v6.3.2",
-             "version_normalized": "6.3.2.0",
+             "version": "v6.4.0",
+             "version_normalized": "6.4.0.0",
              "source": {
                  "type": "git",
                  "url": "https://github.com/symfony/css-selector.git",
index 4a48fab8c8650e6d373e77bdc2b3629c7a50a137,a36a16e49c98708af5c85554ec7913d6cf3dc827..3cb5d21a505dd3a5dbf7eaad78ccbc0b1ef05fae
              'aliases' => array(),
              'dev_requirement' => false,
          ),
 +        'brick/math' => array(
 +            'pretty_version' => '0.12.1',
 +            'version' => '0.12.1.0',
 +            'reference' => 'f510c0a40911935b77b86859eb5223d58d660df1',
 +            'type' => 'library',
 +            'install_path' => __DIR__ . '/../brick/math',
 +            'aliases' => array(),
 +            'dev_requirement' => false,
 +        ),
          'cuyz/valinor' => array(
-             'pretty_version' => '1.6.1',
-             'version' => '1.6.1.0',
-             'reference' => '88c6b0f9299088de632d17610efffb54d55adba6',
+             'pretty_version' => '1.8.2',
+             'version' => '1.8.2.0',
+             'reference' => 'daf8206d11b1cb6b308ecd2eb6b65657d2248544',
              'type' => 'library',
              'install_path' => __DIR__ . '/../cuyz/valinor',
              'aliases' => array(),
              'aliases' => array(),
              'dev_requirement' => false,
          ),
 +        'paragonie/random_compat' => array(
 +            'dev_requirement' => false,
 +            'replaced' => array(
 +                0 => '*',
 +            ),
 +        ),
 +        'paragonie/sodium_compat' => array(
 +            'pretty_version' => 'v1.20.0',
 +            'version' => '1.20.0.0',
 +            'reference' => 'e592a3e06d1fa0d43988c7c7d9948ca836f644b6',
 +            'type' => 'library',
 +            'install_path' => __DIR__ . '/../paragonie/sodium_compat',
 +            'aliases' => array(),
 +            'dev_requirement' => false,
 +        ),
          'pelago/emogrifier' => array(
-             'pretty_version' => 'v7.0.0',
-             'version' => '7.0.0.0',
-             'reference' => '547b8c814794aec871e3c98b1c712f416755f4eb',
+             'pretty_version' => 'v7.2.0',
+             'version' => '7.2.0.0',
+             'reference' => '727bdf7255b51798307f17dec52ff8a91f1c7de3',
              'type' => 'library',
              'install_path' => __DIR__ . '/../pelago/emogrifier',
              'aliases' => array(),
              'aliases' => array(),
              'dev_requirement' => false,
          ),
 +        'spomky-labs/base64url' => array(
 +            'pretty_version' => 'v2.0.4',
 +            'version' => '2.0.4.0',
 +            'reference' => '7752ce931ec285da4ed1f4c5aa27e45e097be61d',
 +            'type' => 'library',
 +            'install_path' => __DIR__ . '/../spomky-labs/base64url',
 +            'aliases' => array(),
 +            'dev_requirement' => false,
 +        ),
 +        'spomky-labs/pki-framework' => array(
 +            'pretty_version' => '1.1.1',
 +            'version' => '1.1.1.0',
 +            'reference' => '86102bdd19379b2c6e5b0feb94fd490d40e7d133',
 +            'type' => 'library',
 +            'install_path' => __DIR__ . '/../spomky-labs/pki-framework',
 +            'aliases' => array(),
 +            'dev_requirement' => false,
 +        ),
 +        'symfony/console' => array(
 +            'dev_requirement' => false,
 +            'replaced' => array(
 +                0 => '*',
 +            ),
 +        ),
          'symfony/css-selector' => array(
-             'pretty_version' => 'v6.3.2',
-             'version' => '6.3.2.0',
-             'reference' => '883d961421ab1709877c10ac99451632a3d6fa57',
+             'pretty_version' => 'v6.4.0',
+             'version' => '6.4.0.0',
+             'reference' => 'd036c6c0d0b09e24a14a35f8292146a658f986e4',
              'type' => 'library',
              'install_path' => __DIR__ . '/../symfony/css-selector',
              'aliases' => array(),
Simple merge