Browse Source

composer require alibabacloud/sdk

lizhen_gitee 6 tháng trước cách đây
mục cha
commit
2c91b75c39
100 tập tin đã thay đổi với 2410 bổ sung629 xóa
  1. 3 1
      composer.json
  2. 1 1
      thinkphp/base.php
  3. 0 18
      vendor/autoload.php
  4. 21 125
      vendor/composer/ClassLoader.php
  5. 11 33
      vendor/composer/InstalledVersions.php
  6. 1 1
      vendor/composer/autoload_classmap.php
  7. 7 3
      vendor/composer/autoload_files.php
  8. 1 1
      vendor/composer/autoload_namespaces.php
  9. 9 2
      vendor/composer/autoload_psr4.php
  10. 37 12
      vendor/composer/autoload_real.php
  11. 53 5
      vendor/composer/autoload_static.php
  12. 677 82
      vendor/composer/installed.json
  13. 1090 37
      vendor/composer/installed.php
  14. 1 1
      vendor/ezyang/htmlpurifier/VERSION
  15. 1 1
      vendor/ezyang/htmlpurifier/composer.json
  16. 2 1
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php
  17. 3 3
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
  18. 1 0
      vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php
  19. 9 5
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php
  20. 6 12
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php
  21. 14 15
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php
  22. 3 0
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php
  23. 1 1
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php
  24. 0 0
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser
  25. 2 2
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php
  26. 17 0
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php
  27. 17 11
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php
  28. 0 16
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php
  29. 3 0
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php
  30. 1 1
      vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php
  31. 31 0
      vendor/guzzlehttp/guzzle/CHANGELOG.md
  32. 5 5
      vendor/guzzlehttp/guzzle/README.md
  33. 32 4
      vendor/guzzlehttp/guzzle/composer.json
  34. 3 3
      vendor/guzzlehttp/guzzle/src/BodySummarizer.php
  35. 2 2
      vendor/guzzlehttp/guzzle/src/Client.php
  36. 1 1
      vendor/guzzlehttp/guzzle/src/ClientInterface.php
  37. 1 1
      vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php
  38. 1 1
      vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php
  39. 1 1
      vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php
  40. 1 1
      vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php
  41. 6 22
      vendor/guzzlehttp/guzzle/src/Exception/RequestException.php
  42. 116 18
      vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
  43. 17 0
      vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php
  44. 4 4
      vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php
  45. 9 3
      vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php
  46. 3 3
      vendor/guzzlehttp/guzzle/src/HandlerStack.php
  47. 1 1
      vendor/guzzlehttp/guzzle/src/MessageFormatter.php
  48. 1 1
      vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php
  49. 3 3
      vendor/guzzlehttp/guzzle/src/Middleware.php
  50. 2 2
      vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php
  51. 1 1
      vendor/guzzlehttp/guzzle/src/RequestOptions.php
  52. 2 2
      vendor/guzzlehttp/guzzle/src/RetryMiddleware.php
  53. 2 2
      vendor/guzzlehttp/guzzle/src/TransferStats.php
  54. 2 2
      vendor/guzzlehttp/guzzle/src/Utils.php
  55. 7 0
      vendor/guzzlehttp/promises/CHANGELOG.md
  56. 4 4
      vendor/guzzlehttp/promises/README.md
  57. 1 1
      vendor/guzzlehttp/promises/composer.json
  58. 2 2
      vendor/guzzlehttp/promises/src/Coroutine.php
  59. 5 5
      vendor/guzzlehttp/promises/src/Each.php
  60. 2 2
      vendor/guzzlehttp/promises/src/FulfilledPromise.php
  61. 4 4
      vendor/guzzlehttp/promises/src/Promise.php
  62. 2 2
      vendor/guzzlehttp/promises/src/PromiseInterface.php
  63. 2 2
      vendor/guzzlehttp/promises/src/RejectedPromise.php
  64. 1 1
      vendor/guzzlehttp/promises/src/RejectionException.php
  65. 1 1
      vendor/guzzlehttp/promises/src/Utils.php
  66. 17 0
      vendor/guzzlehttp/psr7/CHANGELOG.md
  67. 12 5
      vendor/guzzlehttp/psr7/README.md
  68. 2 2
      vendor/guzzlehttp/psr7/composer.json
  69. 1 1
      vendor/guzzlehttp/psr7/src/CachingStream.php
  70. 3 3
      vendor/guzzlehttp/psr7/src/HttpFactory.php
  71. 1 1
      vendor/guzzlehttp/psr7/src/MultipartStream.php
  72. 12 7
      vendor/guzzlehttp/psr7/src/Query.php
  73. 1 1
      vendor/guzzlehttp/psr7/src/Response.php
  74. 7 3
      vendor/guzzlehttp/psr7/src/StreamWrapper.php
  75. 2 2
      vendor/guzzlehttp/psr7/src/UploadedFile.php
  76. 1 1
      vendor/guzzlehttp/psr7/src/Uri.php
  77. 15 1
      vendor/guzzlehttp/psr7/src/Utils.php
  78. 4 0
      vendor/monolog/monolog/CHANGELOG.md
  79. 2 2
      vendor/monolog/monolog/composer.json
  80. 2 0
      vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php
  81. 1 1
      vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php
  82. 1 1
      vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php
  83. 1 1
      vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php
  84. 1 1
      vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php
  85. 6 6
      vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php
  86. 1 1
      vendor/monolog/monolog/src/Monolog/Logger.php
  87. 1 1
      vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php
  88. 1 3
      vendor/overtrue/wechat/src/Kernel/Providers/LogServiceProvider.php
  89. 0 4
      vendor/overtrue/wechat/src/Kernel/ServiceContainer.php
  90. 0 15
      vendor/overtrue/wechat/src/Work/ExternalContact/MessageClient.php
  91. 0 32
      vendor/overtrue/wechat/src/Work/Media/Client.php
  92. 2 2
      vendor/symfony/cache/Adapter/PdoAdapter.php
  93. 7 2
      vendor/symfony/cache/Traits/FilesystemCommonTrait.php
  94. 20 26
      vendor/symfony/cache/Traits/RedisTrait.php
  95. 1 1
      vendor/symfony/cache/composer.json
  96. 1 1
      vendor/symfony/event-dispatcher/Debug/WrappedListener.php
  97. 2 1
      vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
  98. 6 2
      vendor/symfony/http-foundation/BinaryFileResponse.php
  99. 5 1
      vendor/symfony/http-foundation/HeaderUtils.php
  100. 1 1
      vendor/symfony/http-foundation/ParameterBag.php

+ 3 - 1
composer.json

@@ -29,7 +29,9 @@
         "ext-curl": "*",
         "ext-curl": "*",
         "ext-pdo": "*",
         "ext-pdo": "*",
         "ext-bcmath": "*",
         "ext-bcmath": "*",
-        "txthinking/mailer": "^2.0"
+        "txthinking/mailer": "^2.0",
+        "alibabacloud/client": "^1.5",
+        "alibabacloud/sdk": "^1.8"
     },
     },
     "config": {
     "config": {
         "preferred-install": "dist",
         "preferred-install": "dist",

+ 1 - 1
thinkphp/base.php

@@ -9,7 +9,7 @@
 // | Author: liu21st <liu21st@gmail.com>
 // | Author: liu21st <liu21st@gmail.com>
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 
 
-define('THINK_VERSION', '5.0.26');
+define('THINK_VERSION', '5.0.27');
 define('THINK_START_TIME', microtime(true));
 define('THINK_START_TIME', microtime(true));
 define('THINK_START_MEM', memory_get_usage());
 define('THINK_START_MEM', memory_get_usage());
 define('EXT', '.php');
 define('EXT', '.php');

+ 0 - 18
vendor/autoload.php

@@ -2,24 +2,6 @@
 
 
 // autoload.php @generated by Composer
 // autoload.php @generated by Composer
 
 
-if (PHP_VERSION_ID < 50600) {
-    if (!headers_sent()) {
-        header('HTTP/1.1 500 Internal Server Error');
-    }
-    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
-    if (!ini_get('display_errors')) {
-        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
-            fwrite(STDERR, $err);
-        } elseif (!headers_sent()) {
-            echo $err;
-        }
-    }
-    trigger_error(
-        $err,
-        E_USER_ERROR
-    );
-}
-
 require_once __DIR__ . '/composer/autoload_real.php';
 require_once __DIR__ . '/composer/autoload_real.php';
 
 
 return ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1::getLoader();
 return ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1::getLoader();

+ 21 - 125
vendor/composer/ClassLoader.php

@@ -42,79 +42,30 @@ namespace Composer\Autoload;
  */
  */
 class ClassLoader
 class ClassLoader
 {
 {
-    /** @var \Closure(string):void */
-    private static $includeFile;
-
-    /** @var ?string */
     private $vendorDir;
     private $vendorDir;
 
 
     // PSR-4
     // PSR-4
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<string, int>>
-     */
     private $prefixLengthsPsr4 = array();
     private $prefixLengthsPsr4 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<int, string>>
-     */
     private $prefixDirsPsr4 = array();
     private $prefixDirsPsr4 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, string>
-     */
     private $fallbackDirsPsr4 = array();
     private $fallbackDirsPsr4 = array();
 
 
     // PSR-0
     // PSR-0
-    /**
-     * @var array[]
-     * @psalm-var array<string, array<string, string[]>>
-     */
     private $prefixesPsr0 = array();
     private $prefixesPsr0 = array();
-    /**
-     * @var array[]
-     * @psalm-var array<string, string>
-     */
     private $fallbackDirsPsr0 = array();
     private $fallbackDirsPsr0 = array();
 
 
-    /** @var bool */
     private $useIncludePath = false;
     private $useIncludePath = false;
-
-    /**
-     * @var string[]
-     * @psalm-var array<string, string>
-     */
     private $classMap = array();
     private $classMap = array();
-
-    /** @var bool */
     private $classMapAuthoritative = false;
     private $classMapAuthoritative = false;
-
-    /**
-     * @var bool[]
-     * @psalm-var array<string, bool>
-     */
     private $missingClasses = array();
     private $missingClasses = array();
-
-    /** @var ?string */
     private $apcuPrefix;
     private $apcuPrefix;
 
 
-    /**
-     * @var self[]
-     */
     private static $registeredLoaders = array();
     private static $registeredLoaders = array();
 
 
-    /**
-     * @param ?string $vendorDir
-     */
     public function __construct($vendorDir = null)
     public function __construct($vendorDir = null)
     {
     {
         $this->vendorDir = $vendorDir;
         $this->vendorDir = $vendorDir;
-        self::initializeIncludeClosure();
     }
     }
 
 
-    /**
-     * @return string[]
-     */
     public function getPrefixes()
     public function getPrefixes()
     {
     {
         if (!empty($this->prefixesPsr0)) {
         if (!empty($this->prefixesPsr0)) {
@@ -124,47 +75,28 @@ class ClassLoader
         return array();
         return array();
     }
     }
 
 
-    /**
-     * @return array[]
-     * @psalm-return array<string, array<int, string>>
-     */
     public function getPrefixesPsr4()
     public function getPrefixesPsr4()
     {
     {
         return $this->prefixDirsPsr4;
         return $this->prefixDirsPsr4;
     }
     }
 
 
-    /**
-     * @return array[]
-     * @psalm-return array<string, string>
-     */
     public function getFallbackDirs()
     public function getFallbackDirs()
     {
     {
         return $this->fallbackDirsPsr0;
         return $this->fallbackDirsPsr0;
     }
     }
 
 
-    /**
-     * @return array[]
-     * @psalm-return array<string, string>
-     */
     public function getFallbackDirsPsr4()
     public function getFallbackDirsPsr4()
     {
     {
         return $this->fallbackDirsPsr4;
         return $this->fallbackDirsPsr4;
     }
     }
 
 
-    /**
-     * @return string[] Array of classname => path
-     * @psalm-return array<string, string>
-     */
     public function getClassMap()
     public function getClassMap()
     {
     {
         return $this->classMap;
         return $this->classMap;
     }
     }
 
 
     /**
     /**
-     * @param string[] $classMap Class to filename map
-     * @psalm-param array<string, string> $classMap
-     *
-     * @return void
+     * @param array $classMap Class to filename map
      */
      */
     public function addClassMap(array $classMap)
     public function addClassMap(array $classMap)
     {
     {
@@ -179,11 +111,9 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix, either
      * Registers a set of PSR-0 directories for a given prefix, either
      * appending or prepending to the ones previously set for this prefix.
      * appending or prepending to the ones previously set for this prefix.
      *
      *
-     * @param string          $prefix  The prefix
-     * @param string[]|string $paths   The PSR-0 root directories
-     * @param bool            $prepend Whether to prepend the directories
-     *
-     * @return void
+     * @param string       $prefix  The prefix
+     * @param array|string $paths   The PSR-0 root directories
+     * @param bool         $prepend Whether to prepend the directories
      */
      */
     public function add($prefix, $paths, $prepend = false)
     public function add($prefix, $paths, $prepend = false)
     {
     {
@@ -226,13 +156,11 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace, either
      * Registers a set of PSR-4 directories for a given namespace, either
      * appending or prepending to the ones previously set for this namespace.
      * appending or prepending to the ones previously set for this namespace.
      *
      *
-     * @param string          $prefix  The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths   The PSR-4 base directories
-     * @param bool            $prepend Whether to prepend the directories
+     * @param string       $prefix  The prefix/namespace, with trailing '\\'
+     * @param array|string $paths   The PSR-4 base directories
+     * @param bool         $prepend Whether to prepend the directories
      *
      *
      * @throws \InvalidArgumentException
      * @throws \InvalidArgumentException
-     *
-     * @return void
      */
      */
     public function addPsr4($prefix, $paths, $prepend = false)
     public function addPsr4($prefix, $paths, $prepend = false)
     {
     {
@@ -276,10 +204,8 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix,
      * Registers a set of PSR-0 directories for a given prefix,
      * replacing any others previously set for this prefix.
      * replacing any others previously set for this prefix.
      *
      *
-     * @param string          $prefix The prefix
-     * @param string[]|string $paths  The PSR-0 base directories
-     *
-     * @return void
+     * @param string       $prefix The prefix
+     * @param array|string $paths  The PSR-0 base directories
      */
      */
     public function set($prefix, $paths)
     public function set($prefix, $paths)
     {
     {
@@ -294,12 +220,10 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace,
      * Registers a set of PSR-4 directories for a given namespace,
      * replacing any others previously set for this namespace.
      * replacing any others previously set for this namespace.
      *
      *
-     * @param string          $prefix The prefix/namespace, with trailing '\\'
-     * @param string[]|string $paths  The PSR-4 base directories
+     * @param string       $prefix The prefix/namespace, with trailing '\\'
+     * @param array|string $paths  The PSR-4 base directories
      *
      *
      * @throws \InvalidArgumentException
      * @throws \InvalidArgumentException
-     *
-     * @return void
      */
      */
     public function setPsr4($prefix, $paths)
     public function setPsr4($prefix, $paths)
     {
     {
@@ -319,8 +243,6 @@ class ClassLoader
      * Turns on searching the include path for class files.
      * Turns on searching the include path for class files.
      *
      *
      * @param bool $useIncludePath
      * @param bool $useIncludePath
-     *
-     * @return void
      */
      */
     public function setUseIncludePath($useIncludePath)
     public function setUseIncludePath($useIncludePath)
     {
     {
@@ -343,8 +265,6 @@ class ClassLoader
      * that have not been registered with the class map.
      * that have not been registered with the class map.
      *
      *
      * @param bool $classMapAuthoritative
      * @param bool $classMapAuthoritative
-     *
-     * @return void
      */
      */
     public function setClassMapAuthoritative($classMapAuthoritative)
     public function setClassMapAuthoritative($classMapAuthoritative)
     {
     {
@@ -365,8 +285,6 @@ class ClassLoader
      * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
      * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
      *
      *
      * @param string|null $apcuPrefix
      * @param string|null $apcuPrefix
-     *
-     * @return void
      */
      */
     public function setApcuPrefix($apcuPrefix)
     public function setApcuPrefix($apcuPrefix)
     {
     {
@@ -387,8 +305,6 @@ class ClassLoader
      * Registers this instance as an autoloader.
      * Registers this instance as an autoloader.
      *
      *
      * @param bool $prepend Whether to prepend the autoloader or not
      * @param bool $prepend Whether to prepend the autoloader or not
-     *
-     * @return void
      */
      */
     public function register($prepend = false)
     public function register($prepend = false)
     {
     {
@@ -408,8 +324,6 @@ class ClassLoader
 
 
     /**
     /**
      * Unregisters this instance as an autoloader.
      * Unregisters this instance as an autoloader.
-     *
-     * @return void
      */
      */
     public function unregister()
     public function unregister()
     {
     {
@@ -429,8 +343,7 @@ class ClassLoader
     public function loadClass($class)
     public function loadClass($class)
     {
     {
         if ($file = $this->findFile($class)) {
         if ($file = $this->findFile($class)) {
-            $includeFile = self::$includeFile;
-            $includeFile($file);
+            includeFile($file);
 
 
             return true;
             return true;
         }
         }
@@ -490,11 +403,6 @@ class ClassLoader
         return self::$registeredLoaders;
         return self::$registeredLoaders;
     }
     }
 
 
-    /**
-     * @param  string       $class
-     * @param  string       $ext
-     * @return string|false
-     */
     private function findFileWithExtension($class, $ext)
     private function findFileWithExtension($class, $ext)
     {
     {
         // PSR-4 lookup
         // PSR-4 lookup
@@ -560,26 +468,14 @@ class ClassLoader
 
 
         return false;
         return false;
     }
     }
+}
 
 
-    /**
-     * @return void
-     */
-    private static function initializeIncludeClosure()
-    {
-        if (self::$includeFile !== null) {
-            return;
-        }
-
-        /**
-         * Scope isolated include.
-         *
-         * Prevents access to $this/self from included files.
-         *
-         * @param  string $file
-         * @return void
-         */
-        self::$includeFile = \Closure::bind(static function($file) {
-            include $file;
-        }, null, null);
-    }
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+    include $file;
 }
 }

+ 11 - 33
vendor/composer/InstalledVersions.php

@@ -20,27 +20,12 @@ use Composer\Semver\VersionParser;
  *
  *
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
  *
  *
- * To require its presence, you can require `composer-runtime-api ^2.0`
- *
- * @final
+ * To require it's presence, you can require `composer-runtime-api ^2.0`
  */
  */
 class InstalledVersions
 class InstalledVersions
 {
 {
-    /**
-     * @var mixed[]|null
-     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
-     */
     private static $installed;
     private static $installed;
-
-    /**
-     * @var bool|null
-     */
     private static $canGetVendors;
     private static $canGetVendors;
-
-    /**
-     * @var array[]
-     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
-     */
     private static $installedByVendor = array();
     private static $installedByVendor = array();
 
 
     /**
     /**
@@ -98,7 +83,7 @@ class InstalledVersions
     {
     {
         foreach (self::getInstalled() as $installed) {
         foreach (self::getInstalled() as $installed) {
             if (isset($installed['versions'][$packageName])) {
             if (isset($installed['versions'][$packageName])) {
-                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
+                return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
             }
             }
         }
         }
 
 
@@ -119,7 +104,7 @@ class InstalledVersions
      */
      */
     public static function satisfies(VersionParser $parser, $packageName, $constraint)
     public static function satisfies(VersionParser $parser, $packageName, $constraint)
     {
     {
-        $constraint = $parser->parseConstraints((string) $constraint);
+        $constraint = $parser->parseConstraints($constraint);
         $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
         $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
 
 
         return $provided->matches($constraint);
         return $provided->matches($constraint);
@@ -243,7 +228,7 @@ class InstalledVersions
 
 
     /**
     /**
      * @return array
      * @return array
-     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
+     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
      */
      */
     public static function getRootPackage()
     public static function getRootPackage()
     {
     {
@@ -257,7 +242,7 @@ class InstalledVersions
      *
      *
      * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
      * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
      * @return array[]
      * @return array[]
-     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
+     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
      */
      */
     public static function getRawData()
     public static function getRawData()
     {
     {
@@ -280,7 +265,7 @@ class InstalledVersions
      * Returns the raw data of all installed.php which are currently loaded for custom implementations
      * Returns the raw data of all installed.php which are currently loaded for custom implementations
      *
      *
      * @return array[]
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
      */
      */
     public static function getAllRawData()
     public static function getAllRawData()
     {
     {
@@ -303,7 +288,7 @@ class InstalledVersions
      * @param  array[] $data A vendor/composer/installed.php data set
      * @param  array[] $data A vendor/composer/installed.php data set
      * @return void
      * @return void
      *
      *
-     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
+     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
      */
      */
     public static function reload($data)
     public static function reload($data)
     {
     {
@@ -313,7 +298,7 @@ class InstalledVersions
 
 
     /**
     /**
      * @return array[]
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
      */
      */
     private static function getInstalled()
     private static function getInstalled()
     {
     {
@@ -328,9 +313,7 @@ class InstalledVersions
                 if (isset(self::$installedByVendor[$vendorDir])) {
                 if (isset(self::$installedByVendor[$vendorDir])) {
                     $installed[] = self::$installedByVendor[$vendorDir];
                     $installed[] = self::$installedByVendor[$vendorDir];
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
                 } elseif (is_file($vendorDir.'/composer/installed.php')) {
-                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
-                    $required = require $vendorDir.'/composer/installed.php';
-                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
+                    $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
                     if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                     if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                         self::$installed = $installed[count($installed) - 1];
                         self::$installed = $installed[count($installed) - 1];
                     }
                     }
@@ -342,17 +325,12 @@ class InstalledVersions
             // only require the installed.php file if this file is loaded from its dumped location,
             // only require the installed.php file if this file is loaded from its dumped location,
             // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
             // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
             if (substr(__DIR__, -8, 1) !== 'C') {
             if (substr(__DIR__, -8, 1) !== 'C') {
-                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
-                $required = require __DIR__ . '/installed.php';
-                self::$installed = $required;
+                self::$installed = require __DIR__ . '/installed.php';
             } else {
             } else {
                 self::$installed = array();
                 self::$installed = array();
             }
             }
         }
         }
-
-        if (self::$installed !== array()) {
-            $installed[] = self::$installed;
-        }
+        $installed[] = self::$installed;
 
 
         return $installed;
         return $installed;
     }
     }

+ 1 - 1
vendor/composer/autoload_classmap.php

@@ -2,7 +2,7 @@
 
 
 // autoload_classmap.php @generated by Composer
 // autoload_classmap.php @generated by Composer
 
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 $baseDir = dirname($vendorDir);
 
 
 return array(
 return array(

+ 7 - 3
vendor/composer/autoload_files.php

@@ -2,16 +2,20 @@
 
 
 // autoload_files.php @generated by Composer
 // autoload_files.php @generated by Composer
 
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 $baseDir = dirname($vendorDir);
 
 
 return array(
 return array(
     '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
     '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
     'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
     'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
-    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
     '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
     '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
-    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
+    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
     '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
     '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
+    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
+    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+    'd767e4fc2dc52fe66584ab8c6684783e' => $vendorDir . '/adbario/php-dot-notation/src/helpers.php',
+    'b067bc7112e384b61c701452d53a14a8' => $vendorDir . '/mtdowling/jmespath.php/src/JmesPath.php',
+    '66453932bc1be9fb2f910a27947d11b6' => $vendorDir . '/alibabacloud/client/src/Functions.php',
     '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
     '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
     '9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
     '9b552a3cc426e3287cc811caefa3cf53' => $vendorDir . '/topthink/think-helper/src/helper.php',
     '488987c28e9b5e95a1ce6b6bcb94606c' => $vendorDir . '/karsonzhang/fastadmin-addons/src/common.php',
     '488987c28e9b5e95a1ce6b6bcb94606c' => $vendorDir . '/karsonzhang/fastadmin-addons/src/common.php',

+ 1 - 1
vendor/composer/autoload_namespaces.php

@@ -2,7 +2,7 @@
 
 
 // autoload_namespaces.php @generated by Composer
 // autoload_namespaces.php @generated by Composer
 
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 $baseDir = dirname($vendorDir);
 
 
 return array(
 return array(

+ 9 - 2
vendor/composer/autoload_psr4.php

@@ -2,22 +2,25 @@
 
 
 // autoload_psr4.php @generated by Composer
 // autoload_psr4.php @generated by Composer
 
 
-$vendorDir = dirname(__DIR__);
+$vendorDir = dirname(dirname(__FILE__));
 $baseDir = dirname($vendorDir);
 $baseDir = dirname($vendorDir);
 
 
 return array(
 return array(
     'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
     'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
     'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
     'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
     'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
     'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
-    'think\\' => array($baseDir . '/thinkphp/library/think', $vendorDir . '/topthink/think-queue/src', $vendorDir . '/karsonzhang/fastadmin-addons/src'),
+    'think\\' => array($vendorDir . '/karsonzhang/fastadmin-addons/src', $baseDir . '/thinkphp/library/think', $vendorDir . '/topthink/think-queue/src'),
+    'clagiordano\\weblibs\\configmanager\\' => array($vendorDir . '/clagiordano/weblibs-configmanager/src'),
     'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
     'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
     'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
     'Tx\\' => array($vendorDir . '/txthinking/mailer/src'),
     'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
     'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
     'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
     'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
     'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
     'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
+    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
     'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
     'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
     'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
     'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
     'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
     'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
+    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
     'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
     'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
     'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
     'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
     'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
     'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
@@ -38,10 +41,14 @@ return array(
     'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
     'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
     'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
     'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
     'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
     'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
+    'JmesPath\\' => array($vendorDir . '/mtdowling/jmespath.php/src'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
     'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
     'EasyWeChat\\' => array($vendorDir . '/overtrue/wechat/src'),
     'EasyWeChat\\' => array($vendorDir . '/overtrue/wechat/src'),
     'EasyWeChatComposer\\' => array($vendorDir . '/easywechat-composer/easywechat-composer/src'),
     'EasyWeChatComposer\\' => array($vendorDir . '/easywechat-composer/easywechat-composer/src'),
     'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
     'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
+    'AlibabaCloud\\Client\\' => array($vendorDir . '/alibabacloud/client/src'),
+    'AlibabaCloud\\' => array($vendorDir . '/alibabacloud/sdk/src'),
+    'Adbar\\' => array($vendorDir . '/adbario/php-dot-notation/src'),
 );
 );

+ 37 - 12
vendor/composer/autoload_real.php

@@ -25,26 +25,51 @@ class ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1
         require __DIR__ . '/platform_check.php';
         require __DIR__ . '/platform_check.php';
 
 
         spl_autoload_register(array('ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1', 'loadClassLoader'), true, true);
         spl_autoload_register(array('ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1', 'loadClassLoader'), true, true);
-        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
         spl_autoload_unregister(array('ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1', 'loadClassLoader'));
         spl_autoload_unregister(array('ComposerAutoloaderInitf3106b6ef3260b6914241eab0bed11c1', 'loadClassLoader'));
 
 
-        require __DIR__ . '/autoload_static.php';
-        call_user_func(\Composer\Autoload\ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1::getInitializer($loader));
+        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
+        if ($useStaticLoader) {
+            require __DIR__ . '/autoload_static.php';
 
 
-        $loader->register(true);
+            call_user_func(\Composer\Autoload\ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1::getInitializer($loader));
+        } else {
+            $map = require __DIR__ . '/autoload_namespaces.php';
+            foreach ($map as $namespace => $path) {
+                $loader->set($namespace, $path);
+            }
 
 
-        $filesToLoad = \Composer\Autoload\ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1::$files;
-        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
-            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
-                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+            $map = require __DIR__ . '/autoload_psr4.php';
+            foreach ($map as $namespace => $path) {
+                $loader->setPsr4($namespace, $path);
+            }
 
 
-                require $file;
+            $classMap = require __DIR__ . '/autoload_classmap.php';
+            if ($classMap) {
+                $loader->addClassMap($classMap);
             }
             }
-        }, null, null);
-        foreach ($filesToLoad as $fileIdentifier => $file) {
-            $requireFile($fileIdentifier, $file);
+        }
+
+        $loader->register(true);
+
+        if ($useStaticLoader) {
+            $includeFiles = Composer\Autoload\ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1::$files;
+        } else {
+            $includeFiles = require __DIR__ . '/autoload_files.php';
+        }
+        foreach ($includeFiles as $fileIdentifier => $file) {
+            composerRequiref3106b6ef3260b6914241eab0bed11c1($fileIdentifier, $file);
         }
         }
 
 
         return $loader;
         return $loader;
     }
     }
 }
 }
+
+function composerRequiref3106b6ef3260b6914241eab0bed11c1($fileIdentifier, $file)
+{
+    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+        require $file;
+
+        $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+    }
+}

+ 53 - 5
vendor/composer/autoload_static.php

@@ -9,10 +9,14 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
     public static $files = array (
     public static $files = array (
         '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
         '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
         'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
         'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
-        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
         '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
-        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
+        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
         '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
         '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
+        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
+        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+        'd767e4fc2dc52fe66584ab8c6684783e' => __DIR__ . '/..' . '/adbario/php-dot-notation/src/helpers.php',
+        'b067bc7112e384b61c701452d53a14a8' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/JmesPath.php',
+        '66453932bc1be9fb2f910a27947d11b6' => __DIR__ . '/..' . '/alibabacloud/client/src/Functions.php',
         '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
         '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
         '9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
         '9b552a3cc426e3287cc811caefa3cf53' => __DIR__ . '/..' . '/topthink/think-helper/src/helper.php',
         '488987c28e9b5e95a1ce6b6bcb94606c' => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src/common.php',
         '488987c28e9b5e95a1ce6b6bcb94606c' => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src/common.php',
@@ -30,6 +34,10 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
             'think\\captcha\\' => 14,
             'think\\captcha\\' => 14,
             'think\\' => 6,
             'think\\' => 6,
         ),
         ),
+        'c' => 
+        array (
+            'clagiordano\\weblibs\\configmanager\\' => 34,
+        ),
         'Z' => 
         'Z' => 
         array (
         array (
             'ZipStream\\' => 10,
             'ZipStream\\' => 10,
@@ -43,9 +51,11 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
             'Symfony\\Polyfill\\Php80\\' => 23,
             'Symfony\\Polyfill\\Php80\\' => 23,
             'Symfony\\Polyfill\\Php73\\' => 23,
             'Symfony\\Polyfill\\Php73\\' => 23,
             'Symfony\\Polyfill\\Mbstring\\' => 26,
             'Symfony\\Polyfill\\Mbstring\\' => 26,
+            'Symfony\\Polyfill\\Ctype\\' => 23,
             'Symfony\\Contracts\\Service\\' => 26,
             'Symfony\\Contracts\\Service\\' => 26,
             'Symfony\\Contracts\\EventDispatcher\\' => 34,
             'Symfony\\Contracts\\EventDispatcher\\' => 34,
             'Symfony\\Contracts\\Cache\\' => 24,
             'Symfony\\Contracts\\Cache\\' => 24,
+            'Symfony\\Component\\Yaml\\' => 23,
             'Symfony\\Component\\VarExporter\\' => 30,
             'Symfony\\Component\\VarExporter\\' => 30,
             'Symfony\\Component\\HttpFoundation\\' => 33,
             'Symfony\\Component\\HttpFoundation\\' => 33,
             'Symfony\\Component\\Finder\\' => 25,
             'Symfony\\Component\\Finder\\' => 25,
@@ -76,6 +86,10 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
             'Monolog\\' => 8,
             'Monolog\\' => 8,
             'Matrix\\' => 7,
             'Matrix\\' => 7,
         ),
         ),
+        'J' => 
+        array (
+            'JmesPath\\' => 9,
+        ),
         'G' => 
         'G' => 
         array (
         array (
             'GuzzleHttp\\Psr7\\' => 16,
             'GuzzleHttp\\Psr7\\' => 16,
@@ -91,6 +105,12 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         array (
         array (
             'Complex\\' => 8,
             'Complex\\' => 8,
         ),
         ),
+        'A' => 
+        array (
+            'AlibabaCloud\\Client\\' => 20,
+            'AlibabaCloud\\' => 13,
+            'Adbar\\' => 6,
+        ),
     );
     );
 
 
     public static $prefixDirsPsr4 = array (
     public static $prefixDirsPsr4 = array (
@@ -108,9 +128,13 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         ),
         ),
         'think\\' => 
         'think\\' => 
         array (
         array (
-            0 => __DIR__ . '/../..' . '/thinkphp/library/think',
-            1 => __DIR__ . '/..' . '/topthink/think-queue/src',
-            2 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
+            0 => __DIR__ . '/..' . '/karsonzhang/fastadmin-addons/src',
+            1 => __DIR__ . '/../..' . '/thinkphp/library/think',
+            2 => __DIR__ . '/..' . '/topthink/think-queue/src',
+        ),
+        'clagiordano\\weblibs\\configmanager\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/clagiordano/weblibs-configmanager/src',
         ),
         ),
         'ZipStream\\' => 
         'ZipStream\\' => 
         array (
         array (
@@ -132,6 +156,10 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         array (
         array (
             0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
             0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
         ),
         ),
+        'Symfony\\Polyfill\\Ctype\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
+        ),
         'Symfony\\Contracts\\Service\\' => 
         'Symfony\\Contracts\\Service\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/symfony/service-contracts',
             0 => __DIR__ . '/..' . '/symfony/service-contracts',
@@ -144,6 +172,10 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         array (
         array (
             0 => __DIR__ . '/..' . '/symfony/cache-contracts',
             0 => __DIR__ . '/..' . '/symfony/cache-contracts',
         ),
         ),
+        'Symfony\\Component\\Yaml\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/yaml',
+        ),
         'Symfony\\Component\\VarExporter\\' => 
         'Symfony\\Component\\VarExporter\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/symfony/var-exporter',
             0 => __DIR__ . '/..' . '/symfony/var-exporter',
@@ -225,6 +257,10 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         array (
         array (
             0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
             0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
         ),
         ),
+        'JmesPath\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/mtdowling/jmespath.php/src',
+        ),
         'GuzzleHttp\\Psr7\\' => 
         'GuzzleHttp\\Psr7\\' => 
         array (
         array (
             0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
             0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
@@ -249,6 +285,18 @@ class ComposerStaticInitf3106b6ef3260b6914241eab0bed11c1
         array (
         array (
             0 => __DIR__ . '/..' . '/markbaker/complex/classes/src',
             0 => __DIR__ . '/..' . '/markbaker/complex/classes/src',
         ),
         ),
+        'AlibabaCloud\\Client\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/alibabacloud/client/src',
+        ),
+        'AlibabaCloud\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/alibabacloud/sdk/src',
+        ),
+        'Adbar\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/adbario/php-dot-notation/src',
+        ),
     );
     );
 
 
     public static $prefixesPsr0 = array (
     public static $prefixesPsr0 = array (

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 677 - 82
vendor/composer/installed.json


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1090 - 37
vendor/composer/installed.php


+ 1 - 1
vendor/ezyang/htmlpurifier/VERSION

@@ -1 +1 @@
-4.17.0
+4.18.0

+ 1 - 1
vendor/ezyang/htmlpurifier/composer.json

@@ -13,7 +13,7 @@
         }
         }
     ],
     ],
     "require": {
     "require": {
-        "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0"
+        "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
     },
     },
     "require-dev": {
     "require-dev": {
         "cerdic/css-tidy": "^1.7 || ^2.0",
         "cerdic/css-tidy": "^1.7 || ^2.0",

+ 2 - 1
vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php

@@ -7,7 +7,7 @@
  * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
  * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
  * FILE, changes will be overwritten the next time the script is run.
  * FILE, changes will be overwritten the next time the script is run.
  *
  *
- * @version 4.17.0
+ * @version 4.18.0
  *
  *
  * @warning
  * @warning
  *      You must *not* include any other HTML Purifier files before this file,
  *      You must *not* include any other HTML Purifier files before this file,
@@ -101,6 +101,7 @@ require 'HTMLPurifier/AttrDef/CSS/Length.php';
 require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
 require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
 require 'HTMLPurifier/AttrDef/CSS/Multiple.php';
 require 'HTMLPurifier/AttrDef/CSS/Multiple.php';
 require 'HTMLPurifier/AttrDef/CSS/Percentage.php';
 require 'HTMLPurifier/AttrDef/CSS/Percentage.php';
+require 'HTMLPurifier/AttrDef/CSS/Ratio.php';
 require 'HTMLPurifier/AttrDef/CSS/TextDecoration.php';
 require 'HTMLPurifier/AttrDef/CSS/TextDecoration.php';
 require 'HTMLPurifier/AttrDef/CSS/URI.php';
 require 'HTMLPurifier/AttrDef/CSS/URI.php';
 require 'HTMLPurifier/AttrDef/HTML/Bool.php';
 require 'HTMLPurifier/AttrDef/HTML/Bool.php';

+ 3 - 3
vendor/ezyang/htmlpurifier/library/HTMLPurifier.php

@@ -19,7 +19,7 @@
  */
  */
 
 
 /*
 /*
-    HTML Purifier 4.17.0 - Standards Compliant HTML Filtering
+    HTML Purifier 4.18.0 - Standards Compliant HTML Filtering
     Copyright (C) 2006-2008 Edward Z. Yang
     Copyright (C) 2006-2008 Edward Z. Yang
 
 
     This library is free software; you can redistribute it and/or
     This library is free software; you can redistribute it and/or
@@ -58,12 +58,12 @@ class HTMLPurifier
      * Version of HTML Purifier.
      * Version of HTML Purifier.
      * @type string
      * @type string
      */
      */
-    public $version = '4.17.0';
+    public $version = '4.18.0';
 
 
     /**
     /**
      * Constant with version of HTML Purifier.
      * Constant with version of HTML Purifier.
      */
      */
-    const VERSION = '4.17.0';
+    const VERSION = '4.18.0';
 
 
     /**
     /**
      * Global configuration object.
      * Global configuration object.

+ 1 - 0
vendor/ezyang/htmlpurifier/library/HTMLPurifier.safe-includes.php

@@ -95,6 +95,7 @@ require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Length.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Multiple.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Multiple.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Percentage.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Percentage.php';
+require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ratio.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/TextDecoration.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/TextDecoration.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/URI.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/CSS/URI.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Bool.php';
 require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Bool.php';

+ 9 - 5
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php

@@ -27,6 +27,13 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
         $definition = $config->getCSSDefinition();
         $definition = $config->getCSSDefinition();
         $allow_duplicates = $config->get("CSS.AllowDuplicates");
         $allow_duplicates = $config->get("CSS.AllowDuplicates");
 
 
+        $universal_attrdef = new HTMLPurifier_AttrDef_Enum(
+            array(
+                'initial',
+                'inherit',
+                'unset',
+            )
+        );
 
 
         // According to the CSS2.1 spec, the places where a
         // According to the CSS2.1 spec, the places where a
         // non-delimiting semicolon can appear are in strings
         // non-delimiting semicolon can appear are in strings
@@ -96,16 +103,13 @@ class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
             if (!$ok) {
             if (!$ok) {
                 continue;
                 continue;
             }
             }
-            // inefficient call, since the validator will do this again
-            if (strtolower(trim($value)) !== 'inherit') {
-                // inherit works for everything (but only on the base property)
+            $result = $universal_attrdef->validate($value, $config, $context);
+            if ($result === false) {
                 $result = $definition->info[$property]->validate(
                 $result = $definition->info[$property]->validate(
                     $value,
                     $value,
                     $config,
                     $config,
                     $context
                     $context
                 );
                 );
-            } else {
-                $result = 'inherit';
             }
             }
             if ($result === false) {
             if ($result === false) {
                 continue;
                 continue;

+ 6 - 12
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php

@@ -63,24 +63,18 @@ class HTMLPurifier_AttrDef_URI_Host extends HTMLPurifier_AttrDef
         // This doesn't match I18N domain names, but we don't have proper IRI support,
         // This doesn't match I18N domain names, but we don't have proper IRI support,
         // so force users to insert Punycode.
         // so force users to insert Punycode.
 
 
-        // There is not a good sense in which underscores should be
-        // allowed, since it's technically not! (And if you go as
-        // far to allow everything as specified by the DNS spec...
-        // well, that's literally everything, modulo some space limits
-        // for the components and the overall name (which, by the way,
-        // we are NOT checking!).  So we (arbitrarily) decide this:
-        // let's allow underscores wherever we would have allowed
-        // hyphens, if they are enabled.  This is a pretty good match
-        // for browser behavior, for example, a large number of browsers
-        // cannot handle foo_.example.com, but foo_bar.example.com is
-        // fairly well supported.
+        // Underscores defined as Unreserved Characters in RFC 3986 are
+        // allowed in a URI. There are cases where we want to consider a
+        // URI containing "_" such as "_dmarc.example.com".
+        // Underscores are not allowed in the default. If you want to
+        // allow it, set Core.AllowHostnameUnderscore to true.
         $underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : '';
         $underscore = $config->get('Core.AllowHostnameUnderscore') ? '_' : '';
 
 
         // Based off of RFC 1738, but amended so that
         // Based off of RFC 1738, but amended so that
         // as per RFC 3696, the top label need only not be all numeric.
         // as per RFC 3696, the top label need only not be all numeric.
         // The productions describing this are:
         // The productions describing this are:
         $a   = '[a-z]';     // alpha
         $a   = '[a-z]';     // alpha
-        $an  = '[a-z0-9]';  // alphanum
+        $an  = "[a-z0-9$underscore]";  // alphanum
         $and = "[a-z0-9-$underscore]"; // alphanum | "-"
         $and = "[a-z0-9-$underscore]"; // alphanum | "-"
         // domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
         // domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
         $domainlabel = "$an(?:$and*$an)?";
         $domainlabel = "$an(?:$and*$an)?";

+ 14 - 15
vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php

@@ -116,8 +116,6 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
                         'auto',
                         'auto',
                         'cover',
                         'cover',
                         'contain',
                         'contain',
-                        'initial',
-                        'inherit',
                     ]
                     ]
                 ),
                 ),
                 new HTMLPurifier_AttrDef_CSS_Percentage(),
                 new HTMLPurifier_AttrDef_CSS_Percentage(),
@@ -236,21 +234,20 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
             [
             [
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
-                new HTMLPurifier_AttrDef_Enum(['auto', 'initial', 'inherit'])
+                new HTMLPurifier_AttrDef_Enum(['auto'])
             ]
             ]
         );
         );
         $trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite(
         $trusted_min_wh = new HTMLPurifier_AttrDef_CSS_Composite(
             [
             [
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
-                new HTMLPurifier_AttrDef_Enum(['initial', 'inherit'])
             ]
             ]
         );
         );
         $trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite(
         $trusted_max_wh = new HTMLPurifier_AttrDef_CSS_Composite(
             [
             [
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Length('0'),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
                 new HTMLPurifier_AttrDef_CSS_Percentage(true),
-                new HTMLPurifier_AttrDef_Enum(['none', 'initial', 'inherit'])
+                new HTMLPurifier_AttrDef_Enum(['none'])
             ]
             ]
         );
         );
         $max = $config->get('CSS.MaxImgLength');
         $max = $config->get('CSS.MaxImgLength');
@@ -278,12 +275,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
                 new HTMLPurifier_AttrDef_Switch(
                 new HTMLPurifier_AttrDef_Switch(
                     'img',
                     'img',
                     // For img tags:
                     // For img tags:
-                    new HTMLPurifier_AttrDef_CSS_Composite(
-                        [
-                            new HTMLPurifier_AttrDef_CSS_Length('0', $max),
-                            new HTMLPurifier_AttrDef_Enum(['initial', 'inherit'])
-                        ]
-                    ),
+                    new HTMLPurifier_AttrDef_CSS_Length('0', $max),
                     // For everyone else:
                     // For everyone else:
                     $trusted_min_wh
                     $trusted_min_wh
                 );
                 );
@@ -297,22 +289,29 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
                     new HTMLPurifier_AttrDef_CSS_Composite(
                     new HTMLPurifier_AttrDef_CSS_Composite(
                         [
                         [
                             new HTMLPurifier_AttrDef_CSS_Length('0', $max),
                             new HTMLPurifier_AttrDef_CSS_Length('0', $max),
-                            new HTMLPurifier_AttrDef_Enum(['none', 'initial', 'inherit'])
+                            new HTMLPurifier_AttrDef_Enum(['none'])
                         ]
                         ]
                     ),
                     ),
                     // For everyone else:
                     // For everyone else:
                     $trusted_max_wh
                     $trusted_max_wh
                 );
                 );
 
 
+        $this->info['aspect-ratio'] = new HTMLPurifier_AttrDef_CSS_Multiple(
+            new HTMLPurifier_AttrDef_CSS_Composite([
+                new HTMLPurifier_AttrDef_CSS_Ratio(),
+                new HTMLPurifier_AttrDef_Enum(['auto']),
+            ])
+        );
+
         // text-decoration and related shorthands
         // text-decoration and related shorthands
         $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
         $this->info['text-decoration'] = new HTMLPurifier_AttrDef_CSS_TextDecoration();
 
 
         $this->info['text-decoration-line'] = new HTMLPurifier_AttrDef_Enum(
         $this->info['text-decoration-line'] = new HTMLPurifier_AttrDef_Enum(
-            ['none', 'underline', 'overline', 'line-through', 'initial', 'inherit']
+            ['none', 'underline', 'overline', 'line-through']
         );
         );
 
 
         $this->info['text-decoration-style'] = new HTMLPurifier_AttrDef_Enum(
         $this->info['text-decoration-style'] = new HTMLPurifier_AttrDef_Enum(
-            ['solid', 'double', 'dotted', 'dashed', 'wavy', 'initial', 'inherit']
+            ['solid', 'double', 'dotted', 'dashed', 'wavy']
         );
         );
 
 
         $this->info['text-decoration-color'] = new HTMLPurifier_AttrDef_CSS_Color();
         $this->info['text-decoration-color'] = new HTMLPurifier_AttrDef_CSS_Color();
@@ -320,7 +319,7 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
         $this->info['text-decoration-thickness'] = new HTMLPurifier_AttrDef_CSS_Composite([
         $this->info['text-decoration-thickness'] = new HTMLPurifier_AttrDef_CSS_Composite([
             new HTMLPurifier_AttrDef_CSS_Length(),
             new HTMLPurifier_AttrDef_CSS_Length(),
             new HTMLPurifier_AttrDef_CSS_Percentage(),
             new HTMLPurifier_AttrDef_CSS_Percentage(),
-            new HTMLPurifier_AttrDef_Enum(['auto', 'from-font', 'initial', 'inherit'])
+            new HTMLPurifier_AttrDef_Enum(['auto', 'from-font'])
         ]);
         ]);
 
 
         $this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily();
         $this->info['font-family'] = new HTMLPurifier_AttrDef_CSS_FontFamily();

+ 3 - 0
vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php

@@ -190,6 +190,9 @@ class HTMLPurifier_ChildDef_Table extends HTMLPurifier_ChildDef
             $current_tr_tbody = null;
             $current_tr_tbody = null;
 
 
             foreach($content as $node) {
             foreach($content as $node) {
+                if (!isset($node->name)) {
+                    continue;
+                }
                 switch ($node->name) {
                 switch ($node->name) {
                 case 'tbody':
                 case 'tbody':
                     $current_tr_tbody = null;
                     $current_tr_tbody = null;

+ 1 - 1
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php

@@ -21,7 +21,7 @@ class HTMLPurifier_Config
      * HTML Purifier's version
      * HTML Purifier's version
      * @type string
      * @type string
      */
      */
-    public $version = '4.17.0';
+    public $version = '4.18.0';
 
 
     /**
     /**
      * Whether or not to automatically finalize
      * Whether or not to automatically finalize

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
vendor/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/schema.ser


+ 2 - 2
vendor/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php

@@ -116,8 +116,8 @@ class HTMLPurifier_EntityParser
     protected function entityCallback($matches)
     protected function entityCallback($matches)
     {
     {
         $entity = $matches[0];
         $entity = $matches[0];
-        $hex_part = @$matches[1];
-        $dec_part = @$matches[2];
+        $hex_part = isset($matches[1]) ? $matches[1] : null;
+        $dec_part = isset($matches[2]) ? $matches[2] : null;
         $named_part = empty($matches[3]) ? (empty($matches[4]) ? "" : $matches[4]) : $matches[3];
         $named_part = empty($matches[3]) ? (empty($matches[4]) ? "" : $matches[4]) : $matches[3];
         if ($hex_part !== NULL && $hex_part !== "") {
         if ($hex_part !== NULL && $hex_part !== "") {
             return HTMLPurifier_Encoder::unichr(hexdec($hex_part));
             return HTMLPurifier_Encoder::unichr(hexdec($hex_part));

+ 17 - 0
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php

@@ -54,6 +54,11 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
      */
      */
     private $_enum_attrdef;
     private $_enum_attrdef;
 
 
+    /**
+     * @type HTMLPurifier_AttrDef_Enum
+     */
+    private $_universal_attrdef;
+
     public function __construct()
     public function __construct()
     {
     {
         $this->_tidy = new csstidy();
         $this->_tidy = new csstidy();
@@ -70,6 +75,13 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
                 'focus'
                 'focus'
             )
             )
         );
         );
+        $this->_universal_attrdef = new HTMLPurifier_AttrDef_Enum(
+            array(
+                'initial',
+                'inherit',
+                'unset',
+            )
+        );
     }
     }
 
 
     /**
     /**
@@ -307,6 +319,11 @@ class HTMLPurifier_Filter_ExtractStyleBlocks extends HTMLPurifier_Filter
                             unset($style[$name]);
                             unset($style[$name]);
                             continue;
                             continue;
                         }
                         }
+                        $uni_ret = $this->_universal_attrdef->validate($value, $config, $context);
+                        if ($uni_ret !== false) {
+                            $style[$name] = $uni_ret;
+                            continue;
+                        }
                         $def = $css_definition->info[$name];
                         $def = $css_definition->info[$name];
                         $ret = $def->validate($value, $config, $context);
                         $ret = $def->validate($value, $config, $context);
                         if ($ret === false) {
                         if ($ret === false) {

+ 17 - 11
vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php

@@ -28,22 +28,28 @@ class HTMLPurifier_HTMLModule_Iframe extends HTMLPurifier_HTMLModule
         if ($config->get('HTML.SafeIframe')) {
         if ($config->get('HTML.SafeIframe')) {
             $this->safe = true;
             $this->safe = true;
         }
         }
+        $attrs = array(
+            'src' => 'URI#embedded',
+            'width' => 'Length',
+            'height' => 'Length',
+            'name' => 'ID',
+            'scrolling' => 'Enum#yes,no,auto',
+            'frameborder' => 'Enum#0,1',
+            'longdesc' => 'URI',
+            'marginheight' => 'Pixels',
+            'marginwidth' => 'Pixels',
+        );
+
+        if ($config->get('HTML.Trusted')) {
+            $attrs['allowfullscreen'] = 'Bool#allowfullscreen';
+        }
+
         $this->addElement(
         $this->addElement(
             'iframe',
             'iframe',
             'Inline',
             'Inline',
             'Flow',
             'Flow',
             'Common',
             'Common',
-            array(
-                'src' => 'URI#embedded',
-                'width' => 'Length',
-                'height' => 'Length',
-                'name' => 'ID',
-                'scrolling' => 'Enum#yes,no,auto',
-                'frameborder' => 'Enum#0,1',
-                'longdesc' => 'URI',
-                'marginheight' => 'Pixels',
-                'marginwidth' => 'Pixels',
-            )
+            $attrs
         );
         );
     }
     }
 }
 }

+ 0 - 16
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php

@@ -270,20 +270,6 @@ class HTMLPurifier_Lexer
     }
     }
 
 
     /**
     /**
-     * Special Internet Explorer conditional comments should be removed.
-     * @param string $string HTML string to process.
-     * @return string HTML with conditional comments removed.
-     */
-    protected static function removeIEConditional($string)
-    {
-        return preg_replace(
-            '#<!--\[if [^>]+\]>.*?<!\[endif\]-->#si', // probably should generalize for all strings
-            '',
-            $string
-        );
-    }
-
-    /**
      * Callback function for escapeCDATA() that does the work.
      * Callback function for escapeCDATA() that does the work.
      *
      *
      * @warning Though this is public in order to let the callback happen,
      * @warning Though this is public in order to let the callback happen,
@@ -323,8 +309,6 @@ class HTMLPurifier_Lexer
         // escape CDATA
         // escape CDATA
         $html = $this->escapeCDATA($html);
         $html = $this->escapeCDATA($html);
 
 
-        $html = $this->removeIEConditional($html);
-
         // extract body from document if applicable
         // extract body from document if applicable
         if ($config->get('Core.ConvertDocumentToFragment')) {
         if ($config->get('Core.ConvertDocumentToFragment')) {
             $e = false;
             $e = false;

+ 3 - 0
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php

@@ -72,6 +72,9 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
         if ($config->get('Core.AllowParseManyTags') && defined('LIBXML_PARSEHUGE')) {
         if ($config->get('Core.AllowParseManyTags') && defined('LIBXML_PARSEHUGE')) {
             $options |= LIBXML_PARSEHUGE;
             $options |= LIBXML_PARSEHUGE;
         }
         }
+        if ($config->get('Core.RemoveBlanks') && defined('LIBXML_NOBLANKS')) {
+            $options |= LIBXML_NOBLANKS;
+        }
 
 
         set_error_handler(array($this, 'muteErrorHandler'));
         set_error_handler(array($this, 'muteErrorHandler'));
         // loadHTML() fails on PHP 5.3 when second parameter is given
         // loadHTML() fails on PHP 5.3 when second parameter is given

+ 1 - 1
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php

@@ -44,7 +44,7 @@ abstract class HTMLPurifier_Token_Tag extends HTMLPurifier_Token
         $this->name = ctype_lower($name) ? $name : strtolower($name);
         $this->name = ctype_lower($name) ? $name : strtolower($name);
         foreach ($attr as $key => $value) {
         foreach ($attr as $key => $value) {
             // normalization only necessary when key is not lowercase
             // normalization only necessary when key is not lowercase
-            if (!ctype_lower($key)) {
+            if (!ctype_lower((string)$key)) {
                 $new_key = strtolower($key);
                 $new_key = strtolower($key);
                 if (!isset($attr[$new_key])) {
                 if (!isset($attr[$new_key])) {
                     $attr[$new_key] = $attr[$key];
                     $attr[$new_key] = $attr[$key];

+ 31 - 0
vendor/guzzlehttp/guzzle/CHANGELOG.md

@@ -3,6 +3,37 @@
 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
 Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.
 
 
 
 
+## 7.9.2 - 2024-07-24
+
+### Fixed
+
+- Adjusted handler selection to use cURL if its version is 7.21.2 or higher, rather than 7.34.0
+
+
+## 7.9.1 - 2024-07-19
+
+### Fixed
+
+- Fix TLS 1.3 check for HTTP/2 requests
+
+
+## 7.9.0 - 2024-07-18
+
+### Changed
+
+- Improve protocol version checks to provide feedback around unsupported protocols
+- Only select the cURL handler by default if 7.34.0 or higher is linked
+- Improved `CurlMultiHandler` to avoid busy wait if possible
+- Dropped support for EOL `guzzlehttp/psr7` v1
+- Improved URI user info redaction in errors
+
+## 7.8.2 - 2024-07-18
+
+### Added
+
+- Support for PHP 8.4
+
+
 ## 7.8.1 - 2023-12-03
 ## 7.8.1 - 2023-12-03
 
 
 ### Changed
 ### Changed

+ 5 - 5
vendor/guzzlehttp/guzzle/README.md

@@ -62,11 +62,11 @@ composer require guzzlehttp/guzzle
 
 
 | Version | Status              | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |
 | Version | Status              | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |
 |---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
 |---------|---------------------|---------------------|--------------|---------------------|---------------------|-------|--------------|
-| 3.x     | EOL                 | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |
-| 4.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |
-| 5.x     | EOL                 | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |
-| 6.x     | Security fixes only | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |
-| 7.x     | Latest              | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.4 |
+| 3.x     | EOL (2016-10-31)    | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |
+| 4.x     | EOL (2016-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |
+| 5.x     | EOL (2019-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |
+| 6.x     | EOL (2023-10-31)    | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |
+| 7.x     | Latest              | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.5 |
 
 
 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
 [guzzle-3-repo]: https://github.com/guzzle/guzzle3
 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x
 [guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x

+ 32 - 4
vendor/guzzlehttp/guzzle/composer.json

@@ -50,11 +50,39 @@
             "homepage": "https://github.com/Tobion"
             "homepage": "https://github.com/Tobion"
         }
         }
     ],
     ],
+    "repositories": [
+        {
+            "type": "package",
+            "package": {
+                "name": "guzzle/client-integration-tests",
+                "version": "v3.0.2",
+                "dist": {
+                    "url": "https://codeload.github.com/guzzle/client-integration-tests/zip/2c025848417c1135031fdf9c728ee53d0a7ceaee",
+                    "type": "zip"
+                },
+                "require": {
+                    "php": "^7.2.5 || ^8.0",
+                    "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.11",
+                    "php-http/message": "^1.0 || ^2.0",
+                    "guzzlehttp/psr7": "^1.7 || ^2.0",
+                    "th3n3rd/cartesian-product": "^0.3"
+                },
+                "autoload": {
+                    "psr-4": {
+                        "Http\\Client\\Tests\\": "src/"
+                    }
+                },
+                "bin": [
+                    "bin/http_test_server"
+                ]
+            }
+        }
+    ],
     "require": {
     "require": {
         "php": "^7.2.5 || ^8.0",
         "php": "^7.2.5 || ^8.0",
         "ext-json": "*",
         "ext-json": "*",
-        "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
-        "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+        "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+        "guzzlehttp/psr7": "^2.7.0",
         "psr/http-client": "^1.0",
         "psr/http-client": "^1.0",
         "symfony/deprecation-contracts": "^2.2 || ^3.0"
         "symfony/deprecation-contracts": "^2.2 || ^3.0"
     },
     },
@@ -64,9 +92,9 @@
     "require-dev": {
     "require-dev": {
         "ext-curl": "*",
         "ext-curl": "*",
         "bamarni/composer-bin-plugin": "^1.8.2",
         "bamarni/composer-bin-plugin": "^1.8.2",
-        "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+        "guzzle/client-integration-tests": "3.0.2",
         "php-http/message-factory": "^1.1",
         "php-http/message-factory": "^1.1",
-        "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+        "phpunit/phpunit": "^8.5.39 || ^9.6.20",
         "psr/log": "^1.1 || ^2.0 || ^3.0"
         "psr/log": "^1.1 || ^2.0 || ^3.0"
     },
     },
     "suggest": {
     "suggest": {

+ 3 - 3
vendor/guzzlehttp/guzzle/src/BodySummarizer.php

@@ -11,7 +11,7 @@ final class BodySummarizer implements BodySummarizerInterface
      */
      */
     private $truncateAt;
     private $truncateAt;
 
 
-    public function __construct(int $truncateAt = null)
+    public function __construct(?int $truncateAt = null)
     {
     {
         $this->truncateAt = $truncateAt;
         $this->truncateAt = $truncateAt;
     }
     }
@@ -22,7 +22,7 @@ final class BodySummarizer implements BodySummarizerInterface
     public function summarize(MessageInterface $message): ?string
     public function summarize(MessageInterface $message): ?string
     {
     {
         return $this->truncateAt === null
         return $this->truncateAt === null
-            ? \GuzzleHttp\Psr7\Message::bodySummary($message)
-            : \GuzzleHttp\Psr7\Message::bodySummary($message, $this->truncateAt);
+            ? Psr7\Message::bodySummary($message)
+            : Psr7\Message::bodySummary($message, $this->truncateAt);
     }
     }
 }
 }

+ 2 - 2
vendor/guzzlehttp/guzzle/src/Client.php

@@ -52,7 +52,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
      *
      *
      * @param array $config Client configuration settings.
      * @param array $config Client configuration settings.
      *
      *
-     * @see \GuzzleHttp\RequestOptions for a list of available request options.
+     * @see RequestOptions for a list of available request options.
      */
      */
     public function __construct(array $config = [])
     public function __construct(array $config = [])
     {
     {
@@ -202,7 +202,7 @@ class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
      *
      *
      * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.
      * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.
      */
      */
-    public function getConfig(string $option = null)
+    public function getConfig(?string $option = null)
     {
     {
         return $option === null
         return $option === null
             ? $this->config
             ? $this->config

+ 1 - 1
vendor/guzzlehttp/guzzle/src/ClientInterface.php

@@ -80,5 +80,5 @@ interface ClientInterface
      *
      *
      * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.
      * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.
      */
      */
-    public function getConfig(string $option = null);
+    public function getConfig(?string $option = null);
 }
 }

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php

@@ -103,7 +103,7 @@ class CookieJar implements CookieJarInterface
         }, $this->getIterator()->getArrayCopy());
         }, $this->getIterator()->getArrayCopy());
     }
     }
 
 
-    public function clear(string $domain = null, string $path = null, string $name = null): void
+    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void
     {
     {
         if (!$domain) {
         if (!$domain) {
             $this->cookies = [];
             $this->cookies = [];

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php

@@ -62,7 +62,7 @@ interface CookieJarInterface extends \Countable, \IteratorAggregate
      * @param string|null $path   Clears cookies matching a domain and path
      * @param string|null $path   Clears cookies matching a domain and path
      * @param string|null $name   Clears cookies matching a domain, path, and name
      * @param string|null $name   Clears cookies matching a domain, path, and name
      */
      */
-    public function clear(string $domain = null, string $path = null, string $name = null): void;
+    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void;
 
 
     /**
     /**
      * Discard all sessions cookies.
      * Discard all sessions cookies.

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php

@@ -14,7 +14,7 @@ class BadResponseException extends RequestException
         string $message,
         string $message,
         RequestInterface $request,
         RequestInterface $request,
         ResponseInterface $response,
         ResponseInterface $response,
-        \Throwable $previous = null,
+        ?\Throwable $previous = null,
         array $handlerContext = []
         array $handlerContext = []
     ) {
     ) {
         parent::__construct($message, $request, $response, $previous, $handlerContext);
         parent::__construct($message, $request, $response, $previous, $handlerContext);

+ 1 - 1
vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php

@@ -25,7 +25,7 @@ class ConnectException extends TransferException implements NetworkExceptionInte
     public function __construct(
     public function __construct(
         string $message,
         string $message,
         RequestInterface $request,
         RequestInterface $request,
-        \Throwable $previous = null,
+        ?\Throwable $previous = null,
         array $handlerContext = []
         array $handlerContext = []
     ) {
     ) {
         parent::__construct($message, 0, $previous);
         parent::__construct($message, 0, $previous);

+ 6 - 22
vendor/guzzlehttp/guzzle/src/Exception/RequestException.php

@@ -7,7 +7,6 @@ use GuzzleHttp\BodySummarizerInterface;
 use Psr\Http\Client\RequestExceptionInterface;
 use Psr\Http\Client\RequestExceptionInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\UriInterface;
 
 
 /**
 /**
  * HTTP Request exception
  * HTTP Request exception
@@ -32,8 +31,8 @@ class RequestException extends TransferException implements RequestExceptionInte
     public function __construct(
     public function __construct(
         string $message,
         string $message,
         RequestInterface $request,
         RequestInterface $request,
-        ResponseInterface $response = null,
-        \Throwable $previous = null,
+        ?ResponseInterface $response = null,
+        ?\Throwable $previous = null,
         array $handlerContext = []
         array $handlerContext = []
     ) {
     ) {
         // Set the code of the exception if the response is set and not future.
         // Set the code of the exception if the response is set and not future.
@@ -63,10 +62,10 @@ class RequestException extends TransferException implements RequestExceptionInte
      */
      */
     public static function create(
     public static function create(
         RequestInterface $request,
         RequestInterface $request,
-        ResponseInterface $response = null,
-        \Throwable $previous = null,
+        ?ResponseInterface $response = null,
+        ?\Throwable $previous = null,
         array $handlerContext = [],
         array $handlerContext = [],
-        BodySummarizerInterface $bodySummarizer = null
+        ?BodySummarizerInterface $bodySummarizer = null
     ): self {
     ): self {
         if (!$response) {
         if (!$response) {
             return new self(
             return new self(
@@ -90,8 +89,7 @@ class RequestException extends TransferException implements RequestExceptionInte
             $className = __CLASS__;
             $className = __CLASS__;
         }
         }
 
 
-        $uri = $request->getUri();
-        $uri = static::obfuscateUri($uri);
+        $uri = \GuzzleHttp\Psr7\Utils::redactUserInfo($request->getUri());
 
 
         // Client Error: `GET /` resulted in a `404 Not Found` response:
         // Client Error: `GET /` resulted in a `404 Not Found` response:
         // <html> ... (truncated)
         // <html> ... (truncated)
@@ -114,20 +112,6 @@ class RequestException extends TransferException implements RequestExceptionInte
     }
     }
 
 
     /**
     /**
-     * Obfuscates URI if there is a username and a password present
-     */
-    private static function obfuscateUri(UriInterface $uri): UriInterface
-    {
-        $userInfo = $uri->getUserInfo();
-
-        if (false !== ($pos = \strpos($userInfo, ':'))) {
-            return $uri->withUserInfo(\substr($userInfo, 0, $pos), '***');
-        }
-
-        return $uri;
-    }
-
-    /**
      * Get the request that caused the exception
      * Get the request that caused the exception
      */
      */
     public function getRequest(): RequestInterface
     public function getRequest(): RequestInterface

+ 116 - 18
vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php

@@ -11,6 +11,7 @@ use GuzzleHttp\Psr7\LazyOpenStream;
 use GuzzleHttp\TransferStats;
 use GuzzleHttp\TransferStats;
 use GuzzleHttp\Utils;
 use GuzzleHttp\Utils;
 use Psr\Http\Message\RequestInterface;
 use Psr\Http\Message\RequestInterface;
+use Psr\Http\Message\UriInterface;
 
 
 /**
 /**
  * Creates curl resources from a request
  * Creates curl resources from a request
@@ -46,6 +47,16 @@ class CurlFactory implements CurlFactoryInterface
 
 
     public function create(RequestInterface $request, array $options): EasyHandle
     public function create(RequestInterface $request, array $options): EasyHandle
     {
     {
+        $protocolVersion = $request->getProtocolVersion();
+
+        if ('2' === $protocolVersion || '2.0' === $protocolVersion) {
+            if (!self::supportsHttp2()) {
+                throw new ConnectException('HTTP/2 is supported by the cURL handler, however libcurl is built without HTTP/2 support.', $request);
+            }
+        } elseif ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) {
+            throw new ConnectException(sprintf('HTTP/%s is not supported by the cURL handler.', $protocolVersion), $request);
+        }
+
         if (isset($options['curl']['body_as_string'])) {
         if (isset($options['curl']['body_as_string'])) {
             $options['_body_as_string'] = $options['curl']['body_as_string'];
             $options['_body_as_string'] = $options['curl']['body_as_string'];
             unset($options['curl']['body_as_string']);
             unset($options['curl']['body_as_string']);
@@ -72,6 +83,42 @@ class CurlFactory implements CurlFactoryInterface
         return $easy;
         return $easy;
     }
     }
 
 
+    private static function supportsHttp2(): bool
+    {
+        static $supportsHttp2 = null;
+
+        if (null === $supportsHttp2) {
+            $supportsHttp2 = self::supportsTls12()
+                && defined('CURL_VERSION_HTTP2')
+                && (\CURL_VERSION_HTTP2 & \curl_version()['features']);
+        }
+
+        return $supportsHttp2;
+    }
+
+    private static function supportsTls12(): bool
+    {
+        static $supportsTls12 = null;
+
+        if (null === $supportsTls12) {
+            $supportsTls12 = \CURL_SSLVERSION_TLSv1_2 & \curl_version()['features'];
+        }
+
+        return $supportsTls12;
+    }
+
+    private static function supportsTls13(): bool
+    {
+        static $supportsTls13 = null;
+
+        if (null === $supportsTls13) {
+            $supportsTls13 = defined('CURL_SSLVERSION_TLSv1_3')
+                && (\CURL_SSLVERSION_TLSv1_3 & \curl_version()['features']);
+        }
+
+        return $supportsTls13;
+    }
+
     public function release(EasyHandle $easy): void
     public function release(EasyHandle $easy): void
     {
     {
         $resource = $easy->handle;
         $resource = $easy->handle;
@@ -147,7 +194,7 @@ class CurlFactory implements CurlFactoryInterface
             'error' => \curl_error($easy->handle),
             'error' => \curl_error($easy->handle),
             'appconnect_time' => \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME),
             'appconnect_time' => \curl_getinfo($easy->handle, \CURLINFO_APPCONNECT_TIME),
         ] + \curl_getinfo($easy->handle);
         ] + \curl_getinfo($easy->handle);
-        $ctx[self::CURL_VERSION_STR] = \curl_version()['version'];
+        $ctx[self::CURL_VERSION_STR] = self::getCurlVersion();
         $factory->release($easy);
         $factory->release($easy);
 
 
         // Retry when nothing is present or when curl failed to rewind.
         // Retry when nothing is present or when curl failed to rewind.
@@ -158,6 +205,17 @@ class CurlFactory implements CurlFactoryInterface
         return self::createRejection($easy, $ctx);
         return self::createRejection($easy, $ctx);
     }
     }
 
 
+    private static function getCurlVersion(): string
+    {
+        static $curlVersion = null;
+
+        if (null === $curlVersion) {
+            $curlVersion = \curl_version()['version'];
+        }
+
+        return $curlVersion;
+    }
+
     private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
     private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface
     {
     {
         static $connectionErrors = [
         static $connectionErrors = [
@@ -194,15 +252,22 @@ class CurlFactory implements CurlFactoryInterface
             );
             );
         }
         }
 
 
+        $uri = $easy->request->getUri();
+
+        $sanitizedError = self::sanitizeCurlError($ctx['error'] ?? '', $uri);
+
         $message = \sprintf(
         $message = \sprintf(
             'cURL error %s: %s (%s)',
             'cURL error %s: %s (%s)',
             $ctx['errno'],
             $ctx['errno'],
-            $ctx['error'],
+            $sanitizedError,
             'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'
             'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'
         );
         );
-        $uriString = (string) $easy->request->getUri();
-        if ($uriString !== '' && false === \strpos($ctx['error'], $uriString)) {
-            $message .= \sprintf(' for %s', $uriString);
+
+        if ('' !== $sanitizedError) {
+            $redactedUriString = \GuzzleHttp\Psr7\Utils::redactUserInfo($uri)->__toString();
+            if ($redactedUriString !== '' && false === \strpos($sanitizedError, $redactedUriString)) {
+                $message .= \sprintf(' for %s', $redactedUriString);
+            }
         }
         }
 
 
         // Create a connection exception if it was a specific error code.
         // Create a connection exception if it was a specific error code.
@@ -213,6 +278,24 @@ class CurlFactory implements CurlFactoryInterface
         return P\Create::rejectionFor($error);
         return P\Create::rejectionFor($error);
     }
     }
 
 
+    private static function sanitizeCurlError(string $error, UriInterface $uri): string
+    {
+        if ('' === $error) {
+            return $error;
+        }
+
+        $baseUri = $uri->withQuery('')->withFragment('');
+        $baseUriString = $baseUri->__toString();
+
+        if ('' === $baseUriString) {
+            return $error;
+        }
+
+        $redactedUriString = \GuzzleHttp\Psr7\Utils::redactUserInfo($baseUri)->__toString();
+
+        return str_replace($baseUriString, $redactedUriString, $error);
+    }
+
     /**
     /**
      * @return array<int|string, mixed>
      * @return array<int|string, mixed>
      */
      */
@@ -232,10 +315,11 @@ class CurlFactory implements CurlFactoryInterface
         }
         }
 
 
         $version = $easy->request->getProtocolVersion();
         $version = $easy->request->getProtocolVersion();
-        if ($version == 1.1) {
-            $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1;
-        } elseif ($version == 2.0) {
+
+        if ('2' === $version || '2.0' === $version) {
             $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0;
             $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_2_0;
+        } elseif ('1.1' === $version) {
+            $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_1;
         } else {
         } else {
             $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0;
             $conf[\CURLOPT_HTTP_VERSION] = \CURL_HTTP_VERSION_1_0;
         }
         }
@@ -390,8 +474,10 @@ class CurlFactory implements CurlFactoryInterface
                 // The empty string enables all available decoders and implicitly
                 // The empty string enables all available decoders and implicitly
                 // sets a matching 'Accept-Encoding' header.
                 // sets a matching 'Accept-Encoding' header.
                 $conf[\CURLOPT_ENCODING] = '';
                 $conf[\CURLOPT_ENCODING] = '';
-                // But as the user did not specify any acceptable encodings we need
-                // to overwrite this implicit header with an empty one.
+                // But as the user did not specify any encoding preference,
+                // let's leave it up to server by preventing curl from sending
+                // the header, which will be interpreted as 'Accept-Encoding: *'.
+                // https://www.rfc-editor.org/rfc/rfc9110#field.accept-encoding
                 $conf[\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
                 $conf[\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';
             }
             }
         }
         }
@@ -455,23 +541,35 @@ class CurlFactory implements CurlFactoryInterface
         }
         }
 
 
         if (isset($options['crypto_method'])) {
         if (isset($options['crypto_method'])) {
-            if (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {
-                if (!defined('CURL_SSLVERSION_TLSv1_0')) {
-                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.0 not supported by your version of cURL');
+            $protocolVersion = $easy->request->getProtocolVersion();
+
+            // If HTTP/2, upgrade TLS 1.0 and 1.1 to 1.2
+            if ('2' === $protocolVersion || '2.0' === $protocolVersion) {
+                if (
+                    \STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']
+                    || \STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']
+                    || \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']
+                ) {
+                    $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
+                } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
+                    if (!self::supportsTls13()) {
+                        throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
+                    }
+                    $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;
+                } else {
+                    throw new \InvalidArgumentException('Invalid crypto_method request option: unknown version provided');
                 }
                 }
+            } elseif (\STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT === $options['crypto_method']) {
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0;
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_0;
             } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {
             } elseif (\STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT === $options['crypto_method']) {
-                if (!defined('CURL_SSLVERSION_TLSv1_1')) {
-                    throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.1 not supported by your version of cURL');
-                }
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1;
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_1;
             } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {
             } elseif (\STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT === $options['crypto_method']) {
-                if (!defined('CURL_SSLVERSION_TLSv1_2')) {
+                if (!self::supportsTls12()) {
                     throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');
                     throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.2 not supported by your version of cURL');
                 }
                 }
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_2;
             } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
             } elseif (defined('STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT') && \STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT === $options['crypto_method']) {
-                if (!defined('CURL_SSLVERSION_TLSv1_3')) {
+                if (!self::supportsTls13()) {
                     throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
                     throw new \InvalidArgumentException('Invalid crypto_method request option: TLS 1.3 not supported by your version of cURL');
                 }
                 }
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;
                 $conf[\CURLOPT_SSLVERSION] = \CURL_SSLVERSION_TLSv1_3;

+ 17 - 0
vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php

@@ -2,6 +2,7 @@
 
 
 namespace GuzzleHttp\Handler;
 namespace GuzzleHttp\Handler;
 
 
+use Closure;
 use GuzzleHttp\Promise as P;
 use GuzzleHttp\Promise as P;
 use GuzzleHttp\Promise\Promise;
 use GuzzleHttp\Promise\Promise;
 use GuzzleHttp\Promise\PromiseInterface;
 use GuzzleHttp\Promise\PromiseInterface;
@@ -159,6 +160,9 @@ class CurlMultiHandler
             }
             }
         }
         }
 
 
+        // Run curl_multi_exec in the queue to enable other async tasks to run
+        P\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue']));
+
         // Step through the task queue which may add additional requests.
         // Step through the task queue which may add additional requests.
         P\Utils::queue()->run();
         P\Utils::queue()->run();
 
 
@@ -169,12 +173,25 @@ class CurlMultiHandler
         }
         }
 
 
         while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
         while (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
+            // Prevent busy looping for slow HTTP requests.
+            \curl_multi_select($this->_mh, $this->selectTimeout);
         }
         }
 
 
         $this->processMessages();
         $this->processMessages();
     }
     }
 
 
     /**
     /**
+     * Runs \curl_multi_exec() inside the event loop, to prevent busy looping
+     */
+    private function tickInQueue(): void
+    {
+        if (\curl_multi_exec($this->_mh, $this->active) === \CURLM_CALL_MULTI_PERFORM) {
+            \curl_multi_select($this->_mh, 0);
+            P\Utils::queue()->add(Closure::fromCallable([$this, 'tickInQueue']));
+        }
+    }
+
+    /**
      * Runs until all outstanding connections have completed.
      * Runs until all outstanding connections have completed.
      */
      */
     public function execute(): void
     public function execute(): void

+ 4 - 4
vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php

@@ -52,21 +52,21 @@ class MockHandler implements \Countable
      * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled.
      * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled.
      * @param callable|null $onRejected  Callback to invoke when the return value is rejected.
      * @param callable|null $onRejected  Callback to invoke when the return value is rejected.
      */
      */
-    public static function createWithMiddleware(array $queue = null, callable $onFulfilled = null, callable $onRejected = null): HandlerStack
+    public static function createWithMiddleware(?array $queue = null, ?callable $onFulfilled = null, ?callable $onRejected = null): HandlerStack
     {
     {
         return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
         return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));
     }
     }
 
 
     /**
     /**
      * The passed in value must be an array of
      * The passed in value must be an array of
-     * {@see \Psr\Http\Message\ResponseInterface} objects, Exceptions,
+     * {@see ResponseInterface} objects, Exceptions,
      * callables, or Promises.
      * callables, or Promises.
      *
      *
      * @param array<int, mixed>|null $queue       The parameters to be passed to the append function, as an indexed array.
      * @param array<int, mixed>|null $queue       The parameters to be passed to the append function, as an indexed array.
      * @param callable|null          $onFulfilled Callback to invoke when the return value is fulfilled.
      * @param callable|null          $onFulfilled Callback to invoke when the return value is fulfilled.
      * @param callable|null          $onRejected  Callback to invoke when the return value is rejected.
      * @param callable|null          $onRejected  Callback to invoke when the return value is rejected.
      */
      */
-    public function __construct(array $queue = null, callable $onFulfilled = null, callable $onRejected = null)
+    public function __construct(?array $queue = null, ?callable $onFulfilled = null, ?callable $onRejected = null)
     {
     {
         $this->onFulfilled = $onFulfilled;
         $this->onFulfilled = $onFulfilled;
         $this->onRejected = $onRejected;
         $this->onRejected = $onRejected;
@@ -200,7 +200,7 @@ class MockHandler implements \Countable
     private function invokeStats(
     private function invokeStats(
         RequestInterface $request,
         RequestInterface $request,
         array $options,
         array $options,
-        ResponseInterface $response = null,
+        ?ResponseInterface $response = null,
         $reason = null
         $reason = null
     ): void {
     ): void {
         if (isset($options['on_stats'])) {
         if (isset($options['on_stats'])) {

+ 9 - 3
vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php

@@ -40,6 +40,12 @@ class StreamHandler
             \usleep($options['delay'] * 1000);
             \usleep($options['delay'] * 1000);
         }
         }
 
 
+        $protocolVersion = $request->getProtocolVersion();
+
+        if ('1.0' !== $protocolVersion && '1.1' !== $protocolVersion) {
+            throw new ConnectException(sprintf('HTTP/%s is not supported by the stream handler.', $protocolVersion), $request);
+        }
+
         $startTime = isset($options['on_stats']) ? Utils::currentTime() : null;
         $startTime = isset($options['on_stats']) ? Utils::currentTime() : null;
 
 
         try {
         try {
@@ -83,8 +89,8 @@ class StreamHandler
         array $options,
         array $options,
         RequestInterface $request,
         RequestInterface $request,
         ?float $startTime,
         ?float $startTime,
-        ResponseInterface $response = null,
-        \Throwable $error = null
+        ?ResponseInterface $response = null,
+        ?\Throwable $error = null
     ): void {
     ): void {
         if (isset($options['on_stats'])) {
         if (isset($options['on_stats'])) {
             $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []);
             $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []);
@@ -273,7 +279,7 @@ class StreamHandler
 
 
         // HTTP/1.1 streams using the PHP stream wrapper require a
         // HTTP/1.1 streams using the PHP stream wrapper require a
         // Connection: close header
         // Connection: close header
-        if ($request->getProtocolVersion() == '1.1'
+        if ($request->getProtocolVersion() === '1.1'
             && !$request->hasHeader('Connection')
             && !$request->hasHeader('Connection')
         ) {
         ) {
             $request = $request->withHeader('Connection', 'close');
             $request = $request->withHeader('Connection', 'close');

+ 3 - 3
vendor/guzzlehttp/guzzle/src/HandlerStack.php

@@ -44,7 +44,7 @@ class HandlerStack
      *                                                                            handler is provided, the best handler for your
      *                                                                            handler is provided, the best handler for your
      *                                                                            system will be utilized.
      *                                                                            system will be utilized.
      */
      */
-    public static function create(callable $handler = null): self
+    public static function create(?callable $handler = null): self
     {
     {
         $stack = new self($handler ?: Utils::chooseHandler());
         $stack = new self($handler ?: Utils::chooseHandler());
         $stack->push(Middleware::httpErrors(), 'http_errors');
         $stack->push(Middleware::httpErrors(), 'http_errors');
@@ -58,7 +58,7 @@ class HandlerStack
     /**
     /**
      * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler.
      * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler.
      */
      */
-    public function __construct(callable $handler = null)
+    public function __construct(?callable $handler = null)
     {
     {
         $this->handler = $handler;
         $this->handler = $handler;
     }
     }
@@ -131,7 +131,7 @@ class HandlerStack
      * @param callable(callable): callable $middleware Middleware function
      * @param callable(callable): callable $middleware Middleware function
      * @param string                       $name       Name to register for this middleware.
      * @param string                       $name       Name to register for this middleware.
      */
      */
-    public function unshift(callable $middleware, string $name = null): void
+    public function unshift(callable $middleware, ?string $name = null): void
     {
     {
         \array_unshift($this->stack, [$middleware, $name]);
         \array_unshift($this->stack, [$middleware, $name]);
         $this->cached = null;
         $this->cached = null;

+ 1 - 1
vendor/guzzlehttp/guzzle/src/MessageFormatter.php

@@ -68,7 +68,7 @@ class MessageFormatter implements MessageFormatterInterface
      * @param ResponseInterface|null $response Response that was received
      * @param ResponseInterface|null $response Response that was received
      * @param \Throwable|null        $error    Exception that was received
      * @param \Throwable|null        $error    Exception that was received
      */
      */
-    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string
+    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string
     {
     {
         $cache = [];
         $cache = [];
 
 

+ 1 - 1
vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php

@@ -14,5 +14,5 @@ interface MessageFormatterInterface
      * @param ResponseInterface|null $response Response that was received
      * @param ResponseInterface|null $response Response that was received
      * @param \Throwable|null        $error    Exception that was received
      * @param \Throwable|null        $error    Exception that was received
      */
      */
-    public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string;
+    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string;
 }
 }

+ 3 - 3
vendor/guzzlehttp/guzzle/src/Middleware.php

@@ -55,7 +55,7 @@ final class Middleware
      *
      *
      * @return callable(callable): callable Returns a function that accepts the next handler.
      * @return callable(callable): callable Returns a function that accepts the next handler.
      */
      */
-    public static function httpErrors(BodySummarizerInterface $bodySummarizer = null): callable
+    public static function httpErrors(?BodySummarizerInterface $bodySummarizer = null): callable
     {
     {
         return static function (callable $handler) use ($bodySummarizer): callable {
         return static function (callable $handler) use ($bodySummarizer): callable {
             return static function ($request, array $options) use ($handler, $bodySummarizer) {
             return static function ($request, array $options) use ($handler, $bodySummarizer) {
@@ -132,7 +132,7 @@ final class Middleware
      *
      *
      * @return callable Returns a function that accepts the next handler.
      * @return callable Returns a function that accepts the next handler.
      */
      */
-    public static function tap(callable $before = null, callable $after = null): callable
+    public static function tap(?callable $before = null, ?callable $after = null): callable
     {
     {
         return static function (callable $handler) use ($before, $after): callable {
         return static function (callable $handler) use ($before, $after): callable {
             return static function (RequestInterface $request, array $options) use ($handler, $before, $after) {
             return static function (RequestInterface $request, array $options) use ($handler, $before, $after) {
@@ -176,7 +176,7 @@ final class Middleware
      *
      *
      * @return callable Returns a function that accepts the next handler.
      * @return callable Returns a function that accepts the next handler.
      */
      */
-    public static function retry(callable $decider, callable $delay = null): callable
+    public static function retry(callable $decider, ?callable $delay = null): callable
     {
     {
         return static function (callable $handler) use ($decider, $delay): RetryMiddleware {
         return static function (callable $handler) use ($decider, $delay): RetryMiddleware {
             return new RetryMiddleware($decider, $handler, $delay);
             return new RetryMiddleware($decider, $handler, $delay);

+ 2 - 2
vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php

@@ -76,8 +76,8 @@ class PrepareBodyMiddleware
 
 
         $expect = $options['expect'] ?? null;
         $expect = $options['expect'] ?? null;
 
 
-        // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0
-        if ($expect === false || $request->getProtocolVersion() < 1.1) {
+        // Return if disabled or using HTTP/1.0
+        if ($expect === false || $request->getProtocolVersion() === '1.0') {
             return;
             return;
         }
         }
 
 

+ 1 - 1
vendor/guzzlehttp/guzzle/src/RequestOptions.php

@@ -61,7 +61,7 @@ final class RequestOptions
      * Specifies whether or not cookies are used in a request or what cookie
      * Specifies whether or not cookies are used in a request or what cookie
      * jar to use or what cookies to send. This option only works if your
      * jar to use or what cookies to send. This option only works if your
      * handler has the `cookie` middleware. Valid values are `false` and
      * handler has the `cookie` middleware. Valid values are `false` and
-     * an instance of {@see \GuzzleHttp\Cookie\CookieJarInterface}.
+     * an instance of {@see Cookie\CookieJarInterface}.
      */
      */
     public const COOKIES = 'cookies';
     public const COOKIES = 'cookies';
 
 

+ 2 - 2
vendor/guzzlehttp/guzzle/src/RetryMiddleware.php

@@ -40,7 +40,7 @@ class RetryMiddleware
      *                                                                         and returns the number of
      *                                                                         and returns the number of
      *                                                                         milliseconds to delay.
      *                                                                         milliseconds to delay.
      */
      */
-    public function __construct(callable $decider, callable $nextHandler, callable $delay = null)
+    public function __construct(callable $decider, callable $nextHandler, ?callable $delay = null)
     {
     {
         $this->decider = $decider;
         $this->decider = $decider;
         $this->nextHandler = $nextHandler;
         $this->nextHandler = $nextHandler;
@@ -110,7 +110,7 @@ class RetryMiddleware
         };
         };
     }
     }
 
 
-    private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null): PromiseInterface
+    private function doRetry(RequestInterface $request, array $options, ?ResponseInterface $response = null): PromiseInterface
     {
     {
         $options['delay'] = ($this->delay)(++$options['retries'], $response, $request);
         $options['delay'] = ($this->delay)(++$options['retries'], $response, $request);
 
 

+ 2 - 2
vendor/guzzlehttp/guzzle/src/TransferStats.php

@@ -46,8 +46,8 @@ final class TransferStats
      */
      */
     public function __construct(
     public function __construct(
         RequestInterface $request,
         RequestInterface $request,
-        ResponseInterface $response = null,
-        float $transferTime = null,
+        ?ResponseInterface $response = null,
+        ?float $transferTime = null,
         $handlerErrorData = null,
         $handlerErrorData = null,
         array $handlerStats = []
         array $handlerStats = []
     ) {
     ) {

+ 2 - 2
vendor/guzzlehttp/guzzle/src/Utils.php

@@ -71,7 +71,7 @@ final class Utils
             return \STDOUT;
             return \STDOUT;
         }
         }
 
 
-        return \GuzzleHttp\Psr7\Utils::tryFopen('php://output', 'w');
+        return Psr7\Utils::tryFopen('php://output', 'w');
     }
     }
 
 
     /**
     /**
@@ -87,7 +87,7 @@ final class Utils
     {
     {
         $handler = null;
         $handler = null;
 
 
-        if (\defined('CURLOPT_CUSTOMREQUEST')) {
+        if (\defined('CURLOPT_CUSTOMREQUEST') && \function_exists('curl_version') && version_compare(curl_version()['version'], '7.21.2') >= 0) {
             if (\function_exists('curl_multi_exec') && \function_exists('curl_exec')) {
             if (\function_exists('curl_multi_exec') && \function_exists('curl_exec')) {
                 $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
                 $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
             } elseif (\function_exists('curl_exec')) {
             } elseif (\function_exists('curl_exec')) {

+ 7 - 0
vendor/guzzlehttp/promises/CHANGELOG.md

@@ -1,6 +1,13 @@
 # CHANGELOG
 # CHANGELOG
 
 
 
 
+## 2.0.3 - 2024-07-18
+
+### Changed
+
+- PHP 8.4 support
+
+
 ## 2.0.2 - 2023-12-03
 ## 2.0.2 - 2023-12-03
 
 
 ### Changed
 ### Changed

+ 4 - 4
vendor/guzzlehttp/promises/README.md

@@ -38,10 +38,10 @@ composer require guzzlehttp/promises
 
 
 ## Version Guidance
 ## Version Guidance
 
 
-| Version | Status                 | PHP Version  |
-|---------|------------------------|--------------|
-| 1.x     | Bug and security fixes | >=5.5,<8.3   |
-| 2.x     | Latest                 | >=7.2.5,<8.4 |
+| Version | Status              | PHP Version  |
+|---------|---------------------|--------------|
+| 1.x     | Security fixes only | >=5.5,<8.3   |
+| 2.x     | Latest              | >=7.2.5,<8.5 |
 
 
 
 
 ## Quick Start
 ## Quick Start

+ 1 - 1
vendor/guzzlehttp/promises/composer.json

@@ -30,7 +30,7 @@
     },
     },
     "require-dev": {
     "require-dev": {
         "bamarni/composer-bin-plugin": "^1.8.2",
         "bamarni/composer-bin-plugin": "^1.8.2",
-        "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+        "phpunit/phpunit": "^8.5.39 || ^9.6.20"
     },
     },
     "autoload": {
     "autoload": {
         "psr-4": {
         "psr-4": {

+ 2 - 2
vendor/guzzlehttp/promises/src/Coroutine.php

@@ -84,8 +84,8 @@ final class Coroutine implements PromiseInterface
     }
     }
 
 
     public function then(
     public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         return $this->result->then($onFulfilled, $onRejected);
         return $this->result->then($onFulfilled, $onRejected);
     }
     }

+ 5 - 5
vendor/guzzlehttp/promises/src/Each.php

@@ -23,8 +23,8 @@ final class Each
      */
      */
     public static function of(
     public static function of(
         $iterable,
         $iterable,
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         return (new EachPromise($iterable, [
         return (new EachPromise($iterable, [
             'fulfilled' => $onFulfilled,
             'fulfilled' => $onFulfilled,
@@ -46,8 +46,8 @@ final class Each
     public static function ofLimit(
     public static function ofLimit(
         $iterable,
         $iterable,
         $concurrency,
         $concurrency,
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         return (new EachPromise($iterable, [
         return (new EachPromise($iterable, [
             'fulfilled' => $onFulfilled,
             'fulfilled' => $onFulfilled,
@@ -67,7 +67,7 @@ final class Each
     public static function ofLimitAll(
     public static function ofLimitAll(
         $iterable,
         $iterable,
         $concurrency,
         $concurrency,
-        callable $onFulfilled = null
+        ?callable $onFulfilled = null
     ): PromiseInterface {
     ): PromiseInterface {
         return self::ofLimit(
         return self::ofLimit(
             $iterable,
             $iterable,

+ 2 - 2
vendor/guzzlehttp/promises/src/FulfilledPromise.php

@@ -31,8 +31,8 @@ class FulfilledPromise implements PromiseInterface
     }
     }
 
 
     public function then(
     public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         // Return itself if there is no onFulfilled function.
         // Return itself if there is no onFulfilled function.
         if (!$onFulfilled) {
         if (!$onFulfilled) {

+ 4 - 4
vendor/guzzlehttp/promises/src/Promise.php

@@ -25,16 +25,16 @@ class Promise implements PromiseInterface
      * @param callable $cancelFn Fn that when invoked cancels the promise.
      * @param callable $cancelFn Fn that when invoked cancels the promise.
      */
      */
     public function __construct(
     public function __construct(
-        callable $waitFn = null,
-        callable $cancelFn = null
+        ?callable $waitFn = null,
+        ?callable $cancelFn = null
     ) {
     ) {
         $this->waitFn = $waitFn;
         $this->waitFn = $waitFn;
         $this->cancelFn = $cancelFn;
         $this->cancelFn = $cancelFn;
     }
     }
 
 
     public function then(
     public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         if ($this->state === self::PENDING) {
         if ($this->state === self::PENDING) {
             $p = new Promise(null, [$this, 'cancel']);
             $p = new Promise(null, [$this, 'cancel']);

+ 2 - 2
vendor/guzzlehttp/promises/src/PromiseInterface.php

@@ -27,8 +27,8 @@ interface PromiseInterface
      * @param callable $onRejected  Invoked when the promise is rejected.
      * @param callable $onRejected  Invoked when the promise is rejected.
      */
      */
     public function then(
     public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface;
     ): PromiseInterface;
 
 
     /**
     /**

+ 2 - 2
vendor/guzzlehttp/promises/src/RejectedPromise.php

@@ -31,8 +31,8 @@ class RejectedPromise implements PromiseInterface
     }
     }
 
 
     public function then(
     public function then(
-        callable $onFulfilled = null,
-        callable $onRejected = null
+        ?callable $onFulfilled = null,
+        ?callable $onRejected = null
     ): PromiseInterface {
     ): PromiseInterface {
         // If there's no onRejected callback then just return self.
         // If there's no onRejected callback then just return self.
         if (!$onRejected) {
         if (!$onRejected) {

+ 1 - 1
vendor/guzzlehttp/promises/src/RejectionException.php

@@ -18,7 +18,7 @@ class RejectionException extends \RuntimeException
      * @param mixed       $reason      Rejection reason.
      * @param mixed       $reason      Rejection reason.
      * @param string|null $description Optional description.
      * @param string|null $description Optional description.
      */
      */
-    public function __construct($reason, string $description = null)
+    public function __construct($reason, ?string $description = null)
     {
     {
         $this->reason = $reason;
         $this->reason = $reason;
 
 

+ 1 - 1
vendor/guzzlehttp/promises/src/Utils.php

@@ -21,7 +21,7 @@ final class Utils
      *
      *
      * @param TaskQueueInterface|null $assign Optionally specify a new queue instance.
      * @param TaskQueueInterface|null $assign Optionally specify a new queue instance.
      */
      */
-    public static function queue(TaskQueueInterface $assign = null): TaskQueueInterface
+    public static function queue(?TaskQueueInterface $assign = null): TaskQueueInterface
     {
     {
         static $queue;
         static $queue;
 
 

+ 17 - 0
vendor/guzzlehttp/psr7/CHANGELOG.md

@@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 
+## 2.7.0 - 2024-07-18
+
+### Added
+
+- Add `Utils::redactUserInfo()` method
+- Add ability to encode bools as ints in `Query::build`
+
+## 2.6.3 - 2024-07-18
+
+### Fixed
+
+- Make `StreamWrapper::stream_stat()` return `false` if inner stream's size is `null` 
+
+### Changed
+
+- PHP 8.4 support
+
 ## 2.6.2 - 2023-12-03
 ## 2.6.2 - 2023-12-03
 
 
 ### Fixed
 ### Fixed

+ 12 - 5
vendor/guzzlehttp/psr7/README.md

@@ -24,8 +24,8 @@ composer require guzzlehttp/psr7
 
 
 | Version | Status              | PHP Version  |
 | Version | Status              | PHP Version  |
 |---------|---------------------|--------------|
 |---------|---------------------|--------------|
-| 1.x     | Security fixes only | >=5.4,<8.1   |
-| 2.x     | Latest              | >=7.2.5,<8.4 |
+| 1.x     | EOL (2024-06-30)    | >=5.4,<8.2   |
+| 2.x     | Latest              | >=7.2.5,<8.5 |
 
 
 
 
 ## AppendStream
 ## AppendStream
@@ -436,7 +436,7 @@ will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.
 
 
 ## `GuzzleHttp\Psr7\Query::build`
 ## `GuzzleHttp\Psr7\Query::build`
 
 
-`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986): string`
+`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986, bool $treatBoolsAsInts = true): string`
 
 
 Build a query string from an array of key value pairs.
 Build a query string from an array of key value pairs.
 
 
@@ -498,11 +498,18 @@ a message.
 
 
 ## `GuzzleHttp\Psr7\Utils::readLine`
 ## `GuzzleHttp\Psr7\Utils::readLine`
 
 
-`public static function readLine(StreamInterface $stream, int $maxLength = null): string`
+`public static function readLine(StreamInterface $stream, ?int $maxLength = null): string`
 
 
 Read a line from the stream up to the maximum allowed buffer length.
 Read a line from the stream up to the maximum allowed buffer length.
 
 
 
 
+## `GuzzleHttp\Psr7\Utils::redactUserInfo`
+
+`public static function redactUserInfo(UriInterface $uri): UriInterface`
+
+Redact the password in the user info part of a URI.
+
+
 ## `GuzzleHttp\Psr7\Utils::streamFor`
 ## `GuzzleHttp\Psr7\Utils::streamFor`
 
 
 `public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource = '', array $options = []): StreamInterface`
 `public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource = '', array $options = []): StreamInterface`
@@ -674,7 +681,7 @@ termed a relative-path reference.
 
 
 ### `GuzzleHttp\Psr7\Uri::isSameDocumentReference`
 ### `GuzzleHttp\Psr7\Uri::isSameDocumentReference`
 
 
-`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool`
+`public static function isSameDocumentReference(UriInterface $uri, ?UriInterface $base = null): bool`
 
 
 Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its
 Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its
 fragment component, identical to the base URI. When no base URI is given, only an empty URI reference
 fragment component, identical to the base URI. When no base URI is given, only an empty URI reference

+ 2 - 2
vendor/guzzlehttp/psr7/composer.json

@@ -61,8 +61,8 @@
     },
     },
     "require-dev": {
     "require-dev": {
         "bamarni/composer-bin-plugin": "^1.8.2",
         "bamarni/composer-bin-plugin": "^1.8.2",
-        "http-interop/http-factory-tests": "^0.9",
-        "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+        "http-interop/http-factory-tests": "0.9.0",
+        "phpunit/phpunit": "^8.5.39 || ^9.6.20"
     },
     },
     "suggest": {
     "suggest": {
         "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
         "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"

+ 1 - 1
vendor/guzzlehttp/psr7/src/CachingStream.php

@@ -33,7 +33,7 @@ final class CachingStream implements StreamInterface
      */
      */
     public function __construct(
     public function __construct(
         StreamInterface $stream,
         StreamInterface $stream,
-        StreamInterface $target = null
+        ?StreamInterface $target = null
     ) {
     ) {
         $this->remoteStream = $stream;
         $this->remoteStream = $stream;
         $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+'));
         $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+'));

+ 3 - 3
vendor/guzzlehttp/psr7/src/HttpFactory.php

@@ -27,10 +27,10 @@ final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInter
 {
 {
     public function createUploadedFile(
     public function createUploadedFile(
         StreamInterface $stream,
         StreamInterface $stream,
-        int $size = null,
+        ?int $size = null,
         int $error = \UPLOAD_ERR_OK,
         int $error = \UPLOAD_ERR_OK,
-        string $clientFilename = null,
-        string $clientMediaType = null
+        ?string $clientFilename = null,
+        ?string $clientMediaType = null
     ): UploadedFileInterface {
     ): UploadedFileInterface {
         if ($size === null) {
         if ($size === null) {
             $size = $stream->getSize();
             $size = $stream->getSize();

+ 1 - 1
vendor/guzzlehttp/psr7/src/MultipartStream.php

@@ -32,7 +32,7 @@ final class MultipartStream implements StreamInterface
      *
      *
      * @throws \InvalidArgumentException
      * @throws \InvalidArgumentException
      */
      */
-    public function __construct(array $elements = [], string $boundary = null)
+    public function __construct(array $elements = [], ?string $boundary = null)
     {
     {
         $this->boundary = $boundary ?: bin2hex(random_bytes(20));
         $this->boundary = $boundary ?: bin2hex(random_bytes(20));
         $this->stream = $this->createStream($elements);
         $this->stream = $this->createStream($elements);

+ 12 - 7
vendor/guzzlehttp/psr7/src/Query.php

@@ -63,12 +63,15 @@ final class Query
      * string. This function does not modify the provided keys when an array is
      * string. This function does not modify the provided keys when an array is
      * encountered (like `http_build_query()` would).
      * encountered (like `http_build_query()` would).
      *
      *
-     * @param array     $params   Query string parameters.
-     * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986
-     *                            to encode using RFC3986, or PHP_QUERY_RFC1738
-     *                            to encode using RFC1738.
+     * @param array     $params           Query string parameters.
+     * @param int|false $encoding         Set to false to not encode,
+     *                                    PHP_QUERY_RFC3986 to encode using
+     *                                    RFC3986, or PHP_QUERY_RFC1738 to
+     *                                    encode using RFC1738.
+     * @param bool      $treatBoolsAsInts Set to true to encode as 0/1, and
+     *                                    false as false/true.
      */
      */
-    public static function build(array $params, $encoding = PHP_QUERY_RFC3986): string
+    public static function build(array $params, $encoding = PHP_QUERY_RFC3986, bool $treatBoolsAsInts = true): string
     {
     {
         if (!$params) {
         if (!$params) {
             return '';
             return '';
@@ -86,12 +89,14 @@ final class Query
             throw new \InvalidArgumentException('Invalid type');
             throw new \InvalidArgumentException('Invalid type');
         }
         }
 
 
+        $castBool = $treatBoolsAsInts ? static function ($v) { return (int) $v; } : static function ($v) { return $v ? 'true' : 'false'; };
+
         $qs = '';
         $qs = '';
         foreach ($params as $k => $v) {
         foreach ($params as $k => $v) {
             $k = $encoder((string) $k);
             $k = $encoder((string) $k);
             if (!is_array($v)) {
             if (!is_array($v)) {
                 $qs .= $k;
                 $qs .= $k;
-                $v = is_bool($v) ? (int) $v : $v;
+                $v = is_bool($v) ? $castBool($v) : $v;
                 if ($v !== null) {
                 if ($v !== null) {
                     $qs .= '='.$encoder((string) $v);
                     $qs .= '='.$encoder((string) $v);
                 }
                 }
@@ -99,7 +104,7 @@ final class Query
             } else {
             } else {
                 foreach ($v as $vv) {
                 foreach ($v as $vv) {
                     $qs .= $k;
                     $qs .= $k;
-                    $vv = is_bool($vv) ? (int) $vv : $vv;
+                    $vv = is_bool($vv) ? $castBool($vv) : $vv;
                     if ($vv !== null) {
                     if ($vv !== null) {
                         $qs .= '='.$encoder((string) $vv);
                         $qs .= '='.$encoder((string) $vv);
                     }
                     }

+ 1 - 1
vendor/guzzlehttp/psr7/src/Response.php

@@ -96,7 +96,7 @@ class Response implements ResponseInterface
         array $headers = [],
         array $headers = [],
         $body = null,
         $body = null,
         string $version = '1.1',
         string $version = '1.1',
-        string $reason = null
+        ?string $reason = null
     ) {
     ) {
         $this->assertStatusCodeRange($status);
         $this->assertStatusCodeRange($status);
 
 

+ 7 - 3
vendor/guzzlehttp/psr7/src/StreamWrapper.php

@@ -69,7 +69,7 @@ final class StreamWrapper
         }
         }
     }
     }
 
 
-    public function stream_open(string $path, string $mode, int $options, string &$opened_path = null): bool
+    public function stream_open(string $path, string $mode, int $options, ?string &$opened_path = null): bool
     {
     {
         $options = stream_context_get_options($this->context);
         $options = stream_context_get_options($this->context);
 
 
@@ -136,10 +136,14 @@ final class StreamWrapper
      *   ctime: int,
      *   ctime: int,
      *   blksize: int,
      *   blksize: int,
      *   blocks: int
      *   blocks: int
-     * }
+     * }|false
      */
      */
-    public function stream_stat(): array
+    public function stream_stat()
     {
     {
+        if ($this->stream->getSize() === null) {
+            return false;
+        }
+
         static $modeMap = [
         static $modeMap = [
             'r' => 33060,
             'r' => 33060,
             'rb' => 33060,
             'rb' => 33060,

+ 2 - 2
vendor/guzzlehttp/psr7/src/UploadedFile.php

@@ -64,8 +64,8 @@ class UploadedFile implements UploadedFileInterface
         $streamOrFile,
         $streamOrFile,
         ?int $size,
         ?int $size,
         int $errorStatus,
         int $errorStatus,
-        string $clientFilename = null,
-        string $clientMediaType = null
+        ?string $clientFilename = null,
+        ?string $clientMediaType = null
     ) {
     ) {
         $this->setError($errorStatus);
         $this->setError($errorStatus);
         $this->size = $size;
         $this->size = $size;

+ 1 - 1
vendor/guzzlehttp/psr7/src/Uri.php

@@ -279,7 +279,7 @@ class Uri implements UriInterface, \JsonSerializable
      *
      *
      * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4
      * @see https://datatracker.ietf.org/doc/html/rfc3986#section-4.4
      */
      */
-    public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool
+    public static function isSameDocumentReference(UriInterface $uri, ?UriInterface $base = null): bool
     {
     {
         if ($base !== null) {
         if ($base !== null) {
             $uri = UriResolver::resolve($base, $uri);
             $uri = UriResolver::resolve($base, $uri);

+ 15 - 1
vendor/guzzlehttp/psr7/src/Utils.php

@@ -231,7 +231,7 @@ final class Utils
      * @param StreamInterface $stream    Stream to read from
      * @param StreamInterface $stream    Stream to read from
      * @param int|null        $maxLength Maximum buffer length
      * @param int|null        $maxLength Maximum buffer length
      */
      */
-    public static function readLine(StreamInterface $stream, int $maxLength = null): string
+    public static function readLine(StreamInterface $stream, ?int $maxLength = null): string
     {
     {
         $buffer = '';
         $buffer = '';
         $size = 0;
         $size = 0;
@@ -251,6 +251,20 @@ final class Utils
     }
     }
 
 
     /**
     /**
+     * Redact the password in the user info part of a URI.
+     */
+    public static function redactUserInfo(UriInterface $uri): UriInterface
+    {
+        $userInfo = $uri->getUserInfo();
+
+        if (false !== ($pos = \strpos($userInfo, ':'))) {
+            return $uri->withUserInfo(\substr($userInfo, 0, $pos), '***');
+        }
+
+        return $uri;
+    }
+
+    /**
      * Create a new stream based on the input type.
      * Create a new stream based on the input type.
      *
      *
      * Options is an associative array that can contain the following keys:
      * Options is an associative array that can contain the following keys:

+ 4 - 0
vendor/monolog/monolog/CHANGELOG.md

@@ -1,3 +1,7 @@
+### 2.9.3 (2024-04-12)
+
+  * Fixed PHP 8.4 deprecation warnings (#1874)
+
 ### 2.9.2 (2023-10-27)
 ### 2.9.2 (2023-10-27)
 
 
   * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)
   * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804)

+ 2 - 2
vendor/monolog/monolog/composer.json

@@ -27,8 +27,8 @@
         "mongodb/mongodb": "^1.8",
         "mongodb/mongodb": "^1.8",
         "php-amqplib/php-amqplib": "~2.4 || ^3",
         "php-amqplib/php-amqplib": "~2.4 || ^3",
         "phpspec/prophecy": "^1.15",
         "phpspec/prophecy": "^1.15",
-        "phpstan/phpstan": "^0.12.91",
-        "phpunit/phpunit": "^8.5.14",
+        "phpstan/phpstan": "^1.10",
+        "phpunit/phpunit": "^8.5.38 || ^9.6.19",
         "predis/predis": "^1.1 || ^2.0",
         "predis/predis": "^1.1 || ^2.0",
         "rollbar/rollbar": "^1.3 || ^2 || ^3",
         "rollbar/rollbar": "^1.3 || ^2 || ^3",
         "ruflin/elastica": "^7",
         "ruflin/elastica": "^7",

+ 2 - 0
vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php

@@ -30,6 +30,8 @@ class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable
     {
     {
         $this->useMicroseconds = $useMicroseconds;
         $this->useMicroseconds = $useMicroseconds;
 
 
+        // if you like to use a custom time to pass to Logger::addRecord directly,
+        // call modify() or setTimestamp() on this instance to change the date after creating it
         parent::__construct('now', $timezone);
         parent::__construct('now', $timezone);
     }
     }
 
 

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php

@@ -161,7 +161,7 @@ class FilterHandler extends Handler implements ProcessableHandlerInterface, Rese
      *
      *
      * @phpstan-param Record $record
      * @phpstan-param Record $record
      */
      */
-    public function getHandler(array $record = null)
+    public function getHandler(?array $record = null)
     {
     {
         if (!$this->handler instanceof HandlerInterface) {
         if (!$this->handler instanceof HandlerInterface) {
             $this->handler = ($this->handler)($record, $this);
             $this->handler = ($this->handler)($record, $this);

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php

@@ -210,7 +210,7 @@ class FingersCrossedHandler extends Handler implements ProcessableHandlerInterfa
      *
      *
      * @phpstan-param Record $record
      * @phpstan-param Record $record
      */
      */
-    public function getHandler(array $record = null)
+    public function getHandler(?array $record = null)
     {
     {
         if (!$this->handler instanceof HandlerInterface) {
         if (!$this->handler instanceof HandlerInterface) {
             $this->handler = ($this->handler)($record, $this);
             $this->handler = ($this->handler)($record, $this);

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php

@@ -90,7 +90,7 @@ class SamplingHandler extends AbstractHandler implements ProcessableHandlerInter
      *
      *
      * @return HandlerInterface
      * @return HandlerInterface
      */
      */
-    public function getHandler(array $record = null)
+    public function getHandler(?array $record = null)
     {
     {
         if (!$this->handler instanceof HandlerInterface) {
         if (!$this->handler instanceof HandlerInterface) {
             $this->handler = ($this->handler)($record, $this);
             $this->handler = ($this->handler)($record, $this);

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php

@@ -100,7 +100,7 @@ class SlackRecord
         bool $useShortAttachment = false,
         bool $useShortAttachment = false,
         bool $includeContextAndExtra = false,
         bool $includeContextAndExtra = false,
         array $excludeFields = array(),
         array $excludeFields = array(),
-        FormatterInterface $formatter = null
+        ?FormatterInterface $formatter = null
     ) {
     ) {
         $this
         $this
             ->setChannel($channel)
             ->setChannel($channel)

+ 6 - 6
vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php

@@ -108,9 +108,9 @@ class TelegramBotHandler extends AbstractProcessingHandler
         string $channel,
         string $channel,
                $level = Logger::DEBUG,
                $level = Logger::DEBUG,
         bool   $bubble = true,
         bool   $bubble = true,
-        string $parseMode = null,
-        bool   $disableWebPagePreview = null,
-        bool   $disableNotification = null,
+        ?string $parseMode = null,
+        ?bool   $disableWebPagePreview = null,
+        ?bool   $disableNotification = null,
         bool   $splitLongMessages = false,
         bool   $splitLongMessages = false,
         bool   $delayBetweenMessages = false
         bool   $delayBetweenMessages = false
     )
     )
@@ -130,7 +130,7 @@ class TelegramBotHandler extends AbstractProcessingHandler
         $this->delayBetweenMessages($delayBetweenMessages);
         $this->delayBetweenMessages($delayBetweenMessages);
     }
     }
 
 
-    public function setParseMode(string $parseMode = null): self
+    public function setParseMode(?string $parseMode = null): self
     {
     {
         if ($parseMode !== null && !in_array($parseMode, self::AVAILABLE_PARSE_MODES)) {
         if ($parseMode !== null && !in_array($parseMode, self::AVAILABLE_PARSE_MODES)) {
             throw new \InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.');
             throw new \InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.');
@@ -141,14 +141,14 @@ class TelegramBotHandler extends AbstractProcessingHandler
         return $this;
         return $this;
     }
     }
 
 
-    public function disableWebPagePreview(bool $disableWebPagePreview = null): self
+    public function disableWebPagePreview(?bool $disableWebPagePreview = null): self
     {
     {
         $this->disableWebPagePreview = $disableWebPagePreview;
         $this->disableWebPagePreview = $disableWebPagePreview;
 
 
         return $this;
         return $this;
     }
     }
 
 
-    public function disableNotification(bool $disableNotification = null): self
+    public function disableNotification(?bool $disableNotification = null): self
     {
     {
         $this->disableNotification = $disableNotification;
         $this->disableNotification = $disableNotification;
 
 

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Logger.php

@@ -337,7 +337,7 @@ class Logger implements LoggerInterface, ResettableInterface
      *
      *
      * @phpstan-param Level $level
      * @phpstan-param Level $level
      */
      */
-    public function addRecord(int $level, string $message, array $context = [], DateTimeImmutable $datetime = null): bool
+    public function addRecord(int $level, string $message, array $context = [], ?DateTimeImmutable $datetime = null): bool
     {
     {
         if (isset(self::RFC_5424_LEVELS[$level])) {
         if (isset(self::RFC_5424_LEVELS[$level])) {
             $level = self::RFC_5424_LEVELS[$level];
             $level = self::RFC_5424_LEVELS[$level];

+ 1 - 1
vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php

@@ -43,7 +43,7 @@ class WebProcessor implements ProcessorInterface
      * @param array<string, mixed>|\ArrayAccess<string, mixed>|null $serverData  Array or object w/ ArrayAccess that provides access to the $_SERVER data
      * @param array<string, mixed>|\ArrayAccess<string, mixed>|null $serverData  Array or object w/ ArrayAccess that provides access to the $_SERVER data
      * @param array<string, string>|array<string>|null              $extraFields Field names and the related key inside $serverData to be added (or just a list of field names to use the default configured $serverData mapping). If not provided it defaults to: [url, ip, http_method, server, referrer] + unique_id if present in server data
      * @param array<string, string>|array<string>|null              $extraFields Field names and the related key inside $serverData to be added (or just a list of field names to use the default configured $serverData mapping). If not provided it defaults to: [url, ip, http_method, server, referrer] + unique_id if present in server data
      */
      */
-    public function __construct($serverData = null, array $extraFields = null)
+    public function __construct($serverData = null, ?array $extraFields = null)
     {
     {
         if (null === $serverData) {
         if (null === $serverData) {
             $this->serverData = &$_SERVER;
             $this->serverData = &$_SERVER;

+ 1 - 3
vendor/overtrue/wechat/src/Kernel/Providers/LogServiceProvider.php

@@ -48,9 +48,7 @@ class LogServiceProvider implements ServiceProviderInterface
     public function formatLogConfig($app)
     public function formatLogConfig($app)
     {
     {
         if (!empty($app['config']->get('log.channels'))) {
         if (!empty($app['config']->get('log.channels'))) {
-            return [
-                'log' => $app['config']->get('log'),
-            ];
+            return $app['config']->get('log');
         }
         }
 
 
         if (empty($app['config']->get('log'))) {
         if (empty($app['config']->get('log'))) {

+ 0 - 4
vendor/overtrue/wechat/src/Kernel/ServiceContainer.php

@@ -157,8 +157,4 @@ class ServiceContainer extends Container
             parent::register(new $provider());
             parent::register(new $provider());
         }
         }
     }
     }
-
-    public function getClient () {
-        return new BaseClient($this);
-    }
 }
 }

+ 0 - 15
vendor/overtrue/wechat/src/Work/ExternalContact/MessageClient.php

@@ -153,19 +153,4 @@ class MessageClient extends BaseClient
 
 
         return $params;
         return $params;
     }
     }
-
-    /**
-     * 企业发表内容到客户的朋友圈
-     *
-     * @see https://developer.work.weixin.qq.com/document/path/95094
-     *
-     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
-     *
-     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
-     * @throws \GuzzleHttp\Exception\GuzzleException
-     */
-    public function moments(array $msg)
-    {
-        return $this->httpPostJson('cgi-bin/externalcontact/add_moment_task', $msg);
-    }
 }
 }

+ 0 - 32
vendor/overtrue/wechat/src/Work/Media/Client.php

@@ -85,16 +85,6 @@ class Client extends BaseClient
     }
     }
 
 
     /**
     /**
-     * Upload Attachment Resources
-     *
-     * @return mixed
-     */
-    public function uploadAttachmentResources(string $path, string $mediaType = 'image', int $attachmentType = 1)
-    {
-        return $this->uploadAttachment($path, $mediaType, $attachmentType);
-    }
-
-    /**
      * Upload media.
      * Upload media.
      *
      *
      * @return mixed
      * @return mixed
@@ -110,26 +100,4 @@ class Client extends BaseClient
 
 
         return $this->httpUpload('cgi-bin/media/upload', $files, [], compact('type'));
         return $this->httpUpload('cgi-bin/media/upload', $files, [], compact('type'));
     }
     }
-
-    /**
-     * Upload media
-     *
-     * @return mixed
-     *
-     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
-     * @throws \GuzzleHttp\Exception\GuzzleException
-     */
-    public function uploadAttachment(string $path, string $mediaType, int $attachmentType)
-    {
-        $files = [
-            'media' => $path,
-        ];
-
-        $query = [
-            'media_type' => $mediaType,
-            'attachment_type' => $attachmentType,
-        ];
-
-        return $this->httpUpload('cgi-bin/media/upload_attachment', $files, [], $query);
-    }
 }
 }

+ 2 - 2
vendor/symfony/cache/Adapter/PdoAdapter.php

@@ -600,10 +600,10 @@ class PdoAdapter extends AbstractAdapter implements PruneableInterface
     private function isTableMissing(\PDOException $exception): bool
     private function isTableMissing(\PDOException $exception): bool
     {
     {
         $driver = $this->driver;
         $driver = $this->driver;
-        $code = $exception->getCode();
+        [$sqlState, $code] = $exception->errorInfo ?? [null, $exception->getCode()];
 
 
         switch (true) {
         switch (true) {
-            case 'pgsql' === $driver && '42P01' === $code:
+            case 'pgsql' === $driver && '42P01' === $sqlState:
             case 'sqlite' === $driver && str_contains($exception->getMessage(), 'no such table:'):
             case 'sqlite' === $driver && str_contains($exception->getMessage(), 'no such table:'):
             case 'oci' === $driver && 942 === $code:
             case 'oci' === $driver && 942 === $code:
             case 'sqlsrv' === $driver && 208 === $code:
             case 'sqlsrv' === $driver && 208 === $code:

+ 7 - 2
vendor/symfony/cache/Traits/FilesystemCommonTrait.php

@@ -114,8 +114,13 @@ trait FilesystemCommonTrait
                 touch($this->tmp, $expiresAt ?: time() + 31556952); // 1 year in seconds
                 touch($this->tmp, $expiresAt ?: time() + 31556952); // 1 year in seconds
             }
             }
 
 
-            $success = rename($this->tmp, $file);
-            $unlink = !$success;
+            if ('\\' === \DIRECTORY_SEPARATOR) {
+                $success = copy($this->tmp, $file);
+                $unlink = true;
+            } else {
+                $success = rename($this->tmp, $file);
+                $unlink = !$success;
+            }
 
 
             return $success;
             return $success;
         } finally {
         } finally {

+ 20 - 26
vendor/symfony/cache/Traits/RedisTrait.php

@@ -15,6 +15,8 @@ use Predis\Command\Redis\UNLINK;
 use Predis\Connection\Aggregate\ClusterInterface;
 use Predis\Connection\Aggregate\ClusterInterface;
 use Predis\Connection\Aggregate\RedisCluster;
 use Predis\Connection\Aggregate\RedisCluster;
 use Predis\Connection\Aggregate\ReplicationInterface;
 use Predis\Connection\Aggregate\ReplicationInterface;
+use Predis\Connection\Cluster\ClusterInterface as Predis2ClusterInterface;
+use Predis\Connection\Cluster\RedisCluster as Predis2RedisCluster;
 use Predis\Response\ErrorInterface;
 use Predis\Response\ErrorInterface;
 use Predis\Response\Status;
 use Predis\Response\Status;
 use Symfony\Component\Cache\Exception\CacheException;
 use Symfony\Component\Cache\Exception\CacheException;
@@ -150,10 +152,10 @@ trait RedisTrait
         if (isset($params['host']) || isset($params['path'])) {
         if (isset($params['host']) || isset($params['path'])) {
             if (!isset($params['dbindex']) && isset($params['path'])) {
             if (!isset($params['dbindex']) && isset($params['path'])) {
                 if (preg_match('#/(\d+)?$#', $params['path'], $m)) {
                 if (preg_match('#/(\d+)?$#', $params['path'], $m)) {
-                    $params['dbindex'] = $m[1] ?? '0';
+                    $params['dbindex'] = $m[1] ?? $query['dbindex'] ?? '0';
                     $params['path'] = substr($params['path'], 0, -\strlen($m[0]));
                     $params['path'] = substr($params['path'], 0, -\strlen($m[0]));
                 } elseif (isset($params['host'])) {
                 } elseif (isset($params['host'])) {
-                    throw new InvalidArgumentException('Invalid Redis DSN: query parameter "dbindex" must be a number.');
+                    throw new InvalidArgumentException('Invalid Redis DSN: parameter "dbindex" must be a number.');
                 }
                 }
             }
             }
 
 
@@ -168,6 +170,10 @@ trait RedisTrait
             throw new InvalidArgumentException('Invalid Redis DSN: missing host.');
             throw new InvalidArgumentException('Invalid Redis DSN: missing host.');
         }
         }
 
 
+        if (isset($params['dbindex'], $query['dbindex']) && $params['dbindex'] !== $query['dbindex']) {
+            throw new InvalidArgumentException('Invalid Redis DSN: path and query "dbindex" parameters mismatch.');
+        }
+
         $params += $query + $options + self::$defaultConnectionOptions;
         $params += $query + $options + self::$defaultConnectionOptions;
 
 
         if (isset($params['redis_sentinel']) && !class_exists(\Predis\Client::class) && !class_exists(\RedisSentinel::class)) {
         if (isset($params['redis_sentinel']) && !class_exists(\Predis\Client::class) && !class_exists(\RedisSentinel::class)) {
@@ -217,10 +223,10 @@ trait RedisTrait
                         $options = [
                         $options = [
                             'host' => $host,
                             'host' => $host,
                             'port' => $port,
                             'port' => $port,
-                            'connectTimeout' => $params['timeout'],
+                            'connectTimeout' => (float) $params['timeout'],
                             'persistent' => $params['persistent_id'],
                             'persistent' => $params['persistent_id'],
-                            'retryInterval' => $params['retry_interval'],
-                            'readTimeout' => $params['read_timeout'],
+                            'retryInterval' => (int) $params['retry_interval'],
+                            'readTimeout' => (float) $params['read_timeout'],
                         ];
                         ];
 
 
                         if ($passAuth) {
                         if ($passAuth) {
@@ -283,7 +289,10 @@ trait RedisTrait
                     }
                     }
 
 
                     if ((null !== $auth && !$redis->auth($auth))
                     if ((null !== $auth && !$redis->auth($auth))
-                        || ($params['dbindex'] && !$redis->select($params['dbindex']))
+                        // Due to a bug in phpredis we must always select the dbindex if persistent pooling is enabled
+                        // @see https://github.com/phpredis/phpredis/issues/1920
+                        // @see https://github.com/symfony/symfony/issues/51578
+                        || (($params['dbindex'] || ('pconnect' === $connect && '0' !== \ini_get('redis.pconnect.pooling_enabled'))) && !$redis->select($params['dbindex']))
                     ) {
                     ) {
                         $e = preg_replace('/^ERR /', '', $redis->getLastError());
                         $e = preg_replace('/^ERR /', '', $redis->getLastError());
                         throw new InvalidArgumentException('Redis connection failed: '.$e.'.');
                         throw new InvalidArgumentException('Redis connection failed: '.$e.'.');
@@ -403,9 +412,6 @@ trait RedisTrait
         return $redis;
         return $redis;
     }
     }
 
 
-    /**
-     * {@inheritdoc}
-     */
     protected function doFetch(array $ids)
     protected function doFetch(array $ids)
     {
     {
         if (!$ids) {
         if (!$ids) {
@@ -414,7 +420,7 @@ trait RedisTrait
 
 
         $result = [];
         $result = [];
 
 
-        if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) {
+        if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) {
             $values = $this->pipeline(function () use ($ids) {
             $values = $this->pipeline(function () use ($ids) {
                 foreach ($ids as $id) {
                 foreach ($ids as $id) {
                     yield 'get' => [$id];
                     yield 'get' => [$id];
@@ -439,17 +445,11 @@ trait RedisTrait
         return $result;
         return $result;
     }
     }
 
 
-    /**
-     * {@inheritdoc}
-     */
     protected function doHave(string $id)
     protected function doHave(string $id)
     {
     {
         return (bool) $this->redis->exists($id);
         return (bool) $this->redis->exists($id);
     }
     }
 
 
-    /**
-     * {@inheritdoc}
-     */
     protected function doClear(string $namespace)
     protected function doClear(string $namespace)
     {
     {
         if ($this->redis instanceof \Predis\ClientInterface) {
         if ($this->redis instanceof \Predis\ClientInterface) {
@@ -505,22 +505,19 @@ trait RedisTrait
                     }
                     }
                     $this->doDelete($keys);
                     $this->doDelete($keys);
                 }
                 }
-            } while ($cursor = (int) $cursor);
+            } while ($cursor);
         }
         }
 
 
         return $cleared;
         return $cleared;
     }
     }
 
 
-    /**
-     * {@inheritdoc}
-     */
     protected function doDelete(array $ids)
     protected function doDelete(array $ids)
     {
     {
         if (!$ids) {
         if (!$ids) {
             return true;
             return true;
         }
         }
 
 
-        if ($this->redis instanceof \Predis\ClientInterface && $this->redis->getConnection() instanceof ClusterInterface) {
+        if ($this->redis instanceof \Predis\ClientInterface && ($this->redis->getConnection() instanceof ClusterInterface || $this->redis->getConnection() instanceof Predis2ClusterInterface)) {
             static $del;
             static $del;
             $del = $del ?? (class_exists(UNLINK::class) ? 'unlink' : 'del');
             $del = $del ?? (class_exists(UNLINK::class) ? 'unlink' : 'del');
 
 
@@ -548,9 +545,6 @@ trait RedisTrait
         return true;
         return true;
     }
     }
 
 
-    /**
-     * {@inheritdoc}
-     */
     protected function doSave(array $values, int $lifetime)
     protected function doSave(array $values, int $lifetime)
     {
     {
         if (!$values = $this->marshaller->marshall($values, $failed)) {
         if (!$values = $this->marshaller->marshall($values, $failed)) {
@@ -581,7 +575,7 @@ trait RedisTrait
         $ids = [];
         $ids = [];
         $redis = $redis ?? $this->redis;
         $redis = $redis ?? $this->redis;
 
 
-        if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && $redis->getConnection() instanceof RedisCluster)) {
+        if ($redis instanceof RedisClusterProxy || $redis instanceof \RedisCluster || ($redis instanceof \Predis\ClientInterface && ($redis->getConnection() instanceof RedisCluster || $redis->getConnection() instanceof Predis2RedisCluster))) {
             // phpredis & predis don't support pipelining with RedisCluster
             // phpredis & predis don't support pipelining with RedisCluster
             // see https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#pipelining
             // see https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#pipelining
             // see https://github.com/nrk/predis/issues/267#issuecomment-123781423
             // see https://github.com/nrk/predis/issues/267#issuecomment-123781423
@@ -643,7 +637,7 @@ trait RedisTrait
         $hosts = [$this->redis];
         $hosts = [$this->redis];
         if ($this->redis instanceof \Predis\ClientInterface) {
         if ($this->redis instanceof \Predis\ClientInterface) {
             $connection = $this->redis->getConnection();
             $connection = $this->redis->getConnection();
-            if ($connection instanceof ClusterInterface && $connection instanceof \Traversable) {
+            if (($connection instanceof ClusterInterface || $connection instanceof Predis2ClusterInterface) && $connection instanceof \Traversable) {
                 $hosts = [];
                 $hosts = [];
                 foreach ($connection as $c) {
                 foreach ($connection as $c) {
                     $hosts[] = new \Predis\Client($c);
                     $hosts[] = new \Predis\Client($c);

+ 1 - 1
vendor/symfony/cache/composer.json

@@ -35,7 +35,7 @@
         "cache/integration-tests": "dev-master",
         "cache/integration-tests": "dev-master",
         "doctrine/cache": "^1.6|^2.0",
         "doctrine/cache": "^1.6|^2.0",
         "doctrine/dbal": "^2.13.1|^3|^4",
         "doctrine/dbal": "^2.13.1|^3|^4",
-        "predis/predis": "^1.1",
+        "predis/predis": "^1.1|^2.0",
         "psr/simple-cache": "^1.0|^2.0",
         "psr/simple-cache": "^1.0|^2.0",
         "symfony/config": "^4.4|^5.0|^6.0",
         "symfony/config": "^4.4|^5.0|^6.0",
         "symfony/dependency-injection": "^4.4|^5.0|^6.0",
         "symfony/dependency-injection": "^4.4|^5.0|^6.0",

+ 1 - 1
vendor/symfony/event-dispatcher/Debug/WrappedListener.php

@@ -47,7 +47,7 @@ final class WrappedListener
             $this->pretty = $this->name.'::'.$listener[1];
             $this->pretty = $this->name.'::'.$listener[1];
         } elseif ($listener instanceof \Closure) {
         } elseif ($listener instanceof \Closure) {
             $r = new \ReflectionFunction($listener);
             $r = new \ReflectionFunction($listener);
-            if (str_contains($r->name, '{closure}')) {
+            if (str_contains($r->name, '{closure')) {
                 $this->pretty = $this->name = 'closure';
                 $this->pretty = $this->name = 'closure';
             } elseif ($class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) {
             } elseif ($class = \PHP_VERSION_ID >= 80111 ? $r->getClosureCalledClass() : $r->getClosureScopeClass()) {
                 $this->name = $class->name;
                 $this->name = $class->name;

+ 2 - 1
vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php

@@ -70,8 +70,9 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
             $subPathname .= $this->directorySeparator;
             $subPathname .= $this->directorySeparator;
         }
         }
         $subPathname .= $this->getFilename();
         $subPathname .= $this->getFilename();
+        $basePath = $this->rootPath;
 
 
-        if ('/' !== $basePath = $this->rootPath) {
+        if ('/' !== $basePath && !str_ends_with($basePath, $this->directorySeparator) && !str_ends_with($basePath, '/')) {
             $basePath .= $this->directorySeparator;
             $basePath .= $this->directorySeparator;
         }
         }
 
 

+ 6 - 2
vendor/symfony/http-foundation/BinaryFileResponse.php

@@ -244,8 +244,12 @@ class BinaryFileResponse extends Response
             }
             }
             if ('x-accel-redirect' === strtolower($type)) {
             if ('x-accel-redirect' === strtolower($type)) {
                 // Do X-Accel-Mapping substitutions.
                 // Do X-Accel-Mapping substitutions.
-                // @link https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-redirect
-                $parts = HeaderUtils::split($request->headers->get('X-Accel-Mapping', ''), ',=');
+                // @link https://github.com/rack/rack/blob/main/lib/rack/sendfile.rb
+                // @link https://mattbrictson.com/blog/accelerated-rails-downloads
+                if (!$request->headers->has('X-Accel-Mapping')) {
+                    throw new \LogicException('The "X-Accel-Mapping" header must be set when "X-Sendfile-Type" is set to "X-Accel-Redirect".');
+                }
+                $parts = HeaderUtils::split($request->headers->get('X-Accel-Mapping'), ',=');
                 foreach ($parts as $part) {
                 foreach ($parts as $part) {
                     [$pathPrefix, $location] = $part;
                     [$pathPrefix, $location] = $part;
                     if (substr($path, 0, \strlen($pathPrefix)) === $pathPrefix) {
                     if (substr($path, 0, \strlen($pathPrefix)) === $pathPrefix) {

+ 5 - 1
vendor/symfony/http-foundation/HeaderUtils.php

@@ -286,7 +286,11 @@ class HeaderUtils
         }
         }
 
 
         foreach ($partMatches as $matches) {
         foreach ($partMatches as $matches) {
-            $parts[] = '' === $separators ? self::unquote($matches[0][0]) : self::groupParts($matches, $separators, false);
+            if ('' === $separators && '' !== $unquoted = self::unquote($matches[0][0])) {
+                $parts[] = $unquoted;
+            } elseif ($groupedParts = self::groupParts($matches, $separators, false)) {
+                $parts[] = $groupedParts;
+            }
         }
         }
 
 
         return $parts;
         return $parts;

+ 1 - 1
vendor/symfony/http-foundation/ParameterBag.php

@@ -39,7 +39,7 @@ class ParameterBag implements \IteratorAggregate, \Countable
      *
      *
      * @return array
      * @return array
      */
      */
-    public function all(/* string $key = null */)
+    public function all(/* ?string $key = null */)
     {
     {
         $key = \func_num_args() > 0 ? func_get_arg(0) : null;
         $key = \func_num_args() > 0 ? func_get_arg(0) : null;
 
 

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác